Hi,

>Laurent Pinchart <laurent.pinch...@ideasonboard.com>
>On Wednesday 21 April 2010 13:39:44 Pawel Osciak wrote:
>> @@ -679,23 +682,20 @@ int videobuf_dqbuf(struct videobuf_queue *q,
>>      switch (buf->state) {
>>      case VIDEOBUF_ERROR:
>>              dprintk(1, "dqbuf: state is error\n");
>> -            retval = -EIO;
>> -            CALL(q, sync, q, buf);
>> -            buf->state = VIDEOBUF_IDLE;
>>              break;
>>      case VIDEOBUF_DONE:
>>              dprintk(1, "dqbuf: state is done\n");
>> -            CALL(q, sync, q, buf);
>> -            buf->state = VIDEOBUF_IDLE;
>>              break;
>>      default:
>>              dprintk(1, "dqbuf: state invalid\n");
>>              retval = -EINVAL;
>>              goto done;
>>      }
>> -    list_del(&buf->stream);
>> -    memset(b, 0, sizeof(*b));
>> +    CALL(q, sync, q, buf);
>>      videobuf_status(q, b, buf, q->type);
>> +    list_del(&buf->stream);
>> +    buf->state = VIDEOBUF_IDLE;
>> +    b->flags &= ~V4L2_BUF_FLAG_DONE;
>
>We do you clear the done flag here ?
>

The DONE flag is supposed to be cleared when dequeuing, but should
be set when querying:
 
"When this flag is set, the buffer is currently on the outgoing queue,
ready to be dequeued from the driver. Drivers set or clear this flag
when the VIDIOC_QUERYBUF  ioctl is called. After calling the VIDIOC_QBUF
or VIDIOC_DQBUF it is always cleared."

videobuf_status() is used for both QUERYBUF and DQBUF and making both
work properly is not very straightforward without losing
VIDEOBUF_DONE/VIDEOBUF_ERROR distinction (it becomes more clear when you
analyze both cases).

My previous patch was doing it the other way around, but Hans' version
seemed shorter and cleaner.

Best regards
--
Pawel Osciak
Linux Platform Group
Samsung Poland R&D 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

Reply via email to