Contrary to progressive, just being able to crop up to 14/15 pixels is not enough to encode all supported resolutions, and the new behaviour is also consistent with e.g. MPEG-2 etc. Originally committed as revision 25669 to svn://svn.ffmpeg.org/ffmpeg/trunktags/n0.8
@@ -1810,7 +1810,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ | |||||
if(h->sps.frame_mbs_only_flag) | if(h->sps.frame_mbs_only_flag) | ||||
s->height= 16*s->mb_height - 2*FFMIN(h->sps.crop_bottom, 7); | s->height= 16*s->mb_height - 2*FFMIN(h->sps.crop_bottom, 7); | ||||
else | else | ||||
s->height= 16*s->mb_height - 4*FFMIN(h->sps.crop_bottom, 3); | |||||
s->height= 16*s->mb_height - 4*FFMIN(h->sps.crop_bottom, 7); | |||||
if (s->context_initialized | if (s->context_initialized | ||||
&& ( s->width != s->avctx->width || s->height != s->avctx->height | && ( s->width != s->avctx->width || s->height != s->avctx->height | ||||
@@ -373,7 +373,7 @@ int ff_h264_decode_seq_parameter_set(H264Context *h){ | |||||
if(sps->crop_left || sps->crop_top){ | if(sps->crop_left || sps->crop_top){ | ||||
av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); | av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); | ||||
} | } | ||||
if(sps->crop_right >= 8 || sps->crop_bottom >= (8>> !sps->frame_mbs_only_flag)){ | |||||
if(sps->crop_right >= 8 || sps->crop_bottom >= 8){ | |||||
av_log(h->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n"); | av_log(h->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n"); | ||||
} | } | ||||
}else{ | }else{ | ||||
@@ -498,7 +498,7 @@ av_cold int MPV_common_init(MpegEncContext *s) | |||||
if(s->codec_id == CODEC_ID_MPEG2VIDEO && !s->progressive_sequence) | if(s->codec_id == CODEC_ID_MPEG2VIDEO && !s->progressive_sequence) | ||||
s->mb_height = (s->height + 31) / 32 * 2; | s->mb_height = (s->height + 31) / 32 * 2; | ||||
else | |||||
else if (s->codec_id != CODEC_ID_H264) | |||||
s->mb_height = (s->height + 15) / 16; | s->mb_height = (s->height + 15) / 16; | ||||
if(s->avctx->pix_fmt == PIX_FMT_NONE){ | if(s->avctx->pix_fmt == PIX_FMT_NONE){ | ||||
@@ -140,7 +140,7 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int l | |||||
case PIX_FMT_YUVA420P: | case PIX_FMT_YUVA420P: | ||||
w_align= 16; //FIXME check for non mpeg style codecs and use less alignment | w_align= 16; //FIXME check for non mpeg style codecs and use less alignment | ||||
h_align= 16; | h_align= 16; | ||||
if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP) | |||||
if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP || s->codec_id == CODEC_ID_H264) | |||||
h_align= 32; // interlaced is rounded up to 2 MBs | h_align= 32; // interlaced is rounded up to 2 MBs | ||||
break; | break; | ||||
case PIX_FMT_YUV411P: | case PIX_FMT_YUV411P: | ||||