diff options
author | Tom Finegan <tomfinegan@google.com> | 2016-05-09 15:00:44 -0700 |
---|---|---|
committer | Tom Finegan <tomfinegan@google.com> | 2016-05-11 14:52:34 -0700 |
commit | 7d6edc3ddd607f84991add1cba124b31db518aac (patch) | |
tree | 29743061e91a580f0097a01e20675af0cb7c7c7f | |
parent | ccf4f47b994d4e6ea8e7a3a8f1279d6f03b5b570 (diff) | |
download | libvpx-7d6edc3ddd607f84991add1cba124b31db518aac.tar.gz libvpx-7d6edc3ddd607f84991add1cba124b31db518aac.tar.bz2 libvpx-7d6edc3ddd607f84991add1cba124b31db518aac.zip |
simple_encoder: Add a frame limit argument.
- Add frame limit argument.
- Make all arguments required.
- Enable the VP9 simple encoder test.
Change-Id: I11d228b358ff90c60ea92e02760cb476434ea571
-rw-r--r-- | examples/simple_encoder.c | 22 | ||||
-rwxr-xr-x | test/simple_encoder.sh | 11 |
2 files changed, 17 insertions, 16 deletions
diff --git a/examples/simple_encoder.c b/examples/simple_encoder.c index a30772973..64f0a0137 100644 --- a/examples/simple_encoder.c +++ b/examples/simple_encoder.c @@ -109,8 +109,8 @@ static const char *exec_name; void usage_exit(void) { fprintf(stderr, "Usage: %s <codec> <width> <height> <infile> <outfile> " - "<keyframe-interval> [<error-resilient>]\nSee comments in " - "simple_encoder.c for more information.\n", + "<keyframe-interval> <error-resilient> <frames to encode>\n" + "See comments in simple_encoder.c for more information.\n", exec_name); exit(EXIT_FAILURE); } @@ -147,6 +147,7 @@ static int encode_frame(vpx_codec_ctx_t *codec, return got_pkts; } +// TODO(tomfinegan): Improve command line parsing and add args for bitrate/fps. int main(int argc, char **argv) { FILE *infile = NULL; vpx_codec_ctx_t codec; @@ -157,12 +158,11 @@ int main(int argc, char **argv) { VpxVideoInfo info = {0}; VpxVideoWriter *writer = NULL; const VpxInterface *encoder = NULL; - const int fps = 30; // TODO(dkovalev) add command line argument - const int bitrate = 200; // kbit/s TODO(dkovalev) add command line argument + const int fps = 30; + const int bitrate = 200; int keyframe_interval = 0; - - // TODO(dkovalev): Add some simple command line parsing code to make the - // command line more flexible. + int max_frames = 0; + int frames_encoded = 0; const char *codec_arg = NULL; const char *width_arg = NULL; const char *height_arg = NULL; @@ -172,7 +172,7 @@ int main(int argc, char **argv) { exec_name = argv[0]; - if (argc < 7) + if (argc != 9) die("Invalid number of arguments"); codec_arg = argv[1]; @@ -181,6 +181,7 @@ int main(int argc, char **argv) { infile_arg = argv[4]; outfile_arg = argv[5]; keyframe_interval_arg = argv[6]; + max_frames = strtol(argv[8], NULL, 0); encoder = get_vpx_encoder_by_name(codec_arg); if (!encoder) @@ -219,7 +220,7 @@ int main(int argc, char **argv) { cfg.g_timebase.num = info.time_base.numerator; cfg.g_timebase.den = info.time_base.denominator; cfg.rc_target_bitrate = bitrate; - cfg.g_error_resilient = argc > 7 ? strtol(argv[7], NULL, 0) : 0; + cfg.g_error_resilient = strtol(argv[7], NULL, 0); writer = vpx_video_writer_open(outfile_arg, kContainerIVF, &info); if (!writer) @@ -237,6 +238,9 @@ int main(int argc, char **argv) { if (keyframe_interval > 0 && frame_count % keyframe_interval == 0) flags |= VPX_EFLAG_FORCE_KF; encode_frame(&codec, &raw, frame_count++, flags, writer); + frames_encoded++; + if (max_frames > 0 && frames_encoded >= max_frames) + break; } // Flush encoder. diff --git a/test/simple_encoder.sh b/test/simple_encoder.sh index c4a628030..ee633ae99 100755 --- a/test/simple_encoder.sh +++ b/test/simple_encoder.sh @@ -23,7 +23,7 @@ simple_encoder_verify_environment() { fi } -# Runs simple_encoder using the codec specified by $1. +# Runs simple_encoder using the codec specified by $1 with a frame limit of 100. simple_encoder() { local encoder="${LIBVPX_BIN_PATH}/simple_encoder${VPX_TEST_EXE_SUFFIX}" local codec="$1" @@ -35,7 +35,7 @@ simple_encoder() { fi eval "${VPX_TEST_PREFIX}" "${encoder}" "${codec}" "${YUV_RAW_INPUT_WIDTH}" \ - "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" 9999 \ + "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" 9999 0 100 \ ${devnull} [ -e "${output_file}" ] || return 1 @@ -47,16 +47,13 @@ simple_encoder_vp8() { fi } -# TODO(tomfinegan): Add a frame limit param to simple_encoder and enable this -# test. VP9 is just too slow right now: This test takes 4m30s+ on a fast -# machine. -DISABLED_simple_encoder_vp9() { +simple_encoder_vp9() { if [ "$(vp9_encode_available)" = "yes" ]; then simple_encoder vp9 || return 1 fi } simple_encoder_tests="simple_encoder_vp8 - DISABLED_simple_encoder_vp9" + simple_encoder_vp9" run_tests simple_encoder_verify_environment "${simple_encoder_tests}" |