From 419e48fbc5c7ad9fd4b85cb6575f24d64af85e6a Mon Sep 17 00:00:00 2001 From: Ying Wang Date: Tue, 4 Apr 2023 15:56:24 +0800 Subject: [PATCH] Compute the scale factor in int_64. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This avoid overflow when handling large input sizes, e.g.2016x1512, or 2592x1944. Bug: webrtc:15030 Change-Id: I97d5fa163ce0fac4c47f21826656819e652efafe Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/300240 Commit-Queue: Ying Wang Reviewed-by: Erik Språng Cr-Commit-Position: refs/heads/main@{#39774} --- media/base/video_adapter.cc | 4 +++- media/base/video_adapter_unittest.cc | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/media/base/video_adapter.cc b/media/base/video_adapter.cc index 149071d153..01aaad13d3 100644 --- a/media/base/video_adapter.cc +++ b/media/base/video_adapter.cc @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -39,7 +40,8 @@ struct Fraction { // Determines number of output pixels if both width and height of an input of // `input_pixels` pixels is scaled with the fraction numerator / denominator. int scale_pixel_count(int input_pixels) { - return (numerator * numerator * input_pixels) / (denominator * denominator); + return (numerator * numerator * static_cast(input_pixels)) + / (denominator * denominator); } }; diff --git a/media/base/video_adapter_unittest.cc b/media/base/video_adapter_unittest.cc index 3a8d2e6098..778e61e74c 100644 --- a/media/base/video_adapter_unittest.cc +++ b/media/base/video_adapter_unittest.cc @@ -839,6 +839,16 @@ TEST_P(VideoAdapterTest, RequestAspectRatio) { EXPECT_EQ(360, cropped_height_); EXPECT_EQ(640, out_width_); EXPECT_EQ(360, out_height_); + + adapter_.OnOutputFormatRequest(std::make_pair(1280, 720), 1280 * 720 - 1, + absl::nullopt); + EXPECT_TRUE(adapter_.AdaptFrameResolution(2592, 1944, 0, &cropped_width_, + &cropped_height_, &out_width_, + &out_height_)); + EXPECT_EQ(2592, cropped_width_); + EXPECT_EQ(1458, cropped_height_); + EXPECT_EQ(1152, out_width_); + EXPECT_EQ(648, out_height_); } TEST_P(VideoAdapterTest, RequestAspectRatioWithDifferentOrientation) {