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

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

Issue 2405333002: Add remoting::protocol::NetworkStateObserver interface. (Closed)
Patch Set: 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 NetworkStateObserver;
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 encoded outside
Jamie 2016/10/11 21:58:33 s/captured encoded/captured and encoded/?
Sergey Ulanov 2016/10/11 22:36:24 Done.
26 // of this dummy encoder (in WebrtcVideoEncoded called from WebrtcVideoStream). 28 // of this dummy encoder (in WebrtcVideoEncoded called from WebrtcVideoStream).
Jamie 2016/10/11 21:58:33 s/WebrtcVideoEncoded/WebrtcVideoEncoder/
Sergey Ulanov 2016/10/11 22:36:24 Done.
27 // They are passed to SendEncodedFrame() to be delivered to the network layer. 29 // They are passed to SendEncodedFrame() to be delivered to the network layer.
28 class WebrtcDummyVideoEncoder : public webrtc::VideoEncoder { 30 class WebrtcDummyVideoEncoder : public webrtc::VideoEncoder {
29 public: 31 public:
30 enum State { kUninitialized = 0, kInitialized }; 32 enum State { kUninitialized = 0, kInitialized };
31 explicit WebrtcDummyVideoEncoder(webrtc::VideoCodecType codec); 33
34 WebrtcDummyVideoEncoder(
35 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
36 base::WeakPtr<NetworkStateObserver> network_state_observer);
32 ~WebrtcDummyVideoEncoder() override; 37 ~WebrtcDummyVideoEncoder() override;
33 38
34 // webrtc::VideoEncoder overrides 39 // webrtc::VideoEncoder overrides
35 int32_t InitEncode(const webrtc::VideoCodec* codec_settings, 40 int32_t InitEncode(const webrtc::VideoCodec* codec_settings,
36 int32_t number_of_cores, 41 int32_t number_of_cores,
37 size_t max_payload_size) override; 42 size_t max_payload_size) override;
38 int32_t RegisterEncodeCompleteCallback( 43 int32_t RegisterEncodeCompleteCallback(
39 webrtc::EncodedImageCallback* callback) override; 44 webrtc::EncodedImageCallback* callback) override;
40 int32_t Release() override; 45 int32_t Release() override;
41 int32_t Encode(const webrtc::VideoFrame& frame, 46 int32_t Encode(const webrtc::VideoFrame& frame,
42 const webrtc::CodecSpecificInfo* codec_specific_info, 47 const webrtc::CodecSpecificInfo* codec_specific_info,
43 const std::vector<webrtc::FrameType>* frame_types) override; 48 const std::vector<webrtc::FrameType>* frame_types) override;
44 int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) override; 49 int32_t SetChannelParameters(uint32_t packet_loss, int64_t rtt) override;
45 int32_t SetRates(uint32_t bitrate, uint32_t framerate) override; 50 int32_t SetRates(uint32_t bitrate, uint32_t framerate) override;
46 51
47 webrtc::EncodedImageCallback::Result SendEncodedFrame( 52 webrtc::EncodedImageCallback::Result SendEncodedFrame(
48 const WebrtcVideoEncoder::EncodedFrame& frame, 53 const WebrtcVideoEncoder::EncodedFrame& frame,
49 base::TimeTicks capture_time); 54 base::TimeTicks capture_time);
50 void SetKeyFrameRequestCallback(const base::Closure& key_frame_request);
51 void SetTargetBitrateCallback(const TargetBitrateCallback& target_bitrate_cb);
52 55
53 private: 56 private:
54 // Protects |encoded_callback_|, |key_frame_request_|, 57 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
55 // |target_bitrate_cb_| and |state_|. 58
59 // Protects |encoded_callback_| and |state_|.
56 base::Lock lock_; 60 base::Lock lock_;
57 State state_; 61 State state_;
58 webrtc::EncodedImageCallback* encoded_callback_; 62 webrtc::EncodedImageCallback* encoded_callback_ = nullptr;
59 63
60 base::Closure key_frame_request_; 64 base::WeakPtr<NetworkStateObserver> network_state_observer_;
61 TargetBitrateCallback target_bitrate_cb_;
62 webrtc::VideoCodecType video_codec_type_;
63 }; 65 };
64 66
65 // This is the external encoder factory implementation that is passed to 67 // This is the external encoder factory implementation that is passed to
66 // WebRTC at the time of creation of peer connection. The external encoder 68 // WebRTC at the time of creation of peer connection. The external encoder
67 // factory primarily manages creation and destruction of encoder. 69 // factory primarily manages creation and destruction of encoder.
68 class WebrtcDummyVideoEncoderFactory 70 class WebrtcDummyVideoEncoderFactory
69 : public cricket::WebRtcVideoEncoderFactory { 71 : public cricket::WebRtcVideoEncoderFactory {
70 public: 72 public:
71 WebrtcDummyVideoEncoderFactory(); 73 WebrtcDummyVideoEncoderFactory();
72 ~WebrtcDummyVideoEncoderFactory() override; 74 ~WebrtcDummyVideoEncoderFactory() override;
73 75
76 // cricket::WebRtcVideoEncoderFactory interface.
74 webrtc::VideoEncoder* CreateVideoEncoder( 77 webrtc::VideoEncoder* CreateVideoEncoder(
75 webrtc::VideoCodecType type) override; 78 webrtc::VideoCodecType type) override;
76 const std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec>& codecs() 79 const std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec>& codecs()
77 const override; 80 const override;
78
79 // Returns true to directly provide encoded frames to webrtc
80 bool EncoderTypeHasInternalSource(webrtc::VideoCodecType type) const override; 81 bool EncoderTypeHasInternalSource(webrtc::VideoCodecType type) const override;
81 void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) override; 82 void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) override;
82 83
83 webrtc::EncodedImageCallback::Result SendEncodedFrame( 84 webrtc::EncodedImageCallback::Result SendEncodedFrame(
84 const WebrtcVideoEncoder::EncodedFrame& packet, 85 const WebrtcVideoEncoder::EncodedFrame& packet,
85 base::TimeTicks capture_time); 86 base::TimeTicks capture_time);
86 87
87 void SetKeyFrameRequestCallback(const base::Closure& key_frame_request); 88 void SetNetworkStateObserver(
88 void SetTargetBitrateCallback(const TargetBitrateCallback& target_bitrate_cb); 89 base::WeakPtr<NetworkStateObserver> network_state_observer);
89 90
90 private: 91 private:
91 // Protects |key_frame_request_| and |target_bitrate_cb_|. 92 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
93
94 std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec> codecs_;
95
96 // Protects |network_state_observer_| and |encoders_|.
92 base::Lock lock_; 97 base::Lock lock_;
93 base::Closure key_frame_request_; 98 base::WeakPtr<NetworkStateObserver> network_state_observer_;
94 TargetBitrateCallback target_bitrate_cb_;
95 std::vector<cricket::WebRtcVideoEncoderFactory::VideoCodec> codecs_;
96 std::vector<std::unique_ptr<WebrtcDummyVideoEncoder>> encoders_; 99 std::vector<std::unique_ptr<WebrtcDummyVideoEncoder>> encoders_;
97 }; 100 };
98 101
99 } // namespace protocol 102 } // namespace protocol
100 } // namespace remoting 103 } // namespace remoting
101 104
102 #endif // REMOTING_PROTOCOL_DUMMY_WEBRTC_VIDEO_ENCODER_H_ 105 #endif // REMOTING_PROTOCOL_WEBRTC_DUMMY_VIDEO_ENCODER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698