RE: [PATCH v3 2/3] v4l: videobuf: Add support for V4L2_BUF_FLAG_ERROR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

>Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
>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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux