[FFmpeg-devel] [PATCH 2/3] avcodec: v4l2_m2m: remove unnecessary timeout.
Jorge Ramirez
jorge.ramirez.ortiz at gmail.com
Wed Jan 10 00:07:33 EET 2018
> --- a/libavcodec/v4l2_m2m_dec.c
> +++ b/libavcodec/v4l2_m2m_dec.c
> @@ -131,14 +131,22 @@ static int v4l2_receive_frame(AVCodecContext *avctx, AVFrame *frame)
> V4L2Context *const capture = &s->capture;
> V4L2Context *const output = &s->output;
> AVPacket avpkt = {0};
> - int ret;
> + int i, ret;
>
> ret = ff_decode_get_packet(avctx, &avpkt);
> if (ret < 0 && ret != AVERROR_EOF)
> return ret;
>
> - if (s->draining)
> - goto dequeue;
> + if (s->draining) {
> + for (i = 0; i < capture->num_buffers; i++) {
> + if (capture->buffers[i].status == V4L2BUF_IN_DRIVER)
> + goto dequeue;
> + }
> +
> + /* no more buffers in the driver, we are done */
> + capture->done = 1;
> + return AVERROR_EOF;
> + }
>
> ret = ff_v4l2_context_enqueue_packet(output, &avpkt);
> if (ret < 0) {
> diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c
> index 4c9ea1f..3d7c241 100644
> --- a/libavcodec/v4l2_m2m_enc.c
> +++ b/libavcodec/v4l2_m2m_enc.c
> @@ -253,10 +253,18 @@ static int v4l2_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
> V4L2m2mContext *s = ((V4L2m2mPriv*)avctx->priv_data)->context;
> V4L2Context *const capture = &s->capture;
> V4L2Context *const output = &s->output;
> - int ret;
> + int i, ret;
> +
> + if (s->draining) {
um, I shouldnt be exposing this information in this file. I'll push it
back to v4l2_context at the time of dequeue instead so the interface
remains clean and I dont duplicate the code in the decoder
please ignore this patch
> + for (i = 0; i < capture->num_buffers; i++) {
> + if (capture->buffers[i].status == V4L2BUF_IN_DRIVER)
> + goto dequeue;
> + }
>
> - if (s->draining)
> - goto dequeue;
> + /* no more buffers in the driver, we are done */
> + capture->done = 1;
> + return AVERROR_EOF;
> + }
>
> if (!output->streamon) {
> ret = ff_v4l2_context_set_status(output, VIDIOC_STREAMON);
More information about the ffmpeg-devel
mailing list