decode: fix the code reducing cropping to preserve alignment

Currently it does not work at all.

Bug-Id: 1058
This commit is contained in:
Anton Khirnov 2017-05-19 11:47:21 +02:00
parent c3f0357bdf
commit 8652a2c248
1 changed files with 7 additions and 1 deletions

View File

@ -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);
}
}