On 5/19/17 11:50 AM, Anton Khirnov wrote:
> Currently it does not work at all.
> 
> Bug-Id: 1058
> ---
> Sorry, I have no idea what I was thinking when I originally wrote this.
> ---
>  libavcodec/decode.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> index 8aa2709..bb58dfc 100644
> --- a/libavcodec/decode.c
> +++ b/libavcodec/decode.c
> @@ -525,6 +525,7 @@ static int apply_cropping(AVCodecContext *avctx, AVFrame 
> *frame)
>  
>      /* adjust the offsets to avoid breaking alignment */
>      if (!(avctx->flags & AV_CODEC_FLAG_UNALIGNED)) {
> +        int log2_crop_align = frame->crop_left ? av_ctz(frame->crop_left) : 
> INT_MAX;
>          int min_log2_align = INT_MAX;
>  
>          for (i = 0; frame->data[i]; i++) {
> @@ -532,8 +533,13 @@ static int apply_cropping(AVCodecContext *avctx, AVFrame 
> *frame)
>              min_log2_align = FFMIN(log2_align, min_log2_align);
>          }
>  
> +        /* we assume, and it should always be true, that the data alignment 
> is
> +         * related to the cropping alignment by a constant power-of-2 factor 
> */
> +        if (log2_crop_align < min_log2_align)
> +            return AVERROR_BUG;
> +
>          if (min_log2_align < 5) {
> -            frame->crop_left &= ~((1 << min_log2_align) - 1);
> +            frame->crop_left &= ~((1 << (5 + log2_crop_align - 
> min_log2_align)) - 1);
>              calc_cropping_offsets(offsets, frame, desc);
>          }
>      }
> 

Ok if tested.

Maybe a fate coverage for it might be a nice idea...
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to