On 08/21/2014 01:18 PM, Janne Grunau wrote: > this has the same effect as setting MpegEncContext.context_initialized > to 0 without the memory leaks. > > Janne > > ---8<--- > MpegEncContext based decoders are only fully initialized after the first > ff_thread_get_buffer() call. The RV30/40 decoders may fail before a frame > buffer was requested. ff_mpeg_update_thread_context() fails on half > initialized MpegEncContexts. Since this can only happen before a the > first frame was decoded there is no need to call > ff_mpeg_update_thread_context(). > > CC: [email protected] > --- > libavcodec/rv34.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c > index 0c36348..420fb64 100644 > --- a/libavcodec/rv34.c > +++ b/libavcodec/rv34.c > @@ -1553,16 +1553,18 @@ int > ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte > return err; > } > > - if ((err = ff_mpeg_update_thread_context(dst, src))) > - return err; > - > r->cur_pts = r1->cur_pts; > r->last_pts = r1->last_pts; > r->next_pts = r1->next_pts; > > memset(&r->si, 0, sizeof(r->si)); > > - return 0; > + // Do no call ff_mpeg_update_thread_context on a partially initialized > + // decoder context. > + if (!s1->linesize) > + return 0; > + > + return ff_mpeg_update_thread_context(dst, src); > } > > static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)
Fixes playback with my broken sample and valgrind says no leaks. -- John GnuPG fingerprint: D0EC B3DB C372 D1F1 0B01 83F0 49F1 D7B2 60D4 D0F7
signature.asc
Description: OpenPGP digital signature
_______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
