if(rp>prev_p)nz--;// rolled through zero - make sure we'll not stuck in this loop forever
img_start,len32);
rp_b=img_start;
if(rp_b>prev_p)nz--;// rolled through zero - make sure we'll not stuck in this loop forever
}
}
dev_dbg(g_dev_ptr,"LSEEK_CIRC_FIRST or LSEEK_CIRC_SCND: finish stepping back through frames, number of frames = %d, rp = 0x%x, fvld = %d, len32 = 0x%x",nf,rp,fvld,len32);
dev_dbg(g_dev_ptr,"[chn %u] LSEEK_CIRC_FIRST or LSEEK_CIRC_SCND: finish stepping back through frames, number of frames = %d, rp = 0x%x, fvld = %d, len32 = 0x%x",
@@ -25,10 +25,10 @@ int exif_enable_chn(int sensor_port, int en); // enable/disable Exif process
...
@@ -25,10 +25,10 @@ int exif_enable_chn(int sensor_port, int en); // enable/disable Exif process
intexif_enable(inten);// For all sensor ports
intexif_enable(inten);// For all sensor ports
intdir_find_tag(unsignedlongtag);//!find location of the tag field in meta page using long tag (Exif tag and tag group)
intdir_find_tag(unsignedlongtag);//!find location of the tag field in meta page using long tag (Exif tag and tag group)
inlinevoidwrite_meta_raw_irq(intsensor_port,char*data,intoffset,intlen);//write data to meta, called from IRQ
voidwrite_meta_raw_irq(intsensor_port,char*data,intoffset,intlen);//write data to meta, called from IRQ
inlineintwrite_meta_irq(intsensor_port,char*data,int*indx,unsignedlongltag,intlen);//write data to meta, called from IRQ(len==0 => use field length)
intwrite_meta_irq(intsensor_port,char*data,int*indx,unsignedlongltag,intlen);//write data to meta, called from IRQ(len==0 => use field length)
inlinevoidputlong_meta_raw_irq(intsensor_port,unsignedlongdata,intoffset);//write data to meta (4 bytes, big endian), called from IRQ
voidputlong_meta_raw_irq(intsensor_port,unsignedlongdata,intoffset);//write data to meta (4 bytes, big endian), called from IRQ
inlineintputlong_meta_irq(intsensor_port,unsignedlongdata,int*indx,unsignedlongltag);//write data to meta (4 bytes, big endian), from IRQ
intputlong_meta_irq(intsensor_port,unsignedlongdata,int*indx,unsignedlongltag);//write data to meta (4 bytes, big endian), from IRQ
//void write_meta_raw_irq(char * data, int offset, int len); //write data to meta, called from IRQ
//void write_meta_raw_irq(char * data, int offset, int len); //write data to meta, called from IRQ
//int write_meta_irq(char * data, int * indx, unsigned long ltag, int len); //write data to meta, called from IRQ(len==0 => use field length). Returns index of the written data, -1 if not written
//int write_meta_irq(char * data, int * indx, unsigned long ltag, int len); //write data to meta, called from IRQ(len==0 => use field length). Returns index of the written data, -1 if not written
...
@@ -37,7 +37,7 @@ int write_meta(int sensor_port, char * data, int * indx, unsigned long ltag, in
...
@@ -37,7 +37,7 @@ int write_meta(int sensor_port, char * data, int * indx, unsigned long ltag, in
voidputlong_meta_raw(intsensor_port,unsignedlongdata,intoffset);//write data to meta (4 bytes, big endian), called from outside IRQ (atomic)
voidputlong_meta_raw(intsensor_port,unsignedlongdata,intoffset);//write data to meta (4 bytes, big endian), called from outside IRQ (atomic)
intputlong_meta(intsensor_port,unsignedlongdata,int*indx,unsignedlongltag);//write data to meta (4 bytes, big endian), from outside IRQ (atomic). Returns index of the written data, -1 if not written
intputlong_meta(intsensor_port,unsignedlongdata,int*indx,unsignedlongltag);//write data to meta (4 bytes, big endian), from outside IRQ (atomic). Returns index of the written data, -1 if not written
/* Looks like compressor is not writing 32 zero bytes when last frame ends precisely at the
* end of buffer. Try to detect this situation and set a flag so that we can overwrite first
* 32 bytes of the buffer on next interrupt. These bytes will be used as interframe parameters and current frame length
* will be decreased by these 32 bytes. Such a measure will corrupt the frame but preserve the structure.
*/
// if (jptr->jpeg_wp == 0) {
// // we need to invalidate two cache lines in order to
// // estimate the situation correctly: one line after the pointer, which should be the line of
// // 32 bytes of newly compressed frame(or zero bytes?), and one line before the pointer, which should be the last line of the frame. If this is not done
// // then the data read from memory can be incorrect and error detection will give false result. Barrier is set to
// // prevent compiler from reordering operations.
structframepars_tfunc2call;/// func2call.pars[] - each parameter has a 32-bit mask of what pgm_function to call - other fields not used
structframepars_tfunc2call;/// func2call.pars[] - each parameter has a 32-bit mask of what pgm_function to call - other fields not used
unsignedlongglobalPars[NUM_GPAR];/// parameters that are not frame-related, their changes do not initiate any actions so they can be mmaped for both R/W
unsignedlongglobalPars[NUM_GPAR];/// parameters that are not frame-related, their changes do not initiate any actions so they can be mmaped for both R/W
unsignedlongmultiSensIndex[P_MAX_PAR_ROUNDUP];/// indexes of individual sensor register shadows (first of 3) - now for all parameters, not just sensor ones
unsignedlongmultiSensIndex[P_MAX_PAR_ROUNDUP];/// indexes of individual sensor register shadows (first of 3) - now for all parameters, not just sensor ones