hadamard: Add 4x4 test.
[aom.git] / test / webm_video_source.h
blob7b85e6741f2a70f217a9ad098a6b73d373e5091a
1 /*
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_
13 #include <cstdarg>
14 #include <cstdio>
15 #include <cstdlib>
16 #include <new>
17 #include <string>
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 {
27 public:
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);
35 webm_free(webm_ctx_);
36 delete aom_ctx_;
37 delete webm_ctx_;
40 virtual void Init() {
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";
54 FillFrame();
57 virtual void Next() {
58 ++frame_number_;
59 FillFrame();
62 void FillFrame() {
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";
68 if (status == 1) {
69 end_of_file_ = true;
73 void SeekToNextKeyFrame() {
74 ASSERT_NE(aom_ctx_, nullptr);
75 ASSERT_NE(webm_ctx_, nullptr);
76 ASSERT_TRUE(aom_ctx_->file != NULL);
77 do {
78 const int status =
79 webm_read_frame(webm_ctx_, &buf_, &frame_sz_, &buf_sz_);
80 ASSERT_GE(status, 0) << "webm_read_frame failed";
81 ++frame_number_;
82 if (status == 1) {
83 end_of_file_ = true;
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_; }
92 protected:
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.
97 size_t buf_sz_;
98 size_t frame_sz_;
99 unsigned int frame_number_;
100 bool end_of_file_;
103 } // namespace libaom_test
105 #endif // AOM_TEST_WEBM_VIDEO_SOURCE_H_