diff options
author | Rodeo <[email protected]> | 2014-02-13 15:18:15 +0000 |
---|---|---|
committer | Rodeo <[email protected]> | 2014-02-13 15:18:15 +0000 |
commit | 1a1b1591ef5acd8495dc8e736a47852e93694020 (patch) | |
tree | 7c9cd72eff31ee912ad12fa8c6f16b7d01e40a7a /test | |
parent | 94d470181e290d89f3be93cd13c28f415dd00ab7 (diff) |
libhb: make encoder options less x264-centric.
profile/level control and, to a lesser extent,
encoder presets and tunes are becoming more common.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6031 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'test')
-rw-r--r-- | test/module.defs | 4 | ||||
-rw-r--r-- | test/test.c | 243 |
2 files changed, 102 insertions, 145 deletions
diff --git a/test/module.defs b/test/module.defs index ce60e0d46..bac482b6d 100644 --- a/test/module.defs +++ b/test/module.defs @@ -23,6 +23,10 @@ ifeq (1,$(FEATURE.qsv)) TEST.GCC.D += USE_QSV HAVE_THREADS=1 endif +ifeq (1,$(FEATURE.x265)) + TEST.GCC.D += USE_X265 +endif + TEST.GCC.l += $(foreach m,$(MODULES.NAMES),$($m.OSL.libs)) TEST.install.exe = $(DESTDIR)$(PREFIX/)bin/$(notdir $(TEST.exe)) diff --git a/test/test.c b/test/test.c index c74bf9491..cd414e221 100644 --- a/test/test.c +++ b/test/test.c @@ -145,7 +145,6 @@ static int use_hwd = 0; #ifdef USE_QSV static int qsv_async_depth = -1; static int qsv_decode = 1; -static const char *qsv_preset = NULL; #endif /* Exit cleanly on Ctrl-C */ @@ -172,6 +171,8 @@ static int HandleEvents( hb_handle_t * h ); static void str_vfree( char **strv ); static char** str_split( char *str, char delem ); +static void print_preset_list(FILE *out, const char* const *list, const char *indent); + #ifdef __APPLE_CC__ static char* bsd_name_for_path(char *path); static int device_is_dvd(char *device); @@ -1974,7 +1975,6 @@ static int HandleEvents( hb_handle_t * h ) job->qsv.async_depth = qsv_async_depth; } job->qsv.decode = qsv_decode; - job->qsv.preset = qsv_preset; #endif /* Grab audio tracks */ @@ -2868,10 +2868,10 @@ static int HandleEvents( hb_handle_t * h ) job->color_matrix_code = color_matrix_code; } - hb_job_set_x264_preset(job, x264_preset); - hb_job_set_x264_tune(job, x264_tune); - hb_job_set_h264_profile(job, h264_profile); - hb_job_set_h264_level(job, h264_level); + hb_job_set_encoder_preset (job, x264_preset); + hb_job_set_encoder_tune (job, x264_tune); + hb_job_set_encoder_profile(job, h264_profile); + hb_job_set_encoder_level (job, h264_level); if (maxWidth) job->maxWidth = maxWidth; @@ -2919,7 +2919,7 @@ static int HandleEvents( hb_handle_t * h ) */ job->pass = -1; - hb_job_set_advanced_opts(job, NULL); + hb_job_set_encoder_options(job, NULL); job->indepth_scan = subtitle_scan; fprintf( stderr, "Subtitle Scan Enabled - enabling " @@ -2931,7 +2931,7 @@ static int HandleEvents( hb_handle_t * h ) hb_add( h, job ); } - hb_job_set_advanced_opts(job, advanced_opts); + hb_job_set_encoder_options(job, advanced_opts); if( twoPass ) { @@ -3071,7 +3071,7 @@ void SigHandler( int i_signal ) ****************************************************************************/ static void ShowHelp() { - int i, len; + int i; const char *name; const hb_rate_t *rate; const hb_dither_t *dither; @@ -3079,8 +3079,6 @@ static void ShowHelp() const hb_encoder_t *encoder; const hb_container_t *container; FILE* const out = stdout; - const char * const *x264_opts; - char tmp[80]; fprintf( out, "Syntax: HandBrakeCLI [options] -i <device> -o <file>\n" @@ -3169,139 +3167,64 @@ static void ShowHelp() } } fprintf(out, " (default: %s)\n", name); - fprintf( out, + fprintf(out, " --x264-preset When using x264, selects the x264 preset:\n" " <string> "); - x264_opts = hb_video_encoder_get_presets(HB_VCODEC_X264); - tmp[0] = 0; - len = 0; - while( x264_opts && *x264_opts ) - { - strncat( tmp, *x264_opts++, 79 - len ); - if( *x264_opts ) - strcat( tmp, "/" ); - len = strlen( tmp ); - if( len > 40 && *x264_opts ) - { - fprintf( out, "%s\n ", tmp ); - len = 0; - tmp[0] = 0; - } - } - if( len ) - fprintf( out, "%s\n", tmp ); - fprintf( out, - " --x264-tune When using x264, selects the x264 tuning:\n" + print_preset_list(out, hb_video_encoder_get_presets(HB_VCODEC_X264), + " "); +#ifdef USE_X265 + fprintf(out, + " --x265-preset When using x265, selects the x265 preset:\n" " <string> "); - x264_opts = hb_video_encoder_get_tunes(HB_VCODEC_X264); - tmp[0] = 0; - len = 0; - while( x264_opts && *x264_opts ) - { - strncat( tmp, *x264_opts++, 79 - len ); - if( *x264_opts ) - strcat( tmp, "/" ); - len = strlen( tmp ); - if( len > 40 && *x264_opts ) - { - fprintf( out, "%s\n ", tmp ); - len = 0; - tmp[0] = 0; - } - } - if( len ) - fprintf( out, "%s\n", tmp ); + print_preset_list(out, hb_video_encoder_get_presets(HB_VCODEC_X265), + " "); +#endif #ifdef USE_QSV -if (hb_qsv_available()) -{ - fprintf(out, - " --qsv-preset When using QSV, selects the QSV preset:\n" - " <string> "); - x264_opts = hb_video_encoder_get_presets(HB_VCODEC_QSV_H264); - tmp[0] = 0; - len = 0; - while (x264_opts != NULL && *x264_opts != NULL) - { - strncat(tmp, *x264_opts++, sizeof(tmp) - 1 - len); - if (*x264_opts != NULL) - { - strcat(tmp, "/"); - } - len = strlen(tmp); - if (len > 40 && *x264_opts != NULL) - { - fprintf(out, "%s\n ", tmp); - tmp[0] = 0; - len = 0; - } - } - if (len > 0) + if (hb_qsv_available()) { - fprintf(out, "%s\n", tmp); + fprintf(out, + " --qsv-preset When using QSV, selects the QSV preset:\n" + " <string> "); + print_preset_list(out, hb_video_encoder_get_presets(HB_VCODEC_QSV_H264), + " "); } -} #endif + fprintf( out, + " --x264-tune When using x264, selects the x264 tuning:\n" + " <string> "); + print_preset_list(out, hb_video_encoder_get_tunes(HB_VCODEC_X264), + " "); +#ifdef USE_X265 fprintf(out, - " -x, --encopts <string> Specify advanced encoder options in the\n"); -#ifdef USE_QSV -if (hb_qsv_available()) -{ - fprintf(out, - " same style as mencoder (x264/qsv/ffmpeg only):\n"); -} -else + " --x265-tune When using x265, selects the x265 tuning:\n" + " <string> "); + print_preset_list(out, hb_video_encoder_get_tunes(HB_VCODEC_X265), + " "); #endif -{ - fprintf(out, - " same style as mencoder (x264 and ffmpeg only):\n"); -} - fprintf(out, + " -x, --encopts <string> Specify advanced encoder options in the\n" + " same style as mencoder (all except theora):\n" " option1=value1:option2=value2\n" " --h264-profile When using H.264, ensures compliance with the\n" " <string> specified H.264 profile:\n" " "); - x264_opts = hb_video_encoder_get_profiles(HB_VCODEC_X264); - tmp[0] = 0; - len = 0; - while( x264_opts && *x264_opts ) - { - strncat( tmp, *x264_opts++, 79 - len ); - if( *x264_opts ) - strcat( tmp, "/" ); - len = strlen( tmp ); - if( len > 40 && *x264_opts ) - { - fprintf( out, "%s\n ", tmp ); - len = 0; - tmp[0] = 0; - } - } - if( len ) - fprintf( out, "%s\n", tmp ); - fprintf( out, + print_preset_list(out, hb_video_encoder_get_profiles(HB_VCODEC_X264), + " "); +#ifdef USE_X265 + fprintf(out, + " --h265-profile When using H.265, ensures compliance with the\n" + " <string> specified H.265 profile:\n" + " "); + print_preset_list(out, hb_video_encoder_get_profiles(HB_VCODEC_X265), + " "); +#endif + fprintf(out, " --h264-level When using H.264, ensures compliance with the\n" " <string> specified H.264 level:\n" " "); - x264_opts = hb_video_encoder_get_levels(HB_VCODEC_X264); - tmp[0] = 0; - len = 0; - while( x264_opts && *x264_opts ) - { - strncat( tmp, *x264_opts++, 79 - len ); - if( *x264_opts ) - strcat( tmp, "/" ); - len = strlen( tmp ); - if( len > 40 && *x264_opts ) - { - fprintf( out, "%s\n ", tmp ); - len = 0; - tmp[0] = 0; - } - } - if( len ) - fprintf( out, "%s\n", tmp ); - fprintf( out, + print_preset_list(out, hb_video_encoder_get_levels(HB_VCODEC_X264), + " "); + fprintf(out, " -q, --quality <number> Set video quality\n" " -b, --vb <kb/s> Set video bitrate (default: 1000)\n" " -2, --two-pass Use two-pass mode\n" @@ -3755,16 +3678,15 @@ static int ParseOptions( int argc, char ** argv ) #define ALLOWED_AUDIO_COPY 280 #define AUDIO_FALLBACK 281 #define LOOSE_CROP 282 - #define X264_PRESET 283 - #define X264_TUNE 284 - #define H264_PROFILE 285 - #define H264_LEVEL 286 + #define ENCODER_PRESET 283 + #define ENCODER_TUNE 284 + #define ENCODER_PROFILE 285 + #define ENCODER_LEVEL 286 #define NO_OPENCL 287 #define NORMALIZE_MIX 288 #define AUDIO_DITHER 289 #define QSV_BASELINE 290 #define QSV_ASYNC_DEPTH 291 - #define QSV_PRESET 292 for( ;; ) { @@ -3777,7 +3699,7 @@ static int ParseOptions( int argc, char ** argv ) { "no-opencl", no_argument, NULL, NO_OPENCL }, #ifdef USE_QSV - { "qsv-preset", required_argument, NULL, QSV_PRESET, }, + { "qsv-preset", required_argument, NULL, ENCODER_PRESET, }, { "qsv-baseline", no_argument, NULL, QSV_BASELINE, }, { "qsv-async-depth", required_argument, NULL, QSV_ASYNC_DEPTH, }, { "disable-qsv-decoding", no_argument, &qsv_decode, 0, }, @@ -3846,12 +3768,18 @@ static int ParseOptions( int argc, char ** argv ) { "ac", required_argument, NULL, 'C' }, { "rate", required_argument, NULL, 'r' }, { "arate", required_argument, NULL, 'R' }, - { "x264-preset", required_argument, NULL, X264_PRESET }, - { "x264-tune", required_argument, NULL, X264_TUNE }, + { "x264-preset", required_argument, NULL, ENCODER_PRESET }, + { "x264-tune", required_argument, NULL, ENCODER_TUNE }, { "encopts", required_argument, NULL, 'x' }, - { "x264-profile", required_argument, NULL, H264_PROFILE }, - { "h264-profile", required_argument, NULL, H264_PROFILE }, - { "h264-level", required_argument, NULL, H264_LEVEL }, + { "x264-profile", required_argument, NULL, ENCODER_PROFILE }, + { "h264-profile", required_argument, NULL, ENCODER_PROFILE }, + { "h264-level", required_argument, NULL, ENCODER_LEVEL }, +#ifdef USE_X265 + { "x265-preset", required_argument, NULL, ENCODER_PRESET }, + { "x265-tune", required_argument, NULL, ENCODER_TUNE }, + { "h265-profile", required_argument, NULL, ENCODER_PROFILE }, + { "h265-level", required_argument, NULL, ENCODER_LEVEL }, +#endif { "turbo", no_argument, NULL, 'T' }, { "maxHeight", required_argument, NULL, 'Y' }, { "maxWidth", required_argument, NULL, 'X' }, @@ -4279,19 +4207,19 @@ static int ParseOptions( int argc, char ** argv ) case 'C': acompressions = str_split( optarg, ',' ); break; - case X264_PRESET: + case ENCODER_PRESET: x264_preset = strdup( optarg ); break; - case X264_TUNE: + case ENCODER_TUNE: x264_tune = strdup( optarg ); break; case 'x': advanced_opts = strdup( optarg ); break; - case H264_PROFILE: + case ENCODER_PROFILE: h264_profile = strdup( optarg ); break; - case H264_LEVEL: + case ENCODER_LEVEL: h264_level = strdup( optarg ); break; case 'T': @@ -4424,9 +4352,6 @@ static int ParseOptions( int argc, char ** argv ) case QSV_ASYNC_DEPTH: qsv_async_depth = atoi(optarg); break; - case QSV_PRESET: - qsv_preset = strdup(optarg); - break; #endif default: fprintf( stderr, "unknown option (%s)\n", argv[cur_optind] ); @@ -4508,6 +4433,34 @@ static int CheckOptions( int argc, char ** argv ) return 0; } +static void print_preset_list(FILE *out, const char* const *list, const char *indent) +{ + if (out != NULL && list != NULL && indent != NULL) + { + int len = 0; + char tmp[80]; + tmp[0] = '\0'; + while (list != NULL && *list != NULL) + { + strncat(tmp, *list++, sizeof(tmp) - 1 - len); + if (*list != NULL) + { + strcat(tmp, "/"); + } + if ((len = strlen(tmp)) > 40 && *list != NULL) + { + fprintf(out, "%s\n%s", tmp, indent); + tmp[0] = '\0'; + len = 0; + } + } + if (len) + { + fprintf(out, "%s\n", tmp); + } + } +} + #ifdef __APPLE_CC__ /**************************************************************************** * bsd_name_for_path |