xref: /aosp_15_r20/external/webrtc/modules/video_coding/video_receiver2.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #ifndef MODULES_VIDEO_CODING_VIDEO_RECEIVER2_H_
12*d9f75844SAndroid Build Coastguard Worker #define MODULES_VIDEO_CODING_VIDEO_RECEIVER2_H_
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker #include <memory>
15*d9f75844SAndroid Build Coastguard Worker #include <vector>
16*d9f75844SAndroid Build Coastguard Worker 
17*d9f75844SAndroid Build Coastguard Worker #include "api/field_trials_view.h"
18*d9f75844SAndroid Build Coastguard Worker #include "api/sequence_checker.h"
19*d9f75844SAndroid Build Coastguard Worker #include "api/video_codecs/video_decoder.h"
20*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/decoder_database.h"
21*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/encoded_frame.h"
22*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/generic_decoder.h"
23*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/timing/timing.h"
24*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/system/no_unique_address.h"
25*d9f75844SAndroid Build Coastguard Worker #include "system_wrappers/include/clock.h"
26*d9f75844SAndroid Build Coastguard Worker 
27*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
28*d9f75844SAndroid Build Coastguard Worker 
29*d9f75844SAndroid Build Coastguard Worker // This class is a copy of vcm::VideoReceiver, trimmed down to what's used by
30*d9f75844SAndroid Build Coastguard Worker // VideoReceive stream, with the aim to incrementally trim it down further and
31*d9f75844SAndroid Build Coastguard Worker // ultimately delete it. It's difficult to do this incrementally with the
32*d9f75844SAndroid Build Coastguard Worker // original VideoReceiver class, since it is used by the legacy
33*d9f75844SAndroid Build Coastguard Worker // VideoCodingModule api.
34*d9f75844SAndroid Build Coastguard Worker class VideoReceiver2 {
35*d9f75844SAndroid Build Coastguard Worker  public:
36*d9f75844SAndroid Build Coastguard Worker   VideoReceiver2(Clock* clock,
37*d9f75844SAndroid Build Coastguard Worker                  VCMTiming* timing,
38*d9f75844SAndroid Build Coastguard Worker                  const FieldTrialsView& field_trials);
39*d9f75844SAndroid Build Coastguard Worker   ~VideoReceiver2();
40*d9f75844SAndroid Build Coastguard Worker 
41*d9f75844SAndroid Build Coastguard Worker   void RegisterReceiveCodec(uint8_t payload_type,
42*d9f75844SAndroid Build Coastguard Worker                             const VideoDecoder::Settings& decoder_settings);
43*d9f75844SAndroid Build Coastguard Worker   void DeregisterReceiveCodec(uint8_t payload_type);
44*d9f75844SAndroid Build Coastguard Worker   void DeregisterReceiveCodecs();
45*d9f75844SAndroid Build Coastguard Worker 
46*d9f75844SAndroid Build Coastguard Worker   void RegisterExternalDecoder(std::unique_ptr<VideoDecoder> decoder,
47*d9f75844SAndroid Build Coastguard Worker                                uint8_t payload_type);
48*d9f75844SAndroid Build Coastguard Worker 
49*d9f75844SAndroid Build Coastguard Worker   bool IsExternalDecoderRegistered(uint8_t payload_type) const;
50*d9f75844SAndroid Build Coastguard Worker   int32_t RegisterReceiveCallback(VCMReceiveCallback* receive_callback);
51*d9f75844SAndroid Build Coastguard Worker 
52*d9f75844SAndroid Build Coastguard Worker   int32_t Decode(const VCMEncodedFrame* frame);
53*d9f75844SAndroid Build Coastguard Worker 
54*d9f75844SAndroid Build Coastguard Worker  private:
55*d9f75844SAndroid Build Coastguard Worker   RTC_NO_UNIQUE_ADDRESS SequenceChecker construction_sequence_checker_;
56*d9f75844SAndroid Build Coastguard Worker   RTC_NO_UNIQUE_ADDRESS SequenceChecker decoder_sequence_checker_;
57*d9f75844SAndroid Build Coastguard Worker   Clock* const clock_;
58*d9f75844SAndroid Build Coastguard Worker   VCMDecodedFrameCallback decoded_frame_callback_;
59*d9f75844SAndroid Build Coastguard Worker   // Callbacks are set before the decoder thread starts.
60*d9f75844SAndroid Build Coastguard Worker   // Once the decoder thread has been started, usage of `_codecDataBase` moves
61*d9f75844SAndroid Build Coastguard Worker   // over to the decoder thread.
62*d9f75844SAndroid Build Coastguard Worker   VCMDecoderDatabase codec_database_;
63*d9f75844SAndroid Build Coastguard Worker };
64*d9f75844SAndroid Build Coastguard Worker 
65*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
66*d9f75844SAndroid Build Coastguard Worker 
67*d9f75844SAndroid Build Coastguard Worker #endif  // MODULES_VIDEO_CODING_VIDEO_RECEIVER2_H_
68