summaryrefslogtreecommitdiff
path: root/vpxdec.c
diff options
context:
space:
mode:
authorJohn Koleszar <jkoleszar@google.com>2013-06-11 16:29:08 -0700
committerJohn Koleszar <jkoleszar@google.com>2013-06-11 16:29:28 -0700
commitd0ed677a34d4778d96ee4c31d04e153b52f14394 (patch)
treeff2a9c10f996a4b65a98583fe0f87a17c0c728ea /vpxdec.c
parent76e0c95dd93d6ecddb43969a3124e70d3a4c2dbc (diff)
parenta43bdcd7b021d7aa091a516ac313930b3d28fe6e (diff)
downloadlibvpx-d0ed677a34d4778d96ee4c31d04e153b52f14394.tar
libvpx-d0ed677a34d4778d96ee4c31d04e153b52f14394.tar.gz
libvpx-d0ed677a34d4778d96ee4c31d04e153b52f14394.tar.bz2
libvpx-d0ed677a34d4778d96ee4c31d04e153b52f14394.zip
Merge branch 'master' into experimental
Change-Id: Ie648398b82f7311143709f55c0e30ba452f50eff
Diffstat (limited to 'vpxdec.c')
-rw-r--r--vpxdec.c49
1 files changed, 31 insertions, 18 deletions
diff --git a/vpxdec.c b/vpxdec.c
index 9ae868f29..deb45d359 100644
--- a/vpxdec.c
+++ b/vpxdec.c
@@ -715,6 +715,7 @@ int main(int argc, const char **argv_) {
int do_scale = 0;
int stream_w = 0, stream_h = 0;
vpx_image_t *scaled_img = NULL;
+ int frame_avail, got_data;
/* Parse command line */
exec_name = argv_[0];
@@ -982,30 +983,50 @@ int main(int argc, const char **argv_) {
arg_skip--;
}
+ frame_avail = 1;
+ got_data = 0;
+
/* Decode file */
- while (!read_frame(&input, &buf, &buf_sz, &buf_alloc_sz)) {
+ while (frame_avail || got_data) {
vpx_codec_iter_t iter = NULL;
vpx_image_t *img;
struct vpx_usec_timer timer;
int corrupted;
- vpx_usec_timer_start(&timer);
+ frame_avail = 0;
+ if (!stop_after || frame_in < stop_after) {
+ if(!read_frame(&input, &buf, &buf_sz, &buf_alloc_sz)) {
+ frame_avail = 1;
+ frame_in++;
- if (vpx_codec_decode(&decoder, buf, (unsigned int)buf_sz, NULL, 0)) {
- const char *detail = vpx_codec_error_detail(&decoder);
- fprintf(stderr, "Failed to decode frame: %s\n", vpx_codec_error(&decoder));
+ vpx_usec_timer_start(&timer);
- if (detail)
- fprintf(stderr, " Additional information: %s\n", detail);
+ if (vpx_codec_decode(&decoder, buf, (unsigned int)buf_sz, NULL, 0)) {
+ const char *detail = vpx_codec_error_detail(&decoder);
+ fprintf(stderr, "Failed to decode frame: %s\n",
+ vpx_codec_error(&decoder));
- goto fail;
+ if (detail)
+ fprintf(stderr, " Additional information: %s\n", detail);
+ goto fail;
+ }
+
+ vpx_usec_timer_mark(&timer);
+ dx_time += (unsigned int)vpx_usec_timer_elapsed(&timer);
+ }
+ }
+
+ vpx_usec_timer_start(&timer);
+
+ got_data = 0;
+ if ((img = vpx_codec_get_frame(&decoder, &iter))) {
+ ++frame_out;
+ got_data = 1;
}
vpx_usec_timer_mark(&timer);
dx_time += (unsigned int)vpx_usec_timer_elapsed(&timer);
- ++frame_in;
-
if (vpx_codec_control(&decoder, VP8D_GET_FRAME_CORRUPTED, &corrupted)) {
fprintf(stderr, "Failed VP8_GET_FRAME_CORRUPTED: %s\n",
vpx_codec_error(&decoder));
@@ -1013,14 +1034,6 @@ int main(int argc, const char **argv_) {
}
frames_corrupted += corrupted;
- vpx_usec_timer_start(&timer);
-
- if ((img = vpx_codec_get_frame(&decoder, &iter)))
- ++frame_out;
-
- vpx_usec_timer_mark(&timer);
- dx_time += (unsigned int)vpx_usec_timer_elapsed(&timer);
-
if (progress)
show_progress(frame_in, frame_out, dx_time);