| 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 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 // and produces an encoded bit stream. | 43 // and produces an encoded bit stream. |
| 44 // Usage: | 44 // Usage: |
| 45 // Instantiate. | 45 // Instantiate. |
| 46 // Call SetSink. | 46 // Call SetSink. |
| 47 // Call SetSource. | 47 // Call SetSource. |
| 48 // Call ConfigureEncoder with the codec settings. | 48 // Call ConfigureEncoder with the codec settings. |
| 49 // Call Stop() when done. | 49 // Call Stop() when done. |
| 50 class ViEEncoder : public rtc::VideoSinkInterface<VideoFrame>, | 50 class ViEEncoder : public rtc::VideoSinkInterface<VideoFrame>, |
| 51 public EncodedImageCallback, | 51 public EncodedImageCallback, |
| 52 public VCMSendStatisticsCallback, | 52 public VCMSendStatisticsCallback, |
| 53 public ScalingObserverInterface { | 53 public AdaptationObserverInterface { |
| 54 public: | 54 public: |
| 55 // Interface for receiving encoded video frames and notifications about | 55 // Interface for receiving encoded video frames and notifications about |
| 56 // configuration changes. | 56 // configuration changes. |
| 57 class EncoderSink : public EncodedImageCallback { | 57 class EncoderSink : public EncodedImageCallback { |
| 58 public: | 58 public: |
| 59 virtual void OnEncoderConfigurationChanged( | 59 virtual void OnEncoderConfigurationChanged( |
| 60 std::vector<VideoStream> streams, | 60 std::vector<VideoStream> streams, |
| 61 int min_transmit_bitrate_bps) = 0; | 61 int min_transmit_bitrate_bps) = 0; |
| 62 }; | 62 }; |
| 63 | 63 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 uint8_t fraction_lost, | 113 uint8_t fraction_lost, |
| 114 int64_t round_trip_time_ms); | 114 int64_t round_trip_time_ms); |
| 115 | 115 |
| 116 protected: | 116 protected: |
| 117 // Used for testing. For example the |ScalingObserverInterface| methods must | 117 // Used for testing. For example the |ScalingObserverInterface| methods must |
| 118 // be called on |encoder_queue_|. | 118 // be called on |encoder_queue_|. |
| 119 rtc::TaskQueue* encoder_queue() { return &encoder_queue_; } | 119 rtc::TaskQueue* encoder_queue() { return &encoder_queue_; } |
| 120 | 120 |
| 121 // webrtc::ScalingObserverInterface implementation. | 121 // webrtc::ScalingObserverInterface implementation. |
| 122 // These methods are protected for easier testing. | 122 // These methods are protected for easier testing. |
| 123 void ScaleUp(ScaleReason reason) override; | 123 void AdaptUp(AdaptReason reason) override; |
| 124 void ScaleDown(ScaleReason reason) override; | 124 void AdaptDown(AdaptReason reason) override; |
| 125 | 125 |
| 126 private: | 126 private: |
| 127 class ConfigureEncoderTask; | 127 class ConfigureEncoderTask; |
| 128 class EncodeTask; | 128 class EncodeTask; |
| 129 class VideoSourceProxy; | 129 class VideoSourceProxy; |
| 130 | 130 |
| 131 class VideoFrameInfo { | 131 class VideoFrameInfo { |
| 132 public: | 132 public: |
| 133 VideoFrameInfo(int width, | 133 VideoFrameInfo(int width, |
| 134 int height, | 134 int height, |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 bool encoder_paused_and_dropped_frame_ ACCESS_ON(&encoder_queue_); | 208 bool encoder_paused_and_dropped_frame_ ACCESS_ON(&encoder_queue_); |
| 209 bool has_received_sli_ ACCESS_ON(&encoder_queue_); | 209 bool has_received_sli_ ACCESS_ON(&encoder_queue_); |
| 210 uint8_t picture_id_sli_ ACCESS_ON(&encoder_queue_); | 210 uint8_t picture_id_sli_ ACCESS_ON(&encoder_queue_); |
| 211 bool has_received_rpsi_ ACCESS_ON(&encoder_queue_); | 211 bool has_received_rpsi_ ACCESS_ON(&encoder_queue_); |
| 212 uint64_t picture_id_rpsi_ ACCESS_ON(&encoder_queue_); | 212 uint64_t picture_id_rpsi_ ACCESS_ON(&encoder_queue_); |
| 213 Clock* const clock_; | 213 Clock* const clock_; |
| 214 // Counters used for deciding if the video resolution is currently | 214 // Counters used for deciding if the video resolution is currently |
| 215 // restricted, and if so, why. | 215 // restricted, and if so, why. |
| 216 std::vector<int> scale_counter_ ACCESS_ON(&encoder_queue_); | 216 std::vector<int> scale_counter_ ACCESS_ON(&encoder_queue_); |
| 217 // Set depending on degradation preferences | 217 // Set depending on degradation preferences |
| 218 bool scaling_enabled_ ACCESS_ON(&encoder_queue_) = false; | 218 VideoSendStream::DegradationPreference degradation_preference_ |
| 219 ACCESS_ON(&encoder_queue_); |
| 219 | 220 |
| 220 // Pixel count last time the resolution was requested to be changed down. | 221 // Pixel count last time the resolution was requested to be changed down. |
| 221 rtc::Optional<int> max_pixel_count_ ACCESS_ON(&encoder_queue_); | 222 rtc::Optional<int> max_pixel_count_ ACCESS_ON(&encoder_queue_); |
| 222 // Pixel count last time the resolution was requested to be changed up. | 223 // Pixel count last time the resolution was requested to be changed up. |
| 223 rtc::Optional<int> max_pixel_count_step_up_ ACCESS_ON(&encoder_queue_); | 224 rtc::Optional<int> max_pixel_count_step_up_ ACCESS_ON(&encoder_queue_); |
| 224 | 225 |
| 225 rtc::RaceChecker incoming_frame_race_checker_ | 226 rtc::RaceChecker incoming_frame_race_checker_ |
| 226 GUARDED_BY(incoming_frame_race_checker_); | 227 GUARDED_BY(incoming_frame_race_checker_); |
| 227 Atomic32 posted_frames_waiting_for_encode_; | 228 Atomic32 posted_frames_waiting_for_encode_; |
| 228 // Used to make sure incoming time stamp is increasing for every frame. | 229 // Used to make sure incoming time stamp is increasing for every frame. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 240 // All public methods are proxied to |encoder_queue_|. It must must be | 241 // All public methods are proxied to |encoder_queue_|. It must must be |
| 241 // destroyed first to make sure no tasks are run that use other members. | 242 // destroyed first to make sure no tasks are run that use other members. |
| 242 rtc::TaskQueue encoder_queue_; | 243 rtc::TaskQueue encoder_queue_; |
| 243 | 244 |
| 244 RTC_DISALLOW_COPY_AND_ASSIGN(ViEEncoder); | 245 RTC_DISALLOW_COPY_AND_ASSIGN(ViEEncoder); |
| 245 }; | 246 }; |
| 246 | 247 |
| 247 } // namespace webrtc | 248 } // namespace webrtc |
| 248 | 249 |
| 249 #endif // WEBRTC_VIDEO_VIE_ENCODER_H_ | 250 #endif // WEBRTC_VIDEO_VIE_ENCODER_H_ |
| OLD | NEW |