Chromium Code Reviews| 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 2693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2704 else | 2704 else |
| 2705 audio_coding_->DisableNack(); | 2705 audio_coding_->DisableNack(); |
| 2706 } | 2706 } |
| 2707 | 2707 |
| 2708 // Called when we are missing one or more packets. | 2708 // Called when we are missing one or more packets. |
| 2709 int Channel::ResendPackets(const uint16_t* sequence_numbers, int length) { | 2709 int Channel::ResendPackets(const uint16_t* sequence_numbers, int length) { |
| 2710 return _rtpRtcpModule->SendNACK(sequence_numbers, length); | 2710 return _rtpRtcpModule->SendNACK(sequence_numbers, length); |
| 2711 } | 2711 } |
| 2712 | 2712 |
| 2713 void Channel::ProcessAndEncodeAudio(const AudioFrame& audio_input) { | 2713 void Channel::ProcessAndEncodeAudio(const AudioFrame& audio_input) { |
| 2714 RTC_DCHECK(channel_state_.Get().sending); | 2714 // TODO(nisse): This is not quite enough to avoid race on |
| 2715 // destruction. In case we are preempted after this check, and some | |
| 2716 // other thread calls ChannelManager::DestroyChannel whch calls | |
|
henrika_webrtc
2017/04/26 14:16:01
nit, which
Also, in your failing test, why did yo
| |
| 2717 // StopSend, StopSend's flush task gets posted *before* we post our | |
| 2718 // task, our task can get run at the same time as the destructor. | |
|
the sun
2017/04/26 20:29:03
Can we use ChannelOwner to allow the task to keep
| |
| 2719 if (!channel_state_.Get().sending) | |
| 2720 return; | |
| 2715 std::unique_ptr<AudioFrame> audio_frame(new AudioFrame()); | 2721 std::unique_ptr<AudioFrame> audio_frame(new AudioFrame()); |
| 2716 // TODO(henrika): try to avoid copying by moving ownership of audio frame | 2722 // TODO(henrika): try to avoid copying by moving ownership of audio frame |
| 2717 // either into pool of frames or into the task itself. | 2723 // either into pool of frames or into the task itself. |
| 2718 audio_frame->CopyFrom(audio_input); | 2724 audio_frame->CopyFrom(audio_input); |
| 2719 audio_frame->id_ = ChannelId(); | 2725 audio_frame->id_ = ChannelId(); |
| 2720 encoder_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>( | 2726 encoder_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>( |
| 2721 new ProcessAndEncodeAudioTask(std::move(audio_frame), this))); | 2727 new ProcessAndEncodeAudioTask(std::move(audio_frame), this))); |
| 2722 } | 2728 } |
| 2723 | 2729 |
| 2724 void Channel::ProcessAndEncodeAudio(const int16_t* audio_data, | 2730 void Channel::ProcessAndEncodeAudio(const int16_t* audio_data, |
| 2725 int sample_rate, | 2731 int sample_rate, |
| 2726 size_t number_of_frames, | 2732 size_t number_of_frames, |
| 2727 size_t number_of_channels) { | 2733 size_t number_of_channels) { |
| 2728 RTC_DCHECK(channel_state_.Get().sending); | 2734 if (!channel_state_.Get().sending) |
| 2735 return; | |
| 2729 CodecInst codec; | 2736 CodecInst codec; |
| 2730 GetSendCodec(codec); | 2737 GetSendCodec(codec); |
| 2731 std::unique_ptr<AudioFrame> audio_frame(new AudioFrame()); | 2738 std::unique_ptr<AudioFrame> audio_frame(new AudioFrame()); |
| 2732 audio_frame->id_ = ChannelId(); | 2739 audio_frame->id_ = ChannelId(); |
| 2733 audio_frame->sample_rate_hz_ = std::min(codec.plfreq, sample_rate); | 2740 audio_frame->sample_rate_hz_ = std::min(codec.plfreq, sample_rate); |
| 2734 audio_frame->num_channels_ = std::min(number_of_channels, codec.channels); | 2741 audio_frame->num_channels_ = std::min(number_of_channels, codec.channels); |
| 2735 RemixAndResample(audio_data, number_of_frames, number_of_channels, | 2742 RemixAndResample(audio_data, number_of_frames, number_of_channels, |
| 2736 sample_rate, &input_resampler_, audio_frame.get()); | 2743 sample_rate, &input_resampler_, audio_frame.get()); |
| 2737 encoder_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>( | 2744 encoder_queue_->PostTask(std::unique_ptr<rtc::QueuedTask>( |
| 2738 new ProcessAndEncodeAudioTask(std::move(audio_frame), this))); | 2745 new ProcessAndEncodeAudioTask(std::move(audio_frame), this))); |
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3108 int64_t min_rtt = 0; | 3115 int64_t min_rtt = 0; |
| 3109 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != | 3116 if (_rtpRtcpModule->RTT(remoteSSRC, &rtt, &avg_rtt, &min_rtt, &max_rtt) != |
| 3110 0) { | 3117 0) { |
| 3111 return 0; | 3118 return 0; |
| 3112 } | 3119 } |
| 3113 return rtt; | 3120 return rtt; |
| 3114 } | 3121 } |
| 3115 | 3122 |
| 3116 } // namespace voe | 3123 } // namespace voe |
| 3117 } // namespace webrtc | 3124 } // namespace webrtc |
| OLD | NEW |