Supporting 48kHz PCM file.
BUG=None
Review-Url: https://codereview.webrtc.org/2790493004
Cr-Commit-Position: refs/heads/master@{#17493}
diff --git a/webrtc/common_types.h b/webrtc/common_types.h
index e1a4c77..cbad3b8 100644
--- a/webrtc/common_types.h
+++ b/webrtc/common_types.h
@@ -139,7 +139,8 @@
kFileFormatPreencodedFile = 4,
kFileFormatPcm16kHzFile = 7,
kFileFormatPcm8kHzFile = 8,
- kFileFormatPcm32kHzFile = 9
+ kFileFormatPcm32kHzFile = 9,
+ kFileFormatPcm48kHzFile = 10
};
enum FrameType {
diff --git a/webrtc/modules/media_file/media_file_impl.cc b/webrtc/modules/media_file/media_file_impl.cc
index e35626c..88310a5 100644
--- a/webrtc/modules/media_file/media_file_impl.cc
+++ b/webrtc/modules/media_file/media_file_impl.cc
@@ -132,6 +132,7 @@
switch(_fileFormat)
{
+ case kFileFormatPcm48kHzFile:
case kFileFormatPcm32kHzFile:
case kFileFormatPcm16kHzFile:
case kFileFormatPcm8kHzFile:
@@ -479,6 +480,7 @@
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 @@
case kFileFormatPcm8kHzFile:
case kFileFormatPcm16kHzFile:
case kFileFormatPcm32kHzFile:
+ case kFileFormatPcm48kHzFile:
bytesWritten = _ptrFileUtilityObj->WritePCMData(
*_ptrOutStream,
buffer,
@@ -845,13 +848,15 @@
}
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 @@
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::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
diff --git a/webrtc/modules/media_file/media_file_utility.cc b/webrtc/modules/media_file/media_file_utility.cc
index ae8d06f..6c60b05 100644
--- a/webrtc/modules/media_file/media_file_utility.cc
+++ b/webrtc/modules/media_file/media_file_utility.cc
@@ -1178,6 +1178,16 @@
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 @@
_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 @@
{
_codecId = kCodecL16_32Khz;
}
+ else if(codecInst.plfreq == 48000)
+ {
+ _codecId = kCodecL16_48Khz;
+ }
}
#ifdef WEBRTC_CODEC_ILBC
else if(STR_CASE_CMP(codecInst.plname, "ilbc") == 0)
diff --git a/webrtc/modules/media_file/media_file_utility.h b/webrtc/modules/media_file/media_file_utility.h
index 52cd807..659ddd0 100644
--- a/webrtc/modules/media_file/media_file_utility.h
+++ b/webrtc/modules/media_file/media_file_utility.h
@@ -228,6 +228,7 @@
kCodecL16_8Khz,
kCodecL16_16kHz,
kCodecL16_32Khz,
+ kCodecL16_48Khz,
kCodecPcmu,
kCodecPcma,
kCodecIlbc20Ms,
diff --git a/webrtc/voice_engine/file_player.cc b/webrtc/voice_engine/file_player.cc
index 4ee1322..81ba34f 100644
--- a/webrtc/voice_engine/file_player.cc
+++ b/webrtc/voice_engine/file_player.cc
@@ -100,7 +100,7 @@
} else if (_codec.plfreq == 44000) {
return 32000;
} else if (_codec.plfreq == 48000) {
- return 32000;
+ return 48000;
} else {
return _codec.plfreq;
}
@@ -220,16 +220,18 @@
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 @@
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 @@
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 @@
case kFileFormatPcm16kHzFile:
case kFileFormatPcm8kHzFile:
case kFileFormatPcm32kHzFile:
+ case kFileFormatPcm48kHzFile:
// audio formats
return std::unique_ptr<FilePlayer>(
new FilePlayerImpl(instanceID, fileFormat));
diff --git a/webrtc/voice_engine/file_player.h b/webrtc/voice_engine/file_player.h
index 956016f..1a321f6 100644
--- a/webrtc/voice_engine/file_player.h
+++ b/webrtc/voice_engine/file_player.h
@@ -23,8 +23,8 @@
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.