Commit b2e15d28 authored by kcwu's avatar kcwu Committed by Commit bot

vea_unittest: Fix driver doesn't support hole in memory mapped file

A hole in a file is an area represented by zeros, which are not stored
physically on disk (aka sparse files). Take 640x360 I420 input as
an example. The padding size for three planes are 5120, 1280, and 1280.
Note 5120 > 4k. That means for every frame, there is one page "hole" in
the file. The hole page causes troubles for some systems.

This CL fills holes with zero bytes.

BUG=chrome-os-partner:41833
TEST=video_encode_accelerator_unittest

Review URL: https://codereview.chromium.org/1324213007

Cr-Commit-Position: refs/heads/master@{#361089}
parent e038f1dc
...@@ -239,7 +239,7 @@ static void CreateAlignedInputStreamFile(const gfx::Size& coded_size, ...@@ -239,7 +239,7 @@ static void CreateAlignedInputStreamFile(const gfx::Size& coded_size,
test_stream->coded_size = coded_size; test_stream->coded_size = coded_size;
size_t num_planes = media::VideoFrame::NumPlanes(kInputFormat); size_t num_planes = media::VideoFrame::NumPlanes(kInputFormat);
std::vector<size_t> padding_sizes(num_planes); std::vector<std::vector<uint8>> padding(num_planes);
std::vector<size_t> coded_bpl(num_planes); std::vector<size_t> coded_bpl(num_planes);
std::vector<size_t> visible_bpl(num_planes); std::vector<size_t> visible_bpl(num_planes);
std::vector<size_t> visible_plane_rows(num_planes); std::vector<size_t> visible_plane_rows(num_planes);
...@@ -265,7 +265,7 @@ static void CreateAlignedInputStreamFile(const gfx::Size& coded_size, ...@@ -265,7 +265,7 @@ static void CreateAlignedInputStreamFile(const gfx::Size& coded_size,
const size_t padding_rows = const size_t padding_rows =
media::VideoFrame::Rows(i, kInputFormat, coded_size.height()) - media::VideoFrame::Rows(i, kInputFormat, coded_size.height()) -
visible_plane_rows[i]; visible_plane_rows[i];
padding_sizes[i] = padding_rows * coded_bpl[i] + Align64Bytes(size) - size; padding[i].resize(padding_rows * coded_bpl[i] + Align64Bytes(size) - size);
} }
base::MemoryMappedFile src_file; base::MemoryMappedFile src_file;
...@@ -299,7 +299,11 @@ static void CreateAlignedInputStreamFile(const gfx::Size& coded_size, ...@@ -299,7 +299,11 @@ static void CreateAlignedInputStreamFile(const gfx::Size& coded_size,
src += visible_bpl[i]; src += visible_bpl[i];
dest_offset += coded_bpl[i]; dest_offset += coded_bpl[i];
} }
dest_offset += padding_sizes[i]; if (!padding[i].empty()) {
LOG_ASSERT(WriteFile(&dest_file, dest_offset, &padding[i][0],
padding[i].size()));
dest_offset += padding[i].size();
}
} }
} }
LOG_ASSERT(test_stream->mapped_aligned_in_file.Initialize(dest_file.Pass())); LOG_ASSERT(test_stream->mapped_aligned_in_file.Initialize(dest_file.Pass()));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment