OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 #include "webrtc/video/video_send_stream.h" | 10 #include "webrtc/video/video_send_stream.h" |
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
514 thread_sync_event_(false /* manual_reset */, false), | 514 thread_sync_event_(false /* manual_reset */, false), |
515 stats_proxy_(Clock::GetRealTimeClock(), | 515 stats_proxy_(Clock::GetRealTimeClock(), |
516 config, | 516 config, |
517 encoder_config.content_type), | 517 encoder_config.content_type), |
518 config_(std::move(config)) { | 518 config_(std::move(config)) { |
519 vie_encoder_.reset( | 519 vie_encoder_.reset( |
520 new ViEEncoder(num_cpu_cores, &stats_proxy_, config_.encoder_settings, | 520 new ViEEncoder(num_cpu_cores, &stats_proxy_, config_.encoder_settings, |
521 config_.pre_encode_callback, config_.overuse_callback, | 521 config_.pre_encode_callback, config_.overuse_callback, |
522 config_.post_encode_callback)); | 522 config_.post_encode_callback)); |
523 | 523 |
| 524 // TODO(perkj): Remove vector<VideoStreams> from VideoEncoderConfig and |
| 525 // replace with max_bitrate. The VideoStream should be created by ViEEncoder |
| 526 // when the video resolution is known. |
| 527 int initial_max_encoder_bitrate = 0; |
| 528 for (const auto& stream : encoder_config.streams) |
| 529 initial_max_encoder_bitrate += stream.max_bitrate_bps; |
| 530 |
524 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( | 531 worker_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>(new ConstructionTask( |
525 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), | 532 &send_stream_, &thread_sync_event_, &stats_proxy_, vie_encoder_.get(), |
526 module_process_thread, call_stats, congestion_controller, | 533 module_process_thread, call_stats, congestion_controller, |
527 bitrate_allocator, send_delay_stats, remb, event_log, &config_, | 534 bitrate_allocator, send_delay_stats, remb, event_log, &config_, |
528 encoder_config.max_bitrate_bps, suspended_ssrcs))); | 535 initial_max_encoder_bitrate, suspended_ssrcs))); |
529 | 536 |
530 // Wait for ConstructionTask to complete so that |send_stream_| can be used. | 537 // Wait for ConstructionTask to complete so that |send_stream_| can be used. |
531 // |module_process_thread| must be registered and deregistered on the thread | 538 // |module_process_thread| must be registered and deregistered on the thread |
532 // it was created on. | 539 // it was created on. |
533 thread_sync_event_.Wait(rtc::Event::kForever); | 540 thread_sync_event_.Wait(rtc::Event::kForever); |
534 send_stream_->RegisterProcessThread(module_process_thread); | 541 send_stream_->RegisterProcessThread(module_process_thread); |
535 | 542 |
536 vie_encoder_->RegisterProcessThread(module_process_thread); | 543 vie_encoder_->RegisterProcessThread(module_process_thread); |
537 | 544 |
538 ReconfigureVideoEncoder(std::move(encoder_config)); | 545 ReconfigureVideoEncoder(std::move(encoder_config)); |
(...skipping 26 matching lines...) Expand all Loading... |
565 worker_queue_->PostTask([send_stream] { send_stream->Stop(); }); | 572 worker_queue_->PostTask([send_stream] { send_stream->Stop(); }); |
566 } | 573 } |
567 | 574 |
568 void VideoSendStream::SetSource( | 575 void VideoSendStream::SetSource( |
569 rtc::VideoSourceInterface<webrtc::VideoFrame>* source) { | 576 rtc::VideoSourceInterface<webrtc::VideoFrame>* source) { |
570 RTC_DCHECK_RUN_ON(&thread_checker_); | 577 RTC_DCHECK_RUN_ON(&thread_checker_); |
571 vie_encoder_->SetSource(source); | 578 vie_encoder_->SetSource(source); |
572 } | 579 } |
573 | 580 |
574 void VideoSendStream::ReconfigureVideoEncoder(VideoEncoderConfig config) { | 581 void VideoSendStream::ReconfigureVideoEncoder(VideoEncoderConfig config) { |
575 // TODO(perkj): Some test cases in VideoSendStreamTest call | 582 // ReconfigureVideoEncoder will be called on the thread that deliverers video |
576 // ReconfigureVideoEncoder from the network thread. | 583 // frames. We must change the encoder settings immediately so that |
577 // RTC_DCHECK_RUN_ON(&thread_checker_); | 584 // the codec settings matches the next frame. |
| 585 // TODO(perkj): Move logic for reconfiguration the encoder due to frame size |
| 586 // change from WebRtcVideoChannel2::WebRtcVideoSendStream::OnFrame to |
| 587 // be internally handled by ViEEncoder. |
578 vie_encoder_->ConfigureEncoder(std::move(config), | 588 vie_encoder_->ConfigureEncoder(std::move(config), |
579 config_.rtp.max_packet_size); | 589 config_.rtp.max_packet_size); |
580 } | 590 } |
581 | 591 |
582 VideoSendStream::Stats VideoSendStream::GetStats() { | 592 VideoSendStream::Stats VideoSendStream::GetStats() { |
583 // TODO(perkj, solenberg): Some test cases in EndToEndTest call GetStats from | 593 // TODO(perkj, solenberg): Some test cases in EndToEndTest call GetStats from |
584 // a network thread. See comment in Call::GetStats(). | 594 // a network thread. See comment in Call::GetStats(). |
585 // RTC_DCHECK_RUN_ON(&thread_checker_); | 595 // RTC_DCHECK_RUN_ON(&thread_checker_); |
586 return stats_proxy_.GetStats(); | 596 return stats_proxy_.GetStats(); |
587 } | 597 } |
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1098 &module_nack_rate); | 1108 &module_nack_rate); |
1099 *sent_video_rate_bps += module_video_rate; | 1109 *sent_video_rate_bps += module_video_rate; |
1100 *sent_nack_rate_bps += module_nack_rate; | 1110 *sent_nack_rate_bps += module_nack_rate; |
1101 *sent_fec_rate_bps += module_fec_rate; | 1111 *sent_fec_rate_bps += module_fec_rate; |
1102 } | 1112 } |
1103 return 0; | 1113 return 0; |
1104 } | 1114 } |
1105 | 1115 |
1106 } // namespace internal | 1116 } // namespace internal |
1107 } // namespace webrtc | 1117 } // namespace webrtc |
OLD | NEW |