2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
11 #ifndef AOM_TEST_WEBM_VIDEO_SOURCE_H_
12 #define AOM_TEST_WEBM_VIDEO_SOURCE_H_
18 #include "common/tools_common.h"
19 #include "common/webmdec.h"
20 #include "test/video_source.h"
22 namespace libaom_test
{
24 // This class extends VideoSource to allow parsing of WebM files,
25 // so that we can do actual file decodes.
26 class WebMVideoSource
: public CompressedVideoSource
{
28 explicit WebMVideoSource(const std::string
&file_name
)
29 : file_name_(file_name
), aom_ctx_(new AvxInputContext()),
30 webm_ctx_(new WebmInputContext()), buf_(NULL
), buf_sz_(0), frame_sz_(0),
31 frame_number_(0), end_of_file_(false) {}
33 virtual ~WebMVideoSource() {
34 if (aom_ctx_
->file
!= NULL
) fclose(aom_ctx_
->file
);
41 ASSERT_NE(aom_ctx_
, nullptr);
42 ASSERT_NE(webm_ctx_
, nullptr);
45 virtual void Begin() {
46 ASSERT_NE(aom_ctx_
, nullptr);
47 ASSERT_NE(webm_ctx_
, nullptr);
48 aom_ctx_
->file
= OpenTestDataFile(file_name_
);
49 ASSERT_TRUE(aom_ctx_
->file
!= NULL
)
50 << "Input file open failed. Filename: " << file_name_
;
52 ASSERT_EQ(file_is_webm(webm_ctx_
, aom_ctx_
), 1) << "file is not WebM";
63 ASSERT_NE(aom_ctx_
, nullptr);
64 ASSERT_NE(webm_ctx_
, nullptr);
65 ASSERT_TRUE(aom_ctx_
->file
!= NULL
);
66 const int status
= webm_read_frame(webm_ctx_
, &buf_
, &frame_sz_
, &buf_sz_
);
67 ASSERT_GE(status
, 0) << "webm_read_frame failed";
73 void SeekToNextKeyFrame() {
74 ASSERT_NE(aom_ctx_
, nullptr);
75 ASSERT_NE(webm_ctx_
, nullptr);
76 ASSERT_TRUE(aom_ctx_
->file
!= NULL
);
79 webm_read_frame(webm_ctx_
, &buf_
, &frame_sz_
, &buf_sz_
);
80 ASSERT_GE(status
, 0) << "webm_read_frame failed";
85 } while (!webm_ctx_
->is_key_frame
&& !end_of_file_
);
88 virtual const uint8_t *cxdata() const { return end_of_file_
? NULL
: buf_
; }
89 virtual size_t frame_size() const { return frame_sz_
; }
90 virtual unsigned int frame_number() const { return frame_number_
; }
93 std::string file_name_
;
94 AvxInputContext
*aom_ctx_
;
95 WebmInputContext
*webm_ctx_
;
96 uint8_t *buf_
; // Owned by webm_ctx_ and freed when webm_ctx_ is freed.
99 unsigned int frame_number_
;
103 } // namespace libaom_test
105 #endif // AOM_TEST_WEBM_VIDEO_SOURCE_H_