diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc index 0c507b683a..b9d571c32e 100644 --- a/media/engine/simulcast_encoder_adapter.cc +++ b/media/engine/simulcast_encoder_adapter.cc @@ -516,31 +516,24 @@ void SimulcastEncoderAdapter::DestroyStoredEncoders() { } } -bool SimulcastEncoderAdapter::SupportsNativeHandle() const { - RTC_DCHECK_CALLED_SEQUENTIALLY(&encoder_queue_); - // We should not be calling this method before streaminfos_ are configured. +VideoEncoder::EncoderInfo SimulcastEncoderAdapter::GetEncoderInfo() const { + EncoderInfo info; + + if (Initialized() && NumberOfStreams(codec_) > 1) { + info = streaminfos_[0].encoder->GetEncoderInfo(); + } + + info.supports_native_handle = true; for (const auto& streaminfo : streaminfos_) { - if (!streaminfo.encoder->SupportsNativeHandle()) { - return false; + if (!streaminfo.encoder->GetEncoderInfo().supports_native_handle) { + info.supports_native_handle = false; + break; } } - return true; -} -VideoEncoder::ScalingSettings SimulcastEncoderAdapter::GetScalingSettings() - const { - // TODO(brandtr): Investigate why the sequence checker below fails on mac. - // RTC_DCHECK_CALLED_SEQUENTIALLY(&encoder_queue_); - // Turn off quality scaling for simulcast. - if (!Initialized() || NumberOfStreams(codec_) != 1) { - return VideoEncoder::ScalingSettings::kOff; - } - return streaminfos_[0].encoder->GetScalingSettings(); -} + info.implementation_name = implementation_name_; -const char* SimulcastEncoderAdapter::ImplementationName() const { - RTC_DCHECK_CALLED_SEQUENTIALLY(&encoder_queue_); - return implementation_name_.c_str(); + return info; } } // namespace webrtc diff --git a/media/engine/simulcast_encoder_adapter.h b/media/engine/simulcast_encoder_adapter.h index 20afefaf49..cf80b82dcb 100644 --- a/media/engine/simulcast_encoder_adapter.h +++ b/media/engine/simulcast_encoder_adapter.h @@ -61,10 +61,7 @@ class SimulcastEncoderAdapter : public VideoEncoder { const CodecSpecificInfo* codec_specific_info, const RTPFragmentationHeader* fragmentation); - VideoEncoder::ScalingSettings GetScalingSettings() const override; - - bool SupportsNativeHandle() const override; - const char* ImplementationName() const override; + EncoderInfo GetEncoderInfo() const override; private: struct StreamInfo { diff --git a/media/engine/simulcast_encoder_adapter_unittest.cc b/media/engine/simulcast_encoder_adapter_unittest.cc index 354be7278c..206c70570d 100644 --- a/media/engine/simulcast_encoder_adapter_unittest.cc +++ b/media/engine/simulcast_encoder_adapter_unittest.cc @@ -212,8 +212,11 @@ class MockVideoEncoder : public VideoEncoder { MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); - bool SupportsNativeHandle() const /* override */ { - return supports_native_handle_; + EncoderInfo GetEncoderInfo() const override { + EncoderInfo info; + info.supports_native_handle = supports_native_handle_; + info.implementation_name = implementation_name_; + return info; } virtual ~MockVideoEncoder() { factory_->DestroyVideoEncoder(this); } @@ -235,17 +238,20 @@ class MockVideoEncoder : public VideoEncoder { supports_native_handle_ = enabled; } + void set_implementation_name(const std::string& name) { + implementation_name_ = name; + } + void set_init_encode_return_value(int32_t value) { init_encode_return_value_ = value; } VideoBitrateAllocation last_set_bitrate() const { return last_set_bitrate_; } - MOCK_CONST_METHOD0(ImplementationName, const char*()); - private: MockVideoEncoderFactory* const factory_; bool supports_native_handle_ = false; + std::string implementation_name_ = "unknown"; int32_t init_encode_return_value_ = 0; VideoBitrateAllocation last_set_bitrate_; @@ -267,7 +273,7 @@ std::unique_ptr MockVideoEncoderFactory::CreateVideoEncoder( const char* encoder_name = encoder_names_.empty() ? "codec_implementation_name" : encoder_names_[encoders_.size()]; - ON_CALL(*encoder, ImplementationName()).WillByDefault(Return(encoder_name)); + encoder->set_implementation_name(encoder_name); encoders_.push_back(encoder.get()); return encoder; } diff --git a/media/engine/vp8_encoder_simulcast_proxy.cc b/media/engine/vp8_encoder_simulcast_proxy.cc index ff03e9a31f..3b31a16cfa 100644 --- a/media/engine/vp8_encoder_simulcast_proxy.cc +++ b/media/engine/vp8_encoder_simulcast_proxy.cc @@ -66,17 +66,8 @@ int VP8EncoderSimulcastProxy::SetRateAllocation( return encoder_->SetRateAllocation(bitrate, new_framerate); } -VideoEncoder::ScalingSettings VP8EncoderSimulcastProxy::GetScalingSettings() - const { - return encoder_->GetScalingSettings(); -} - -bool VP8EncoderSimulcastProxy::SupportsNativeHandle() const { - return encoder_->SupportsNativeHandle(); -} - -const char* VP8EncoderSimulcastProxy::ImplementationName() const { - return encoder_->ImplementationName(); +VideoEncoder::EncoderInfo VP8EncoderSimulcastProxy::GetEncoderInfo() const { + return encoder_->GetEncoderInfo(); } } // namespace webrtc diff --git a/media/engine/vp8_encoder_simulcast_proxy.h b/media/engine/vp8_encoder_simulcast_proxy.h index da65bcca6b..cb88f9b4fd 100644 --- a/media/engine/vp8_encoder_simulcast_proxy.h +++ b/media/engine/vp8_encoder_simulcast_proxy.h @@ -45,11 +45,7 @@ class VP8EncoderSimulcastProxy : public VideoEncoder { int SetChannelParameters(uint32_t packet_loss, int64_t rtt) override; int SetRateAllocation(const VideoBitrateAllocation& bitrate, uint32_t new_framerate) override; - - VideoEncoder::ScalingSettings GetScalingSettings() const override; - - bool SupportsNativeHandle() const override; - const char* ImplementationName() const override; + EncoderInfo GetEncoderInfo() const override; private: VideoEncoderFactory* const factory_;