RE: vb2: about vb2_queue-queued_count

2011-06-13 Thread Marek Szyprowski
Hello,

On Friday, June 10, 2011 6:29 PM Uwe Kleine-König wrote:

 On Fri, Jun 10, 2011 at 01:50:37PM +0200, Marek Szyprowski wrote:
  Hello,
 
  On Wednesday, June 08, 2011 10:48 PM Uwe Kleine-König wrote:
 
   I'm still debugging my new video overlay device driver. The current
   problem is again when playing back a second video.
  
   After streamoff is called at the end of the first video, I disable the
   overlay and call vb2_buffer_done on the last buffer. This is exited
   early because vb-state == VB2_BUF_STATE_DEQUEUED.
   This results in vb-vb2_queue-queued_count being 1.
  
   Now if the new video starts I call vb2_queue_init in
 the .vidioc_reqbufs
   callback on my queue (that still has queued_count == 1). After
   vb2_queue_init returns queued_count is still 1 though q-queued_list is
   reset to be empty.
  
   __vb2_queue_cancel has a similar problem, q-queued_list is reset, but
   queued_count is not.
 
  Thanks again for finding the bug. You are right, __vb2_queue_cancel
 should
  reset queued_count too. I will post a patch soon.
 IMHO vb2_queue_init should reset queued_count, too. Not sure if you just
 skipped to mention it here 

vb2_queue_init assumes that the called allocated vb2_queue with kzalloc()
or did memset(q, 0, sizeof(struct vb2_queue)), so it is not really required
to explicitly set queued_count to zero.

Best regards
-- 
Marek Szyprowski
Samsung Poland RD Center



--
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: vb2: about vb2_queue-queued_count

2011-06-13 Thread Uwe Kleine-König
Hello,

On Mon, Jun 13, 2011 at 08:26:13AM +0200, Marek Szyprowski wrote:
 On Friday, June 10, 2011 6:29 PM Uwe Kleine-König wrote:
 
  On Fri, Jun 10, 2011 at 01:50:37PM +0200, Marek Szyprowski wrote:
   Hello,
  
   On Wednesday, June 08, 2011 10:48 PM Uwe Kleine-König wrote:
  
I'm still debugging my new video overlay device driver. The current
problem is again when playing back a second video.
   
After streamoff is called at the end of the first video, I disable the
overlay and call vb2_buffer_done on the last buffer. This is exited
early because vb-state == VB2_BUF_STATE_DEQUEUED.
This results in vb-vb2_queue-queued_count being 1.
   
Now if the new video starts I call vb2_queue_init in
  the .vidioc_reqbufs
callback on my queue (that still has queued_count == 1). After
vb2_queue_init returns queued_count is still 1 though q-queued_list is
reset to be empty.
   
__vb2_queue_cancel has a similar problem, q-queued_list is reset, but
queued_count is not.
  
   Thanks again for finding the bug. You are right, __vb2_queue_cancel
  should
   reset queued_count too. I will post a patch soon.
  IMHO vb2_queue_init should reset queued_count, too. Not sure if you just
  skipped to mention it here 
 
 vb2_queue_init assumes that the called allocated vb2_queue with kzalloc()
 or did memset(q, 0, sizeof(struct vb2_queue)), so it is not really required
 to explicitly set queued_count to zero.
Hmmm, I call vb2_queue_init in the callback .vidioc_reqbufs, because
AFAICT this is the only place where I get the needed info to set
q-type. As this looks wrong now, can you hint where to initialize the
queue instead?

Best regards
Uwe

-- 
Pengutronix e.K.   | Uwe Kleine-König|
Industrial Linux Solutions | http://www.pengutronix.de/  |
--
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: vb2: about vb2_queue-queued_count

2011-06-13 Thread Marek Szyprowski
Hello,

On Monday, June 13, 2011 10:37 AM Uwe Kleine-König wrote:

 On Mon, Jun 13, 2011 at 08:26:13AM +0200, Marek Szyprowski wrote:
  On Friday, June 10, 2011 6:29 PM Uwe Kleine-König wrote:
 
   On Fri, Jun 10, 2011 at 01:50:37PM +0200, Marek Szyprowski wrote:
Hello,
   
