Re: OMAP3 ISP DQBUF hangs
Su Jiaquan jiaquan.lnx at gmail.com writes: Hello, Hi Tom Well, for our practice, we QBUF before STREAMON (not on omap3 isp). You can try that and see what happens. As I check the omap3 code, you sequence maybe OK. Coz there is a restart mechanism in the code to restart CCDC hardware after buffer underrun. But for you sequence, if the interrupt comes before you QBUF, then the hardware is running in underrun state ever from the STREAMON. Not sure the restart mechanism works in this scenario. Let's wait for answers from the professional Jiaquan Thanks for your reply. The hang is solved. You were right. Now I do QBUF - STREAMON - DQBUF - STREAMOFF. My new Problem is that I receive a black image, but I think I do a new post with the appropriate subject. Best Regrads, Tom -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: OMAP3 ISP DQBUF hangs
Su Jiaquan jiaquan.lnx at gmail.com writes: Hello, Hi Tom, On Thu, Aug 15, 2013 at 10:15 PM, Tom Bassai_Dai at gmx.net wrote: Hello, I'm working with an OMAP3 DM3730 processor module with a ov3640 camera module attached on parallel interface. I'm using Linux 3.5 and an application which builds the pipeline and grabs an image like the media-ctl and the yavta tools. I configured the pipeline to: sensor-ccdc-memory When I call ioctl with DQBUF the calling functions are: isp_video_dqbuf - omap3isp_video_queue_dqbuf - isp_video_buffer_wait - wait_event_interruptible The last function waits until the state of the buffer will be reseted somehow. Can someone tell my which function sets the state of the buffer? Am I missing an interrupt? Best Regards, Tom I'm not familar with omap3isp, but from the code, the wait queue is released by function ccdc_isr_buffer-omap3isp_video_buffer_next. You are either missing a interrupt, or running out of buffer, or found a buffer under run. Jiaquan -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majordomo at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html you are right. it seems that the list of the ccdc has no buffer left, because the printk(TOM ccdc_isr_buffer ERROR 1 ##\n); is shown in my log. But I don't understand what I need to do to solve the problem. What I do is: - configure the pipeline - open the video device - do ioctl VIDIOC_REQBUFS (with memory = V4L2_MEMORY_MMAP and type = V4L2_BUF_TYPE_VIDEO_CAPTURE) - do ioctl VIDIOC_QUERYBUF - do ioctl VIDIOC_STREAMON - do ioctl VIDIOC_QBUF without fail. and when I do ioctl VIDIOC_DQBUF. I get my problem. Does anyone have an idea what I need to do to solve this problem? static int ccdc_isr_buffer(struct isp_ccdc_device *ccdc) { printk(TOM ccdc_isr_buffer ##\n); struct isp_pipeline *pipe = to_isp_pipeline(ccdc-subdev.entity); struct isp_device *isp = to_isp_device(ccdc); struct isp_buffer *buffer; int restart = 0; /* The CCDC generates VD0 interrupts even when disabled (the datasheet * doesn't explicitly state if that's supposed to happen or not, so it * can be considered as a hardware bug or as a feature, but we have to * deal with it anyway). Disabling the CCDC when no buffer is available * would thus not be enough, we need to handle the situation explicitly. */ printk(TOM ccdc_isr_buffer 1 ##\n); if (list_empty(ccdc-video_out.dmaqueue)) { printk(TOM ccdc_isr_buffer ERROR 1 ##\n); goto done; } /* We're in continuous mode, and memory writes were disabled due to a * buffer underrun. Reenable them now that we have a buffer. The buffer * address has been set in ccdc_video_queue. */ printk(TOM ccdc_isr_buffer 2 ##\n); if (ccdc-state == ISP_PIPELINE_STREAM_CONTINUOUS ccdc-underrun) { restart = 1; ccdc-underrun = 0; printk(TOM ccdc_isr_buffer ERROR 2 ##\n); goto done; } printk(TOM ccdc_isr_buffer 3 ##\n); if (ccdc_sbl_wait_idle(ccdc, 1000)) { printk(TOM ccdc_isr_buffer ERROR 3 ##\n); dev_info(isp-dev, CCDC won't become idle!\n); goto done; } printk(TOM ccdc_isr_buffer 4 ##\n); buffer = omap3isp_video_buffer_next(ccdc-video_out); if (buffer != NULL) { ccdc_set_outaddr(ccdc, buffer-isp_addr); restart = 1; } printk(TOM ccdc_isr_buffer 5 ##\n); pipe-state |= ISP_PIPELINE_IDLE_OUTPUT; if (ccdc-state == ISP_PIPELINE_STREAM_SINGLESHOT isp_pipeline_ready(pipe)) omap3isp_pipeline_set_stream(pipe, ISP_PIPELINE_STREAM_SINGLESHOT); printk(TOM ccdc_isr_buffer DONE ##\n); done: return restart; } Regards, Tom -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: OMAP3 ISP DQBUF hangs
On Mon, Aug 19, 2013 at 4:53 PM, Tom bassai_...@gmx.net wrote: you are right. it seems that the list of the ccdc has no buffer left, because the printk(TOM ccdc_isr_buffer ERROR 1 ##\n); is shown in my log. But I don't understand what I need to do to solve the problem. What I do is: - configure the pipeline - open the video device - do ioctl VIDIOC_REQBUFS (with memory = V4L2_MEMORY_MMAP and type = V4L2_BUF_TYPE_VIDEO_CAPTURE) - do ioctl VIDIOC_QUERYBUF - do ioctl VIDIOC_STREAMON - do ioctl VIDIOC_QBUF without fail. and when I do ioctl VIDIOC_DQBUF. I get my problem. Does anyone have an idea what I need to do to solve this problem? Even if you are sure your application works, try with media-ctl + yavta first so you can send logs that everybody understand. Did you check you have interrupts during capture? (cat /proc/interrupts before and after yavta, look for omap3isp or something like that). Enrico -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: OMAP3 ISP DQBUF hangs
Hi Tom you are right. it seems that the list of the ccdc has no buffer left, because the printk(TOM ccdc_isr_buffer ERROR 1 ##\n); is shown in my log. But I don't understand what I need to do to solve the problem. What I do is: - configure the pipeline - open the video device - do ioctl VIDIOC_REQBUFS (with memory = V4L2_MEMORY_MMAP and type = V4L2_BUF_TYPE_VIDEO_CAPTURE) - do ioctl VIDIOC_QUERYBUF - do ioctl VIDIOC_STREAMON - do ioctl VIDIOC_QBUF without fail. and when I do ioctl VIDIOC_DQBUF. I get my problem. Does anyone have an idea what I need to do to solve this problem? Well, for our practice, we QBUF before STREAMON (not on omap3 isp). You can try that and see what happens. As I check the omap3 code, you sequence maybe OK. Coz there is a restart mechanism in the code to restart CCDC hardware after buffer underrun. But for you sequence, if the interrupt comes before you QBUF, then the hardware is running in underrun state ever from the STREAMON. Not sure the restart mechanism works in this scenario. Let's wait for answers from the professional :-) Jiaquan -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: OMAP3 ISP DQBUF hangs
Hi Tom, On Thu, Aug 15, 2013 at 10:15 PM, Tom bassai_...@gmx.net wrote: Hello, I'm working with an OMAP3 DM3730 processor module with a ov3640 camera module attached on parallel interface. I'm using Linux 3.5 and an application which builds the pipeline and grabs an image like the media-ctl and the yavta tools. I configured the pipeline to: sensor-ccdc-memory When I call ioctl with DQBUF the calling functions are: isp_video_dqbuf - omap3isp_video_queue_dqbuf - isp_video_buffer_wait - wait_event_interruptible The last function waits until the state of the buffer will be reseted somehow. Can someone tell my which function sets the state of the buffer? Am I missing an interrupt? Best Regards, Tom I'm not familar with omap3isp, but from the code, the wait queue is released by function ccdc_isr_buffer-omap3isp_video_buffer_next. You are either missing a interrupt, or running out of buffer, or found a buffer under run. Jiaquan -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html