mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
In libx264 wrapper, detect default settings and use medium profile to avoid failure.
This commit is contained in:
parent
9bf81b49cf
commit
20a160484f
@ -165,6 +165,31 @@ static av_cold int X264_close(AVCodecContext *avctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect default settings and use default profile to avoid libx264 failure.
|
||||||
|
*/
|
||||||
|
static void check_default_settings(AVCodecContext *avctx)
|
||||||
|
{
|
||||||
|
X264Context *x4 = avctx->priv_data;
|
||||||
|
|
||||||
|
int score = 0;
|
||||||
|
score += x4->params.analyse.i_me_range == 0;
|
||||||
|
score += x4->params.rc.i_qp_step == 3;
|
||||||
|
score += x4->params.i_keyint_max == 12;
|
||||||
|
score += x4->params.rc.i_qp_min == 2;
|
||||||
|
score += x4->params.rc.i_qp_max == 31;
|
||||||
|
score += x4->params.rc.f_qcompress == 0.5;
|
||||||
|
score += fabs(x4->params.rc.f_ip_factor - 1.25) < 0.01;
|
||||||
|
score += fabs(x4->params.rc.f_pb_factor - 1.25) < 0.01;
|
||||||
|
score += x4->params.analyse.inter == 0 && x4->params.analyse.i_subpel_refine == 8;
|
||||||
|
if (score >= 5) {
|
||||||
|
av_log(avctx, AV_LOG_ERROR, "Default settings detected, using medium profile\n");
|
||||||
|
x4->preset = "medium";
|
||||||
|
if (avctx->bit_rate == 200*100)
|
||||||
|
avctx->crf = 23;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define OPT_STR(opt, param) \
|
#define OPT_STR(opt, param) \
|
||||||
do { \
|
do { \
|
||||||
if (param && x264_param_parse(&x4->params, opt, param) < 0) { \
|
if (param && x264_param_parse(&x4->params, opt, param) < 0) { \
|
||||||
@ -274,6 +299,9 @@ static av_cold int X264_init(AVCodecContext *avctx)
|
|||||||
x4->params.rc.f_pb_factor = avctx->b_quant_factor;
|
x4->params.rc.f_pb_factor = avctx->b_quant_factor;
|
||||||
x4->params.analyse.i_chroma_qp_offset = avctx->chromaoffset;
|
x4->params.analyse.i_chroma_qp_offset = avctx->chromaoffset;
|
||||||
|
|
||||||
|
if (!x4->preset)
|
||||||
|
check_default_settings(avctx);
|
||||||
|
|
||||||
if (x4->preset || x4->tune) {
|
if (x4->preset || x4->tune) {
|
||||||
if (x264_param_default_preset(&x4->params, x4->preset, x4->tune) < 0)
|
if (x264_param_default_preset(&x4->params, x4->preset, x4->tune) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user