|
|
|
@@ -19,6 +19,7 @@ |
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
|
|
*/ |
|
|
|
|
|
|
|
#include "libavutil/eval.h" |
|
|
|
#include "libavutil/internal.h" |
|
|
|
#include "libavutil/opt.h" |
|
|
|
#include "libavutil/mem.h" |
|
|
|
@@ -426,6 +427,28 @@ static av_cold int X264_init(AVCodecContext *avctx) |
|
|
|
x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */ |
|
|
|
if (avctx->refs >= 0) |
|
|
|
x4->params.i_frame_reference = avctx->refs; |
|
|
|
else if (x4->level) { |
|
|
|
int i; |
|
|
|
int mbn = FF_CEIL_RSHIFT(avctx->width, 4) * FF_CEIL_RSHIFT(avctx->height, 4); |
|
|
|
int level_id = -1; |
|
|
|
char *tail; |
|
|
|
int scale = X264_BUILD < 129 ? 384 : 1; |
|
|
|
|
|
|
|
if (!strcmp(x4->level, "1b")) { |
|
|
|
level_id = 9; |
|
|
|
} else if (strlen(x4->level) <= 3){ |
|
|
|
level_id = av_strtod(x4->level, &tail) * 10 + 0.5; |
|
|
|
if (*tail) |
|
|
|
level_id = -1; |
|
|
|
} |
|
|
|
if (level_id <= 0) |
|
|
|
av_log(avctx, AV_LOG_WARNING, "Failed to parse level\n"); |
|
|
|
|
|
|
|
for (i = 0; i<x264_levels[i].level_idc; i++) |
|
|
|
if (x264_levels[i].level_idc == level_id) |
|
|
|
x4->params.i_frame_reference = av_clip(x264_levels[i].dpb / mbn / scale, 1, x4->params.i_frame_reference); |
|
|
|
} |
|
|
|
|
|
|
|
if (avctx->trellis >= 0) |
|
|
|
x4->params.analyse.i_trellis = avctx->trellis; |
|
|
|
if (avctx->me_range >= 0) |
|
|
|
|