Revert "Revert "Replace VideoDecoder with VideoDecoderFactory in VideoReceiveStream config.""
This reverts commit 7961dc2dbdb3391a003d63630d5107e258ff3e78. Reason for revert: WebRTC does not build Original change's description: > Revert "Replace VideoDecoder with VideoDecoderFactory in VideoReceiveStream config." > > This reverts commit 529d0d9795b81dbed5e4231f15d3752a5fc0df32. > > Reason for revert: Seems to break perf tests, likely some breakage in video_quality_tests decoder configuration. > > Original change's description: > > Replace VideoDecoder with VideoDecoderFactory in VideoReceiveStream config. > > > > Preparation for deleting EnableFrameRecordning, and also a step > > towards landing of the new VideoStreamDecoder. > > > > Bug: webrtc:9106 > > Change-Id: I50964ee458b08a702ec69b82a62e4995c57cee82 > > Reviewed-on: https://webrtc-review.googlesource.com/97660 > > Commit-Queue: Niels Moller <nisse@webrtc.org> > > Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> > > Reviewed-by: Anders Carlsson <andersc@webrtc.org> > > Reviewed-by: Sebastian Jansson <srte@webrtc.org> > > Reviewed-by: Erik Språng <sprang@webrtc.org> > > Cr-Commit-Position: refs/heads/master@{#24861} > > TBR=brandtr@webrtc.org,nisse@webrtc.org,andersc@webrtc.org,sprang@webrtc.org,philipel@webrtc.org,srte@webrtc.org > > Change-Id: Id34e4a3452a7dbc06167a4df5bb4c2825ebd7bd0 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Bug: webrtc:9106 > Reviewed-on: https://webrtc-review.googlesource.com/102421 > Reviewed-by: Niels Moller <nisse@webrtc.org> > Commit-Queue: Niels Moller <nisse@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#24866} TBR=brandtr@webrtc.org,nisse@webrtc.org,andersc@webrtc.org,sprang@webrtc.org,philipel@webrtc.org,srte@webrtc.org Change-Id: I23a439e1ceef79109b1f966b80b2663203968269 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:9106 Reviewed-on: https://webrtc-review.googlesource.com/102422 Reviewed-by: Oleh Prypin <oprypin@webrtc.org> Commit-Queue: Oleh Prypin <oprypin@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24867}
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
|
||||
#include "absl/memory/memory.h"
|
||||
#include "absl/types/optional.h"
|
||||
#include "api/video_codecs/video_decoder_factory.h"
|
||||
#include "call/rtp_stream_receiver_controller_interface.h"
|
||||
#include "call/rtx_receive_stream.h"
|
||||
#include "common_types.h" // NOLINT(build/include)
|
||||
@ -75,6 +76,37 @@ VideoCodec CreateDecoderVideoCodec(const VideoReceiveStream::Decoder& decoder) {
|
||||
|
||||
return codec;
|
||||
}
|
||||
|
||||
// Video decoder class to be used for unknown codecs. Doesn't support decoding
|
||||
// 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 {
|
||||
RTC_LOG(LS_ERROR) << "Can't initialize NullVideoDecoder.";
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
}
|
||||
|
||||
int32_t Decode(const webrtc::EncodedImage& input_image,
|
||||
bool missing_frames,
|
||||
const webrtc::CodecSpecificInfo* codec_specific_info,
|
||||
int64_t render_time_ms) override {
|
||||
RTC_LOG(LS_ERROR) << "The NullVideoDecoder doesn't support decoding.";
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
}
|
||||
|
||||
int32_t RegisterDecodeCompleteCallback(
|
||||
webrtc::DecodedImageCallback* callback) override {
|
||||
RTC_LOG(LS_ERROR)
|
||||
<< "Can't register decode complete callback on NullVideoDecoder.";
|
||||
return WEBRTC_VIDEO_CODEC_OK;
|
||||
}
|
||||
|
||||
int32_t Release() override { return WEBRTC_VIDEO_CODEC_OK; }
|
||||
|
||||
const char* ImplementationName() const override { return "NullVideoDecoder"; }
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace internal {
|
||||
@ -121,7 +153,7 @@ VideoReceiveStream::VideoReceiveStream(
|
||||
RTC_DCHECK(!config_.decoders.empty());
|
||||
std::set<int> decoder_payload_types;
|
||||
for (const Decoder& decoder : config_.decoders) {
|
||||
RTC_CHECK(decoder.decoder);
|
||||
RTC_CHECK(decoder.decoder_factory);
|
||||
RTC_CHECK(decoder_payload_types.find(decoder.payload_type) ==
|
||||
decoder_payload_types.end())
|
||||
<< "Duplicate payload type (" << decoder.payload_type
|
||||
@ -203,7 +235,19 @@ void VideoReceiveStream::Start() {
|
||||
RTC_DCHECK(renderer != nullptr);
|
||||
|
||||
for (const Decoder& decoder : config_.decoders) {
|
||||
video_receiver_.RegisterExternalDecoder(decoder.decoder,
|
||||
std::unique_ptr<VideoDecoder> video_decoder =
|
||||
decoder.decoder_factory->LegacyCreateVideoDecoder(decoder.video_format,
|
||||
config_.stream_id);
|
||||
// If we still have no valid decoder, we have to create a "Null" decoder
|
||||
// that ignores all calls. The reason we can get into this state is that the
|
||||
// old decoder factory interface doesn't have a way to query supported
|
||||
// codecs.
|
||||
if (!video_decoder) {
|
||||
video_decoder = absl::make_unique<NullVideoDecoder>();
|
||||
}
|
||||
video_decoders_.push_back(std::move(video_decoder));
|
||||
|
||||
video_receiver_.RegisterExternalDecoder(video_decoders_.back().get(),
|
||||
decoder.payload_type);
|
||||
VideoCodec codec = CreateDecoderVideoCodec(decoder);
|
||||
rtp_video_stream_receiver_.AddReceiveCodec(codec,
|
||||
|
Reference in New Issue
Block a user