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 #include "webrtc/voice_engine/transmit_mixer.h" | 11 #include "webrtc/voice_engine/transmit_mixer.h" |
12 | 12 |
| 13 #include "webrtc/base/format_macros.h" |
13 #include "webrtc/modules/utility/interface/audio_frame_operations.h" | 14 #include "webrtc/modules/utility/interface/audio_frame_operations.h" |
14 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" | 15 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" |
15 #include "webrtc/system_wrappers/interface/event_wrapper.h" | 16 #include "webrtc/system_wrappers/interface/event_wrapper.h" |
16 #include "webrtc/system_wrappers/interface/logging.h" | 17 #include "webrtc/system_wrappers/interface/logging.h" |
17 #include "webrtc/system_wrappers/interface/trace.h" | 18 #include "webrtc/system_wrappers/interface/trace.h" |
18 #include "webrtc/voice_engine/channel.h" | 19 #include "webrtc/voice_engine/channel.h" |
19 #include "webrtc/voice_engine/channel_manager.h" | 20 #include "webrtc/voice_engine/channel_manager.h" |
20 #include "webrtc/voice_engine/include/voe_external_media.h" | 21 #include "webrtc/voice_engine/include/voe_external_media.h" |
21 #include "webrtc/voice_engine/statistics.h" | 22 #include "webrtc/voice_engine/statistics.h" |
22 #include "webrtc/voice_engine/utility.h" | 23 #include "webrtc/voice_engine/utility.h" |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 CodecInst codec; | 305 CodecInst codec; |
305 channel->GetSendCodec(codec); | 306 channel->GetSendCodec(codec); |
306 *max_sample_rate = std::max(*max_sample_rate, codec.plfreq); | 307 *max_sample_rate = std::max(*max_sample_rate, codec.plfreq); |
307 *max_channels = std::max(*max_channels, codec.channels); | 308 *max_channels = std::max(*max_channels, codec.channels); |
308 } | 309 } |
309 } | 310 } |
310 } | 311 } |
311 | 312 |
312 int32_t | 313 int32_t |
313 TransmitMixer::PrepareDemux(const void* audioSamples, | 314 TransmitMixer::PrepareDemux(const void* audioSamples, |
314 uint32_t nSamples, | 315 size_t nSamples, |
315 uint8_t nChannels, | 316 uint8_t nChannels, |
316 uint32_t samplesPerSec, | 317 uint32_t samplesPerSec, |
317 uint16_t totalDelayMS, | 318 uint16_t totalDelayMS, |
318 int32_t clockDrift, | 319 int32_t clockDrift, |
319 uint16_t currentMicLevel, | 320 uint16_t currentMicLevel, |
320 bool keyPressed) | 321 bool keyPressed) |
321 { | 322 { |
322 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1), | 323 WEBRTC_TRACE(kTraceStream, kTraceVoice, VoEId(_instanceId, -1), |
323 "TransmitMixer::PrepareDemux(nSamples=%u, nChannels=%u," | 324 "TransmitMixer::PrepareDemux(nSamples=%" PRIuS ", " |
324 "samplesPerSec=%u, totalDelayMS=%u, clockDrift=%d," | 325 "nChannels=%u, samplesPerSec=%u, totalDelayMS=%u, " |
325 "currentMicLevel=%u)", nSamples, nChannels, samplesPerSec, | 326 "clockDrift=%d, currentMicLevel=%u)", |
326 totalDelayMS, clockDrift, currentMicLevel); | 327 nSamples, nChannels, samplesPerSec, totalDelayMS, clockDrift, |
| 328 currentMicLevel); |
327 | 329 |
328 // --- Resample input audio and create/store the initial audio frame | 330 // --- Resample input audio and create/store the initial audio frame |
329 GenerateAudioFrame(static_cast<const int16_t*>(audioSamples), | 331 GenerateAudioFrame(static_cast<const int16_t*>(audioSamples), |
330 nSamples, | 332 nSamples, |
331 nChannels, | 333 nChannels, |
332 samplesPerSec); | 334 samplesPerSec); |
333 | 335 |
334 { | 336 { |
335 CriticalSectionScoped cs(&_callbackCritSect); | 337 CriticalSectionScoped cs(&_callbackCritSect); |
336 if (external_preproc_ptr_) { | 338 if (external_preproc_ptr_) { |
(...skipping 784 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 return _fileCallRecording; | 1123 return _fileCallRecording; |
1122 } | 1124 } |
1123 | 1125 |
1124 bool TransmitMixer::IsRecordingMic() | 1126 bool TransmitMixer::IsRecordingMic() |
1125 { | 1127 { |
1126 CriticalSectionScoped cs(&_critSect); | 1128 CriticalSectionScoped cs(&_critSect); |
1127 return _fileRecording; | 1129 return _fileRecording; |
1128 } | 1130 } |
1129 | 1131 |
1130 void TransmitMixer::GenerateAudioFrame(const int16_t* audio, | 1132 void TransmitMixer::GenerateAudioFrame(const int16_t* audio, |
1131 int samples_per_channel, | 1133 size_t samples_per_channel, |
1132 int num_channels, | 1134 int num_channels, |
1133 int sample_rate_hz) { | 1135 int sample_rate_hz) { |
1134 int codec_rate; | 1136 int codec_rate; |
1135 int num_codec_channels; | 1137 int num_codec_channels; |
1136 GetSendCodecInfo(&codec_rate, &num_codec_channels); | 1138 GetSendCodecInfo(&codec_rate, &num_codec_channels); |
1137 // TODO(ajm): This currently restricts the sample rate to 32 kHz. | 1139 // TODO(ajm): This currently restricts the sample rate to 32 kHz. |
1138 // See: https://code.google.com/p/webrtc/issues/detail?id=3146 | 1140 // See: https://code.google.com/p/webrtc/issues/detail?id=3146 |
1139 // When 48 kHz is supported natively by AudioProcessing, this will have | 1141 // When 48 kHz is supported natively by AudioProcessing, this will have |
1140 // to be changed to handle 44.1 kHz. | 1142 // to be changed to handle 44.1 kHz. |
1141 int max_sample_rate_hz = kAudioProcMaxNativeSampleRateHz; | 1143 int max_sample_rate_hz = kAudioProcMaxNativeSampleRateHz; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1182 } | 1184 } |
1183 | 1185 |
1184 return 0; | 1186 return 0; |
1185 } | 1187 } |
1186 | 1188 |
1187 int32_t TransmitMixer::MixOrReplaceAudioWithFile( | 1189 int32_t TransmitMixer::MixOrReplaceAudioWithFile( |
1188 int mixingFrequency) | 1190 int mixingFrequency) |
1189 { | 1191 { |
1190 rtc::scoped_ptr<int16_t[]> fileBuffer(new int16_t[640]); | 1192 rtc::scoped_ptr<int16_t[]> fileBuffer(new int16_t[640]); |
1191 | 1193 |
1192 int fileSamples(0); | 1194 size_t fileSamples(0); |
1193 { | 1195 { |
1194 CriticalSectionScoped cs(&_critSect); | 1196 CriticalSectionScoped cs(&_critSect); |
1195 if (_filePlayerPtr == NULL) | 1197 if (_filePlayerPtr == NULL) |
1196 { | 1198 { |
1197 WEBRTC_TRACE(kTraceWarning, kTraceVoice, | 1199 WEBRTC_TRACE(kTraceWarning, kTraceVoice, |
1198 VoEId(_instanceId, -1), | 1200 VoEId(_instanceId, -1), |
1199 "TransmitMixer::MixOrReplaceAudioWithFile()" | 1201 "TransmitMixer::MixOrReplaceAudioWithFile()" |
1200 "fileplayer doesnot exist"); | 1202 "fileplayer doesnot exist"); |
1201 return -1; | 1203 return -1; |
1202 } | 1204 } |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 void TransmitMixer::EnableStereoChannelSwapping(bool enable) { | 1337 void TransmitMixer::EnableStereoChannelSwapping(bool enable) { |
1336 swap_stereo_channels_ = enable; | 1338 swap_stereo_channels_ = enable; |
1337 } | 1339 } |
1338 | 1340 |
1339 bool TransmitMixer::IsStereoChannelSwappingEnabled() { | 1341 bool TransmitMixer::IsStereoChannelSwappingEnabled() { |
1340 return swap_stereo_channels_; | 1342 return swap_stereo_channels_; |
1341 } | 1343 } |
1342 | 1344 |
1343 } // namespace voe | 1345 } // namespace voe |
1344 } // namespace webrtc | 1346 } // namespace webrtc |
OLD | NEW |