[FFmpeg-devel] [PATCH] lavc/decode: do not use a context variable for function-local data
Michael Niedermayer
michael at niedermayer.cc
Sat May 23 12:52:40 EEST 2020
On Fri, May 22, 2020 at 04:51:05PM -0300, James Almer wrote:
> On 5/22/2020 4:22 PM, Michael Niedermayer wrote:
> > On Fri, May 22, 2020 at 02:32:07PM -0300, James Almer wrote:
> >> On 5/22/2020 1:56 PM, Anton Khirnov wrote:
> >>> ---
> >>> libavcodec/decode.c | 8 ++++----
> >>> 1 file changed, 4 insertions(+), 4 deletions(-)
> >>>
> >>> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> >>> index f3327d74af..dbecdf3f46 100644
> >>> --- a/libavcodec/decode.c
> >>> +++ b/libavcodec/decode.c
> >>> @@ -586,6 +586,7 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
> >>> int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt)
> >>> {
> >>> AVCodecInternal *avci = avctx->internal;
> >>> + AVPacket buffer_pkt = { NULL };
> >>> int ret;
> >>>
> >>> if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec))
> >>> @@ -597,16 +598,15 @@ int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacke
> >>> if (avpkt && !avpkt->size && avpkt->data)
> >>> return AVERROR(EINVAL);
> >>>
> >>> - av_packet_unref(avci->buffer_pkt);
> >>> if (avpkt && (avpkt->data || avpkt->side_data_elems)) {
> >>> - ret = av_packet_ref(avci->buffer_pkt, avpkt);
> >>> + ret = av_packet_ref(&buffer_pkt, avpkt);
> >>> if (ret < 0)
> >>> return ret;
> >>> }
> >>>
> >>> - ret = av_bsf_send_packet(avci->bsf, avci->buffer_pkt);
> >>> + ret = av_bsf_send_packet(avci->bsf, &buffer_pkt);
> >>> if (ret < 0) {
> >>> - av_packet_unref(avci->buffer_pkt);
> >>> + av_packet_unref(&buffer_pkt);
> >>> return ret;
> >>> }
> >>
> >> What's the gain here? You're not removing the context variable since
> >> it's used in the encode framework as well, and you're introducing a
> >
> >> stack AVPacket (that, while harmless, is not even properly initialized).
> >
> > It would be nice if we could avoid all such code, so that we can extend
> > AVPacket like other structs without Major bumping
>
> Yes, some relatively recent commits went in the direction of removing as
> much AVPacket on stack/heap usage as possible precisely to remove
> sizeof(AVPacket) from the ABI, but at least within lavc it's not a problem.
sizeof() may be ok in libavcodec (though still IMHO not great style)
the other issue is NULL initialization. We may want to add new fields
which need to be initialized to a non 0 default. timestamps and AV_NOPTS_VALUE
come to mind as examples of such fields
thx
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
It is what and why we do it that matters, not just one of them.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200523/7448e04e/attachment.sig>
More information about the ffmpeg-devel
mailing list