summaryrefslogtreecommitdiff
path: root/libavcodec/utvideo.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/utvideo.c')
-rw-r--r--libavcodec/utvideo.c10
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);