OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ | 11 #ifndef WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ |
12 #define WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ | 12 #define WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ |
13 | 13 |
14 #include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h" | 14 #include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h" |
15 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" | 15 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" |
16 | 16 |
17 #include <stdio.h> | 17 #include <stdio.h> |
18 | 18 |
19 #include "webrtc/base/criticalsection.h" | 19 #include "webrtc/base/criticalsection.h" |
20 #include "webrtc/base/scoped_ptr.h" | 20 #include "webrtc/base/scoped_ptr.h" |
21 | 21 |
22 namespace webrtc { | 22 namespace webrtc { |
23 class CriticalSectionWrapper; | 23 class CriticalSectionWrapper; |
24 | 24 |
25 namespace media_optimization { | 25 namespace media_optimization { |
26 class MediaOptimization; | 26 class MediaOptimization; |
27 } // namespace media_optimization | 27 } // namespace media_optimization |
28 | 28 |
29 struct EncoderParameters { | |
30 uint32_t target_bitrate; | |
31 uint8_t loss_rate; | |
32 int64_t rtt; | |
33 uint32_t input_frame_rate; | |
34 }; | |
35 | |
29 /*************************************/ | 36 /*************************************/ |
30 /* VCMEncodeFrameCallback class */ | 37 /* VCMEncodeFrameCallback class */ |
31 /***********************************/ | 38 /***********************************/ |
32 class VCMEncodedFrameCallback : public EncodedImageCallback | 39 class VCMEncodedFrameCallback : public EncodedImageCallback |
33 { | 40 { |
34 public: | 41 public: |
35 VCMEncodedFrameCallback(EncodedImageCallback* post_encode_callback); | 42 VCMEncodedFrameCallback(EncodedImageCallback* post_encode_callback); |
36 virtual ~VCMEncodedFrameCallback(); | 43 virtual ~VCMEncodedFrameCallback(); |
37 | 44 |
38 /* | 45 /* |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 /** | 102 /** |
96 * Encode raw image | 103 * Encode raw image |
97 * inputFrame : Frame containing raw image | 104 * inputFrame : Frame containing raw image |
98 * codecSpecificInfo : Specific codec data | 105 * codecSpecificInfo : Specific codec data |
99 * cameraFrameRate : Request or information from the remote side | 106 * cameraFrameRate : Request or information from the remote side |
100 * frameType : The requested frame type to encode | 107 * frameType : The requested frame type to encode |
101 */ | 108 */ |
102 int32_t Encode(const VideoFrame& inputFrame, | 109 int32_t Encode(const VideoFrame& inputFrame, |
103 const CodecSpecificInfo* codecSpecificInfo, | 110 const CodecSpecificInfo* codecSpecificInfo, |
104 const std::vector<FrameType>& frameTypes); | 111 const std::vector<FrameType>& frameTypes); |
105 /** | 112 |
106 * Set new target bitrate (bits/s) and framerate. | 113 void SetEncoderParameters(const EncoderParameters& params); |
107 * Return Value: new bit rate if OK, otherwise <0s. | |
108 */ | |
109 // TODO(tommi): We could replace BitRate and FrameRate below with a GetRates | |
110 // method that matches SetRates. For fetching current rates, we'd then only | |
111 // grab the lock once instead of twice. | |
112 int32_t SetRates(uint32_t target_bitrate, uint32_t frameRate); | |
113 /** | |
114 * Set a new packet loss rate and a new round-trip time in milliseconds. | |
115 */ | |
116 int32_t SetChannelParameters(int32_t packetLoss, int64_t rtt); | |
117 int32_t CodecConfigParameters(uint8_t* buffer, int32_t size); | |
118 /** | 114 /** |
119 * Register a transport callback which will be called to deliver the encoded | 115 * Register a transport callback which will be called to deliver the encoded |
120 * buffers | 116 * buffers |
121 */ | 117 */ |
122 int32_t RegisterEncodeCallback( | 118 int32_t RegisterEncodeCallback( |
123 VCMEncodedFrameCallback* VCMencodedFrameCallback); | 119 VCMEncodedFrameCallback* VCMencodedFrameCallback); |
120 // TODO(tommi): We could replace BitRate and FrameRate below with a GetRates | |
stefan-webrtc
2015/10/29 14:12:06
GetEncoderParameters would make more sense then, w
pbos-webrtc
2015/10/29 14:37:33
Yep, done. Note that there's no caller who does us
stefan-webrtc
2015/10/29 14:50:22
But don't you have two methods for this now? Line
pbos-webrtc
2015/10/29 15:26:01
Brain fart, thanks, done. :)
| |
121 // method that matches SetEncoderParameters. For fetching current rates, | |
122 // we'd then only grab the lock once instead of twice. | |
124 /** | 123 /** |
125 * Get encoder bit rate | 124 * Get encoder bit rate |
126 */ | 125 */ |
127 uint32_t BitRate() const; | 126 uint32_t BitRate() const; |
128 /** | 127 /** |
129 * Get encoder frame rate | 128 * Get encoder frame rate |
130 */ | 129 */ |
131 uint32_t FrameRate() const; | 130 uint32_t FrameRate() const; |
132 | 131 |
132 EncoderParameters encoder_parameters() const; | |
133 | |
133 int32_t SetPeriodicKeyFrames(bool enable); | 134 int32_t SetPeriodicKeyFrames(bool enable); |
134 | 135 |
135 int32_t RequestFrame(const std::vector<FrameType>& frame_types); | 136 int32_t RequestFrame(const std::vector<FrameType>& frame_types); |
136 | 137 |
137 bool InternalSource() const; | 138 bool InternalSource() const; |
138 | 139 |
139 void OnDroppedFrame(); | 140 void OnDroppedFrame(); |
140 | 141 |
141 bool SupportsNativeHandle() const; | 142 bool SupportsNativeHandle() const; |
142 | 143 |
143 int GetTargetFramerate(); | 144 int GetTargetFramerate(); |
144 | 145 |
145 private: | 146 private: |
146 VideoEncoder* const encoder_; | 147 VideoEncoder* const encoder_; |
147 VideoEncoderRateObserver* const rate_observer_; | 148 VideoEncoderRateObserver* const rate_observer_; |
148 VCMEncodedFrameCallback* vcm_encoded_frame_callback_; | 149 VCMEncodedFrameCallback* vcm_encoded_frame_callback_; |
149 uint32_t bit_rate_; | 150 EncoderParameters encoder_params_ GUARDED_BY(params_lock_); |
150 uint32_t frame_rate_; | |
151 const bool internal_source_; | 151 const bool internal_source_; |
152 mutable rtc::CriticalSection rates_lock_; | 152 mutable rtc::CriticalSection params_lock_; |
153 VideoRotation rotation_; | 153 VideoRotation rotation_; |
154 bool is_screenshare_; | 154 bool is_screenshare_; |
155 }; // end of VCMGenericEncoder class | 155 }; // end of VCMGenericEncoder class |
156 | 156 |
157 } // namespace webrtc | 157 } // namespace webrtc |
158 | 158 |
159 #endif // WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ | 159 #endif // WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ |
OLD | NEW |