summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorTom Finegan <tomfinegan@google.com>2016-05-09 15:00:44 -0700
committerTom Finegan <tomfinegan@google.com>2016-05-11 14:52:34 -0700
commit7d6edc3ddd607f84991add1cba124b31db518aac (patch)
tree29743061e91a580f0097a01e20675af0cb7c7c7f /examples
parentccf4f47b994d4e6ea8e7a3a8f1279d6f03b5b570 (diff)
downloadlibvpx-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
Diffstat (limited to 'examples')
-rw-r--r--examples/simple_encoder.c22
1 files changed, 13 insertions, 9 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.