summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2019-11-09 20:08:17 -0300
committerJames Almer <jamrial@gmail.com>2019-11-14 12:30:51 -0300
commit73ee53f317418a5719f6169e6171b40f90d18321 (patch)
tree2ebf4ef50052208fe00047c49558f40302aeb2a5
parentf01f9f179389befe9bce7639088e453146a39915 (diff)
downloadffmpeg-73ee53f317418a5719f6169e6171b40f90d18321.tar.gz
avcodec/encode: add missing assert to avcodec_receive_packet()
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>
-rw-r--r--libavcodec/encode.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libavcodec/encode.c b/libavcodec/encode.c
index d81b32b983..9ed2cf0f59 100644
--- a/libavcodec/encode.c
+++ b/libavcodec/encode.c
@@ -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.