On Wednesday, June 08, 2011 10:48 PM Uwe Kleine-König wrote:
   
 I'm still debugging my new video overlay device driver. The current
 problem is again when playing back a second video.

 After streamoff is called at the end of the first video, I disable
 the
 overlay and call vb2_buffer_done on the last buffer. This is exited
 early because vb-state == VB2_BUF_STATE_DEQUEUED.
 This results in vb-vb2_queue-queued_count being 1.

 Now if the new video starts I call vb2_queue_init in
   the .vidioc_reqbufs
 callback on my queue (that still has queued_count == 1). After
 vb2_queue_init returns queued_count is still 1 though q-
 queued_list is
 reset to be empty.

 __vb2_queue_cancel has a similar problem, q-queued_list is reset,
 but
 queued_count is not.
   
Thanks again for finding the bug. You are right, __vb2_queue_cancel
   should
reset queued_count too. I will post a patch soon.
   IMHO vb2_queue_init should reset queued_count, too. Not sure if you
 just
   skipped to mention it here 
 
  vb2_queue_init assumes that the called allocated vb2_queue with kzalloc()
  or did memset(q, 0, sizeof(struct vb2_queue)), so it is not really
 required
  to explicitly set queued_count to zero.
 Hmmm, I call vb2_queue_init in the callback .vidioc_reqbufs, because
 AFAICT this is the only place where I get the needed info to set
 q-type. As this looks wrong now, can you hint where to initialize the
 queue instead?

Huh, this design doesn't look good. vb2_queue_init should be called during
driver initialization, and .videoc_reqbufs should be just a proxy to 
vb2_reqbus() (same with querybuf, qbuf, dqbuf, streamon, streamoff, read
and poll). Why do you want to play with q-type? Can't you just set it
correctly to V4L2_BUF_TYPE_VIDEO_CAPTURE in driver probe? 

Best regards
-- 
Marek Szyprowski
Samsung Poland RD Center



--
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: vb2: about vb2_queue-queued_count

2011-06-10 Thread Marek Szyprowski
Hello,

On Wednesday, June 08, 2011 10:48 PM Uwe Kleine-König wrote:

 I'm still debugging my new video overlay device driver. The current
 problem is again when playing back a second video.
 
 After streamoff is called at the end of the first video, I disable the
 overlay and call vb2_buffer_done on the last buffer. This is exited
 early because vb-state == VB2_BUF_STATE_DEQUEUED.
 This results in vb-vb2_queue-queued_count being 1.
 
 Now if the new video starts I call vb2_queue_init in the .vidioc_reqbufs
 callback on my queue (that still has queued_count == 1). After
 vb2_queue_init returns queued_count is still 1 though q-queued_list is
 reset to be empty.
 
 __vb2_queue_cancel has a similar problem, q-queued_list is reset, but
 queued_count is not.

Thanks again for finding the bug. You are right, __vb2_queue_cancel should
reset queued_count too. I will post a patch soon.

 OTOH queued_count seems to be read only by vb2_wait_for_all_buffers
 which currently has no users. :-)

Right, no mainline drive use it right now, but this function might be 
convenient for some standard drivers.

Best regards
-- 
Marek Szyprowski
Samsung Poland RD Center



--
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: vb2: about vb2_queue-queued_count

2011-06-10 Thread Uwe Kleine-König
On Fri, Jun 10, 2011 at 01:50:37PM +0200, Marek Szyprowski wrote:
 Hello,
 
 On Wednesday, June 08, 2011 10:48 PM Uwe Kleine-König wrote:
 
  I'm still debugging my new video overlay device driver. The current
  problem is again when playing back a second video.
  
  After streamoff is called at the end of the first video, I disable the
  overlay and call vb2_buffer_done on the last buffer. This is exited
  early because vb-state == VB2_BUF_STATE_DEQUEUED.
  This results in vb-vb2_queue-queued_count being 1.
  
  Now if the new video starts I call vb2_queue_init in the .vidioc_reqbufs
  callback on my queue (that still has queued_count == 1). After
  vb2_queue_init returns queued_count is still 1 though q-queued_list is
  reset to be empty.
  
  __vb2_queue_cancel has a similar problem, q-queued_list is reset, but
  queued_count is not.
 
 Thanks again for finding the bug. You are right, __vb2_queue_cancel should
 reset queued_count too. I will post a patch soon.
IMHO vb2_queue_init should reset queued_count, too. Not sure if you just
skipped to mention it here 

Best regards
Uwe

-- 
Pengutronix e.K.   | Uwe Kleine-König|
Industrial Linux Solutions | http://www.pengutronix.de/  |
--
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