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

Side by Side Diff: webrtc/common_video/libyuv/libyuv_unittest.cc

Issue 2362683002: New helper function test::ReadI420Buffer, refactor FrameReader to use it. (Closed)
Patch Set: Another try to fix the 64-bit windows build. Created 4 years, 2 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
« no previous file with comments | « no previous file | webrtc/modules/video_coding/codecs/test/videoprocessor.h » ('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 WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC 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 10
11 #include <math.h> 11 #include <math.h>
12 #include <string.h> 12 #include <string.h>
13 13
14 #include <memory> 14 #include <memory>
15 15
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" 17 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
18 #include "webrtc/test/frame_utils.h"
18 #include "webrtc/test/testsupport/fileutils.h" 19 #include "webrtc/test/testsupport/fileutils.h"
19 #include "webrtc/video_frame.h" 20 #include "webrtc/video_frame.h"
20 21
21 namespace webrtc { 22 namespace webrtc {
22 23
23 namespace { 24 namespace {
24 void Calc16ByteAlignedStride(int width, int* stride_y, int* stride_uv) { 25 void Calc16ByteAlignedStride(int width, int* stride_y, int* stride_uv) {
25 *stride_y = 16 * ((width + 15) / 16); 26 *stride_y = 16 * ((width + 15) / 16);
26 *stride_uv = 16 * ((width + 31) / 32); 27 *stride_uv = 16 * ((width + 31) / 32);
27 } 28 }
28 29
29 } // Anonymous namespace 30 } // Anonymous namespace
30 31
31 class TestLibYuv : public ::testing::Test { 32 class TestLibYuv : public ::testing::Test {
32 protected: 33 protected:
33 TestLibYuv(); 34 TestLibYuv();
34 virtual void SetUp(); 35 virtual void SetUp();
35 virtual void TearDown(); 36 virtual void TearDown();
36 37
37 FILE* source_file_; 38 FILE* source_file_;
38 VideoFrame orig_frame_; 39 std::unique_ptr<VideoFrame> orig_frame_;
39 std::unique_ptr<uint8_t[]> orig_buffer_;
40 const int width_; 40 const int width_;
41 const int height_; 41 const int height_;
42 const int size_y_; 42 const int size_y_;
43 const int size_uv_; 43 const int size_uv_;
44 const size_t frame_length_; 44 const size_t frame_length_;
45 }; 45 };
46 46
47 TestLibYuv::TestLibYuv() 47 TestLibYuv::TestLibYuv()
48 : source_file_(NULL), 48 : source_file_(NULL),
49 orig_frame_(), 49 orig_frame_(),
50 width_(352), 50 width_(352),
51 height_(288), 51 height_(288),
52 size_y_(width_ * height_), 52 size_y_(width_ * height_),
53 size_uv_(((width_ + 1) / 2) * ((height_ + 1) / 2)), 53 size_uv_(((width_ + 1) / 2) * ((height_ + 1) / 2)),
54 frame_length_(CalcBufferSize(kI420, 352, 288)) { 54 frame_length_(CalcBufferSize(kI420, 352, 288)) {}
55 orig_buffer_.reset(new uint8_t[frame_length_]);
56 }
57 55
58 void TestLibYuv::SetUp() { 56 void TestLibYuv::SetUp() {
59 const std::string input_file_name = webrtc::test::ResourcePath("foreman_cif", 57 const std::string input_file_name = webrtc::test::ResourcePath("foreman_cif",
60 "yuv"); 58 "yuv");
61 source_file_ = fopen(input_file_name.c_str(), "rb"); 59 source_file_ = fopen(input_file_name.c_str(), "rb");
62 ASSERT_TRUE(source_file_ != NULL) << "Cannot read file: "<< 60 ASSERT_TRUE(source_file_ != NULL) << "Cannot read file: "<<
63 input_file_name << "\n"; 61 input_file_name << "\n";
64 62
65 EXPECT_EQ(frame_length_, 63 rtc::scoped_refptr<VideoFrameBuffer> buffer(
66 fread(orig_buffer_.get(), 1, frame_length_, source_file_)); 64 test::ReadI420Buffer(width_, height_, source_file_));
67 orig_frame_.CreateFrame(orig_buffer_.get(), 65
68 orig_buffer_.get() + size_y_, 66 orig_frame_.reset(new VideoFrame(buffer, kVideoRotation_0, 0));
69 orig_buffer_.get() +
70 size_y_ + size_uv_,
71 width_, height_,
72 width_, (width_ + 1) / 2,
73 (width_ + 1) / 2,
74 kVideoRotation_0);
75 } 67 }
76 68
77 void TestLibYuv::TearDown() { 69 void TestLibYuv::TearDown() {
78 if (source_file_ != NULL) { 70 if (source_file_ != NULL) {
79 ASSERT_EQ(0, fclose(source_file_)); 71 ASSERT_EQ(0, fclose(source_file_));
80 } 72 }
81 source_file_ = NULL; 73 source_file_ = NULL;
82 } 74 }
83 75
84 TEST_F(TestLibYuv, ConvertSanityTest) { 76 TEST_F(TestLibYuv, ConvertSanityTest) {
85 // TODO(mikhal) 77 // TODO(mikhal)
86 } 78 }
87 79
88 TEST_F(TestLibYuv, ConvertTest) { 80 TEST_F(TestLibYuv, ConvertTest) {
89 // Reading YUV frame - testing on the first frame of the foreman sequence 81 // Reading YUV frame - testing on the first frame of the foreman sequence
90 int j = 0; 82 int j = 0;
91 std::string output_file_name = webrtc::test::OutputPath() + 83 std::string output_file_name = webrtc::test::OutputPath() +
92 "LibYuvTest_conversion.yuv"; 84 "LibYuvTest_conversion.yuv";
93 FILE* output_file = fopen(output_file_name.c_str(), "wb"); 85 FILE* output_file = fopen(output_file_name.c_str(), "wb");
94 ASSERT_TRUE(output_file != NULL); 86 ASSERT_TRUE(output_file != NULL);
95 87
96 double psnr = 0.0; 88 double psnr = 0.0;
97 89
98 rtc::scoped_refptr<I420Buffer> res_i420_buffer = I420Buffer::Create( 90 rtc::scoped_refptr<I420Buffer> res_i420_buffer = I420Buffer::Create(
99 width_, height_, width_, (width_ + 1) / 2, (width_ + 1) / 2); 91 width_, height_, width_, (width_ + 1) / 2, (width_ + 1) / 2);
100 92
101 printf("\nConvert #%d I420 <-> I420 \n", j); 93 printf("\nConvert #%d I420 <-> I420 \n", j);
102 std::unique_ptr<uint8_t[]> out_i420_buffer(new uint8_t[frame_length_]); 94 std::unique_ptr<uint8_t[]> out_i420_buffer(new uint8_t[frame_length_]);
103 EXPECT_EQ(0, ConvertFromI420(orig_frame_, kI420, 0, out_i420_buffer.get())); 95 EXPECT_EQ(0, ConvertFromI420(*orig_frame_, kI420, 0, out_i420_buffer.get()));
104 EXPECT_EQ(0, ConvertToI420(kI420, out_i420_buffer.get(), 0, 0, width_, 96 EXPECT_EQ(0, ConvertToI420(kI420, out_i420_buffer.get(), 0, 0, width_,
105 height_, 0, kVideoRotation_0, 97 height_, 0, kVideoRotation_0,
106 res_i420_buffer.get())); 98 res_i420_buffer.get()));
107 99
108 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) { 100 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) {
109 return; 101 return;
110 } 102 }
111 psnr = I420PSNR(*orig_frame_.video_frame_buffer(), *res_i420_buffer); 103 psnr = I420PSNR(*orig_frame_->video_frame_buffer(), *res_i420_buffer);
112 EXPECT_EQ(48.0, psnr); 104 EXPECT_EQ(48.0, psnr);
113 j++; 105 j++;
114 106
115 printf("\nConvert #%d I420 <-> RGB24\n", j); 107 printf("\nConvert #%d I420 <-> RGB24\n", j);
116 std::unique_ptr<uint8_t[]> res_rgb_buffer2(new uint8_t[width_ * height_ * 3]); 108 std::unique_ptr<uint8_t[]> res_rgb_buffer2(new uint8_t[width_ * height_ * 3]);
117 // Align the stride values for the output frame. 109 // Align the stride values for the output frame.
118 int stride_y = 0; 110 int stride_y = 0;
119 int stride_uv = 0; 111 int stride_uv = 0;
120 Calc16ByteAlignedStride(width_, &stride_y, &stride_uv); 112 Calc16ByteAlignedStride(width_, &stride_y, &stride_uv);
121 res_i420_buffer = 113 res_i420_buffer =
122 I420Buffer::Create(width_, height_, stride_y, stride_uv, stride_uv); 114 I420Buffer::Create(width_, height_, stride_y, stride_uv, stride_uv);
123 EXPECT_EQ(0, ConvertFromI420(orig_frame_, kRGB24, 0, res_rgb_buffer2.get())); 115 EXPECT_EQ(0, ConvertFromI420(*orig_frame_, kRGB24, 0, res_rgb_buffer2.get()));
124 116
125 EXPECT_EQ(0, ConvertToI420(kRGB24, res_rgb_buffer2.get(), 0, 0, width_, 117 EXPECT_EQ(0, ConvertToI420(kRGB24, res_rgb_buffer2.get(), 0, 0, width_,
126 height_, 0, kVideoRotation_0, 118 height_, 0, kVideoRotation_0,
127 res_i420_buffer.get())); 119 res_i420_buffer.get()));
128 120
129 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) { 121 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) {
130 return; 122 return;
131 } 123 }
132 psnr = I420PSNR(*orig_frame_.video_frame_buffer(), *res_i420_buffer); 124 psnr = I420PSNR(*orig_frame_->video_frame_buffer(), *res_i420_buffer);
133 125
134 // Optimization Speed- quality trade-off => 45 dB only (platform dependant). 126 // Optimization Speed- quality trade-off => 45 dB only (platform dependant).
135 EXPECT_GT(ceil(psnr), 44); 127 EXPECT_GT(ceil(psnr), 44);
136 j++; 128 j++;
137 129
138 printf("\nConvert #%d I420 <-> UYVY\n", j); 130 printf("\nConvert #%d I420 <-> UYVY\n", j);
139 std::unique_ptr<uint8_t[]> out_uyvy_buffer(new uint8_t[width_ * height_ * 2]); 131 std::unique_ptr<uint8_t[]> out_uyvy_buffer(new uint8_t[width_ * height_ * 2]);
140 EXPECT_EQ(0, ConvertFromI420(orig_frame_, kUYVY, 0, out_uyvy_buffer.get())); 132 EXPECT_EQ(0, ConvertFromI420(*orig_frame_, kUYVY, 0, out_uyvy_buffer.get()));
141 EXPECT_EQ(0, ConvertToI420(kUYVY, out_uyvy_buffer.get(), 0, 0, width_, 133 EXPECT_EQ(0, ConvertToI420(kUYVY, out_uyvy_buffer.get(), 0, 0, width_,
142 height_, 0, kVideoRotation_0, 134 height_, 0, kVideoRotation_0,
143 res_i420_buffer.get())); 135 res_i420_buffer.get()));
144 psnr = I420PSNR(*orig_frame_.video_frame_buffer(), *res_i420_buffer); 136 psnr = I420PSNR(*orig_frame_->video_frame_buffer(), *res_i420_buffer);
145 EXPECT_EQ(48.0, psnr); 137 EXPECT_EQ(48.0, psnr);
146 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) { 138 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) {
147 return; 139 return;
148 } 140 }
149 j++; 141 j++;
150 142
151 printf("\nConvert #%d I420 <-> YUY2\n", j); 143 printf("\nConvert #%d I420 <-> YUY2\n", j);
152 std::unique_ptr<uint8_t[]> out_yuy2_buffer(new uint8_t[width_ * height_ * 2]); 144 std::unique_ptr<uint8_t[]> out_yuy2_buffer(new uint8_t[width_ * height_ * 2]);
153 EXPECT_EQ(0, ConvertFromI420(orig_frame_, kYUY2, 0, out_yuy2_buffer.get())); 145 EXPECT_EQ(0, ConvertFromI420(*orig_frame_, kYUY2, 0, out_yuy2_buffer.get()));
154 146
155 EXPECT_EQ(0, ConvertToI420(kYUY2, out_yuy2_buffer.get(), 0, 0, width_, 147 EXPECT_EQ(0, ConvertToI420(kYUY2, out_yuy2_buffer.get(), 0, 0, width_,
156 height_, 0, 148 height_, 0,
157 kVideoRotation_0, res_i420_buffer.get())); 149 kVideoRotation_0, res_i420_buffer.get()));
158 150
159 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) { 151 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) {
160 return; 152 return;
161 } 153 }
162 154
163 psnr = I420PSNR(*orig_frame_.video_frame_buffer(), *res_i420_buffer); 155 psnr = I420PSNR(*orig_frame_->video_frame_buffer(), *res_i420_buffer);
164 EXPECT_EQ(48.0, psnr); 156 EXPECT_EQ(48.0, psnr);
165 157
166 printf("\nConvert #%d I420 <-> RGB565\n", j); 158 printf("\nConvert #%d I420 <-> RGB565\n", j);
167 std::unique_ptr<uint8_t[]> out_rgb565_buffer( 159 std::unique_ptr<uint8_t[]> out_rgb565_buffer(
168 new uint8_t[width_ * height_ * 2]); 160 new uint8_t[width_ * height_ * 2]);
169 EXPECT_EQ(0, 161 EXPECT_EQ(0,
170 ConvertFromI420(orig_frame_, kRGB565, 0, out_rgb565_buffer.get())); 162 ConvertFromI420(*orig_frame_, kRGB565, 0, out_rgb565_buffer.get()));
171 163
172 EXPECT_EQ(0, ConvertToI420(kRGB565, out_rgb565_buffer.get(), 0, 0, width_, 164 EXPECT_EQ(0, ConvertToI420(kRGB565, out_rgb565_buffer.get(), 0, 0, width_,
173 height_, 0, 165 height_, 0,
174 kVideoRotation_0, res_i420_buffer.get())); 166 kVideoRotation_0, res_i420_buffer.get()));
175 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) { 167 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) {
176 return; 168 return;
177 } 169 }
178 j++; 170 j++;
179 171
180 psnr = I420PSNR(*orig_frame_.video_frame_buffer(), *res_i420_buffer); 172 psnr = I420PSNR(*orig_frame_->video_frame_buffer(), *res_i420_buffer);
181 // TODO(leozwang) Investigate the right psnr should be set for I420ToRGB565, 173 // TODO(leozwang) Investigate the right psnr should be set for I420ToRGB565,
182 // Another example is I420ToRGB24, the psnr is 44 174 // Another example is I420ToRGB24, the psnr is 44
183 // TODO(mikhal): Add psnr for RGB565, 1555, 4444, convert to ARGB. 175 // TODO(mikhal): Add psnr for RGB565, 1555, 4444, convert to ARGB.
184 EXPECT_GT(ceil(psnr), 40); 176 EXPECT_GT(ceil(psnr), 40);
185 177
186 printf("\nConvert #%d I420 <-> ARGB8888\n", j); 178 printf("\nConvert #%d I420 <-> ARGB8888\n", j);
187 std::unique_ptr<uint8_t[]> out_argb8888_buffer( 179 std::unique_ptr<uint8_t[]> out_argb8888_buffer(
188 new uint8_t[width_ * height_ * 4]); 180 new uint8_t[width_ * height_ * 4]);
189 EXPECT_EQ(0, 181 EXPECT_EQ(0,
190 ConvertFromI420(orig_frame_, kARGB, 0, out_argb8888_buffer.get())); 182 ConvertFromI420(*orig_frame_, kARGB, 0, out_argb8888_buffer.get()));
191 183
192 EXPECT_EQ(0, ConvertToI420(kARGB, out_argb8888_buffer.get(), 0, 0, width_, 184 EXPECT_EQ(0, ConvertToI420(kARGB, out_argb8888_buffer.get(), 0, 0, width_,
193 height_, 0, kVideoRotation_0, 185 height_, 0, kVideoRotation_0,
194 res_i420_buffer.get())); 186 res_i420_buffer.get()));
195 187
196 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) { 188 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) {
197 return; 189 return;
198 } 190 }
199 191
200 psnr = I420PSNR(*orig_frame_.video_frame_buffer(), *res_i420_buffer); 192 psnr = I420PSNR(*orig_frame_->video_frame_buffer(), *res_i420_buffer);
201 // TODO(leozwang) Investigate the right psnr should be set for 193 // TODO(leozwang) Investigate the right psnr should be set for
202 // I420ToARGB8888, 194 // I420ToARGB8888,
203 EXPECT_GT(ceil(psnr), 42); 195 EXPECT_GT(ceil(psnr), 42);
204 196
205 ASSERT_EQ(0, fclose(output_file)); 197 ASSERT_EQ(0, fclose(output_file));
206 } 198 }
207 199
208 TEST_F(TestLibYuv, ConvertAlignedFrame) { 200 TEST_F(TestLibYuv, ConvertAlignedFrame) {
209 // Reading YUV frame - testing on the first frame of the foreman sequence 201 // Reading YUV frame - testing on the first frame of the foreman sequence
210 std::string output_file_name = webrtc::test::OutputPath() + 202 std::string output_file_name = webrtc::test::OutputPath() +
211 "LibYuvTest_conversion.yuv"; 203 "LibYuvTest_conversion.yuv";
212 FILE* output_file = fopen(output_file_name.c_str(), "wb"); 204 FILE* output_file = fopen(output_file_name.c_str(), "wb");
213 ASSERT_TRUE(output_file != NULL); 205 ASSERT_TRUE(output_file != NULL);
214 206
215 double psnr = 0.0; 207 double psnr = 0.0;
216 208
217 int stride_y = 0; 209 int stride_y = 0;
218 int stride_uv = 0; 210 int stride_uv = 0;
219 Calc16ByteAlignedStride(width_, &stride_y, &stride_uv); 211 Calc16ByteAlignedStride(width_, &stride_y, &stride_uv);
220 212
221 rtc::scoped_refptr<I420Buffer> res_i420_buffer = 213 rtc::scoped_refptr<I420Buffer> res_i420_buffer =
222 I420Buffer::Create(width_, height_, stride_y, stride_uv, stride_uv); 214 I420Buffer::Create(width_, height_, stride_y, stride_uv, stride_uv);
223 std::unique_ptr<uint8_t[]> out_i420_buffer(new uint8_t[frame_length_]); 215 std::unique_ptr<uint8_t[]> out_i420_buffer(new uint8_t[frame_length_]);
224 EXPECT_EQ(0, ConvertFromI420(orig_frame_, kI420, 0, 216 EXPECT_EQ(0, ConvertFromI420(*orig_frame_, kI420, 0,
225 out_i420_buffer.get())); 217 out_i420_buffer.get()));
226 EXPECT_EQ(0, ConvertToI420(kI420, out_i420_buffer.get(), 0, 0, width_, 218 EXPECT_EQ(0, ConvertToI420(kI420, out_i420_buffer.get(), 0, 0, width_,
227 height_, 0, kVideoRotation_0, 219 height_, 0, kVideoRotation_0,
228 res_i420_buffer.get())); 220 res_i420_buffer.get()));
229 221
230 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) { 222 if (PrintVideoFrame(*res_i420_buffer, output_file) < 0) {
231 return; 223 return;
232 } 224 }
233 psnr = I420PSNR(*orig_frame_.video_frame_buffer(), *res_i420_buffer); 225 psnr = I420PSNR(*orig_frame_->video_frame_buffer(), *res_i420_buffer);
234 EXPECT_EQ(48.0, psnr); 226 EXPECT_EQ(48.0, psnr);
235 } 227 }
236 228
237
238 TEST_F(TestLibYuv, RotateTest) { 229 TEST_F(TestLibYuv, RotateTest) {
239 // Use ConvertToI420 for multiple rotations - see that nothing breaks, all 230 // Use ConvertToI420 for multiple rotations - see that nothing breaks, all
240 // memory is properly allocated and end result is equal to the starting point. 231 // memory is properly allocated and end result is equal to the starting point.
241 int rotated_width = height_; 232 int rotated_width = height_;
242 int rotated_height = width_; 233 int rotated_height = width_;
243 int stride_y; 234 int stride_y;
244 int stride_uv; 235 int stride_uv;
236
237 // Assume compact layout, no padding.
238 const uint8_t *orig_buffer = orig_frame_->video_frame_buffer()->DataY();
239
245 Calc16ByteAlignedStride(rotated_width, &stride_y, &stride_uv); 240 Calc16ByteAlignedStride(rotated_width, &stride_y, &stride_uv);
246 rtc::scoped_refptr<I420Buffer> rotated_res_i420_buffer = I420Buffer::Create( 241 rtc::scoped_refptr<I420Buffer> rotated_res_i420_buffer = I420Buffer::Create(
247 rotated_width, rotated_height, stride_y, stride_uv, stride_uv); 242 rotated_width, rotated_height, stride_y, stride_uv, stride_uv);
248 EXPECT_EQ(0, ConvertToI420(kI420, orig_buffer_.get(), 0, 0, width_, height_, 243 EXPECT_EQ(0, ConvertToI420(kI420, orig_buffer, 0, 0, width_, height_,
249 0, kVideoRotation_90, 244 0, kVideoRotation_90,
250 rotated_res_i420_buffer.get())); 245 rotated_res_i420_buffer.get()));
251 EXPECT_EQ(0, ConvertToI420(kI420, orig_buffer_.get(), 0, 0, width_, height_, 246 EXPECT_EQ(0, ConvertToI420(kI420, orig_buffer, 0, 0, width_, height_,
252 0, kVideoRotation_270, 247 0, kVideoRotation_270,
253 rotated_res_i420_buffer.get())); 248 rotated_res_i420_buffer.get()));
254 rotated_res_i420_buffer = I420Buffer::Create( 249 rotated_res_i420_buffer = I420Buffer::Create(
255 width_, height_, width_, (width_ + 1) / 2, (width_ + 1) / 2); 250 width_, height_, width_, (width_ + 1) / 2, (width_ + 1) / 2);
256 EXPECT_EQ(0, ConvertToI420(kI420, orig_buffer_.get(), 0, 0, width_, height_, 251 EXPECT_EQ(0, ConvertToI420(kI420, orig_buffer, 0, 0, width_, height_,
257 0, kVideoRotation_180, 252 0, kVideoRotation_180,
258 rotated_res_i420_buffer.get())); 253 rotated_res_i420_buffer.get()));
259 } 254 }
260 255
261 } // namespace webrtc 256 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/modules/video_coding/codecs/test/videoprocessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698