| 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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 } | 153 } |
| 154 if (vcm_->RegisterSendStatisticsCallback(this) != 0) { | 154 if (vcm_->RegisterSendStatisticsCallback(this) != 0) { |
| 155 return false; | 155 return false; |
| 156 } | 156 } |
| 157 return true; | 157 return true; |
| 158 } | 158 } |
| 159 | 159 |
| 160 void ViEEncoder::StartThreadsAndSetSharedMembers( | 160 void ViEEncoder::StartThreadsAndSetSharedMembers( |
| 161 rtc::scoped_refptr<PayloadRouter> send_payload_router, | 161 rtc::scoped_refptr<PayloadRouter> send_payload_router, |
| 162 VCMProtectionCallback* vcm_protection_callback) { | 162 VCMProtectionCallback* vcm_protection_callback) { |
| 163 DCHECK(send_payload_router_ == NULL); | 163 RTC_DCHECK(send_payload_router_ == NULL); |
| 164 | 164 |
| 165 send_payload_router_ = send_payload_router; | 165 send_payload_router_ = send_payload_router; |
| 166 vcm_->RegisterProtectionCallback(vcm_protection_callback); | 166 vcm_->RegisterProtectionCallback(vcm_protection_callback); |
| 167 module_process_thread_.RegisterModule(vcm_.get()); | 167 module_process_thread_.RegisterModule(vcm_.get()); |
| 168 } | 168 } |
| 169 | 169 |
| 170 void ViEEncoder::StopThreadsAndRemoveSharedMembers() { | 170 void ViEEncoder::StopThreadsAndRemoveSharedMembers() { |
| 171 if (bitrate_allocator_) | 171 if (bitrate_allocator_) |
| 172 bitrate_allocator_->RemoveBitrateObserver(bitrate_observer_.get()); | 172 bitrate_allocator_->RemoveBitrateObserver(bitrate_observer_.get()); |
| 173 module_process_thread_.DeRegisterModule(vcm_.get()); | 173 module_process_thread_.DeRegisterModule(vcm_.get()); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 } | 247 } |
| 248 | 248 |
| 249 int32_t ViEEncoder::DeRegisterExternalEncoder(uint8_t pl_type) { | 249 int32_t ViEEncoder::DeRegisterExternalEncoder(uint8_t pl_type) { |
| 250 if (vcm_->RegisterExternalEncoder(NULL, pl_type) != VCM_OK) { | 250 if (vcm_->RegisterExternalEncoder(NULL, pl_type) != VCM_OK) { |
| 251 return -1; | 251 return -1; |
| 252 } | 252 } |
| 253 return 0; | 253 return 0; |
| 254 } | 254 } |
| 255 | 255 |
| 256 int32_t ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec) { | 256 int32_t ViEEncoder::SetEncoder(const webrtc::VideoCodec& video_codec) { |
| 257 DCHECK(send_payload_router_ != NULL); | 257 RTC_DCHECK(send_payload_router_ != NULL); |
| 258 // Setting target width and height for VPM. | 258 // Setting target width and height for VPM. |
| 259 if (vpm_->SetTargetResolution(video_codec.width, video_codec.height, | 259 if (vpm_->SetTargetResolution(video_codec.width, video_codec.height, |
| 260 video_codec.maxFramerate) != VPM_OK) { | 260 video_codec.maxFramerate) != VPM_OK) { |
| 261 return -1; | 261 return -1; |
| 262 } | 262 } |
| 263 | 263 |
| 264 { | 264 { |
| 265 CriticalSectionScoped cs(data_cs_.get()); | 265 CriticalSectionScoped cs(data_cs_.get()); |
| 266 simulcast_enabled_ = video_codec.numberOfSimulcastStreams > 1; | 266 simulcast_enabled_ = video_codec.numberOfSimulcastStreams > 1; |
| 267 } | 267 } |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 | 407 |
| 408 void ViEEncoder::TraceFrameDropEnd() { | 408 void ViEEncoder::TraceFrameDropEnd() { |
| 409 // End trace event on first frame after encoder resumes, if frame was dropped. | 409 // End trace event on first frame after encoder resumes, if frame was dropped. |
| 410 if (encoder_paused_and_dropped_frame_) { | 410 if (encoder_paused_and_dropped_frame_) { |
| 411 TRACE_EVENT_ASYNC_END0("webrtc", "EncoderPaused", this); | 411 TRACE_EVENT_ASYNC_END0("webrtc", "EncoderPaused", this); |
| 412 } | 412 } |
| 413 encoder_paused_and_dropped_frame_ = false; | 413 encoder_paused_and_dropped_frame_ = false; |
| 414 } | 414 } |
| 415 | 415 |
| 416 void ViEEncoder::DeliverFrame(VideoFrame video_frame) { | 416 void ViEEncoder::DeliverFrame(VideoFrame video_frame) { |
| 417 DCHECK(send_payload_router_ != NULL); | 417 RTC_DCHECK(send_payload_router_ != NULL); |
| 418 if (!send_payload_router_->active()) { | 418 if (!send_payload_router_->active()) { |
| 419 // We've paused or we have no channels attached, don't waste resources on | 419 // We've paused or we have no channels attached, don't waste resources on |
| 420 // encoding. | 420 // encoding. |
| 421 return; | 421 return; |
| 422 } | 422 } |
| 423 { | 423 { |
| 424 CriticalSectionScoped cs(data_cs_.get()); | 424 CriticalSectionScoped cs(data_cs_.get()); |
| 425 time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp(); | 425 time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp(); |
| 426 if (EncoderPaused()) { | 426 if (EncoderPaused()) { |
| 427 TraceFrameDropStart(); | 427 TraceFrameDropStart(); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 return last_observed_bitrate_bps_; | 512 return last_observed_bitrate_bps_; |
| 513 } | 513 } |
| 514 | 514 |
| 515 int ViEEncoder::CodecTargetBitrate(uint32_t* bitrate) const { | 515 int ViEEncoder::CodecTargetBitrate(uint32_t* bitrate) const { |
| 516 if (vcm_->Bitrate(bitrate) != 0) | 516 if (vcm_->Bitrate(bitrate) != 0) |
| 517 return -1; | 517 return -1; |
| 518 return 0; | 518 return 0; |
| 519 } | 519 } |
| 520 | 520 |
| 521 int32_t ViEEncoder::UpdateProtectionMethod(bool nack, bool fec) { | 521 int32_t ViEEncoder::UpdateProtectionMethod(bool nack, bool fec) { |
| 522 DCHECK(send_payload_router_ != NULL); | 522 RTC_DCHECK(send_payload_router_ != NULL); |
| 523 | 523 |
| 524 if (fec_enabled_ == fec && nack_enabled_ == nack) { | 524 if (fec_enabled_ == fec && nack_enabled_ == nack) { |
| 525 // No change needed, we're already in correct state. | 525 // No change needed, we're already in correct state. |
| 526 return 0; | 526 return 0; |
| 527 } | 527 } |
| 528 fec_enabled_ = fec; | 528 fec_enabled_ = fec; |
| 529 nack_enabled_ = nack; | 529 nack_enabled_ = nack; |
| 530 | 530 |
| 531 // Set Video Protection for VCM. | 531 // Set Video Protection for VCM. |
| 532 VCMVideoProtection protection_mode; | 532 VCMVideoProtection protection_mode; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 CriticalSectionScoped cs(callback_cs_.get()); | 580 CriticalSectionScoped cs(callback_cs_.get()); |
| 581 if (send_statistics_proxy_ != nullptr) | 581 if (send_statistics_proxy_ != nullptr) |
| 582 send_statistics_proxy_->OnSetRates(bitrate_bps, framerate); | 582 send_statistics_proxy_->OnSetRates(bitrate_bps, framerate); |
| 583 } | 583 } |
| 584 | 584 |
| 585 int32_t ViEEncoder::SendData( | 585 int32_t ViEEncoder::SendData( |
| 586 const uint8_t payload_type, | 586 const uint8_t payload_type, |
| 587 const EncodedImage& encoded_image, | 587 const EncodedImage& encoded_image, |
| 588 const webrtc::RTPFragmentationHeader& fragmentation_header, | 588 const webrtc::RTPFragmentationHeader& fragmentation_header, |
| 589 const RTPVideoHeader* rtp_video_hdr) { | 589 const RTPVideoHeader* rtp_video_hdr) { |
| 590 DCHECK(send_payload_router_ != NULL); | 590 RTC_DCHECK(send_payload_router_ != NULL); |
| 591 | 591 |
| 592 { | 592 { |
| 593 CriticalSectionScoped cs(data_cs_.get()); | 593 CriticalSectionScoped cs(data_cs_.get()); |
| 594 time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp(); | 594 time_of_last_frame_activity_ms_ = TickTime::MillisecondTimestamp(); |
| 595 } | 595 } |
| 596 | 596 |
| 597 { | 597 { |
| 598 CriticalSectionScoped cs(callback_cs_.get()); | 598 CriticalSectionScoped cs(callback_cs_.get()); |
| 599 if (send_statistics_proxy_ != NULL) | 599 if (send_statistics_proxy_ != NULL) |
| 600 send_statistics_proxy_->OnSendEncodedImage(encoded_image, rtp_video_hdr); | 600 send_statistics_proxy_->OnSendEncodedImage(encoded_image, rtp_video_hdr); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 min_transmit_bitrate_kbps_ = min_transmit_bitrate_kbps; | 716 min_transmit_bitrate_kbps_ = min_transmit_bitrate_kbps; |
| 717 } | 717 } |
| 718 | 718 |
| 719 // Called from ViEBitrateObserver. | 719 // Called from ViEBitrateObserver. |
| 720 void ViEEncoder::OnNetworkChanged(uint32_t bitrate_bps, | 720 void ViEEncoder::OnNetworkChanged(uint32_t bitrate_bps, |
| 721 uint8_t fraction_lost, | 721 uint8_t fraction_lost, |
| 722 int64_t round_trip_time_ms) { | 722 int64_t round_trip_time_ms) { |
| 723 LOG(LS_VERBOSE) << "OnNetworkChanged, bitrate" << bitrate_bps | 723 LOG(LS_VERBOSE) << "OnNetworkChanged, bitrate" << bitrate_bps |
| 724 << " packet loss " << static_cast<int>(fraction_lost) | 724 << " packet loss " << static_cast<int>(fraction_lost) |
| 725 << " rtt " << round_trip_time_ms; | 725 << " rtt " << round_trip_time_ms; |
| 726 DCHECK(send_payload_router_ != NULL); | 726 RTC_DCHECK(send_payload_router_ != NULL); |
| 727 vcm_->SetChannelParameters(bitrate_bps, fraction_lost, round_trip_time_ms); | 727 vcm_->SetChannelParameters(bitrate_bps, fraction_lost, round_trip_time_ms); |
| 728 bool video_is_suspended = vcm_->VideoSuspended(); | 728 bool video_is_suspended = vcm_->VideoSuspended(); |
| 729 | 729 |
| 730 VideoCodec send_codec; | 730 VideoCodec send_codec; |
| 731 if (vcm_->SendCodec(&send_codec) != 0) { | 731 if (vcm_->SendCodec(&send_codec) != 0) { |
| 732 return; | 732 return; |
| 733 } | 733 } |
| 734 SimulcastStream* stream_configs = send_codec.simulcastStream; | 734 SimulcastStream* stream_configs = send_codec.simulcastStream; |
| 735 // Allocate the bandwidth between the streams. | 735 // Allocate the bandwidth between the streams. |
| 736 std::vector<uint32_t> stream_bitrates = AllocateStreamBitrates( | 736 std::vector<uint32_t> stream_bitrates = AllocateStreamBitrates( |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 const uint32_t width, | 787 const uint32_t width, |
| 788 const uint32_t height) { | 788 const uint32_t height) { |
| 789 return vpm_->SetTargetResolution(width, height, frame_rate); | 789 return vpm_->SetTargetResolution(width, height, frame_rate); |
| 790 } | 790 } |
| 791 | 791 |
| 792 void QMVideoSettingsCallback::SetTargetFramerate(int frame_rate) { | 792 void QMVideoSettingsCallback::SetTargetFramerate(int frame_rate) { |
| 793 vpm_->SetTargetFramerate(frame_rate); | 793 vpm_->SetTargetFramerate(frame_rate); |
| 794 } | 794 } |
| 795 | 795 |
| 796 } // namespace webrtc | 796 } // namespace webrtc |
| OLD | NEW |