From af82f75690fbaceabaea9cd7222a14d05dc390cc Mon Sep 17 00:00:00 2001 From: "henrik.lundin@webrtc.org" Date: Wed, 25 Feb 2015 10:33:10 +0000 Subject: [PATCH] Let Add10MsData method do the encoding work as well This change essentially makes the Process method a no-op. All it does now is to return a stored value from the last encoding. The purpose of this change is to forge the Add... and Process methods into one and the same. BUG=3520 COAUTHOR=kwiberg@webrtc.org R=minyue@webrtc.org Review URL: https://webrtc-codereview.appspot.com/38229004 Cr-Commit-Position: refs/heads/master@{#8499} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8499 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../main/acm2/audio_coding_module_impl.cc | 24 +++++++++++++++---- .../main/acm2/audio_coding_module_impl.h | 4 ++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc index bf9bb01db..ddc3681cf 100644 --- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc +++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.cc @@ -145,10 +145,10 @@ AudioCodingModuleImpl::AudioCodingModuleImpl( aux_rtp_header_(NULL), receiver_initialized_(false), first_10ms_data_(false), + last_encode_value_(0), callback_crit_sect_(CriticalSectionWrapper::CreateCriticalSection()), packetization_callback_(NULL), vad_callback_(NULL) { - // Nullify send codec memory, set payload type and set codec name to // invalid values. const char no_name[] = "noCodecRegistered"; @@ -231,8 +231,12 @@ int64_t AudioCodingModuleImpl::TimeUntilNextProcess() { // (send_codec_inst_.plfreq / 1000); } -// Process any pending tasks such as timeouts. int32_t AudioCodingModuleImpl::Process() { + CriticalSectionScoped lock(acm_crit_sect_); + return last_encode_value_; +} + +int32_t AudioCodingModuleImpl::Encode() { // Make room for 1 RED payload. uint8_t stream[2 * MAX_PAYLOAD_SIZE_BYTE]; // TODO(turajs): |length_bytes| & |red_length_bytes| can be of type int if @@ -758,8 +762,20 @@ int AudioCodingModuleImpl::RegisterTransportCallback( } // Add 10MS of raw (PCM) audio data to the encoder. -int AudioCodingModuleImpl::Add10MsData( - const AudioFrame& audio_frame) { +int AudioCodingModuleImpl::Add10MsData(const AudioFrame& audio_frame) { + int r = Add10MsDataInternal(audio_frame); + if (r < 0) { + CriticalSectionScoped lock(acm_crit_sect_); + last_encode_value_ = -1; + } else { + int r_encode = Encode(); + CriticalSectionScoped lock(acm_crit_sect_); + last_encode_value_ = r_encode; + } + return r; +} + +int AudioCodingModuleImpl::Add10MsDataInternal(const AudioFrame& audio_frame) { if (audio_frame.samples_per_channel_ <= 0) { assert(false); WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, id_, diff --git a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h index 3fc00ac88..191fa6965 100644 --- a/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h +++ b/webrtc/modules/audio_coding/main/acm2/audio_coding_module_impl.h @@ -240,6 +240,9 @@ class AudioCodingModuleImpl : public AudioCodingModule { AudioDecodingCallStats* stats) const OVERRIDE; private: + int Add10MsDataInternal(const AudioFrame& audio_frame); + int Encode(); + ACMGenericCodec* CreateCodec(const CodecInst& codec); int InitializeReceiverSafe() EXCLUSIVE_LOCKS_REQUIRED(acm_crit_sect_); @@ -336,6 +339,7 @@ class AudioCodingModuleImpl : public AudioCodingModule { AudioFrame preprocess_frame_ GUARDED_BY(acm_crit_sect_); bool first_10ms_data_ GUARDED_BY(acm_crit_sect_); + int last_encode_value_ GUARDED_BY(acm_crit_sect_); CriticalSectionWrapper* callback_crit_sect_; AudioPacketizationCallback* packetization_callback_