Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: remoting/protocol/webrtc_dummy_video_encoder.h

Issue 2405333002: Add remoting::protocol::NetworkStateObserver interface. (Closed)
Patch Set: address feedback Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef REMOTING_PROTOCOL_DUMMY_WEBRTC_VIDEO_ENCODER_H_ 5 #ifndef REMOTING_PROTOCOL_WEBRTC_DUMMY_VIDEO_ENCODER_H_
6 #define REMOTING_PROTOCOL_DUMMY_WEBRTC_VIDEO_ENCODER_H_ 6 #define REMOTING_PROTOCOL_WEBRTC_DUMMY_VIDEO_ENCODER_H_
7 7
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/weak_ptr.h"
12 #include "base/synchronization/lock.h" 14 #include "base/synchronization/lock.h"
13 #include "remoting/codec/webrtc_video_encoder.h" 15 #include "remoting/codec/webrtc_video_encoder.h"
14 #include "third_party/webrtc/media/engine/webrtcvideoencoderfactory.h" 16 #include "third_party/webrtc/media/engine/webrtcvideoencoderfactory.h"
15 #include "third_party/webrtc/modules/video_coding/include/video_codec_interface. h" 17 #include "third_party/webrtc/modules/video_coding/include/video_codec_interface. h"
16 18
17 namespace remoting { 19 namespace remoting {
18 namespace protocol { 20 namespace protocol {
19 21
20 using TargetBitrateCallback = base::Callback<void(int)>; 22 class VideoChannelStateObserver;
21 23
22 // WebrtcDummyVideoEncoder implements webrtc::VideoEncoder interface for WebRTC. 24 // WebrtcDummyVideoEncoder implements webrtc::VideoEncoder interface for WebRTC.
23 // It's responsible for getting feedback on network bandwidth, latency & RTT 25 // It's responsible for getting feedback on network bandwidth, latency & RTT
24 // and passing this information to the WebrtcVideoStream through the callbacks 26 // and passing this information to the WebrtcVideoStream through the callbacks
25 // in WebrtcDummyVideoEncoderFactory. Video frames are captured encoded outside 27 // in WebrtcDummyVideoEncoderFactory. Video frames are captured and encoded
26 // of this dummy encoder (in WebrtcVideoEncoded called from WebrtcVideoStream). 28 // outside of this dummy encoder (in WebrtcVideoEncoder called from
27 // They are passed to SendEncodedFrame() to be delivered to the network layer. 29 // WebrtcVideoStream). They are passed to SendEncodedFrame() to be delivered to
30 // the network layer.
28 class WebrtcDummyVideoEncoder : public webrtc::VideoEncoder { 31 class WebrtcDummyVideoEncoder : public webrtc::VideoEncoder {
29 public: 32 public:
30 enum State { kUninitialized = 0, kInitialized }; 33 enum State { kUninitialized = 0, kInitialized };
31 explicit WebrtcDummyVideoEncoder(webrtc::VideoCodecType codec); 34
35 WebrtcDummyVideoEncoder(
36 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
37 base::WeakPtr<VideoChannelStateObserver> video_channel_state_observer);
32 ~WebrtcDummyVideoEncoder() override; 38 ~WebrtcDummyVideoEncoder() override;
33 39
34 // webrtc::VideoEncoder overrides 40 // webrtc::VideoEncoder overrides.
35 int32_t InitEncode(const webrtc::VideoCodec* codec_settings, 41 int32_t InitEncode(const webrtc::VideoCodec* codec_settings,
36 int32_t number_of_cores, 42 int32_t number_of_cores,
37 size_t max_payload_size) override; 43 size_t max_payload_size) override;
38 int32_t RegisterEncodeCompleteCallback( 44 int32_t RegisterEncodeCompleteCallback(
39 webrtc::EncodedImageCallback* callback) override; 45 webrtc::EncodedImageCallback* callback) override;
40 int32_t Release() override; 46 int32_t Release() override;
41 int32_t Encode(const webrtc::VideoFrame& frame, 47 int32_t Encode(const webrtc::VideoFrame& frame,
42 const webrtc::CodecSpecificInfo* codec_specific_info, 48 const webrtc::CodecSpecificInfo* codec_specific_info,
43 const std::vector<webrtc::FrameType>* frame_types) override; 49 const std::vector<webrtc::FrameType>* frame_types) override;
44 int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) override; 50 int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) override;
45 int32_t SetRates(uint32_t bitrate, uint32_t framerate) override; 51 int32_t SetRates(uint32_t bitrate, uint32_t framerate) override;
46 52
47 webrtc::EncodedImageCallback::Result SendEncodedFrame( 53 webrtc::EncodedImageCallback::Result SendEncodedFrame(
48 const WebrtcVideoEncoder::EncodedFrame& frame, 54 const WebrtcVideoEncoder::EncodedFrame& frame,
49 base::TimeTicks capture_time); 55 base::TimeTicks capture_time);
50 void SetKeyFrameRequestCallback(const base::Closure& key_frame_request);
51 void SetTargetBitrateCallback(const TargetBitrateCallback& target_bitrate_cb);
52 56
53 private: 57 private:
54 // Protects |encoded_callback_|, |key_frame_request_|, 58 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
55 // |target_bitrate_cb_| and |state_|. 59
60 // Protects |encoded_callback_| and |state_|.
56 base::Lock lock_; 61 base::Lock lock_;
57 State state_; 62 State state_;
58 webrtc::EncodedImageCallback* encoded_callback_; 63 webrtc::EncodedImageCallback* encoded_callback_ = nullptr;
59 64
60 base::Closure key_frame_request_; 65 base::WeakPtr<VideoChannelStateObserver> video_channel_state_observer_;
61 TargetBitrateCallback target_bitrate_cb_;
62 webrtc::VideoCodecType video_codec_type_;
63 }; 66 };
64 67
65 // This is the external encoder factory implementation that is passed to 68 // This is the external encoder factory implementation that is passed to
66 // WebRTC at the time of creation of peer connection. The external encoder 69 // WebRTC at the time of creation of peer connection. The external encoder
67 // factory primarily manages creation and destruction of encoder. 70 // factory primarily manages creation and destruction of encoder.
68 class WebrtcDummyVideoEncoderFactory 71 class WebrtcDummyVideoEncoderFactory
69 : public cricket::WebRtcVideoEncoderFactory { 72 : public cricket::WebRtcVideoEncoderFactory {
70 public: 73 public:
71 WebrtcDummyVideoEncoderFactory(); 74 WebrtcDummyVideoEncoderFactory();
72 ~WebrtcDummyVideoEncoderFactory() override; 75 ~WebrtcDummyVideoEncoderFactory() override;
73 76
77 // cricket::WebRtcVideoEncoderFactory interface.
74 webrtc::VideoEncoder* CreateVideoEncoder( 78 webrtc::VideoEncoder* CreateVideoEncoder(
75 webrtc::VideoCodecType type) override; 79 webrtc::VideoCodecType type) override;
76 const std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec>& codecs() 80 const std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec>& codecs()
77 const override; 81 const override;
78
79 // Returns true to directly provide encoded frames to webrtc
80 bool EncoderTypeHasInternalSource(webrtc::VideoCodecType type) const override; 82 bool EncoderTypeHasInternalSource(webrtc::VideoCodecType type) const override;
81 void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) override; 83 void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) override;
82 84
83 webrtc::EncodedImageCallback::Result SendEncodedFrame( 85 webrtc::EncodedImageCallback::Result SendEncodedFrame(
84 const WebrtcVideoEncoder::EncodedFrame& packet, 86 const WebrtcVideoEncoder::EncodedFrame& packet,
85 base::TimeTicks capture_time); 87 base::TimeTicks capture_time);
86 88
87 void SetKeyFrameRequestCallback(const base::Closure& key_frame_request); 89 void SetVideoChannelStateObserver(
88 void SetTargetBitrateCallback(const TargetBitrateCallback& target_bitrate_cb); 90 base::WeakPtr<VideoChannelStateObserver> video_channel_state_observer);
89 91
90 private: 92 private:
91 // Protects |key_frame_request_| and |target_bitrate_cb_|. 93 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
94
95 std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec> codecs_;
96
97 // Protects |video_channel_state_observer_| and |encoders_|.
92 base::Lock lock_; 98 base::Lock lock_;
93 base::Closure key_frame_request_; 99 base::WeakPtr<VideoChannelStateObserver> video_channel_state_observer_;
94 TargetBitrateCallback target_bitrate_cb_;
95 std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec> codecs_;
96 std::vector<std::unique_ptr<WebrtcDummyVideoEncoder>> encoders_; 100 std::vector<std::unique_ptr<WebrtcDummyVideoEncoder>> encoders_;
97 }; 101 };
98 102
99 } // namespace protocol 103 } // namespace protocol
100 } // namespace remoting 104 } // namespace remoting
101 105
102 #endif // REMOTING_PROTOCOL_DUMMY_WEBRTC_VIDEO_ENCODER_H_ 106 #endif // REMOTING_PROTOCOL_WEBRTC_DUMMY_VIDEO_ENCODER_H_
OLDNEW
« no previous file with comments | « remoting/protocol/video_channel_state_observer.h ('k') | remoting/protocol/webrtc_dummy_video_encoder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698