diff options
author | John Koleszar <jkoleszar@google.com> | 2013-06-11 16:29:08 -0700 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2013-06-11 16:29:28 -0700 |
commit | d0ed677a34d4778d96ee4c31d04e153b52f14394 (patch) | |
tree | ff2a9c10f996a4b65a98583fe0f87a17c0c728ea /vpxdec.c | |
parent | 76e0c95dd93d6ecddb43969a3124e70d3a4c2dbc (diff) | |
parent | a43bdcd7b021d7aa091a516ac313930b3d28fe6e (diff) | |
download | libvpx-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.c | 49 |
1 files changed, 31 insertions, 18 deletions
@@ -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); |