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);
}
}
--
2.0.0
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel