From 2c637aa16f4e13298cdd9d40c778d31c49b86bd3 Mon Sep 17 00:00:00 2001 From: Emil Vardar Date: Thu, 29 Aug 2024 12:09:50 +0000 Subject: [PATCH] Register filter loop parameters' start position in VP9 frame header. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is needed in order to create corruptions (by altering the filter loop params) to test the corruption detection algorithm. Bug: webrtc:358039777 Change-Id: Ib26e9c0187b79c13b9862898625742def4091b91 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/360780 Reviewed-by: Erik Språng Commit-Queue: Emil Vardar (xWF) Cr-Commit-Position: refs/heads/main@{#42890} --- modules/video_coding/utility/vp9_uncompressed_header_parser.cc | 2 ++ modules/video_coding/utility/vp9_uncompressed_header_parser.h | 3 +++ .../utility/vp9_uncompressed_header_parser_unittest.cc | 1 + 3 files changed, 6 insertions(+) diff --git a/modules/video_coding/utility/vp9_uncompressed_header_parser.cc b/modules/video_coding/utility/vp9_uncompressed_header_parser.cc index bf9d51f692..9e8526a1ee 100644 --- a/modules/video_coding/utility/vp9_uncompressed_header_parser.cc +++ b/modules/video_coding/utility/vp9_uncompressed_header_parser.cc @@ -488,6 +488,8 @@ void Parse(BitstreamReader& br, // Frame context index. frame_info->frame_context_idx = br.ReadBits(2); + frame_info->loop_filter_params_offset_bits = + total_buffer_size_bits - br.RemainingBitCount(); Vp9ReadLoopfilter(br); // Read base QP. diff --git a/modules/video_coding/utility/vp9_uncompressed_header_parser.h b/modules/video_coding/utility/vp9_uncompressed_header_parser.h index 8d1b88c3d3..14b55c4c72 100644 --- a/modules/video_coding/utility/vp9_uncompressed_header_parser.h +++ b/modules/video_coding/utility/vp9_uncompressed_header_parser.h @@ -106,6 +106,9 @@ struct Vp9UncompressedHeader { size_t tile_cols_log2 = 0; // tile_cols = 1 << tile_cols_log2 size_t tile_rows_log2 = 0; // tile_rows = 1 << tile_rows_log2 absl::optional render_size_offset_bits; + // Number of bits from the start of the frame header to where the loop filter + // parameters are located. + absl::optional loop_filter_params_offset_bits; Vp9InterpolationFilter interpolation_filter = Vp9InterpolationFilter::kEightTap; bool allow_high_precision_mv = false; diff --git a/modules/video_coding/utility/vp9_uncompressed_header_parser_unittest.cc b/modules/video_coding/utility/vp9_uncompressed_header_parser_unittest.cc index d8cc738e07..25ab6565ea 100644 --- a/modules/video_coding/utility/vp9_uncompressed_header_parser_unittest.cc +++ b/modules/video_coding/utility/vp9_uncompressed_header_parser_unittest.cc @@ -56,6 +56,7 @@ TEST(Vp9UncompressedHeaderParserTest, FrameWithSegmentation) { EXPECT_EQ(frame_info->tile_cols_log2, 0u); EXPECT_EQ(frame_info->tile_rows_log2, 0u); EXPECT_EQ(frame_info->render_size_offset_bits, 64u); + EXPECT_EQ(frame_info->loop_filter_params_offset_bits, 100u); EXPECT_EQ(frame_info->compressed_header_size, 23u); EXPECT_EQ(frame_info->uncompressed_header_size, 37u);