Supporting 48kHz PCM file.
BUG=None Review-Url: https://codereview.webrtc.org/2790493004 Cr-Commit-Position: refs/heads/master@{#17493}
This commit is contained in:
parent
16d5bae396
commit
5f93709e7c
@ -139,7 +139,8 @@ enum FileFormats {
|
||||
kFileFormatPreencodedFile = 4,
|
||||
kFileFormatPcm16kHzFile = 7,
|
||||
kFileFormatPcm8kHzFile = 8,
|
||||
kFileFormatPcm32kHzFile = 9
|
||||
kFileFormatPcm32kHzFile = 9,
|
||||
kFileFormatPcm48kHzFile = 10
|
||||
};
|
||||
|
||||
enum FrameType {
|
||||
|
||||
@ -132,6 +132,7 @@ int32_t MediaFileImpl::PlayoutAudioData(int8_t* buffer,
|
||||
|
||||
switch(_fileFormat)
|
||||
{
|
||||
case kFileFormatPcm48kHzFile:
|
||||
case kFileFormatPcm32kHzFile:
|
||||
case kFileFormatPcm16kHzFile:
|
||||
case kFileFormatPcm8kHzFile:
|
||||
@ -479,6 +480,7 @@ int32_t MediaFileImpl::StartPlayingStream(
|
||||
case kFileFormatPcm8kHzFile:
|
||||
case kFileFormatPcm16kHzFile:
|
||||
case kFileFormatPcm32kHzFile:
|
||||
case kFileFormatPcm48kHzFile:
|
||||
{
|
||||
// ValidFileFormat() called in the beginneing of this function
|
||||
// prevents codecInst from being NULL here.
|
||||
@ -631,6 +633,7 @@ int32_t MediaFileImpl::IncomingAudioData(
|
||||
case kFileFormatPcm8kHzFile:
|
||||
case kFileFormatPcm16kHzFile:
|
||||
case kFileFormatPcm32kHzFile:
|
||||
case kFileFormatPcm48kHzFile:
|
||||
bytesWritten = _ptrFileUtilityObj->WritePCMData(
|
||||
*_ptrOutStream,
|
||||
buffer,
|
||||
@ -845,13 +848,15 @@ int32_t MediaFileImpl::StartRecordingAudioStream(
|
||||
}
|
||||
case kFileFormatPcm8kHzFile:
|
||||
case kFileFormatPcm16kHzFile:
|
||||
case kFileFormatPcm32kHzFile:
|
||||
case kFileFormatPcm48kHzFile:
|
||||
{
|
||||
if(!ValidFrequency(codecInst.plfreq) ||
|
||||
_ptrFileUtilityObj->InitPCMWriting(stream, codecInst.plfreq) ==
|
||||
-1)
|
||||
{
|
||||
WEBRTC_TRACE(kTraceError, kTraceFile, _id,
|
||||
"Failed to initialize 8 or 16KHz PCM file!");
|
||||
"Failed to initialize PCM file!");
|
||||
delete _ptrFileUtilityObj;
|
||||
_ptrFileUtilityObj = NULL;
|
||||
return -1;
|
||||
@ -1070,7 +1075,8 @@ bool MediaFileImpl::ValidFileFormat(const FileFormats format,
|
||||
if(format == kFileFormatPreencodedFile ||
|
||||
format == kFileFormatPcm8kHzFile ||
|
||||
format == kFileFormatPcm16kHzFile ||
|
||||
format == kFileFormatPcm32kHzFile)
|
||||
format == kFileFormatPcm32kHzFile ||
|
||||
format == kFileFormatPcm48kHzFile)
|
||||
{
|
||||
WEBRTC_TRACE(kTraceError, kTraceFile, -1,
|
||||
"Codec info required for file format specified!");
|
||||
@ -1115,12 +1121,12 @@ bool MediaFileImpl::ValidFilePositions(const uint32_t startPointMs,
|
||||
|
||||
bool MediaFileImpl::ValidFrequency(const uint32_t frequency)
|
||||
{
|
||||
if((frequency == 8000) || (frequency == 16000)|| (frequency == 32000))
|
||||
if((frequency == 8000) || (frequency == 16000)|| (frequency == 32000) || (frequency == 48000))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
WEBRTC_TRACE(kTraceError, kTraceFile, -1,
|
||||
"Frequency should be 8000, 16000 or 32000 (Hz)");
|
||||
"Frequency should be 8000, 16000, 32000, or 48000 (Hz)");
|
||||
return false;
|
||||
}
|
||||
} // namespace webrtc
|
||||
|
||||
@ -1178,6 +1178,16 @@ int32_t ModuleFileUtility::InitPCMReading(InStream& pcm,
|
||||
codec_info_.rate = 512000;
|
||||
_codecId = kCodecL16_32Khz;
|
||||
}
|
||||
else if(freq == 48000)
|
||||
{
|
||||
strcpy(codec_info_.plname, "L16");
|
||||
codec_info_.pltype = -1;
|
||||
codec_info_.plfreq = 48000;
|
||||
codec_info_.pacsize = 480;
|
||||
codec_info_.channels = 1;
|
||||
codec_info_.rate = 768000;
|
||||
_codecId = kCodecL16_48Khz;
|
||||
}
|
||||
|
||||
// Readsize for 10ms of audio data (2 bytes per sample).
|
||||
_readSizeBytes = 2 * codec_info_. plfreq / 100;
|
||||
@ -1313,12 +1323,24 @@ int32_t ModuleFileUtility::InitPCMWriting(OutStream& out, uint32_t freq)
|
||||
|
||||
_codecId = kCodecL16_32Khz;
|
||||
}
|
||||
else if(freq == 48000)
|
||||
{
|
||||
strcpy(codec_info_.plname, "L16");
|
||||
codec_info_.pltype = -1;
|
||||
codec_info_.plfreq = 48000;
|
||||
codec_info_.pacsize = 480;
|
||||
codec_info_.channels = 1;
|
||||
codec_info_.rate = 768000;
|
||||
|
||||
_codecId = kCodecL16_48Khz;
|
||||
}
|
||||
if((_codecId != kCodecL16_8Khz) &&
|
||||
(_codecId != kCodecL16_16kHz) &&
|
||||
(_codecId != kCodecL16_32Khz))
|
||||
(_codecId != kCodecL16_32Khz) &&
|
||||
(_codecId != kCodecL16_48Khz))
|
||||
{
|
||||
WEBRTC_TRACE(kTraceError, kTraceFile, _id,
|
||||
"CodecInst is not 8KHz PCM or 16KHz PCM!");
|
||||
"CodecInst is not 8KHz, 16KHz, 32kHz or 48kHz PCM!");
|
||||
return -1;
|
||||
}
|
||||
_writing = true;
|
||||
@ -1389,6 +1411,10 @@ int32_t ModuleFileUtility::set_codec_info(const CodecInst& codecInst)
|
||||
{
|
||||
_codecId = kCodecL16_32Khz;
|
||||
}
|
||||
else if(codecInst.plfreq == 48000)
|
||||
{
|
||||
_codecId = kCodecL16_48Khz;
|
||||
}
|
||||
}
|
||||
#ifdef WEBRTC_CODEC_ILBC
|
||||
else if(STR_CASE_CMP(codecInst.plname, "ilbc") == 0)
|
||||
|
||||
@ -228,6 +228,7 @@ private:
|
||||
kCodecL16_8Khz,
|
||||
kCodecL16_16kHz,
|
||||
kCodecL16_32Khz,
|
||||
kCodecL16_48Khz,
|
||||
kCodecPcmu,
|
||||
kCodecPcma,
|
||||
kCodecIlbc20Ms,
|
||||
|
||||
@ -100,7 +100,7 @@ int32_t FilePlayerImpl::Frequency() const {
|
||||
} else if (_codec.plfreq == 44000) {
|
||||
return 32000;
|
||||
} else if (_codec.plfreq == 48000) {
|
||||
return 32000;
|
||||
return 48000;
|
||||
} else {
|
||||
return _codec.plfreq;
|
||||
}
|
||||
@ -220,16 +220,18 @@ int32_t FilePlayerImpl::StartPlayingFile(const char* fileName,
|
||||
codecInstL16.rate = 128000;
|
||||
codecInstL16.plfreq = 8000;
|
||||
codecInstL16.pacsize = 80;
|
||||
|
||||
} else if (_fileFormat == kFileFormatPcm16kHzFile) {
|
||||
codecInstL16.rate = 256000;
|
||||
codecInstL16.plfreq = 16000;
|
||||
codecInstL16.pacsize = 160;
|
||||
|
||||
} else if (_fileFormat == kFileFormatPcm32kHzFile) {
|
||||
codecInstL16.rate = 512000;
|
||||
codecInstL16.plfreq = 32000;
|
||||
codecInstL16.pacsize = 160;
|
||||
codecInstL16.pacsize = 320;
|
||||
} else if (_fileFormat == kFileFormatPcm48kHzFile) {
|
||||
codecInstL16.rate = 768000;
|
||||
codecInstL16.plfreq = 48000;
|
||||
codecInstL16.pacsize = 480;
|
||||
} else {
|
||||
LOG(LS_ERROR) << "StartPlayingFile() sample frequency not "
|
||||
<< "supported for PCM format.";
|
||||
@ -277,7 +279,8 @@ int32_t FilePlayerImpl::StartPlayingFile(InStream* sourceStream,
|
||||
const CodecInst* codecInst) {
|
||||
if (_fileFormat == kFileFormatPcm16kHzFile ||
|
||||
_fileFormat == kFileFormatPcm32kHzFile ||
|
||||
_fileFormat == kFileFormatPcm8kHzFile) {
|
||||
_fileFormat == kFileFormatPcm8kHzFile ||
|
||||
_fileFormat == kFileFormatPcm48kHzFile) {
|
||||
CodecInst codecInstL16;
|
||||
strncpy(codecInstL16.plname, "L16", 32);
|
||||
codecInstL16.pltype = 93;
|
||||
@ -287,16 +290,18 @@ int32_t FilePlayerImpl::StartPlayingFile(InStream* sourceStream,
|
||||
codecInstL16.rate = 128000;
|
||||
codecInstL16.plfreq = 8000;
|
||||
codecInstL16.pacsize = 80;
|
||||
|
||||
} else if (_fileFormat == kFileFormatPcm16kHzFile) {
|
||||
codecInstL16.rate = 256000;
|
||||
codecInstL16.plfreq = 16000;
|
||||
codecInstL16.pacsize = 160;
|
||||
|
||||
} else if (_fileFormat == kFileFormatPcm32kHzFile) {
|
||||
codecInstL16.rate = 512000;
|
||||
codecInstL16.plfreq = 32000;
|
||||
codecInstL16.pacsize = 160;
|
||||
codecInstL16.pacsize = 320;
|
||||
} else if (_fileFormat == kFileFormatPcm48kHzFile) {
|
||||
codecInstL16.rate = 768000;
|
||||
codecInstL16.plfreq = 48000;
|
||||
codecInstL16.pacsize = 480;
|
||||
} else {
|
||||
LOG(LS_ERROR) << "StartPlayingFile() sample frequency not "
|
||||
<< "supported for PCM format.";
|
||||
@ -379,6 +384,7 @@ std::unique_ptr<FilePlayer> FilePlayer::CreateFilePlayer(
|
||||
case kFileFormatPcm16kHzFile:
|
||||
case kFileFormatPcm8kHzFile:
|
||||
case kFileFormatPcm32kHzFile:
|
||||
case kFileFormatPcm48kHzFile:
|
||||
// audio formats
|
||||
return std::unique_ptr<FilePlayer>(
|
||||
new FilePlayerImpl(instanceID, fileFormat));
|
||||
|
||||
@ -23,8 +23,8 @@ class FileCallback;
|
||||
|
||||
class FilePlayer {
|
||||
public:
|
||||
// The largest decoded frame size in samples (60ms with 32kHz sample rate).
|
||||
enum { MAX_AUDIO_BUFFER_IN_SAMPLES = 60 * 32 };
|
||||
// The largest decoded frame size in samples (120ms with 48kHz sample rate).
|
||||
enum { MAX_AUDIO_BUFFER_IN_SAMPLES = 120 * 48 };
|
||||
enum { MAX_AUDIO_BUFFER_IN_BYTES = MAX_AUDIO_BUFFER_IN_SAMPLES * 2 };
|
||||
|
||||
// Note: will return NULL for unsupported formats.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user