diff options
Diffstat (limited to 'libavcodec/utvideo.c')
-rw-r--r-- | libavcodec/utvideo.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libavcodec/utvideo.c b/libavcodec/utvideo.c index a3b0d7cf01..ead192be60 100644 --- a/libavcodec/utvideo.c +++ b/libavcodec/utvideo.c @@ -373,15 +373,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, if (c->pic.data[0]) ff_thread_release_buffer(avctx, &c->pic); - c->pic.reference = 1; + c->pic.reference = 3; c->pic.buffer_hints = FF_BUFFER_HINTS_VALID; if ((ret = ff_thread_get_buffer(avctx, &c->pic)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret; } - ff_thread_finish_setup(avctx); - /* parse plane structure to get frame flags and validate slice offsets */ bytestream2_init(&gb, buf, buf_size); for (i = 0; i < c->planes; i++) { @@ -440,9 +438,15 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, if (ret) return ret; if (c->frame_pred == PRED_MEDIAN) + if (!c->interlaced) { restore_median(c->pic.data[0] + rgb_order[i], c->planes, c->pic.linesize[0], avctx->width, avctx->height, c->slices, 0); + } else { + restore_median_il(c->pic.data[0] + rgb_order[i], c->planes, + c->pic.linesize[0], avctx->width, avctx->height, + c->slices, 0); + } } restore_rgb_planes(c->pic.data[0], c->planes, c->pic.linesize[0], avctx->width, avctx->height); |