aboutsummaryrefslogtreecommitdiff
path: root/libavcodec/v4l2_m2m_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/v4l2_m2m_enc.c')
-rw-r--r--libavcodec/v4l2_m2m_enc.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c
index af0ed1e306..4230a415fd 100644
--- a/libavcodec/v4l2_m2m_enc.c
+++ b/libavcodec/v4l2_m2m_enc.c
@@ -295,16 +295,20 @@ static int v4l2_receive_packet(AVCodecContext *avctx, AVPacket *avpkt)
if (s->draining)
goto dequeue;
+ if (!frame->buf[0]) {
ret = ff_encode_get_frame(avctx, frame);
if (ret < 0 && ret != AVERROR_EOF)
return ret;
if (ret == AVERROR_EOF)
frame = NULL;
+ }
ret = v4l2_send_frame(avctx, frame);
- av_frame_unref(frame);
- if (ret < 0)
+ if (ret != AVERROR(EAGAIN))
+ av_frame_unref(frame);
+
+ if (ret < 0 && ret != AVERROR(EAGAIN))
return ret;
if (!output->streamon) {