diff --git a/api/video_codecs/video_decoder.h b/api/video_codecs/video_decoder.h index 266d653693..155e76c2d1 100644 --- a/api/video_codecs/video_decoder.h +++ b/api/video_codecs/video_decoder.h @@ -59,6 +59,7 @@ class RTC_EXPORT VideoDecoder { // Returns true if the decoder prefer to decode frames late. // That is, it can not decode infinite number of frames before the decoded // frame is consumed. + // TODO(bugs.webrtc.org/12271): Remove when downstream has been updated. virtual bool PrefersLateDecoding() const; virtual const char* ImplementationName() const; diff --git a/api/video_codecs/video_decoder_software_fallback_wrapper.cc b/api/video_codecs/video_decoder_software_fallback_wrapper.cc index 128087f207..32941d267a 100644 --- a/api/video_codecs/video_decoder_software_fallback_wrapper.cc +++ b/api/video_codecs/video_decoder_software_fallback_wrapper.cc @@ -50,7 +50,6 @@ class VideoDecoderSoftwareFallbackWrapper final : public VideoDecoder { DecodedImageCallback* callback) override; int32_t Release() override; - bool PrefersLateDecoding() const override; const char* ImplementationName() const override; @@ -262,10 +261,6 @@ int32_t VideoDecoderSoftwareFallbackWrapper::Release() { return status; } -bool VideoDecoderSoftwareFallbackWrapper::PrefersLateDecoding() const { - return active_decoder().PrefersLateDecoding(); -} - const char* VideoDecoderSoftwareFallbackWrapper::ImplementationName() const { return decoder_type_ == DecoderType::kFallback ? fallback_implementation_name_.c_str() diff --git a/modules/video_coding/decoder_database.cc b/modules/video_coding/decoder_database.cc index a7a4b8f75d..594ca86553 100644 --- a/modules/video_coding/decoder_database.cc +++ b/modules/video_coding/decoder_database.cc @@ -133,10 +133,6 @@ VCMGenericDecoder* VCMDecoderDataBase::GetDecoder( return ptr_decoder_.get(); } -bool VCMDecoderDataBase::PrefersLateDecoding() const { - return ptr_decoder_ ? ptr_decoder_->PrefersLateDecoding() : true; -} - std::unique_ptr VCMDecoderDataBase::CreateAndInitDecoder( const VCMEncodedFrame& frame, VideoCodec* new_codec) const { diff --git a/modules/video_coding/decoder_database.h b/modules/video_coding/decoder_database.h index abfd81e342..f7c5d70338 100644 --- a/modules/video_coding/decoder_database.h +++ b/modules/video_coding/decoder_database.h @@ -59,10 +59,6 @@ class VCMDecoderDataBase { const VCMEncodedFrame& frame, VCMDecodedFrameCallback* decoded_frame_callback); - // Returns true if the currently active decoder prefer to decode frames late. - // That means that frames must be decoded near the render times stamp. - bool PrefersLateDecoding() const; - private: typedef std::map DecoderMap; typedef std::map ExternalDecoderMap; diff --git a/modules/video_coding/generic_decoder.cc b/modules/video_coding/generic_decoder.cc index 79057926fc..d237d0c67c 100644 --- a/modules/video_coding/generic_decoder.cc +++ b/modules/video_coding/generic_decoder.cc @@ -294,8 +294,4 @@ int32_t VCMGenericDecoder::RegisterDecodeCompleteCallback( return decoder_->RegisterDecodeCompleteCallback(callback); } -bool VCMGenericDecoder::PrefersLateDecoding() const { - return decoder_->PrefersLateDecoding(); -} - } // namespace webrtc diff --git a/modules/video_coding/generic_decoder.h b/modules/video_coding/generic_decoder.h index 8481fdc15d..bd3620d933 100644 --- a/modules/video_coding/generic_decoder.h +++ b/modules/video_coding/generic_decoder.h @@ -111,7 +111,6 @@ class VCMGenericDecoder { */ int32_t RegisterDecodeCompleteCallback(VCMDecodedFrameCallback* callback); - bool PrefersLateDecoding() const; bool IsSameDecoder(VideoDecoder* decoder) const { return decoder_.get() == decoder; } diff --git a/modules/video_coding/video_receiver.cc b/modules/video_coding/video_receiver.cc index c2c8f8aa13..23c251f59c 100644 --- a/modules/video_coding/video_receiver.cc +++ b/modules/video_coding/video_receiver.cc @@ -173,8 +173,7 @@ int32_t VideoReceiver::RegisterPacketRequestCallback( // Should be called as often as possible to get the most out of the decoder. int32_t VideoReceiver::Decode(uint16_t maxWaitTimeMs) { RTC_DCHECK_RUN_ON(&decoder_thread_checker_); - VCMEncodedFrame* frame = _receiver.FrameForDecoding( - maxWaitTimeMs, _codecDataBase.PrefersLateDecoding()); + VCMEncodedFrame* frame = _receiver.FrameForDecoding(maxWaitTimeMs, true); if (!frame) return VCM_FRAME_NOT_READY; diff --git a/sdk/android/api/org/webrtc/VideoDecoder.java b/sdk/android/api/org/webrtc/VideoDecoder.java index 879b694b28..f4d3b8f4d4 100644 --- a/sdk/android/api/org/webrtc/VideoDecoder.java +++ b/sdk/android/api/org/webrtc/VideoDecoder.java @@ -90,7 +90,10 @@ public interface VideoDecoder { * The decoder should return true if it prefers late decoding. That is, it can not decode * infinite number of frames before the decoded frame is consumed. */ - @CalledByNative boolean getPrefersLateDecoding(); + // TODO(bugs.webrtc.org/12271): Remove when downstream has been updated. + default boolean getPrefersLateDecoding() { + return true; + } /** * Should return a descriptive name for the implementation. Gets called once and cached. May be * called from arbitrary thread. diff --git a/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java b/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java index b70c664915..027120e48e 100644 --- a/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java +++ b/sdk/android/api/org/webrtc/WrappedNativeVideoDecoder.java @@ -31,11 +31,6 @@ public abstract class WrappedNativeVideoDecoder implements VideoDecoder { throw new UnsupportedOperationException("Not implemented."); } - @Override - public final boolean getPrefersLateDecoding() { - throw new UnsupportedOperationException("Not implemented."); - } - @Override public final String getImplementationName() { throw new UnsupportedOperationException("Not implemented."); diff --git a/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java b/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java index dcb045fa6b..35a0f0e011 100644 --- a/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java +++ b/sdk/android/src/java/org/webrtc/AndroidVideoDecoder.java @@ -291,11 +291,6 @@ class AndroidVideoDecoder implements VideoDecoder, VideoSink { return VideoCodecStatus.OK; } - @Override - public boolean getPrefersLateDecoding() { - return true; - } - @Override public String getImplementationName() { return codecName; diff --git a/sdk/android/src/jni/video_decoder_wrapper.cc b/sdk/android/src/jni/video_decoder_wrapper.cc index 4eb70f7fcc..01fb84fc05 100644 --- a/sdk/android/src/jni/video_decoder_wrapper.cc +++ b/sdk/android/src/jni/video_decoder_wrapper.cc @@ -144,11 +144,6 @@ int32_t VideoDecoderWrapper::Release() { return status; } -bool VideoDecoderWrapper::PrefersLateDecoding() const { - JNIEnv* jni = AttachCurrentThreadIfNeeded(); - return Java_VideoDecoder_getPrefersLateDecoding(jni, decoder_); -} - const char* VideoDecoderWrapper::ImplementationName() const { return implementation_name_.c_str(); } diff --git a/sdk/android/src/jni/video_decoder_wrapper.h b/sdk/android/src/jni/video_decoder_wrapper.h index f5c4787a6e..e8d0fec4e6 100644 --- a/sdk/android/src/jni/video_decoder_wrapper.h +++ b/sdk/android/src/jni/video_decoder_wrapper.h @@ -47,11 +47,6 @@ class VideoDecoderWrapper : public VideoDecoder { // still safe and synchronous. int32_t Release() override RTC_NO_THREAD_SAFETY_ANALYSIS; - // Returns true if the decoder prefer to decode frames late. - // That is, it can not decode infinite number of frames before the decoded - // frame is consumed. - bool PrefersLateDecoding() const override; - const char* ImplementationName() const override; // Wraps the frame to a AndroidVideoBuffer and passes it to the callback. diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc index 196f900bd3..5cd961e787 100644 --- a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc +++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.cc @@ -123,10 +123,6 @@ int32_t QualityAnalyzingVideoDecoder::Release() { return result; } -bool QualityAnalyzingVideoDecoder::PrefersLateDecoding() const { - return delegate_->PrefersLateDecoding(); -} - const char* QualityAnalyzingVideoDecoder::ImplementationName() const { return implementation_name_.c_str(); } diff --git a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h index 2381f593b9..79ca68d868 100644 --- a/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h +++ b/test/pc/e2e/analyzer/video/quality_analyzing_video_decoder.h @@ -69,7 +69,6 @@ class QualityAnalyzingVideoDecoder : public VideoDecoder { int32_t RegisterDecodeCompleteCallback( DecodedImageCallback* callback) override; int32_t Release() override; - bool PrefersLateDecoding() const override; const char* ImplementationName() const override; private: diff --git a/test/video_decoder_proxy_factory.h b/test/video_decoder_proxy_factory.h index 84552e39a4..2027f71556 100644 --- a/test/video_decoder_proxy_factory.h +++ b/test/video_decoder_proxy_factory.h @@ -61,7 +61,6 @@ class VideoDecoderProxyFactory final : public VideoDecoderFactory { return decoder_->RegisterDecodeCompleteCallback(callback); } int32_t Release() override { return decoder_->Release(); } - bool PrefersLateDecoding() const { return decoder_->PrefersLateDecoding(); } const char* ImplementationName() const override { return decoder_->ImplementationName(); } diff --git a/video/frame_dumping_decoder.cc b/video/frame_dumping_decoder.cc index 4ccb333081..c27a653ee2 100644 --- a/video/frame_dumping_decoder.cc +++ b/video/frame_dumping_decoder.cc @@ -32,7 +32,6 @@ class FrameDumpingDecoder : public VideoDecoder { int32_t RegisterDecodeCompleteCallback( DecodedImageCallback* callback) override; int32_t Release() override; - bool PrefersLateDecoding() const override; const char* ImplementationName() const override; private: @@ -73,10 +72,6 @@ int32_t FrameDumpingDecoder::Release() { return decoder_->Release(); } -bool FrameDumpingDecoder::PrefersLateDecoding() const { - return decoder_->PrefersLateDecoding(); -} - const char* FrameDumpingDecoder::ImplementationName() const { return decoder_->ImplementationName(); }