rv34: use ff_mpeg_update_thread_context only when decoder is fully initialized

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().

Based on patches by John Stebbins and tested by John Stebbins.

CC: libav-stable@libav.org
pull/83/head
Janne Grunau 10 years ago
parent b0bfd09f88
commit dc4b2e7d33
  1. 8
      libavcodec/rv34.c

@ -1555,16 +1555,18 @@ int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte
return err; return err;
} }
if ((err = ff_mpeg_update_thread_context(dst, src)))
return err;
r->cur_pts = r1->cur_pts; r->cur_pts = r1->cur_pts;
r->last_pts = r1->last_pts; r->last_pts = r1->last_pts;
r->next_pts = r1->next_pts; r->next_pts = r1->next_pts;
memset(&r->si, 0, sizeof(r->si)); memset(&r->si, 0, sizeof(r->si));
// Do no call ff_mpeg_update_thread_context on a partially initialized
// decoder context.
if (!s1->linesize)
return 0; return 0;
return ff_mpeg_update_thread_context(dst, src);
} }
static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n) static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)

Loading…
Cancel
Save