|
|
|
@@ -152,19 +152,16 @@ static av_cold int encode_init(AVCodecContext *avctx) |
|
|
|
max_size, max_size); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} |
|
|
|
if ((avctx->width & 0xFFF) == 0 && (avctx->height & 0xFFF) == 1) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Width / Height is invalid for MPEG2\n"); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} |
|
|
|
|
|
|
|
if ((ret = ff_mpv_encode_init(avctx)) < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
if (find_frame_rate_index(s) < 0) { |
|
|
|
if (s->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "MPEG-1/2 does not support %d/%d fps\n", |
|
|
|
avctx->time_base.den, avctx->time_base.num); |
|
|
|
if (avctx->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) { |
|
|
|
if ((avctx->width & 0xFFF) == 0 || (avctx->height & 0xFFF) == 0) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Width or Height are not allowed to be multiples of 4096\n" |
|
|
|
"add '-strict %d' if you want to use them anyway.\n", FF_COMPLIANCE_UNOFFICIAL); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} else { |
|
|
|
av_log(avctx, AV_LOG_INFO, |
|
|
|
"MPEG-1/2 does not support %d/%d fps, there may be AV sync issues\n", |
|
|
|
avctx->time_base.den, avctx->time_base.num); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@@ -174,9 +171,9 @@ static av_cold int encode_init(AVCodecContext *avctx) |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} |
|
|
|
/* Main or 4:2:2 */ |
|
|
|
avctx->profile = s->chroma_format == CHROMA_420 ? FF_PROFILE_MPEG2_MAIN : FF_PROFILE_MPEG2_422; |
|
|
|
avctx->profile = avctx->pix_fmt == AV_PIX_FMT_YUV420P ? FF_PROFILE_MPEG2_MAIN |
|
|
|
: FF_PROFILE_MPEG2_422; |
|
|
|
} |
|
|
|
|
|
|
|
if (avctx->level == FF_LEVEL_UNKNOWN) { |
|
|
|
if (avctx->profile == FF_PROFILE_MPEG2_422) { /* 4:2:2 */ |
|
|
|
if (avctx->width <= 720 && avctx->height <= 608) |
|
|
|
@@ -184,7 +181,8 @@ static av_cold int encode_init(AVCodecContext *avctx) |
|
|
|
else |
|
|
|
avctx->level = 2; /* High */ |
|
|
|
} else { |
|
|
|
if (avctx->profile != FF_PROFILE_MPEG2_HIGH && s->chroma_format != CHROMA_420) { |
|
|
|
if (avctx->profile != FF_PROFILE_MPEG2_HIGH && |
|
|
|
avctx->pix_fmt != AV_PIX_FMT_YUV420P) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, |
|
|
|
"Only High(1) and 4:2:2(0) profiles support 4:2:2 color sampling\n"); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
@@ -198,16 +196,18 @@ static av_cold int encode_init(AVCodecContext *avctx) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ((avctx->width & 0xFFF) == 0 && (avctx->height & 0xFFF) == 1) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Width / Height is invalid for MPEG2\n"); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} |
|
|
|
if ((ret = ff_mpv_encode_init(avctx)) < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
if (s->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) { |
|
|
|
if ((avctx->width & 0xFFF) == 0 || (avctx->height & 0xFFF) == 0) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Width or Height are not allowed to be multiples of 4096\n" |
|
|
|
"add '-strict %d' if you want to use them anyway.\n", FF_COMPLIANCE_UNOFFICIAL); |
|
|
|
if (find_frame_rate_index(s) < 0) { |
|
|
|
if (s->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "MPEG-1/2 does not support %d/%d fps\n", |
|
|
|
avctx->time_base.den, avctx->time_base.num); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} else { |
|
|
|
av_log(avctx, AV_LOG_INFO, |
|
|
|
"MPEG-1/2 does not support %d/%d fps, there may be AV sync issues\n", |
|
|
|
avctx->time_base.den, avctx->time_base.num); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|