diff --git a/examples/twopass_encoder.c b/examples/twopass_encoder.c index a1392ca268dc909609aee87ac3b277811d6833b0..161b0ede950aaece4cd2b524394dd943d31938cc 100644 --- a/examples/twopass_encoder.c +++ b/examples/twopass_encoder.c @@ -62,7 +62,7 @@ static const char *exec_name; void usage_exit(void) { fprintf(stderr, "Usage: %s " - "\n", + "\n", exec_name); exit(EXIT_FAILURE); } @@ -123,7 +123,7 @@ static int encode_frame(aom_codec_ctx_t *ctx, const aom_image_t *img, static aom_fixed_buf_t pass0(aom_image_t *raw, FILE *infile, const AvxInterface *encoder, - const aom_codec_enc_cfg_t *cfg, int max_frames) { + const aom_codec_enc_cfg_t *cfg, int limit) { aom_codec_ctx_t codec; int frame_count = 0; aom_fixed_buf_t stats = { NULL, 0 }; @@ -132,11 +132,10 @@ static aom_fixed_buf_t pass0(aom_image_t *raw, FILE *infile, die_codec(&codec, "Failed to initialize encoder"); // Calculate frame statistics. - while (aom_img_read(raw, infile)) { + while (aom_img_read(raw, infile) && frame_count < limit) { ++frame_count; get_frame_stats(&codec, raw, frame_count, 1, 0, AOM_DL_GOOD_QUALITY, &stats); - if (max_frames > 0 && frame_count >= max_frames) break; } // Flush encoder. @@ -152,7 +151,7 @@ static aom_fixed_buf_t pass0(aom_image_t *raw, FILE *infile, static void pass1(aom_image_t *raw, FILE *infile, const char *outfile_name, const AvxInterface *encoder, const aom_codec_enc_cfg_t *cfg, - int max_frames) { + int limit) { AvxVideoInfo info = { encoder->fourcc, cfg->g_w, cfg->g_h, @@ -168,11 +167,9 @@ static void pass1(aom_image_t *raw, FILE *infile, const char *outfile_name, die_codec(&codec, "Failed to initialize encoder"); // Encode frames. - while (aom_img_read(raw, infile)) { + while (aom_img_read(raw, infile) && frame_count < limit) { ++frame_count; encode_frame(&codec, raw, frame_count, 1, 0, AOM_DL_GOOD_QUALITY, writer); - - if (max_frames > 0 && frame_count >= max_frames) break; } // Flush encoder. @@ -205,12 +202,14 @@ int main(int argc, char **argv) { const char *const height_arg = argv[3]; const char *const infile_arg = argv[4]; const char *const outfile_arg = argv[5]; - int max_frames = 0; + int limit = 0; exec_name = argv[0]; - if (argc != 7) die("Invalid number of arguments."); + if (argc < 6) die("Invalid number of arguments"); + + if (argc > 6) limit = strtol(argv[6], NULL, 0); - max_frames = strtol(argv[6], NULL, 0); + if (limit == 0) limit = 100; encoder = get_aom_encoder_by_name(codec_arg); if (!encoder) die("Unsupported codec."); @@ -241,13 +240,13 @@ int main(int argc, char **argv) { // Pass 0 cfg.g_pass = AOM_RC_FIRST_PASS; - stats = pass0(&raw, infile, encoder, &cfg, max_frames); + stats = pass0(&raw, infile, encoder, &cfg, limit); // Pass 1 rewind(infile); cfg.g_pass = AOM_RC_LAST_PASS; cfg.rc_twopass_stats_in = stats; - pass1(&raw, infile, outfile_arg, encoder, &cfg, max_frames); + pass1(&raw, infile, outfile_arg, encoder, &cfg, limit); free(stats.buf); aom_img_free(&raw); diff --git a/test/twopass_encoder.sh b/test/twopass_encoder.sh index 2b202aac7b2fc2911297621d7cf768cdf6172071..b08de86bff6bf529be670bfcef002a260c8bcea2 100755 --- a/test/twopass_encoder.sh +++ b/test/twopass_encoder.sh @@ -29,6 +29,7 @@ twopass_encoder() { local encoder="${LIBAOM_BIN_PATH}/twopass_encoder${AOM_TEST_EXE_SUFFIX}" local codec="$1" local output_file="${AOM_TEST_OUTPUT_DIR}/twopass_encoder_${codec}.ivf" + local limit=7 if [ ! -x "${encoder}" ]; then elog "${encoder} does not exist or is not executable." @@ -36,28 +37,18 @@ twopass_encoder() { fi eval "${AOM_TEST_PREFIX}" "${encoder}" "${codec}" "${YUV_RAW_INPUT_WIDTH}" \ - "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" 100 \ + "${YUV_RAW_INPUT_HEIGHT}" "${YUV_RAW_INPUT}" "${output_file}" "${limit}" \ ${devnull} [ -e "${output_file}" ] || return 1 } -twopass_encoder_aom() { - if [ "$(aom_encode_available)" = "yes" ]; then - twopass_encoder aom || return 1 - fi -} - -# TODO(tomfinegan): Add a frame limit param to twopass_encoder and enable this -# test. AV1 is just too slow right now: This test takes 31m16s+ on a fast -# machine. -DISABLED_twopass_encoder_av1() { +twopass_encoder_av1() { if [ "$(av1_encode_available)" = "yes" ]; then twopass_encoder av1 || return 1 fi } -twopass_encoder_tests="twopass_encoder_aom - DISABLED_twopass_encoder_av1" +twopass_encoder_tests="twopass_encoder_av1" run_tests twopass_encoder_verify_environment "${twopass_encoder_tests}"