diff options
author | Gilles-Arnaud Bleu-Laine <gilles@ti.com> | 2011-09-15 21:30:13 -0500 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-09-30 10:46:12 -0700 |
commit | 9a6ed36ba55a206934937cfafca7e797e8c6ea00 (patch) | |
tree | 5a4edaf522cfaa16037f4298d842602bafe9df32 | |
parent | 1402bb19012d4fc7595da2586bec9e6f428b36fb (diff) | |
download | frameworks_base-9a6ed36ba55a206934937cfafca7e797e8c6ea00.zip frameworks_base-9a6ed36ba55a206934937cfafca7e797e8c6ea00.tar.gz frameworks_base-9a6ed36ba55a206934937cfafca7e797e8c6ea00.tar.bz2 |
Gracefuly return on detecting wrong AAC format from corrupted files
Return BAD_VALUE error upon detection of wrongly formatted files.
The client should abort the initialization upon error detection.
The current CHECK() interrupts the configurecodec() preventing a graceful
exit.
Change-Id: Ic79313fa76a63284897df5d91635de87d06f3100
Signed-off-by: Gilles-Arnaud Bleu-Laine <gilles@ti.com>
-rw-r--r-- | include/media/stagefright/OMXCodec.h | 2 | ||||
-rwxr-xr-x | media/libstagefright/OMXCodec.cpp | 28 |
2 files changed, 23 insertions, 7 deletions
diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h index 8baf5ec..21b8c74 100644 --- a/include/media/stagefright/OMXCodec.h +++ b/include/media/stagefright/OMXCodec.h @@ -228,7 +228,7 @@ private: void setComponentRole(); void setAMRFormat(bool isWAMR, int32_t bitRate); - void setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate); + status_t setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate); void setG711Format(int32_t numChannels); status_t setVideoPortFormatType( diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index e94a8d7..ccc8a18 100755 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -625,7 +625,11 @@ status_t OMXCodec::configureCodec(const sp<MetaData> &meta) { CHECK(meta->findInt32(kKeyChannelCount, &numChannels)); CHECK(meta->findInt32(kKeySampleRate, &sampleRate)); - setAACFormat(numChannels, sampleRate, bitRate); + status_t err = setAACFormat(numChannels, sampleRate, bitRate); + if (err != OK) { + CODEC_LOGE("setAACFormat() failed (err = %d)", err); + return err; + } } else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_G711_ALAW, mMIME) || !strcasecmp(MEDIA_MIMETYPE_AUDIO_G711_MLAW, mMIME)) { // These are PCM-like formats with a fixed sample rate but @@ -3358,8 +3362,10 @@ void OMXCodec::setAMRFormat(bool isWAMR, int32_t bitRate) { } } -void OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate) { - CHECK(numChannels == 1 || numChannels == 2); +status_t OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate) { + if (numChannels > 2) + LOGW("Number of channels: (%d) \n", numChannels); + if (mIsEncoder) { //////////////// input port //////////////////// setRawAudioFormat(kPortIndexInput, sampleRate, numChannels); @@ -3410,9 +3416,13 @@ void OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bit profile.nAACERtools = OMX_AUDIO_AACERNone; profile.eAACProfile = OMX_AUDIO_AACObjectLC; profile.eAACStreamFormat = OMX_AUDIO_AACStreamFormatMP4FF; - CHECK_EQ(mOMX->setParameter(mNode, OMX_IndexParamAudioAac, - &profile, sizeof(profile)), (status_t)OK); + err = mOMX->setParameter(mNode, OMX_IndexParamAudioAac, + &profile, sizeof(profile)); + if (err != OK) { + CODEC_LOGE("setParameter('OMX_IndexParamAudioAac') failed (err = %d)", err); + return err; + } } else { OMX_AUDIO_PARAM_AACPROFILETYPE profile; InitOMXParams(&profile); @@ -3428,8 +3438,14 @@ void OMXCodec::setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bit err = mOMX->setParameter( mNode, OMX_IndexParamAudioAac, &profile, sizeof(profile)); - CHECK_EQ(err, (status_t)OK); + + if (err != OK) { + CODEC_LOGE("setParameter('OMX_IndexParamAudioAac') failed (err = %d)", err); + return err; + } } + + return OK; } void OMXCodec::setG711Format(int32_t numChannels) { |