#define PMEM_CAMIPP_NECESSARY_CIF_0 0x500000\r
#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
#define PMEM_CAM_NECESSARY_CIF_0 0xc00000\r
-#define PMEM_CAMIPP_NECESSARY_CIF_0 0x400000\r
+#define PMEM_CAMIPP_NECESSARY_CIF_0 0x600000\r
#elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_0 == 0x130000))\r
#define PMEM_CAM_NECESSARY_CIF_0 0x800000 /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
#define PMEM_CAMIPP_NECESSARY_CIF_0 0x400000\r
#define PMEM_CAMIPP_NECESSARY_CIF_1 0x500000\r
#elif (PMEM_SENSOR_FULL_RESOLUTION_CIF_1== 0x200000) /* 1280*720*1.5*4(preview) + 3M(capture raw) + 3M(jpeg encode output) */\r
#define PMEM_CAM_NECESSARY_CIF_1 0xc00000\r
-#define PMEM_CAMIPP_NECESSARY_CIF_1 0x400000\r
+#define PMEM_CAMIPP_NECESSARY_CIF_1 0x600000\r
#elif ((PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x100000) || (PMEM_SENSOR_FULL_RESOLUTION_CIF_1 == 0x130000))\r
#define PMEM_CAM_NECESSARY_CIF_1 0x800000 /* 800*600*1.5*4(preview) + 2M(capture raw) + 2M(jpeg encode output) */\r
#define PMEM_CAMIPP_NECESSARY_CIF_1 0x400000\r
*v0.x.6 : this driver improve test framerate method;
*v0.x.7 : digital zoom use the ipp to do scale and crop , otherwise ipp just do the scale. Something wrong with digital zoom if
we do crop with cif and do scale with ipp , we will fix this next version.
+*v0.x.8 : temp version,reinit capture list when setup video buf.
*/
-#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 2, 7)
+#define RK_CAM_VERSION_CODE KERNEL_VERSION(0, 2, 8)
/* limit to rk29 hardware capabilities */
#define RK_CAM_BUS_PARAM (SOCAM_MASTER |\
}
//must be reinit,or will be somthing wrong in irq process.
pcdev->active = NULL;
+ INIT_LIST_HEAD(&pcdev->capture);
RKCAMERA_DG("%s..%d.. videobuf size:%d, vipmem_buf size:%d, count:%d \n",__FUNCTION__,__LINE__, *size,pcdev->vipmem_size, *count);
return 0;
pcdev->frame_inval = 0;
}
vb = pcdev->active;
+ if(!vb){
+ printk("no acticve buffer!!!\n");
+ goto RK_CAMERA_IRQ_END;
+ }
/* ddl@rock-chips.com : this vb may be deleted from queue */
if ((vb->state == VIDEOBUF_QUEUED) || (vb->state == VIDEOBUF_ACTIVE)) {
list_del_init(&vb->queue);
pcdev->active = NULL;
if (!list_empty(&pcdev->capture)) {
pcdev->active = list_entry(pcdev->capture.next, struct videobuf_buffer, queue);
- if (pcdev->active) {
+ if (pcdev->active && (pcdev->active->state == VIDEOBUF_QUEUED)) {
rk_videobuf_capture(pcdev->active,pcdev);
}
+ else if(pcdev->active){
+ printk("vb state is wrong ,del it \n");
+ list_del_init(&(pcdev->active->queue));
+ pcdev->active = NULL;
+ }
}
if (pcdev->active == NULL) {
RKCAMERA_DG("%s video_buf queue is empty!\n",__FUNCTION__);