X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=vpxenc.c;h=8798e69184a612cea1131a411541ba3253d9c8d2;hb=49bf2e2ffec18738b240778c7549820aac174cf4;hp=53ba44e6cb77b9fb7daa58abd29ecf4e6174273a;hpb=dca95791d06edb7ebd4c5897b0e5af3bc00f2af2;p=libvpx diff --git a/vpxenc.c b/vpxenc.c index 53ba44e6c..8798e6918 100644 --- a/vpxenc.c +++ b/vpxenc.c @@ -35,7 +35,7 @@ #if CONFIG_VP8_ENCODER || CONFIG_VP9_ENCODER || CONFIG_VP10_ENCODER #include "vpx/vp8cx.h" #endif -#if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER || CONFIG_VP10_ENCODER +#if CONFIG_VP8_DECODER || CONFIG_VP9_DECODER || CONFIG_VP10_DECODER #include "vpx/vp8dx.h" #endif @@ -382,13 +382,13 @@ static const arg_def_t tile_cols = ARG_DEF( static const arg_def_t tile_rows = ARG_DEF( NULL, "tile-rows", 1, "Number of tile rows to use, log2"); static const arg_def_t lossless = ARG_DEF( - NULL, "lossless", 1, "Lossless mode"); + NULL, "lossless", 1, "Lossless mode (0: false (default), 1: true)"); static const arg_def_t frame_parallel_decoding = ARG_DEF( NULL, "frame-parallel", 1, "Enable frame parallel decodability features"); static const arg_def_t aq_mode = ARG_DEF( NULL, "aq-mode", 1, "Adaptive quantization mode (0: off (default), 1: variance 2: complexity, " - "3: cyclic refresh)"); + "3: cyclic refresh, 4: equator360)"); static const arg_def_t frame_periodic_boost = ARG_DEF( NULL, "frame-boost", 1, "Enable frame periodic boost (0: off (default), 1: on)"); @@ -443,7 +443,9 @@ static const struct arg_enum_list tune_content_enum[] = { static const arg_def_t tune_content = ARG_DEF_ENUM( NULL, "tune-content", 1, "Tune content type", tune_content_enum); +#endif +#if CONFIG_VP9_ENCODER static const arg_def_t *vp9_args[] = { &cpu_used_vp9, &auto_altref, &sharpness, &static_thresh, &tile_cols, &tile_rows, &arnr_maxframes, &arnr_strength, &arnr_type, @@ -469,6 +471,32 @@ static const int vp9_arg_ctrl_map[] = { }; #endif +#if CONFIG_VP10_ENCODER +static const arg_def_t *vp10_args[] = { + &cpu_used_vp9, &auto_altref, &sharpness, &static_thresh, + &tile_cols, &tile_rows, &arnr_maxframes, &arnr_strength, &arnr_type, + &tune_ssim, &cq_level, &max_intra_rate_pct, &max_inter_rate_pct, + &gf_cbr_boost_pct, &lossless, + &frame_parallel_decoding, &aq_mode, &frame_periodic_boost, + &noise_sens, &tune_content, &input_color_space, + &min_gf_interval, &max_gf_interval, + NULL +}; +static const int vp10_arg_ctrl_map[] = { + VP8E_SET_CPUUSED, VP8E_SET_ENABLEAUTOALTREF, + VP8E_SET_SHARPNESS, VP8E_SET_STATIC_THRESHOLD, + VP9E_SET_TILE_COLUMNS, VP9E_SET_TILE_ROWS, + VP8E_SET_ARNR_MAXFRAMES, VP8E_SET_ARNR_STRENGTH, VP8E_SET_ARNR_TYPE, + VP8E_SET_TUNING, VP8E_SET_CQ_LEVEL, VP8E_SET_MAX_INTRA_BITRATE_PCT, + VP9E_SET_MAX_INTER_BITRATE_PCT, VP9E_SET_GF_CBR_BOOST_PCT, + VP9E_SET_LOSSLESS, VP9E_SET_FRAME_PARALLEL_DECODING, VP9E_SET_AQ_MODE, + VP9E_SET_FRAME_PERIODIC_BOOST, VP9E_SET_NOISE_SENSITIVITY, + VP9E_SET_TUNE_CONTENT, VP9E_SET_COLOR_SPACE, + VP9E_SET_MIN_GF_INTERVAL, VP9E_SET_MAX_GF_INTERVAL, + 0 +}; +#endif + static const arg_def_t *no_args[] = { NULL }; void usage_exit(void) { @@ -492,17 +520,13 @@ void usage_exit(void) { fprintf(stderr, "\nVP8 Specific Options:\n"); arg_show_usage(stderr, vp8_args); #endif -#if CONFIG_VP9_ENCODER || CONFIG_VP10_ENCODER - // TODO(yaowu: split vp9 and vp10 option when necessary. - fprintf(stderr, "\n"); - #if CONFIG_VP9_ENCODER - fprintf(stderr, "VP9 "); - #endif - #if CONFIG_VP10_ENCODER - fprintf(stderr, "VP10 "); - #endif - fprintf(stderr, "Specific Options:\n"); +#if CONFIG_VP9_ENCODER + fprintf(stderr, "\nVP9 Specific Options:\n"); arg_show_usage(stderr, vp9_args); +#endif +#if CONFIG_VP10_ENCODER + fprintf(stderr, "\nVP10 Specific Options:\n"); + arg_show_usage(stderr, vp10_args); #endif fprintf(stderr, "\nStream timebase (--timebase):\n" " The desired precision of timestamps in the output, expressed\n" @@ -749,14 +773,12 @@ static int compare_img(const vpx_image_t *const img1, #define NELEMENTS(x) (sizeof(x)/sizeof(x[0])) -#define MAX(x,y) ((x)>(y)?(x):(y)) -#if CONFIG_VP8_ENCODER && !(CONFIG_VP9_ENCODER || CONFIG_VP10_ENCODER) -#define ARG_CTRL_CNT_MAX NELEMENTS(vp8_arg_ctrl_map) -#elif !CONFIG_VP8_ENCODER && (CONFIG_VP9_ENCODER || CONFIG_VP10_ENCODER) +#if CONFIG_VP10_ENCODER +#define ARG_CTRL_CNT_MAX NELEMENTS(vp10_arg_ctrl_map) +#elif CONFIG_VP9_ENCODER #define ARG_CTRL_CNT_MAX NELEMENTS(vp9_arg_ctrl_map) #else -#define ARG_CTRL_CNT_MAX MAX(NELEMENTS(vp8_arg_ctrl_map), \ - NELEMENTS(vp9_arg_ctrl_map)) +#define ARG_CTRL_CNT_MAX NELEMENTS(vp8_arg_ctrl_map) #endif #if !CONFIG_WEBM_IO @@ -1083,8 +1105,8 @@ static int parse_stream_params(struct VpxEncoderConfig *global, } else if (strcmp(global->codec->name, "vp10") == 0) { // TODO(jingning): Reuse VP9 specific encoder configuration parameters. // Consider to expand this set for VP10 encoder control. - ctrl_args = vp9_args; - ctrl_args_map = vp9_arg_ctrl_map; + ctrl_args = vp10_args; + ctrl_args_map = vp10_arg_ctrl_map; #endif } @@ -1974,7 +1996,7 @@ int main(int argc, const char **argv_) { usage_exit(); /* Decide if other chroma subsamplings than 4:2:0 are supported */ - if (global.codec->fourcc == VP9_FOURCC) + if (global.codec->fourcc == VP9_FOURCC || global.codec->fourcc == VP10_FOURCC) input.only_i420 = 0; for (pass = global.pass ? global.pass - 1 : 0; pass < global.passes; pass++) { @@ -2038,9 +2060,11 @@ int main(int argc, const char **argv_) { #if !CONFIG_WEBM_IO FOREACH_STREAM({ - stream->config.write_webm = 0; - warn("vpxenc was compiled without WebM container support." - "Producing IVF output"); + if (stream->config.write_webm) { + stream->config.write_webm = 0; + warn("vpxenc was compiled without WebM container support." + "Producing IVF output"); + } }); #endif @@ -2050,6 +2074,8 @@ int main(int argc, const char **argv_) { if (!global.have_framerate) { global.framerate.num = input.framerate.numerator; global.framerate.den = input.framerate.denominator; + FOREACH_STREAM(stream->config.cfg.g_timebase.den = global.framerate.num; + stream->config.cfg.g_timebase.num = global.framerate.den); } FOREACH_STREAM(set_default_kf_interval(stream, &global));