Override the frame size from the SPS with AVCodecContext values
if the latter specify a size smaller by less than one macroblock.
This is required for correct cropping of MOV files from Canon cameras.

Signed-off-by: Mans Rullgard <[email protected]>
---
The first patch broke streams with size changes.  This version might
do something funny in the unlikely case of a stream removing partial
macroblock cropping partway through.  If we ever find such a stream,
we'll have to change how this cropping is decided.
---
 libavcodec/h264.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index 6ed251e..025a0dd 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -2968,6 +2968,12 @@ static int decode_slice_header(H264Context *h, 
H264Context *h0)
     else
         s->height = 16 * s->mb_height - (2 << s->chroma_y_shift) * 
FFMIN(h->sps.crop_bottom, (16 >> s->chroma_y_shift) - 1);
 
+    if (FFALIGN(s->avctx->width,  16) == s->width &&
+        FFALIGN(s->avctx->height, 16) == s->height) {
+        s->width  = s->avctx->width;
+        s->height = s->avctx->height;
+    }
+
     if (s->context_initialized &&
         (s->width != s->avctx->width || s->height != s->avctx->height ||
          av_cmp_q(h->sps.sar, s->avctx->sample_aspect_ratio))) {
-- 
1.7.10.2

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

Reply via email to