From b9fb5f42bc4a40f3be5a7a9b2c57bf6b604aea7e Mon Sep 17 00:00:00 2001 From: Mingming Yin Date: Wed, 19 Aug 2015 20:32:33 -0700 Subject: audio: add encoding support for linear PCM format - add encoding support for linear PCM format. Change-Id: Iecf402064d67d35d5057b814c842d79af92756d0 --- media/libmedia/MediaProfiles.cpp | 12 +++++++++++- media/libmediaplayerservice/StagefrightRecorder.cpp | 7 +++++++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'media') diff --git a/media/libmedia/MediaProfiles.cpp b/media/libmedia/MediaProfiles.cpp index d5cb4eb..f993950 100644 --- a/media/libmedia/MediaProfiles.cpp +++ b/media/libmedia/MediaProfiles.cpp @@ -45,7 +45,8 @@ const MediaProfiles::NameToTagMap MediaProfiles::sAudioEncoderNameMap[] = { {"amrwb", AUDIO_ENCODER_AMR_WB}, {"aac", AUDIO_ENCODER_AAC}, {"heaac", AUDIO_ENCODER_HE_AAC}, - {"aaceld", AUDIO_ENCODER_AAC_ELD} + {"aaceld", AUDIO_ENCODER_AAC_ELD}, + {"lpcm", AUDIO_ENCODER_LPCM}, }; const MediaProfiles::NameToTagMap MediaProfiles::sFileFormatMap[] = { @@ -789,6 +790,7 @@ MediaProfiles::createDefaultCamcorderProfiles(MediaProfiles *profiles) MediaProfiles::createDefaultAudioEncoders(MediaProfiles *profiles) { profiles->mAudioEncoders.add(createDefaultAmrNBEncoderCap()); + profiles->mAudioEncoders.add(createDefaultLpcmEncoderCap()); } /*static*/ void @@ -823,6 +825,14 @@ MediaProfiles::createDefaultAmrNBEncoderCap() AUDIO_ENCODER_AMR_NB, 5525, 12200, 8000, 8000, 1, 1); } + +/*static*/ MediaProfiles::AudioEncoderCap* +MediaProfiles::createDefaultLpcmEncoderCap() +{ + return new MediaProfiles::AudioEncoderCap( + AUDIO_ENCODER_LPCM, 768000, 4608000, 8000, 48000, 1, 6); +} + /*static*/ void MediaProfiles::createDefaultImageEncodingQualityLevels(MediaProfiles *profiles) { diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index 817ae4d..49804c5 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -991,6 +991,13 @@ sp StagefrightRecorder::createAudioSource() { sp audioEncoder = MediaCodecSource::Create(mLooper, format, audioSource); + // If encoder could not be created (as in LPCM), then + // use the AudioSource directly as the MediaSource. + if (audioEncoder == NULL && + mAudioEncoder == AUDIO_ENCODER_LPCM) { + ALOGD("No encoder is needed for linear PCM format"); + audioEncoder = audioSource; + } mAudioSourceNode = audioSource; if (audioEncoder == NULL) { -- cgit v1.1