diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /third_party/libwebrtc/video/video_send_stream.h | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/video/video_send_stream.h')
-rw-r--r-- | third_party/libwebrtc/video/video_send_stream.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/third_party/libwebrtc/video/video_send_stream.h b/third_party/libwebrtc/video/video_send_stream.h new file mode 100644 index 0000000000..404873fd39 --- /dev/null +++ b/third_party/libwebrtc/video/video_send_stream.h @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2013 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 VIDEO_VIDEO_SEND_STREAM_H_ +#define VIDEO_VIDEO_SEND_STREAM_H_ + +#include <map> +#include <memory> +#include <string> +#include <vector> + +#include "api/fec_controller.h" +#include "api/field_trials_view.h" +#include "api/sequence_checker.h" +#include "api/task_queue/pending_task_safety_flag.h" +#include "call/bitrate_allocator.h" +#include "call/video_receive_stream.h" +#include "call/video_send_stream.h" +#include "modules/utility/maybe_worker_thread.h" +#include "rtc_base/event.h" +#include "rtc_base/system/no_unique_address.h" +#include "video/encoder_rtcp_feedback.h" +#include "video/send_delay_stats.h" +#include "video/send_statistics_proxy.h" +#include "video/video_send_stream_impl.h" +#include "video/video_stream_encoder_interface.h" + +namespace webrtc { +namespace test { +class VideoSendStreamPeer; +} // namespace test + +class IvfFileWriter; +class RateLimiter; +class RtpRtcp; +class RtpTransportControllerSendInterface; +class RtcEventLog; + +namespace internal { + +class VideoSendStreamImpl; + +// VideoSendStream implements webrtc::VideoSendStream. +// Internally, it delegates all public methods to VideoSendStreamImpl and / or +// VideoStreamEncoder. +class VideoSendStream : public webrtc::VideoSendStream { + public: + using RtpStateMap = std::map<uint32_t, RtpState>; + using RtpPayloadStateMap = std::map<uint32_t, RtpPayloadState>; + + VideoSendStream( + Clock* clock, + int num_cpu_cores, + TaskQueueFactory* task_queue_factory, + TaskQueueBase* network_queue, + RtcpRttStats* call_stats, + RtpTransportControllerSendInterface* transport, + BitrateAllocatorInterface* bitrate_allocator, + SendDelayStats* send_delay_stats, + RtcEventLog* event_log, + VideoSendStream::Config config, + VideoEncoderConfig encoder_config, + const std::map<uint32_t, RtpState>& suspended_ssrcs, + const std::map<uint32_t, RtpPayloadState>& suspended_payload_states, + std::unique_ptr<FecController> fec_controller, + const FieldTrialsView& field_trials); + + ~VideoSendStream() override; + + void DeliverRtcp(const uint8_t* packet, size_t length); + + // webrtc::VideoSendStream implementation. + void Start() override; + void StartPerRtpStream(std::vector<bool> active_layers) override; + void Stop() override; + bool started() override; + + void AddAdaptationResource(rtc::scoped_refptr<Resource> resource) override; + std::vector<rtc::scoped_refptr<Resource>> GetAdaptationResources() override; + + void SetSource(rtc::VideoSourceInterface<webrtc::VideoFrame>* source, + const DegradationPreference& degradation_preference) override; + + void ReconfigureVideoEncoder(VideoEncoderConfig config) override; + void ReconfigureVideoEncoder(VideoEncoderConfig config, + SetParametersCallback callback) override; + Stats GetStats() override; + + void StopPermanentlyAndGetRtpStates(RtpStateMap* rtp_state_map, + RtpPayloadStateMap* payload_state_map); + void GenerateKeyFrame(const std::vector<std::string>& rids) override; + + private: + friend class test::VideoSendStreamPeer; + + absl::optional<float> GetPacingFactorOverride() const; + + RTC_NO_UNIQUE_ADDRESS SequenceChecker thread_checker_; + MaybeWorkerThread* const rtp_transport_queue_; + RtpTransportControllerSendInterface* const transport_; + rtc::Event thread_sync_event_; + rtc::scoped_refptr<PendingTaskSafetyFlag> transport_queue_safety_ = + PendingTaskSafetyFlag::CreateDetached(); + + SendStatisticsProxy stats_proxy_; + const VideoSendStream::Config config_; + const VideoEncoderConfig::ContentType content_type_; + std::unique_ptr<VideoStreamEncoderInterface> video_stream_encoder_; + EncoderRtcpFeedback encoder_feedback_; + RtpVideoSenderInterface* const rtp_video_sender_; + VideoSendStreamImpl send_stream_; + bool running_ RTC_GUARDED_BY(thread_checker_) = false; +}; + +} // namespace internal +} // namespace webrtc + +#endif // VIDEO_VIDEO_SEND_STREAM_H_ |