Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: source/libvpx/test/video_source.h

Issue 394353005: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/test/test_vectors.cc ('k') | source/libvpx/test/vp9_subtract_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #ifndef TEST_VIDEO_SOURCE_H_ 10 #ifndef TEST_VIDEO_SOURCE_H_
11 #define TEST_VIDEO_SOURCE_H_ 11 #define TEST_VIDEO_SOURCE_H_
12 12
13 #if defined(_WIN32)
14 #include <windows.h>
15 #endif
13 #include <cstdio> 16 #include <cstdio>
14 #include <cstdlib> 17 #include <cstdlib>
15 #include <string> 18 #include <string>
16 #include "test/acm_random.h" 19 #include "test/acm_random.h"
17 #include "vpx/vpx_encoder.h" 20 #include "vpx/vpx_encoder.h"
18 21
19 namespace libvpx_test { 22 namespace libvpx_test {
20 23
21 // Helper macros to ensure LIBVPX_TEST_DATA_PATH is a quoted string. 24 // Helper macros to ensure LIBVPX_TEST_DATA_PATH is a quoted string.
22 // These are undefined right below GetDataPath 25 // These are undefined right below GetDataPath
(...skipping 25 matching lines...) Expand all
48 static FILE *OpenTestDataFile(const std::string& file_name) { 51 static FILE *OpenTestDataFile(const std::string& file_name) {
49 const std::string path_to_source = GetDataPath() + "/" + file_name; 52 const std::string path_to_source = GetDataPath() + "/" + file_name;
50 return fopen(path_to_source.c_str(), "rb"); 53 return fopen(path_to_source.c_str(), "rb");
51 } 54 }
52 55
53 static FILE *OpenTestOutFile(const std::string& file_name) { 56 static FILE *OpenTestOutFile(const std::string& file_name) {
54 const std::string path_to_source = GetDataPath() + "/" + file_name; 57 const std::string path_to_source = GetDataPath() + "/" + file_name;
55 return fopen(path_to_source.c_str(), "wb"); 58 return fopen(path_to_source.c_str(), "wb");
56 } 59 }
57 60
58 static FILE *OpenTempOutFile() { 61 static std::string GetTempOutFilename() {
59 return tmpfile(); 62 std::string basename;
63 #if defined(_WIN32)
64 char fname[MAX_PATH];
65 // Assume for now that the filename generated is unique per process
66 const UINT ret = GetTempFileNameA(
67 GetDataPath().c_str(), "lvx", 0, fname);
68 if (ret != 0) {
69 const char *slash = strrchr(fname, '\\');
70 if (slash == NULL) slash = strrchr(fname, '/');
71 if (slash == NULL)
72 basename.assign(fname);
73 else
74 basename.assign(slash + 1);
75 } else {
76 basename.clear();
77 }
78 #else
79 char fname[256];
80 const std::string templ = GetDataPath() + "/libvpx_test_XXXXXX";
81 strncpy(fname, templ.c_str(), templ.size());
82 fname[templ.size()] = '\0';
83 const int fd = mkstemp(fname);
84 if (fd != -1) {
85 close(fd);
86 basename.assign(strrchr(fname, '/') + 1);
87 } else {
88 basename.clear();
89 }
90 #endif
91 return basename;
60 } 92 }
61 93
94 class TempOutFile {
95 public:
96 TempOutFile() {
97 file_name_ = GetTempOutFilename();
98 file_ = OpenTestOutFile(file_name_);
99 }
100 ~TempOutFile() {
101 CloseFile();
102 if (!file_name_.empty()) {
103 const std::string path_to_source = GetDataPath() + "/" + file_name_;
104 EXPECT_EQ(0, remove(path_to_source.c_str()));
105 }
106 }
107 FILE *file() {
108 return file_;
109 }
110 const std::string& file_name() {
111 return file_name_;
112 }
113 void CloseFile() {
114 if (file_) {
115 fclose(file_);
116 file_ = NULL;
117 }
118 }
119
120 protected:
121 FILE *file_;
122 std::string file_name_;
123 };
124
62 // Abstract base class for test video sources, which provide a stream of 125 // Abstract base class for test video sources, which provide a stream of
63 // vpx_image_t images with associated timestamps and duration. 126 // vpx_image_t images with associated timestamps and duration.
64 class VideoSource { 127 class VideoSource {
65 public: 128 public:
66 virtual ~VideoSource() {} 129 virtual ~VideoSource() {}
67 130
68 // Prepare the stream for reading, rewind/open as necessary. 131 // Prepare the stream for reading, rewind/open as necessary.
69 virtual void Begin() = 0; 132 virtual void Begin() = 0;
70 133
71 // Advance the cursor to the next frame 134 // Advance the cursor to the next frame
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 183
121 virtual vpx_rational_t timebase() const { 184 virtual vpx_rational_t timebase() const {
122 const vpx_rational_t t = {1, 30}; 185 const vpx_rational_t t = {1, 30};
123 return t; 186 return t;
124 } 187 }
125 188
126 virtual unsigned int frame() const { return frame_; } 189 virtual unsigned int frame() const { return frame_; }
127 190
128 virtual unsigned int limit() const { return limit_; } 191 virtual unsigned int limit() const { return limit_; }
129 192
193 void set_limit(unsigned int limit) {
194 limit_ = limit;
195 }
196
130 void SetSize(unsigned int width, unsigned int height) { 197 void SetSize(unsigned int width, unsigned int height) {
131 if (width != width_ || height != height_) { 198 if (width != width_ || height != height_) {
132 vpx_img_free(img_); 199 vpx_img_free(img_);
133 raw_sz_ = ((width + 31)&~31) * height * 3 / 2; 200 raw_sz_ = ((width + 31)&~31) * height * 3 / 2;
134 img_ = vpx_img_alloc(NULL, VPX_IMG_FMT_I420, width, height, 32); 201 img_ = vpx_img_alloc(NULL, VPX_IMG_FMT_I420, width, height, 32);
135 width_ = width; 202 width_ = width;
136 height_ = height; 203 height_ = height;
137 } 204 }
138 } 205 }
139 206
140 protected: 207 protected:
141 virtual void FillFrame() { memset(img_->img_data, 0, raw_sz_); } 208 virtual void FillFrame() { if (img_) memset(img_->img_data, 0, raw_sz_); }
142 209
143 vpx_image_t *img_; 210 vpx_image_t *img_;
144 size_t raw_sz_; 211 size_t raw_sz_;
145 unsigned int limit_; 212 unsigned int limit_;
146 unsigned int frame_; 213 unsigned int frame_;
147 unsigned int width_; 214 unsigned int width_;
148 unsigned int height_; 215 unsigned int height_;
149 }; 216 };
150 217
151 218
152 class RandomVideoSource : public DummyVideoSource { 219 class RandomVideoSource : public DummyVideoSource {
153 public: 220 public:
154 RandomVideoSource(int seed = ACMRandom::DeterministicSeed()) 221 RandomVideoSource(int seed = ACMRandom::DeterministicSeed())
155 : rnd_(seed), 222 : rnd_(seed),
156 seed_(seed) { } 223 seed_(seed) { }
157 224
158 protected: 225 protected:
159 // Reset the RNG to get a matching stream for the second pass 226 // Reset the RNG to get a matching stream for the second pass
160 virtual void Begin() { 227 virtual void Begin() {
161 frame_ = 0; 228 frame_ = 0;
162 rnd_.Reset(seed_); 229 rnd_.Reset(seed_);
163 FillFrame(); 230 FillFrame();
164 } 231 }
165 232
166 // 15 frames of noise, followed by 15 static frames. Reset to 0 rather 233 // 15 frames of noise, followed by 15 static frames. Reset to 0 rather
167 // than holding previous frames to encourage keyframes to be thrown. 234 // than holding previous frames to encourage keyframes to be thrown.
168 virtual void FillFrame() { 235 virtual void FillFrame() {
169 if (frame_ % 30 < 15) 236 if (img_) {
170 for (size_t i = 0; i < raw_sz_; ++i) 237 if (frame_ % 30 < 15)
171 img_->img_data[i] = rnd_.Rand8(); 238 for (size_t i = 0; i < raw_sz_; ++i)
172 else 239 img_->img_data[i] = rnd_.Rand8();
173 memset(img_->img_data, 0, raw_sz_); 240 else
241 memset(img_->img_data, 0, raw_sz_);
242 }
174 } 243 }
175 244
176 ACMRandom rnd_; 245 ACMRandom rnd_;
177 int seed_; 246 int seed_;
178 }; 247 };
179 248
180 // Abstract base class for test video sources, which provide a stream of 249 // Abstract base class for test video sources, which provide a stream of
181 // decompressed images to the decoder. 250 // decompressed images to the decoder.
182 class CompressedVideoSource { 251 class CompressedVideoSource {
183 public: 252 public:
(...skipping 10 matching lines...) Expand all
194 virtual const uint8_t *cxdata() const = 0; 263 virtual const uint8_t *cxdata() const = 0;
195 264
196 virtual size_t frame_size() const = 0; 265 virtual size_t frame_size() const = 0;
197 266
198 virtual unsigned int frame_number() const = 0; 267 virtual unsigned int frame_number() const = 0;
199 }; 268 };
200 269
201 } // namespace libvpx_test 270 } // namespace libvpx_test
202 271
203 #endif // TEST_VIDEO_SOURCE_H_ 272 #endif // TEST_VIDEO_SOURCE_H_
OLDNEW
« no previous file with comments | « source/libvpx/test/test_vectors.cc ('k') | source/libvpx/test/vp9_subtract_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698