Files
platform-external-webrtc/modules/video_coding/video_receiver2.h
Tommi 20b3271b61 Fork VCMDecoderDatabase for VideoReceiver.
This is to keep the deprecated VideoReceiver separate from the
implementation used by VideoReceiver2 before updating
VCMDecoderDatabase to have ownership of the registered decoders.

Fixing typo (DataBase->Database) in the name of the remaining class.

Bug: webrtc:14486, webrtc:14497
Change-Id: I5ee755921454b0831b3af6d0161f5b48c7c60540
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/276781
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38247}
2022-09-29 19:01:05 +00:00

72 lines
2.6 KiB
C++

/*
* Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MODULES_VIDEO_CODING_VIDEO_RECEIVER2_H_
#define MODULES_VIDEO_CODING_VIDEO_RECEIVER2_H_
#include <memory>
#include <vector>
#include "api/field_trials_view.h"
#include "api/sequence_checker.h"
#include "api/video_codecs/video_decoder.h"
#include "modules/video_coding/decoder_database.h"
#include "modules/video_coding/encoded_frame.h"
#include "modules/video_coding/generic_decoder.h"
#include "modules/video_coding/timing/timing.h"
#include "rtc_base/system/no_unique_address.h"
#include "system_wrappers/include/clock.h"
namespace webrtc {
// This class is a copy of vcm::VideoReceiver, trimmed down to what's used by
// VideoReceive stream, with the aim to incrementally trim it down further and
// ultimately delete it. It's difficult to do this incrementally with the
// original VideoReceiver class, since it is used by the legacy
// VideoCodingModule api.
class VideoReceiver2 {
public:
VideoReceiver2(Clock* clock,
VCMTiming* timing,
const FieldTrialsView& field_trials);
~VideoReceiver2();
void RegisterReceiveCodec(uint8_t payload_type,
const VideoDecoder::Settings& decoder_settings);
void DeregisterReceiveCodec(uint8_t payload_type);
void DeregisterReceiveCodecs();
void RegisterExternalDecoder(std::unique_ptr<VideoDecoder> decoder,
uint8_t payload_type);
bool IsExternalDecoderRegistered(uint8_t payload_type) const;
int32_t RegisterReceiveCallback(VCMReceiveCallback* receive_callback);
int32_t Decode(const VCMEncodedFrame* frame);
private:
RTC_NO_UNIQUE_ADDRESS SequenceChecker construction_sequence_checker_;
RTC_NO_UNIQUE_ADDRESS SequenceChecker decoder_sequence_checker_;
Clock* const clock_;
VCMDecodedFrameCallback decoded_frame_callback_;
// Holds/owns the decoder instances that are registered via
// `RegisterExternalDecoder` and referenced by `codec_database_`.
std::vector<std::unique_ptr<VideoDecoder>> video_decoders_;
// Callbacks are set before the decoder thread starts.
// Once the decoder thread has been started, usage of `_codecDataBase` moves
// over to the decoder thread.
VCMDecoderDatabase codec_database_;
};
} // namespace webrtc
#endif // MODULES_VIDEO_CODING_VIDEO_RECEIVER2_H_