From b6f19d7dfd29209b0a45fff629c1c0ed02d3b6d7 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Wed, 18 Aug 2021 13:34:36 +0000 Subject: [PATCH] Reland "Update remaining usage of VideoDecoder::InitDecode to Configure" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit d6da4c23ccda5733f4d8bad3268b539d0c9fc3b7. Reason for revert: downstream project adjusted Original change's description: > Revert "Update remaining usage of VideoDecoder::InitDecode to Configure" > > This reverts commit ca0a08ab600c8d7d00b94492122946ad837b1ef7. > > Reason for revert: Breaks downstream project. > > Original change's description: > > Update remaining usage of VideoDecoder::InitDecode to Configure > > > > Bug: webrtc:13045 > > Change-Id: I5253fddfd613cf0228fc3cd861b91e56558dd34a > > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/228947 > > Reviewed-by: Erik Språng > > Commit-Queue: Danil Chapovalov > > Cr-Commit-Position: refs/heads/master@{#34777} > > TBR=danilchap@webrtc.org,sprang@webrtc.org,webrtc-scoped@luci-project-accounts.iam.gserviceaccount.com > > Change-Id: I1868700a43b5aa4b37e9bcba5af233d24526c974 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:13045 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/229024 > Reviewed-by: Mirko Bonadei > Commit-Queue: Mirko Bonadei > Cr-Commit-Position: refs/heads/master@{#34780} # Not skipping CQ checks because original CL landed > 1 day ago. Bug: webrtc:13045 Change-Id: I5a44e7126f9f2e405f3be6b84698de53b23203a2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/229183 Reviewed-by: Danil Chapovalov Reviewed-by: Erik Språng Commit-Queue: Danil Chapovalov Cr-Commit-Position: refs/heads/master@{#34795} --- modules/video_coding/codecs/test/videoprocessor.cc | 10 ++++++---- .../codecs/test/videoprocessor_unittest.cc | 8 ++++---- .../utility/simulcast_test_fixture_impl.cc | 5 ++++- test/testsupport/ivf_video_frame_generator.cc | 14 ++++++-------- video/frame_dumping_decoder.cc | 10 ++++------ video/video_receive_stream.cc | 5 ++--- video/video_receive_stream2.cc | 5 ++--- video/video_stream_decoder_impl.cc | 6 +++--- 8 files changed, 31 insertions(+), 32 deletions(-) diff --git a/modules/video_coding/codecs/test/videoprocessor.cc b/modules/video_coding/codecs/test/videoprocessor.cc index 473be01556..09c0a75cc2 100644 --- a/modules/video_coding/codecs/test/videoprocessor.cc +++ b/modules/video_coding/codecs/test/videoprocessor.cc @@ -196,10 +196,12 @@ VideoProcessor::VideoProcessor(webrtc::VideoEncoder* encoder, for (size_t i = 0; i < num_simulcast_or_spatial_layers_; ++i) { decode_callback_.push_back( std::make_unique(this, i)); - RTC_CHECK_EQ( - decoders_->at(i)->InitDecode(&config_.codec_settings, - static_cast(config_.NumberOfCores())), - WEBRTC_VIDEO_CODEC_OK); + VideoDecoder::Settings decoder_settings; + decoder_settings.set_max_render_resolution( + {config_.codec_settings.width, config_.codec_settings.height}); + decoder_settings.set_codec_type(config_.codec_settings.codecType); + decoder_settings.set_number_of_cores(config_.NumberOfCores()); + RTC_CHECK(decoders_->at(i)->Configure(decoder_settings)); RTC_CHECK_EQ(decoders_->at(i)->RegisterDecodeCompleteCallback( decode_callback_.at(i).get()), WEBRTC_VIDEO_CODEC_OK); diff --git a/modules/video_coding/codecs/test/videoprocessor_unittest.cc b/modules/video_coding/codecs/test/videoprocessor_unittest.cc index 2d9404293b..6d78f7e305 100644 --- a/modules/video_coding/codecs/test/videoprocessor_unittest.cc +++ b/modules/video_coding/codecs/test/videoprocessor_unittest.cc @@ -68,10 +68,10 @@ class VideoProcessorTest : public ::testing::Test { } void ExpectInit() { - EXPECT_CALL(encoder_mock_, InitEncode(_, _)).Times(1); - EXPECT_CALL(encoder_mock_, RegisterEncodeCompleteCallback(_)).Times(1); - EXPECT_CALL(*decoder_mock_, InitDecode(_, _)).Times(1); - EXPECT_CALL(*decoder_mock_, RegisterDecodeCompleteCallback(_)).Times(1); + EXPECT_CALL(encoder_mock_, InitEncode(_, _)); + EXPECT_CALL(encoder_mock_, RegisterEncodeCompleteCallback); + EXPECT_CALL(*decoder_mock_, Configure); + EXPECT_CALL(*decoder_mock_, RegisterDecodeCompleteCallback); } void ExpectRelease() { diff --git a/modules/video_coding/utility/simulcast_test_fixture_impl.cc b/modules/video_coding/utility/simulcast_test_fixture_impl.cc index d3951e5309..435f472475 100644 --- a/modules/video_coding/utility/simulcast_test_fixture_impl.cc +++ b/modules/video_coding/utility/simulcast_test_fixture_impl.cc @@ -276,7 +276,10 @@ void SimulcastTestFixtureImpl::SetUpCodec(const int* temporal_layer_profile) { DefaultSettings(&settings_, temporal_layer_profile, codec_type_); SetUpRateAllocator(); EXPECT_EQ(0, encoder_->InitEncode(&settings_, kSettings)); - EXPECT_EQ(0, decoder_->InitDecode(&settings_, 1)); + VideoDecoder::Settings decoder_settings; + decoder_settings.set_max_render_resolution({kDefaultWidth, kDefaultHeight}); + decoder_settings.set_codec_type(codec_type_); + EXPECT_TRUE(decoder_->Configure(decoder_settings)); input_buffer_ = I420Buffer::Create(kDefaultWidth, kDefaultHeight); input_buffer_->InitializeData(); input_frame_ = std::make_unique( diff --git a/test/testsupport/ivf_video_frame_generator.cc b/test/testsupport/ivf_video_frame_generator.cc index e5c4c5fe55..f7eefdc2d2 100644 --- a/test/testsupport/ivf_video_frame_generator.cc +++ b/test/testsupport/ivf_video_frame_generator.cc @@ -38,19 +38,17 @@ IvfVideoFrameGenerator::IvfVideoFrameGenerator(const std::string& file_name) width_(file_reader_->GetFrameWidth()), height_(file_reader_->GetFrameHeight()) { RTC_CHECK(video_decoder_) << "No decoder found for file's video codec type"; - VideoCodec codec_settings; - codec_settings.codecType = file_reader_->GetVideoCodecType(); - codec_settings.width = file_reader_->GetFrameWidth(); - codec_settings.height = file_reader_->GetFrameHeight(); + VideoDecoder::Settings decoder_settings; + decoder_settings.set_codec_type(file_reader_->GetVideoCodecType()); + decoder_settings.set_max_render_resolution( + {file_reader_->GetFrameWidth(), file_reader_->GetFrameHeight()}); // Set buffer pool size to max value to ensure that if users of generator, // ex. test frameworks, will retain frames for quite a long time, decoder // won't crash with buffers pool overflow error. - codec_settings.buffer_pool_size = std::numeric_limits::max(); + decoder_settings.set_buffer_pool_size(std::numeric_limits::max()); RTC_CHECK_EQ(video_decoder_->RegisterDecodeCompleteCallback(&callback_), WEBRTC_VIDEO_CODEC_OK); - RTC_CHECK_EQ( - video_decoder_->InitDecode(&codec_settings, /*number_of_cores=*/1), - WEBRTC_VIDEO_CODEC_OK); + RTC_CHECK(video_decoder_->Configure(decoder_settings)); } IvfVideoFrameGenerator::~IvfVideoFrameGenerator() { MutexLock lock(&lock_); diff --git a/video/frame_dumping_decoder.cc b/video/frame_dumping_decoder.cc index 59202dd03c..9592565893 100644 --- a/video/frame_dumping_decoder.cc +++ b/video/frame_dumping_decoder.cc @@ -24,8 +24,7 @@ class FrameDumpingDecoder : public VideoDecoder { FrameDumpingDecoder(std::unique_ptr decoder, FileWrapper file); ~FrameDumpingDecoder() override; - int32_t InitDecode(const VideoCodec* codec_settings, - int32_t number_of_cores) override; + bool Configure(const Settings& settings) override; int32_t Decode(const EncodedImage& input_image, bool missing_frames, int64_t render_time_ms) override; @@ -49,10 +48,9 @@ FrameDumpingDecoder::FrameDumpingDecoder(std::unique_ptr decoder, FrameDumpingDecoder::~FrameDumpingDecoder() = default; -int32_t FrameDumpingDecoder::InitDecode(const VideoCodec* codec_settings, - int32_t number_of_cores) { - codec_type_ = codec_settings->codecType; - return decoder_->InitDecode(codec_settings, number_of_cores); +bool FrameDumpingDecoder::Configure(const Settings& settings) { + codec_type_ = settings.codec_type(); + return decoder_->Configure(settings); } int32_t FrameDumpingDecoder::Decode(const EncodedImage& input_image, diff --git a/video/video_receive_stream.cc b/video/video_receive_stream.cc index 12e593573a..e2e2bb8175 100644 --- a/video/video_receive_stream.cc +++ b/video/video_receive_stream.cc @@ -115,10 +115,9 @@ class WebRtcRecordableEncodedFrame : public RecordableEncodedFrame { // but logs messages to LS_ERROR. class NullVideoDecoder : public webrtc::VideoDecoder { public: - int32_t InitDecode(const webrtc::VideoCodec* codec_settings, - int32_t number_of_cores) override { + bool Configure(const Settings& settings) override { RTC_LOG(LS_ERROR) << "Can't initialize NullVideoDecoder."; - return WEBRTC_VIDEO_CODEC_OK; + return true; } int32_t Decode(const webrtc::EncodedImage& input_image, diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc index a1b2f9f872..d7fcd086ac 100644 --- a/video/video_receive_stream2.cc +++ b/video/video_receive_stream2.cc @@ -130,10 +130,9 @@ RenderResolution InitialDecoderResolution() { // but logs messages to LS_ERROR. class NullVideoDecoder : public webrtc::VideoDecoder { public: - int32_t InitDecode(const webrtc::VideoCodec* codec_settings, - int32_t number_of_cores) override { + bool Configure(const Settings& settings) override { RTC_LOG(LS_ERROR) << "Can't initialize NullVideoDecoder."; - return WEBRTC_VIDEO_CODEC_OK; + return true; } int32_t Decode(const webrtc::EncodedImage& input_image, diff --git a/video/video_stream_decoder_impl.cc b/video/video_stream_decoder_impl.cc index 4c52d35ff9..3b65d17cca 100644 --- a/video/video_stream_decoder_impl.cc +++ b/video/video_stream_decoder_impl.cc @@ -102,9 +102,9 @@ VideoDecoder* VideoStreamDecoderImpl::GetDecoder(int payload_type) { return nullptr; } - int num_cores = decoder_settings_it->second.second; - int32_t init_result = decoder->InitDecode(nullptr, num_cores); - if (init_result != WEBRTC_VIDEO_CODEC_OK) { + VideoDecoder::Settings settings; + settings.set_number_of_cores(decoder_settings_it->second.second); + if (!decoder->Configure(settings)) { RTC_LOG(LS_WARNING) << "Failed to initialize decoder for payload type " << payload_type << "."; return nullptr;