[FFmpeg-devel] [PATCH 1/2] avformat: always unref the packet after parsing

Hendrik Leppkes h.leppkes at gmail.com
Mon Nov 2 09:13:30 CET 2015


On Sun, Nov 1, 2015 at 1:18 PM, wm4 <nfxjfg at googlemail.com> wrote:
> On Sun, 1 Nov 2015 13:03:50 +0100
> Hendrik Leppkes <h.leppkes at gmail.com> wrote:
>
>> On Sun, Nov 1, 2015 at 12:57 PM, wm4 <nfxjfg at googlemail.com> wrote:
>> > On Sun,  1 Nov 2015 11:21:26 +0100
>> > Hendrik Leppkes <h.leppkes at gmail.com> wrote:
>> >
>> >> This fixes a memory leak when side-data is present.
>> >> ---
>> >>  libavformat/utils.c | 9 ++++-----
>> >>  1 file changed, 4 insertions(+), 5 deletions(-)
>> >>
>> >> diff --git a/libavformat/utils.c b/libavformat/utils.c
>> >> index 7e4f54f..3f82659 100644
>> >> --- a/libavformat/utils.c
>> >> +++ b/libavformat/utils.c
>> >> @@ -1285,12 +1285,11 @@ static int parse_packet(AVFormatContext *s, AVPacket *pkt, int stream_index)
>> >>
>> >>          compute_pkt_fields(s, st, st->parser, &out_pkt, next_dts, next_pts);
>> >>
>> >> -        if ((ret = add_to_pktbuf(&s->internal->parse_queue, &out_pkt,
>> >> -                                 &s->internal->parse_queue_end,
>> >> -                                 1))) {
>> >> -            av_packet_unref(&out_pkt);
>> >> +        ret = add_to_pktbuf(&s->internal->parse_queue, &out_pkt,
>> >> +                            &s->internal->parse_queue_end, 1);
>> >> +        av_packet_unref(&out_pkt);
>> >> +        if (ret < 0)
>> >>              goto fail;
>> >> -        }
>> >>      }
>> >>
>> >>      /* end of the stream => close and free the parser */
>> >
>> > I thought he semantics of add_to_pktbuf was to transfer packet
>> > ownership if the last parameter is 1?
>>
>> Actually 0 does that, 1 creates a new reference, including copying
>> data into a refcounted buffer if needed, which is wanted here since
>> the output buffer from the parser is not persistent otherwise.
>
> Both patches LGTM then.

Both applied.


More information about the ffmpeg-devel mailing list