From 866447a008e9dc6aa0b9ca98cdf6ea05e599e0f5 Mon Sep 17 00:00:00 2001 From: Vignesh Venkatasubramanian Date: Fri, 3 Apr 2015 15:45:14 -0700 Subject: [PATCH] webmdec: Fix for reaching eof in webm_guess_framerate Reset the reached_eos flag in webm_guess_framerate in case it ends up consuming the entire file. Also adding a vpxdec shell test to verify this behavior. Change-Id: I371eebd2105231dc0f60e65da1f71b233ad14be5 --- test/tools_common.sh | 1 + test/vpxdec.sh | 17 +++++++++++++++-- webmdec.cc | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/test/tools_common.sh b/test/tools_common.sh index 34c15168a..0ae011e9e 100755 --- a/test/tools_common.sh +++ b/test/tools_common.sh @@ -402,6 +402,7 @@ VP9_IVF_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-09-subpixel-00.ivf" VP9_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-00-quantizer-00.webm" VP9_FPM_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-07-frame_parallel-1.webm" +VP9_LT_50_FRAMES_WEBM_FILE="${LIBVPX_TEST_DATA_PATH}/vp90-2-02-size-32x08.webm" YUV_RAW_INPUT="${LIBVPX_TEST_DATA_PATH}/hantro_collage_w352h288.yuv" YUV_RAW_INPUT_WIDTH=352 diff --git a/test/vpxdec.sh b/test/vpxdec.sh index d73a447ee..2f23ca7c1 100755 --- a/test/vpxdec.sh +++ b/test/vpxdec.sh @@ -17,7 +17,8 @@ # Environment check: Make sure input is available. vpxdec_verify_environment() { if [ ! -e "${VP8_IVF_FILE}" ] || [ ! -e "${VP9_WEBM_FILE}" ] || \ - [ ! -e "${VP9_FPM_WEBM_FILE}" ] ; then + [ ! -e "${VP9_FPM_WEBM_FILE}" ] || \ + [ ! -e "${VP9_LT_50_FRAMES_WEBM_FILE}" ] ; then elog "Libvpx test data must exist in LIBVPX_TEST_DATA_PATH." return 1 fi @@ -87,12 +88,24 @@ vpxdec_vp9_webm_frame_parallel() { --frame-parallel done fi +} +vpxdec_vp9_webm_less_than_50_frames() { + # ensure that reaching eof in webm_guess_framerate doesn't result in invalid + # frames in actual webm_read_frame calls. + if [ "$(vpxdec_can_decode_vp9)" = "yes" ] && \ + [ "$(webm_io_available)" = "yes" ]; then + local readonly decoder="$(vpx_tool_path vpxdec)" + eval "${VPX_TEST_PREFIX}" "${decoder}" "${VP9_LT_50_FRAMES_WEBM_FILE}" \ + --summary --noblit 2>&1 \ + | awk '{ exit $1 != 10; }' + fi } vpxdec_tests="vpxdec_vp8_ivf vpxdec_vp8_ivf_pipe_input vpxdec_vp9_webm - vpxdec_vp9_webm_frame_parallel" + vpxdec_vp9_webm_frame_parallel + vpxdec_vp9_webm_less_than_50_frames" run_tests vpxdec_verify_environment "${vpxdec_tests}" diff --git a/webmdec.cc b/webmdec.cc index 60b01ad4b..e152f5ee0 100644 --- a/webmdec.cc +++ b/webmdec.cc @@ -219,6 +219,7 @@ int webm_guess_framerate(struct WebmInputContext *webm_ctx, webm_ctx->block_entry = NULL; webm_ctx->block_frame_index = 0; webm_ctx->timestamp_ns = 0; + webm_ctx->reached_eos = 0; return 0; }