]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/v4l2_m2m_dec.c
lavc/v4l2_m2m: don't close the file descriptor we don't own
[ffmpeg] / libavcodec / v4l2_m2m_dec.c
index bca45be14846141362a9e8473bab649dcd422f82..d0601f0e2fe32eba14cafb615e3f171a84f030fb 100644 (file)
@@ -149,11 +149,14 @@ static int v4l2_receive_frame(AVCodecContext *avctx, AVFrame *frame)
 
     if (avpkt.size) {
         ret = v4l2_try_start(avctx);
-        if (ret)
+        if (ret) {
+            av_packet_unref(&avpkt);
             return 0;
+        }
     }
 
 dequeue:
+    av_packet_unref(&avpkt);
     return ff_v4l2_context_dequeue_frame(capture, frame);
 }
 
@@ -185,7 +188,11 @@ static av_cold int v4l2_decode_init(AVCodecContext *avctx)
 
     ret = ff_v4l2_m2m_codec_init(avctx);
     if (ret) {
+        V4L2m2mPriv *priv = avctx->priv_data;
         av_log(avctx, AV_LOG_ERROR, "can't configure decoder\n");
+        s->self_ref = NULL;
+        av_buffer_unref(&priv->context_ref);
+
         return ret;
     }
 
@@ -221,7 +228,8 @@ AVCodec ff_ ## NAME ## _v4l2m2m_decoder = { \
     .receive_frame  = v4l2_receive_frame,\
     .close          = ff_v4l2_m2m_codec_end,\
     .bsfs           = bsf_name, \
-    .capabilities   = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY, \
+    .capabilities   = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY | \
+                      AV_CODEC_CAP_AVOID_PROBING, \
     .wrapper_name   = "v4l2m2m", \
 };