| Index: third_party/ffmpeg/patches/to_upstream/50_vp8_fix_frame_size_changes.patch
|
| ===================================================================
|
| --- third_party/ffmpeg/patches/to_upstream/50_vp8_fix_frame_size_changes.patch (revision 0)
|
| +++ third_party/ffmpeg/patches/to_upstream/50_vp8_fix_frame_size_changes.patch (revision 0)
|
| @@ -0,0 +1,50 @@
|
| +diff -wurp -N orig/libavcodec/pthread.c patched-ffmpeg/libavcodec/pthread.c
|
| +--- orig/libavcodec/pthread.c 2011-11-09 10:48:42.944816193 -0800
|
| ++++ patched-ffmpeg/libavcodec/pthread.c 2011-11-09 10:48:53.014862587 -0800
|
| +@@ -485,6 +485,7 @@ static int submit_packet(PerThreadContex
|
| + }
|
| +
|
| + fctx->prev_thread = p;
|
| ++ fctx->next_decoding++;
|
| +
|
| + return 0;
|
| + }
|
| +@@ -507,8 +508,6 @@ int ff_thread_decode_frame(AVCodecContex
|
| + err = submit_packet(p, avpkt);
|
| + if (err) return err;
|
| +
|
| +- fctx->next_decoding++;
|
| +-
|
| + /*
|
| + * If we're still receiving the initial packets, don't return a frame.
|
| + */
|
| +diff -wurp -N orig/libavcodec/vp8.c patched-ffmpeg/libavcodec/vp8.c
|
| +--- orig/libavcodec/vp8.c 2011-11-09 10:48:43.154817161 -0800
|
| ++++ patched-ffmpeg/libavcodec/vp8.c 2011-11-09 10:48:53.014862587 -0800
|
| +@@ -50,8 +50,7 @@ static int vp8_alloc_frame(VP8Context *s
|
| + int ret;
|
| + if ((ret = ff_thread_get_buffer(s->avctx, f)) < 0)
|
| + return ret;
|
| +- if (s->num_maps_to_be_freed) {
|
| +- assert(!s->maps_are_invalid);
|
| ++ if (s->num_maps_to_be_freed && !s->maps_are_invalid) {
|
| + f->ref_index[0] = s->segmentation_maps[--s->num_maps_to_be_freed];
|
| + } else if (!(f->ref_index[0] = av_mallocz(s->mb_width * s->mb_height))) {
|
| + ff_thread_release_buffer(s->avctx, f);
|
| +@@ -1565,13 +1564,15 @@ static int vp8_decode_frame(AVCodecConte
|
| + VP8Context *s = avctx->priv_data;
|
| + int ret, mb_x, mb_y, i, y, referenced;
|
| + enum AVDiscard skip_thresh;
|
| +- AVFrame *av_uninit(curframe), *prev_frame = s->framep[VP56_FRAME_CURRENT];
|
| ++ AVFrame *av_uninit(curframe), *prev_frame;
|
| +
|
| + release_queued_segmaps(s, 0);
|
| +
|
| + if ((ret = decode_frame_header(s, avpkt->data, avpkt->size)) < 0)
|
| + return ret;
|
| +
|
| ++ prev_frame = s->framep[VP56_FRAME_CURRENT];
|
| ++
|
| + referenced = s->update_last || s->update_golden == VP56_FRAME_CURRENT
|
| + || s->update_altref == VP56_FRAME_CURRENT;
|
| +
|
|
|