On Tue, Dec 27, 2016 at 7:31 PM, Anton Khirnov <[email protected]> wrote:
> ---
>  libavcodec/vp3.c | 23 +++++++++--------------
>  1 file changed, 9 insertions(+), 14 deletions(-)
>
> diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
> index 26374cc..cb8925b 100644
> --- a/libavcodec/vp3.c
> +++ b/libavcodec/vp3.c
> @@ -1983,6 +1983,7 @@ static int vp3_decode_frame(AVCodecContext *avctx,
>                              void *data, int *got_frame,
>                              AVPacket *avpkt)
>  {
> +    AVFrame     *frame  = data;
>      const uint8_t *buf  = avpkt->data;
>      int buf_size        = avpkt->size;
>      Vp3DecodeContext *s = avctx->priv_data;
> @@ -2122,12 +2123,12 @@ static int vp3_decode_frame(AVCodecContext *avctx,
>      /* output frame, offset as needed */
>      if ((ret = av_frame_ref(data, s->current_frame.f)) < 0)
>          return ret;
> -    for (i = 0; i < 3; i++) {
> -        AVFrame *dst = data;
> -        int off = (s->offset_x >> (i && s->chroma_y_shift)) +
> -                  (s->offset_y >> (i && s->chroma_y_shift)) * 
> dst->linesize[i];
> -        dst->data[i] += off;
> -    }
> +
> +    frame->crop_left   = s->offset_x;
> +    frame->crop_right  = avctx->coded_width - avctx->width - s->offset_x;
> +    frame->crop_top    = s->offset_y;
> +    frame->crop_bottom = avctx->coded_height - avctx->height - s->offset_y;
> +
>      *got_frame = 1;
>
>      if (!HAVE_THREADS || !(s->avctx->active_thread_type & FF_THREAD_FRAME)) {
> @@ -2290,13 +2291,6 @@ static int theora_decode_header(AVCodecContext *avctx, 
> GetBitContext *gb)
>          // to normal axis ([0,0] upper left)
>          s->offset_x = offset_x;
>          s->offset_y = s->height - visible_height - offset_y;
> -
> -        if ((s->offset_x & 0x1F) && !(avctx->flags & 
> AV_CODEC_FLAG_UNALIGNED)) {
> -            s->offset_x &= ~0x1F;
> -            av_log(avctx, AV_LOG_WARNING, "Reducing offset_x from %d to %d"
> -                   "chroma samples to preserve alignment.\n",
> -                   offset_x, s->offset_x);
> -        }
>      }
>
>      if (colorspace == 1)
> @@ -2499,7 +2493,8 @@ AVCodec ff_theora_decoder = {
>                               AV_CODEC_CAP_FRAME_THREADS,
>      .flush                 = vp3_decode_flush,
>      .init_thread_copy      = ONLY_IF_THREADS_ENABLED(vp3_init_thread_copy),
> -    .update_thread_context = 
> ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
> +    .update_thread_context = 
> ONLY_IF_THREADS_ENABLED(vp3_update_thread_context),
> +    .caps_internal         = FF_CODEC_CAP_EXPORTS_CROPPING,
>  };
>  #endif
>
> --

lgtm
-- 
Vittorio
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to