Re: [FFmpeg-devel] [PATCH] avcodec/encode: add missing assert to avcodec_receive_packet()
On 11/9/2019 8:08 PM, James Almer wrote: > Encoders must return reference counted packets. > > This was checked only for encoders using the encode2 AVCodec API, while > blindly accepting whatever encoders using the receive_packet AVCodec API > were returning. > > Signed-off-by: James Almer > --- > libavcodec/encode.c | 8 +++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > 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. Will apply soon. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-devel] [PATCH] avcodec/encode: add missing assert to avcodec_receive_packet()
Encoders must return reference counted packets. This was checked only for encoders using the encode2 AVCodec API, while blindly accepting whatever encoders using the receive_packet AVCodec API were returning. Signed-off-by: James Almer --- libavcodec/encode.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) 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. -- 2.23.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".