Merge commit 'eddf95283fbba1b469b76e7518bc3941f671b193'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 9 Oct 2014 00:45:38 +0000 (02:45 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 9 Oct 2014 00:49:16 +0000 (02:49 +0200)
* commit 'eddf95283fbba1b469b76e7518bc3941f671b193':
  vp9: initialize color space and range properties

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/vp9.c

@@@ -3749,37 -1027,31 +3749,49 @@@ static int vp9_decode_frame(AVCodecCont
          *got_frame = 1;
          return 0;
      }
 -    data += ret;
 -    size -= ret;
 -
 -    s->cur_frame = frame;
 +    data += res;
 +    size -= res;
 +
 +    if (s->frames[LAST_FRAME].tf.f->data[0])
 +        vp9_unref_frame(ctx, &s->frames[LAST_FRAME]);
 +    if (!s->keyframe && s->frames[CUR_FRAME].tf.f->data[0] &&
 +        (res = vp9_ref_frame(ctx, &s->frames[LAST_FRAME], &s->frames[CUR_FRAME])) < 0)
 +        return res;
 +    if (s->frames[CUR_FRAME].tf.f->data[0])
 +        vp9_unref_frame(ctx, &s->frames[CUR_FRAME]);
 +    if ((res = vp9_alloc_frame(ctx, &s->frames[CUR_FRAME])) < 0)
 +        return res;
 +    f = s->frames[CUR_FRAME].tf.f;
 +    f->key_frame = s->keyframe;
 +    f->pict_type = s->keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
 +    ls_y = f->linesize[0];
 +    ls_uv =f->linesize[1];
  
 -    av_frame_unref(s->cur_frame);
 -    if ((ret = ff_get_buffer(avctx, s->cur_frame,
 -                             s->refreshrefmask ? AV_GET_BUFFER_FLAG_REF : 0)) < 0)
 -        return ret;
 -    s->cur_frame->key_frame = s->keyframe;
 -    s->cur_frame->pict_type = s->keyframe ? AV_PICTURE_TYPE_I
 -                                          : AV_PICTURE_TYPE_P;
 +    // ref frame setup
 +    for (i = 0; i < 8; i++) {
 +        if (s->next_refs[i].f->data[0])
 +            ff_thread_release_buffer(ctx, &s->next_refs[i]);
 +        if (s->refreshrefmask & (1 << i)) {
 +            res = ff_thread_ref_frame(&s->next_refs[i], &s->frames[CUR_FRAME].tf);
 +        } else {
 +            res = ff_thread_ref_frame(&s->next_refs[i], &s->refs[i]);
 +        }
 +        if (res < 0)
 +            return res;
 +    }
  
 -        avctx->color_range = AVCOL_RANGE_JPEG;
+     if (s->fullrange)
 -        avctx->color_range = AVCOL_RANGE_MPEG;
++        ctx->color_range = AVCOL_RANGE_JPEG;
+     else
 -    case 1: avctx->colorspace = AVCOL_SPC_BT470BG; break;
 -    case 2: avctx->colorspace = AVCOL_SPC_BT709; break;
 -    case 3: avctx->colorspace = AVCOL_SPC_SMPTE170M; break;
 -    case 4: avctx->colorspace = AVCOL_SPC_SMPTE240M; break;
++        ctx->color_range = AVCOL_RANGE_MPEG;
+     switch (s->colorspace) {
++    case 1: ctx->colorspace = AVCOL_SPC_BT470BG; break;
++    case 2: ctx->colorspace = AVCOL_SPC_BT709; break;
++    case 3: ctx->colorspace = AVCOL_SPC_SMPTE170M; break;
++    case 4: ctx->colorspace = AVCOL_SPC_SMPTE240M; break;
+     }
      // main tile decode loop
      memset(s->above_partition_ctx, 0, s->cols);
      memset(s->above_skip_ctx, 0, s->cols);