git-svn-id: http://webrtc.googlecode.com/svn/trunk@156 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
184
src/modules/audio_coding/main/source/audio_coding_module.cc
Normal file
184
src/modules/audio_coding/main/source/audio_coding_module.cc
Normal file
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
// 'conversion' conversion from 'type1' to 'type2', possible loss of data
|
||||
#pragma warning(disable: 4267)
|
||||
|
||||
#include "acm_dtmf_detection.h"
|
||||
#include "audio_coding_module.h"
|
||||
#include "audio_coding_module_impl.h"
|
||||
#include "trace.h"
|
||||
|
||||
namespace webrtc
|
||||
{
|
||||
|
||||
// Create module
|
||||
AudioCodingModule*
|
||||
AudioCodingModule::Create(
|
||||
const WebRtc_Word32 id)
|
||||
{
|
||||
return new AudioCodingModuleImpl(id);
|
||||
}
|
||||
|
||||
// Destroy module
|
||||
void
|
||||
AudioCodingModule::Destroy(
|
||||
AudioCodingModule* module)
|
||||
{
|
||||
delete static_cast<AudioCodingModuleImpl*> (module);
|
||||
}
|
||||
|
||||
// Returns version of the module and its components.
|
||||
WebRtc_Word32
|
||||
AudioCodingModule::GetVersion(
|
||||
WebRtc_Word8* version,
|
||||
WebRtc_UWord32& remainingBufferInBytes,
|
||||
WebRtc_UWord32& position)
|
||||
{
|
||||
WebRtc_Word32 len = position;
|
||||
strncpy(&version[position], "AudioCodingModule 1.3.0\n", remainingBufferInBytes);
|
||||
position = (WebRtc_UWord32)strlen(version);
|
||||
remainingBufferInBytes -= (position - len);
|
||||
|
||||
if(ACMNetEQ::GetVersion(version,
|
||||
remainingBufferInBytes, position) < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
ACMCodecDB::initACMCodecDB();
|
||||
if(ACMCodecDB::CodecsVersion(version,
|
||||
remainingBufferInBytes, position) < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get number of supported codecs
|
||||
WebRtc_UWord8 AudioCodingModule::NumberOfCodecs()
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceModuleCall, webrtc::kTraceAudioCoding, -1,
|
||||
"NumberOfCodecs()");
|
||||
ACMCodecDB::initACMCodecDB();
|
||||
return (WebRtc_UWord8)ACMCodecDB::NoOfCodecs();
|
||||
}
|
||||
|
||||
// Get supported codec param with id
|
||||
WebRtc_Word32
|
||||
AudioCodingModule::Codec(
|
||||
const WebRtc_UWord8 listId,
|
||||
CodecInst& codec)
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceModuleCall, webrtc::kTraceAudioCoding, -1,
|
||||
"Codec(const WebRtc_UWord8 listId, CodecInst& codec)");
|
||||
ACMCodecDB::initACMCodecDB();
|
||||
|
||||
// Get the codec settings for the codec with the given list ID
|
||||
return ACMCodecDB::Codec(listId, &codec);
|
||||
}
|
||||
|
||||
// Get supported codec Param with name
|
||||
WebRtc_Word32
|
||||
AudioCodingModule::Codec(
|
||||
const WebRtc_Word8* payloadName,
|
||||
CodecInst& codec,
|
||||
const WebRtc_Word32 samplingFreqHz)
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceModuleCall, webrtc::kTraceAudioCoding, -1,
|
||||
"Codec(const WebRtc_Word8* payloadName, CodecInst& codec)");
|
||||
ACMCodecDB::initACMCodecDB();
|
||||
|
||||
// Search through codec list for a matching name
|
||||
for(WebRtc_Word16 codecCntr = 0; codecCntr < ACMCodecDB::NoOfCodecs();
|
||||
codecCntr++)
|
||||
{
|
||||
// Store codec settings for codec number "codeCntr" in the output struct
|
||||
ACMCodecDB::Codec(codecCntr, &codec);
|
||||
|
||||
if(!STR_CASE_CMP(codec.plname, payloadName))
|
||||
{
|
||||
// If samplingFreqHz is set (!= -1), check if frequency matches
|
||||
if((samplingFreqHz == codec.plfreq) || (samplingFreqHz == -1))
|
||||
{
|
||||
// We found a match, return OK
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if we are here we couldn't find anything
|
||||
// set the params to unacceptable values
|
||||
codec.plname[0] = '\0';
|
||||
codec.pltype = -1;
|
||||
codec.pacsize = 0;
|
||||
codec.rate = 0;
|
||||
codec.plfreq = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get supported codec Index with name, and frequency if needed
|
||||
WebRtc_Word32
|
||||
AudioCodingModule::Codec(
|
||||
const WebRtc_Word8* payloadName,
|
||||
const WebRtc_Word32 samplingFreqHz)
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceModuleCall, webrtc::kTraceAudioCoding, -1,
|
||||
"Codec(const WebRtc_Word8* payloadName)");
|
||||
ACMCodecDB::initACMCodecDB();
|
||||
CodecInst codec;
|
||||
|
||||
// Search through codec list for a matching name
|
||||
for(WebRtc_Word16 codecCntr = 0; codecCntr < ACMCodecDB::NoOfCodecs();
|
||||
codecCntr++)
|
||||
{
|
||||
// Temporally store codec settings for codec number "codeCntr" in "codec"
|
||||
ACMCodecDB::Codec(codecCntr, &codec);
|
||||
|
||||
if(!STR_CASE_CMP(codec.plname, payloadName))
|
||||
{
|
||||
// If samplingFreqHz is set (!= -1), check if frequency matches
|
||||
if((samplingFreqHz == codec.plfreq) || (samplingFreqHz == -1))
|
||||
{
|
||||
// We found a match, return codec list number (index)
|
||||
return codecCntr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We did not find a matching codec in the list
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Checks the validity of the parameters of the given codec
|
||||
bool
|
||||
AudioCodingModule::IsCodecValid(
|
||||
const CodecInst& codec)
|
||||
{
|
||||
WebRtc_Word16 mirrorID;
|
||||
WebRtc_Word8 errMsg[500];
|
||||
|
||||
WEBRTC_TRACE(webrtc::kTraceModuleCall, webrtc::kTraceAudioCoding, -1,
|
||||
"IsCodecValid(const CodecInst& codec)");
|
||||
ACMCodecDB::initACMCodecDB();
|
||||
WebRtc_Word16 codecNumber = ACMCodecDB::CodecNumber(&codec, mirrorID, errMsg, 500);
|
||||
|
||||
if(codecNumber < 0)
|
||||
{
|
||||
WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceAudioCoding, -1, errMsg);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
Reference in New Issue
Block a user