diff options
author | Rachad <rachad@google.com> | 2015-01-10 02:00:10 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-01-10 02:00:10 +0000 |
commit | 7e85361e364bf8f80ab43dd5feb0f584e481019e (patch) | |
tree | fbc76909e02d1aab4f53f2ec76063c0ce92fbdd0 | |
parent | e6453027baf4c79e95b31aa602b18621e3118423 (diff) | |
parent | 26c73acb73b5af94cb27e5d285d1708d25eb6892 (diff) | |
download | frameworks_av-7e85361e364bf8f80ab43dd5feb0f584e481019e.zip frameworks_av-7e85361e364bf8f80ab43dd5feb0f584e481019e.tar.gz frameworks_av-7e85361e364bf8f80ab43dd5feb0f584e481019e.tar.bz2 |
am 26c73acb: am 0b460ad7: Merge "ACodec: Added support for E-AC3 decoders" into lmp-mr1-dev
* commit '26c73acb73b5af94cb27e5d285d1708d25eb6892':
ACodec: Added support for E-AC3 decoders
-rw-r--r-- | include/media/stagefright/ACodec.h | 2 | ||||
-rw-r--r-- | include/media/stagefright/MediaDefs.h | 1 | ||||
-rw-r--r-- | media/libstagefright/ACodec.cpp | 67 | ||||
-rw-r--r-- | media/libstagefright/MediaDefs.cpp | 1 |
4 files changed, 71 insertions, 0 deletions
diff --git a/include/media/stagefright/ACodec.h b/include/media/stagefright/ACodec.h index faa2caf..371e2c8 100644 --- a/include/media/stagefright/ACodec.h +++ b/include/media/stagefright/ACodec.h @@ -283,6 +283,8 @@ private: status_t setupAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); + status_t setupEAC3Codec(bool encoder, int32_t numChannels, int32_t sampleRate); + status_t selectAudioPortFormat( OMX_U32 portIndex, OMX_AUDIO_CODINGTYPE desiredFormat); diff --git a/include/media/stagefright/MediaDefs.h b/include/media/stagefright/MediaDefs.h index e67d4d5..13695d5 100644 --- a/include/media/stagefright/MediaDefs.h +++ b/include/media/stagefright/MediaDefs.h @@ -47,6 +47,7 @@ extern const char *MEDIA_MIMETYPE_AUDIO_FLAC; extern const char *MEDIA_MIMETYPE_AUDIO_AAC_ADTS; extern const char *MEDIA_MIMETYPE_AUDIO_MSGSM; extern const char *MEDIA_MIMETYPE_AUDIO_AC3; +extern const char *MEDIA_MIMETYPE_AUDIO_EAC3; extern const char *MEDIA_MIMETYPE_CONTAINER_MPEG4; extern const char *MEDIA_MIMETYPE_CONTAINER_WAV; diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 5999489..fa31c44 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -1105,6 +1105,8 @@ status_t ACodec::setComponentRole( "video_decoder.mpeg2", "video_encoder.mpeg2" }, { MEDIA_MIMETYPE_AUDIO_AC3, "audio_decoder.ac3", "audio_encoder.ac3" }, + { MEDIA_MIMETYPE_AUDIO_EAC3, + "audio_decoder.eac3", "audio_encoder.eac3" }, }; static const size_t kNumMimeToRole = @@ -1539,6 +1541,15 @@ status_t ACodec::configureCodec( } else { err = setupAC3Codec(encoder, numChannels, sampleRate); } + } else if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_EAC3)) { + int32_t numChannels; + int32_t sampleRate; + if (!msg->findInt32("channel-count", &numChannels) + || !msg->findInt32("sample-rate", &sampleRate)) { + err = INVALID_OPERATION; + } else { + err = setupEAC3Codec(encoder, numChannels, sampleRate); + } } if (err != OK) { @@ -1824,6 +1835,44 @@ status_t ACodec::setupAC3Codec( sizeof(def)); } +status_t ACodec::setupEAC3Codec( + bool encoder, int32_t numChannels, int32_t sampleRate) { + status_t err = setupRawAudioFormat( + encoder ? kPortIndexInput : kPortIndexOutput, sampleRate, numChannels); + + if (err != OK) { + return err; + } + + if (encoder) { + ALOGW("EAC3 encoding is not supported."); + return INVALID_OPERATION; + } + + OMX_AUDIO_PARAM_ANDROID_EAC3TYPE def; + InitOMXParams(&def); + def.nPortIndex = kPortIndexInput; + + err = mOMX->getParameter( + mNode, + (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidEac3, + &def, + sizeof(def)); + + if (err != OK) { + return err; + } + + def.nChannels = numChannels; + def.nSampleRate = sampleRate; + + return mOMX->setParameter( + mNode, + (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidEac3, + &def, + sizeof(def)); +} + static OMX_AUDIO_AMRBANDMODETYPE pickModeFromBitRate( bool isAMRWB, int32_t bps) { if (isAMRWB) { @@ -3498,6 +3547,24 @@ status_t ACodec::getPortFormat(OMX_U32 portIndex, sp<AMessage> ¬ify) { break; } + case OMX_AUDIO_CodingAndroidEAC3: + { + OMX_AUDIO_PARAM_ANDROID_EAC3TYPE params; + InitOMXParams(¶ms); + params.nPortIndex = portIndex; + + CHECK_EQ((status_t)OK, mOMX->getParameter( + mNode, + (OMX_INDEXTYPE)OMX_IndexParamAudioAndroidEac3, + ¶ms, + sizeof(params))); + + notify->setString("mime", MEDIA_MIMETYPE_AUDIO_EAC3); + notify->setInt32("channel-count", params.nChannels); + notify->setInt32("sample-rate", params.nSampleRate); + break; + } + case OMX_AUDIO_CodingAndroidOPUS: { OMX_AUDIO_PARAM_ANDROID_OPUSTYPE params; diff --git a/media/libstagefright/MediaDefs.cpp b/media/libstagefright/MediaDefs.cpp index d48dd84..c5a6939 100644 --- a/media/libstagefright/MediaDefs.cpp +++ b/media/libstagefright/MediaDefs.cpp @@ -45,6 +45,7 @@ const char *MEDIA_MIMETYPE_AUDIO_FLAC = "audio/flac"; const char *MEDIA_MIMETYPE_AUDIO_AAC_ADTS = "audio/aac-adts"; const char *MEDIA_MIMETYPE_AUDIO_MSGSM = "audio/gsm"; const char *MEDIA_MIMETYPE_AUDIO_AC3 = "audio/ac3"; +const char *MEDIA_MIMETYPE_AUDIO_EAC3 = "audio/eac3"; const char *MEDIA_MIMETYPE_CONTAINER_MPEG4 = "video/mp4"; const char *MEDIA_MIMETYPE_CONTAINER_WAV = "audio/x-wav"; |