aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2012-05-30 04:04:54 +0100
committerReinhard Tartler <siretart@tauware.de>2012-06-10 09:47:45 +0200
commite1608014c50eeb9f4744a53de0794eb6bb1269a2 (patch)
tree573448b93f4b412cb4f58e056cc11eb22a39a9ac
parentce39a84a7d760965972781df61a88e5f432b978a (diff)
downloadffmpeg-e1608014c50eeb9f4744a53de0794eb6bb1269a2.tar.gz
h264: allow cropping to AVCodecContext.width/height
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 <mans@mansr.com> (cherry picked from commit 30f515091c323da59c0f1b533703dedca2f4b95d) Conflicts: libavcodec/h264.c
-rw-r--r--libavcodec/h264.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index b229510269..79298d7b0c 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -2720,6 +2720,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))) {