From 41d3f579d2c166984958263533284209b90c87d5 Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Fri, 6 Feb 2015 12:21:32 -0800 Subject: Fix GSM WAV playback Bug:19289381 Change-Id: If7bbf1ecf1cb8796188e61bc2c42f8a099510424 --- media/libstagefright/ACodec.cpp | 17 +++++++++++++++++ media/libstagefright/WAVExtractor.cpp | 8 ++++---- 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'media') diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 82a228c..e015f1a 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -3805,6 +3805,23 @@ status_t ACodec::getPortFormat(OMX_U32 portIndex, sp ¬ify) { break; } + case OMX_AUDIO_CodingGSMFR: + { + OMX_AUDIO_PARAM_MP3TYPE params; + InitOMXParams(¶ms); + params.nPortIndex = portIndex; + + CHECK_EQ(mOMX->getParameter( + mNode, OMX_IndexParamAudioPcm, + ¶ms, sizeof(params)), + (status_t)OK); + + notify->setString("mime", MEDIA_MIMETYPE_AUDIO_MSGSM); + notify->setInt32("channel-count", params.nChannels); + notify->setInt32("sample-rate", params.nSampleRate); + break; + } + default: ALOGE("UNKNOWN AUDIO CODING: %d\n", audioDef->eEncoding); TRESPASS(); diff --git a/media/libstagefright/WAVExtractor.cpp b/media/libstagefright/WAVExtractor.cpp index a4a651d..335ac84 100644 --- a/media/libstagefright/WAVExtractor.cpp +++ b/media/libstagefright/WAVExtractor.cpp @@ -439,10 +439,6 @@ status_t WAVSource::read( maxBytesToRead = maxBytesAvailable; } - // read only integral amounts of audio unit frames. - const size_t inputUnitFrameSize = mNumChannels * mBitsPerSample / 8; - maxBytesToRead -= maxBytesToRead % inputUnitFrameSize; - if (mWaveFormat == WAVE_FORMAT_MSGSM) { // Microsoft packs 2 frames into 65 bytes, rather than using separate 33-byte frames, // so read multiples of 65, and use smaller buffers to account for ~10:1 expansion ratio @@ -450,6 +446,10 @@ status_t WAVSource::read( maxBytesToRead = 1024; } maxBytesToRead = (maxBytesToRead / 65) * 65; + } else { + // read only integral amounts of audio unit frames. + const size_t inputUnitFrameSize = mNumChannels * mBitsPerSample / 8; + maxBytesToRead -= maxBytesToRead % inputUnitFrameSize; } ssize_t n = mDataSource->readAt( -- cgit v1.1