Commit 8b95281b authored by Hirokazu Honda's avatar Hirokazu Honda Committed by Commit Bot

media/gpu/vaapi/AV1VaapiVideoDecoderDelegate: Implement FillAV1SliceParameters()

Bug: 1000988
Test: video_decode_accelerator_tests
Change-Id: Iaad87433aafb98b814e2c716af29728c3bfd604a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2440333
Commit-Queue: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: default avatarAndres Calderon Jaramillo <andrescj@chromium.org>
Reviewed-by: default avatarSreerenj Balachandran <sreerenj.balachandran@intel.com>
Cr-Commit-Position: refs/heads/master@{#827608}
parent 1a47e662
...@@ -676,9 +676,36 @@ bool FillAV1SliceParameters( ...@@ -676,9 +676,36 @@ bool FillAV1SliceParameters(
const libgav1::Vector<libgav1::TileBuffer>& tile_buffers, const libgav1::Vector<libgav1::TileBuffer>& tile_buffers,
const size_t tile_columns, const size_t tile_columns,
base::span<const uint8_t> data, base::span<const uint8_t> data,
std::vector<VASliceParameterBufferAV1>& slice_params) { std::vector<VASliceParameterBufferAV1>& va_slice_params) {
NOTIMPLEMENTED(); CHECK_GT(tile_columns, 0u);
return false; const uint16_t num_tiles = base::checked_cast<uint16_t>(tile_buffers.size());
va_slice_params.resize(num_tiles);
for (uint16_t tile = 0; tile < num_tiles; ++tile) {
VASliceParameterBufferAV1& va_tile_param = va_slice_params[tile];
memset(&va_tile_param, 0, sizeof(VASliceParameterBufferAV1));
va_tile_param.slice_data_flag = VA_SLICE_DATA_FLAG_ALL;
va_tile_param.tile_row = tile / base::checked_cast<uint16_t>(tile_columns);
va_tile_param.tile_column =
tile % base::checked_cast<uint16_t>(tile_columns);
if (!base::CheckedNumeric<size_t>(tile_buffers[tile].size)
.AssignIfValid(&va_tile_param.slice_data_size)) {
return false;
}
CHECK(tile_buffers[tile].data >= data.data());
base::CheckedNumeric<uint32_t> safe_va_slice_data_end(
va_tile_param.slice_data_offset);
safe_va_slice_data_end += va_tile_param.slice_data_size;
size_t va_slice_data_end;
if (!safe_va_slice_data_end.AssignIfValid(&va_slice_data_end) ||
va_slice_data_end > data.size()) {
DLOG(ERROR) << "Invalid tile offset and size"
<< ", offset=" << va_tile_param.slice_data_size
<< ", size=" << va_tile_param.slice_data_offset
<< ", entire data size=" << data.size();
return false;
}
}
return true;
} }
} // namespace } // namespace
......
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