OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <inttypes.h> | 5 #include <inttypes.h> |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <queue> | 8 #include <queue> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 test_stream->mapped_aligned_in_file.IsValid()) | 232 test_stream->mapped_aligned_in_file.IsValid()) |
233 return; | 233 return; |
234 | 234 |
235 // All encoders in multiple encoder test reuse the same test_stream, make | 235 // All encoders in multiple encoder test reuse the same test_stream, make |
236 // sure they requested the same coded_size | 236 // sure they requested the same coded_size |
237 ASSERT_TRUE(!test_stream->mapped_aligned_in_file.IsValid() || | 237 ASSERT_TRUE(!test_stream->mapped_aligned_in_file.IsValid() || |
238 coded_size == test_stream->coded_size); | 238 coded_size == test_stream->coded_size); |
239 test_stream->coded_size = coded_size; | 239 test_stream->coded_size = coded_size; |
240 | 240 |
241 size_t num_planes = media::VideoFrame::NumPlanes(kInputFormat); | 241 size_t num_planes = media::VideoFrame::NumPlanes(kInputFormat); |
242 std::vector<size_t> padding_sizes(num_planes); | 242 std::vector<std::vector<uint8>> padding(num_planes); |
243 std::vector<size_t> coded_bpl(num_planes); | 243 std::vector<size_t> coded_bpl(num_planes); |
244 std::vector<size_t> visible_bpl(num_planes); | 244 std::vector<size_t> visible_bpl(num_planes); |
245 std::vector<size_t> visible_plane_rows(num_planes); | 245 std::vector<size_t> visible_plane_rows(num_planes); |
246 | 246 |
247 // Calculate padding in bytes to be added after each plane required to keep | 247 // Calculate padding in bytes to be added after each plane required to keep |
248 // starting addresses of all planes at a 64 byte boudnary. This padding will | 248 // starting addresses of all planes at a 64 byte boudnary. This padding will |
249 // be added after each plane when copying to the temporary file. | 249 // be added after each plane when copying to the temporary file. |
250 // At the same time we also need to take into account coded_size requested by | 250 // At the same time we also need to take into account coded_size requested by |
251 // the VEA; each row of visible_bpl bytes in the original file needs to be | 251 // the VEA; each row of visible_bpl bytes in the original file needs to be |
252 // copied into a row of coded_bpl bytes in the aligned file. | 252 // copied into a row of coded_bpl bytes in the aligned file. |
253 for (size_t i = 0; i < num_planes; i++) { | 253 for (size_t i = 0; i < num_planes; i++) { |
254 const size_t size = | 254 const size_t size = |
255 media::VideoFrame::PlaneSize(kInputFormat, i, coded_size).GetArea(); | 255 media::VideoFrame::PlaneSize(kInputFormat, i, coded_size).GetArea(); |
256 test_stream->aligned_plane_size.push_back(Align64Bytes(size)); | 256 test_stream->aligned_plane_size.push_back(Align64Bytes(size)); |
257 test_stream->aligned_buffer_size += test_stream->aligned_plane_size.back(); | 257 test_stream->aligned_buffer_size += test_stream->aligned_plane_size.back(); |
258 | 258 |
259 coded_bpl[i] = | 259 coded_bpl[i] = |
260 media::VideoFrame::RowBytes(i, kInputFormat, coded_size.width()); | 260 media::VideoFrame::RowBytes(i, kInputFormat, coded_size.width()); |
261 visible_bpl[i] = media::VideoFrame::RowBytes( | 261 visible_bpl[i] = media::VideoFrame::RowBytes( |
262 i, kInputFormat, test_stream->visible_size.width()); | 262 i, kInputFormat, test_stream->visible_size.width()); |
263 visible_plane_rows[i] = media::VideoFrame::Rows( | 263 visible_plane_rows[i] = media::VideoFrame::Rows( |
264 i, kInputFormat, test_stream->visible_size.height()); | 264 i, kInputFormat, test_stream->visible_size.height()); |
265 const size_t padding_rows = | 265 const size_t padding_rows = |
266 media::VideoFrame::Rows(i, kInputFormat, coded_size.height()) - | 266 media::VideoFrame::Rows(i, kInputFormat, coded_size.height()) - |
267 visible_plane_rows[i]; | 267 visible_plane_rows[i]; |
268 padding_sizes[i] = padding_rows * coded_bpl[i] + Align64Bytes(size) - size; | 268 padding[i].resize(padding_rows * coded_bpl[i] + Align64Bytes(size) - size); |
269 } | 269 } |
270 | 270 |
271 base::MemoryMappedFile src_file; | 271 base::MemoryMappedFile src_file; |
272 LOG_ASSERT(src_file.Initialize(base::FilePath(test_stream->in_filename))); | 272 LOG_ASSERT(src_file.Initialize(base::FilePath(test_stream->in_filename))); |
273 LOG_ASSERT(base::CreateTemporaryFile(&test_stream->aligned_in_file)); | 273 LOG_ASSERT(base::CreateTemporaryFile(&test_stream->aligned_in_file)); |
274 | 274 |
275 size_t visible_buffer_size = media::VideoFrame::AllocationSize( | 275 size_t visible_buffer_size = media::VideoFrame::AllocationSize( |
276 kInputFormat, test_stream->visible_size); | 276 kInputFormat, test_stream->visible_size); |
277 LOG_ASSERT(src_file.length() % visible_buffer_size == 0U) | 277 LOG_ASSERT(src_file.length() % visible_buffer_size == 0U) |
278 << "Stream byte size is not a product of calculated frame byte size"; | 278 << "Stream byte size is not a product of calculated frame byte size"; |
(...skipping 13 matching lines...) Expand all Loading... |
292 for (size_t frame = 0; frame < test_stream->num_frames; frame++) { | 292 for (size_t frame = 0; frame < test_stream->num_frames; frame++) { |
293 for (size_t i = 0; i < num_planes; i++) { | 293 for (size_t i = 0; i < num_planes; i++) { |
294 // Assert that each plane of frame starts at 64 byte boundary. | 294 // Assert that each plane of frame starts at 64 byte boundary. |
295 ASSERT_EQ(dest_offset & 63, 0) | 295 ASSERT_EQ(dest_offset & 63, 0) |
296 << "Planes of frame should be mapped at a 64 byte boundary"; | 296 << "Planes of frame should be mapped at a 64 byte boundary"; |
297 for (size_t j = 0; j < visible_plane_rows[i]; j++) { | 297 for (size_t j = 0; j < visible_plane_rows[i]; j++) { |
298 LOG_ASSERT(WriteFile(&dest_file, dest_offset, src, visible_bpl[i])); | 298 LOG_ASSERT(WriteFile(&dest_file, dest_offset, src, visible_bpl[i])); |
299 src += visible_bpl[i]; | 299 src += visible_bpl[i]; |
300 dest_offset += coded_bpl[i]; | 300 dest_offset += coded_bpl[i]; |
301 } | 301 } |
302 dest_offset += padding_sizes[i]; | 302 if (!padding[i].empty()) { |
| 303 LOG_ASSERT(WriteFile(&dest_file, dest_offset, &padding[i][0], |
| 304 padding[i].size())); |
| 305 dest_offset += padding[i].size(); |
| 306 } |
303 } | 307 } |
304 } | 308 } |
305 LOG_ASSERT(test_stream->mapped_aligned_in_file.Initialize(dest_file.Pass())); | 309 LOG_ASSERT(test_stream->mapped_aligned_in_file.Initialize(dest_file.Pass())); |
306 // Assert that memory mapped of file starts at 64 byte boundary. So each | 310 // Assert that memory mapped of file starts at 64 byte boundary. So each |
307 // plane of frames also start at 64 byte boundary. | 311 // plane of frames also start at 64 byte boundary. |
308 | 312 |
309 ASSERT_EQ( | 313 ASSERT_EQ( |
310 reinterpret_cast<off_t>(test_stream->mapped_aligned_in_file.data()) & 63, | 314 reinterpret_cast<off_t>(test_stream->mapped_aligned_in_file.data()) & 63, |
311 0) | 315 0) |
312 << "File should be mapped at a 64 byte boundary"; | 316 << "File should be mapped at a 64 byte boundary"; |
(...skipping 1456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1769 | 1773 |
1770 content::g_env = | 1774 content::g_env = |
1771 reinterpret_cast<content::VideoEncodeAcceleratorTestEnvironment*>( | 1775 reinterpret_cast<content::VideoEncodeAcceleratorTestEnvironment*>( |
1772 testing::AddGlobalTestEnvironment( | 1776 testing::AddGlobalTestEnvironment( |
1773 new content::VideoEncodeAcceleratorTestEnvironment( | 1777 new content::VideoEncodeAcceleratorTestEnvironment( |
1774 test_stream_data.Pass(), log_path, run_at_fps, | 1778 test_stream_data.Pass(), log_path, run_at_fps, |
1775 needs_encode_latency, verify_all_output))); | 1779 needs_encode_latency, verify_all_output))); |
1776 | 1780 |
1777 return RUN_ALL_TESTS(); | 1781 return RUN_ALL_TESTS(); |
1778 } | 1782 } |
OLD | NEW |