]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/encode: add missing assert to avcodec_receive_packet()
authorJames Almer <jamrial@gmail.com>
Sat, 9 Nov 2019 23:08:17 +0000 (20:08 -0300)
committerJames Almer <jamrial@gmail.com>
Thu, 14 Nov 2019 15:30:51 +0000 (12:30 -0300)
Encoders must return reference counted packets.

This was checked only for encoders using the AVCodec->encode2() API, while
blindly accepting whatever encoders using the AVCodec->receive_packet() API
were returning.

Signed-off-by: James Almer <jamrial@gmail.com>
libavcodec/encode.c

index d81b32b98382ee7731d6bb5312464c98a3eef610..9ed2cf0f5908b72772094d6aa21046edc3418d31 100644 (file)
@@ -428,9 +428,15 @@ int attribute_align_arg avcodec_receive_packet(AVCodecContext *avctx, AVPacket *
         return AVERROR(EINVAL);
 
     if (avctx->codec->receive_packet) {
+        int ret;
         if (avctx->internal->draining && !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY))
             return AVERROR_EOF;
-        return avctx->codec->receive_packet(avctx, avpkt);
+        ret = avctx->codec->receive_packet(avctx, avpkt);
+        if (!ret)
+            // Encoders must always return ref-counted buffers.
+            // Side-data only packets have no data and can be not ref-counted.
+            av_assert0(!avpkt->data || avpkt->buf);
+        return ret;
     }
 
     // Emulation via old API.