diff options
author | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2015-12-26 23:19:21 +0100 |
---|---|---|
committer | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2015-12-26 23:19:21 +0100 |
commit | b5b73768b74d369f47cafd5371a5eaf2ac3d9373 (patch) | |
tree | 3faae9e49501046ea65fe59b28e56ac1a4e434db /media/libstagefright | |
parent | 18a7135624cd16f57157a9761964f1ca088dae25 (diff) | |
parent | 54cdb1f0ce7d03a75499d5ae258fd278de27462d (diff) | |
download | frameworks_av-b5b73768b74d369f47cafd5371a5eaf2ac3d9373.zip frameworks_av-b5b73768b74d369f47cafd5371a5eaf2ac3d9373.tar.gz frameworks_av-b5b73768b74d369f47cafd5371a5eaf2ac3d9373.tar.bz2 |
Merge remote-tracking branch 'cyanogenmod/cm-13.0' into replicant-6.0
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/ACodec.cpp | 11 | ||||
-rw-r--r-- | media/libstagefright/FFMPEGSoftCodec.cpp | 49 |
2 files changed, 29 insertions, 31 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index c84601d..6d26173 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -2065,6 +2065,7 @@ status_t ACodec::configureCodec( int32_t sbrMode; int32_t maxOutputChannelCount; int32_t pcmLimiterEnable; + int32_t bitsPerSample = 16; drcParams_t drc; if (!msg->findInt32("is-adts", &isADTS)) { isADTS = 0; @@ -2103,11 +2104,12 @@ status_t ACodec::configureCodec( // value is unknown drc.targetRefLevel = -1; } + msg->findInt32("bits-per-sample", &bitsPerSample); err = setupAACCodec( encoder, numChannels, sampleRate, bitRate, aacProfile, isADTS != 0, sbrMode, maxOutputChannelCount, drc, - pcmLimiterEnable); + pcmLimiterEnable, bitsPerSample); } } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_AMR_NB)) { err = setupAMRCodec(encoder, false /* isWAMR */, bitRate); @@ -2367,15 +2369,16 @@ status_t ACodec::setupAACCodec( bool encoder, int32_t numChannels, int32_t sampleRate, int32_t bitRate, int32_t aacProfile, bool isADTS, int32_t sbrMode, int32_t maxOutputChannelCount, const drcParams_t& drc, - int32_t pcmLimiterEnable) { + int32_t pcmLimiterEnable, int32_t bitsPerSample) { if (encoder && isADTS) { return -EINVAL; } - status_t err = setupRawAudioFormat( + status_t err = setupRawAudioFormatInternal( encoder ? kPortIndexInput : kPortIndexOutput, sampleRate, - numChannels); + numChannels, + bitsPerSample); if (err != OK) { return err; diff --git a/media/libstagefright/FFMPEGSoftCodec.cpp b/media/libstagefright/FFMPEGSoftCodec.cpp index 5ee168e..20c8359 100644 --- a/media/libstagefright/FFMPEGSoftCodec.cpp +++ b/media/libstagefright/FFMPEGSoftCodec.cpp @@ -223,37 +223,32 @@ const char* FFMPEGSoftCodec::overrideComponentName( } } - return componentName; -} - -void FFMPEGSoftCodec::overrideComponentName( - uint32_t /*quirks*/, const sp<AMessage> &msg, AString* componentName, AString* mime, int32_t isEncoder) { - - int32_t wmvVersion = 0; - if (!strncasecmp(mime->c_str(), MEDIA_MIMETYPE_VIDEO_WMV, strlen(MEDIA_MIMETYPE_VIDEO_WMV)) && - msg->findInt32(getMsgKey(kKeyWMVVersion), &wmvVersion)) { - ALOGD("Found WMV version key %d", wmvVersion); - if (wmvVersion != 2) { - ALOGD("Use FFMPEG for unsupported WMV track"); - componentName->setTo("OMX.ffmpeg.wmv.decoder"); + // Use FFMPEG for high-res formats which other decoders can't handle + int32_t bits = 16; + if (!isEncoder && meta->findInt32(kKeyBitsPerSample, &bits)) { + if (bits > 16) { + if (!strncasecmp(mime, MEDIA_MIMETYPE_AUDIO_AAC, strlen(MEDIA_MIMETYPE_AUDIO_AAC))) { + componentName = "OMX.ffmpeg.aac.decoder"; + ALOGD("Use FFMPEG for high-res AAC format"); + } else if (!strncasecmp(mime, MEDIA_MIMETYPE_AUDIO_FLAC, strlen(MEDIA_MIMETYPE_AUDIO_FLAC))) { + componentName = "OMX.ffmpeg.flac.decoder"; + ALOGD("Use FFMPEG for high-res FLAC format"); + } } } - int32_t encodeOptions = 0; - if (!isEncoder && !strncasecmp(mime->c_str(), MEDIA_MIMETYPE_AUDIO_WMA, strlen(MEDIA_MIMETYPE_AUDIO_WMA)) && - !msg->findInt32(getMsgKey(kKeyWMAEncodeOpt), &encodeOptions)) { - ALOGD("Use FFMPEG for unsupported WMA track"); - componentName->setTo("OMX.ffmpeg.wma.decoder"); - } + return componentName; +} - // Google's decoder doesn't support MAIN profile - int32_t aacProfile = 0; - if (!isEncoder && !strncasecmp(mime->c_str(), MEDIA_MIMETYPE_AUDIO_AAC, strlen(MEDIA_MIMETYPE_AUDIO_AAC)) && - msg->findInt32(getMsgKey(kKeyAACAOT), &aacProfile)) { - if ((aacProfile == OMX_AUDIO_AACObjectMain) || (aacProfile == OMX_AUDIO_AACObjectLTP)) { - ALOGD("Use FFMPEG for AAC Main/LTP profile"); - componentName->setTo("OMX.ffmpeg.aac.decoder"); - } +void FFMPEGSoftCodec::overrideComponentName( + uint32_t quirks, const sp<AMessage> &msg, AString* componentName, AString* mime, int32_t isEncoder) { + + sp<MetaData> meta = new MetaData; + convertMessageToMetaData(msg, meta); + const char *updated = overrideComponentName( + quirks, meta, mime->c_str(), isEncoder); + if (updated != NULL) { + componentName->setTo(updated); } } |