From fd42e7afbe43eca5ab6835f8b2720b7e0e8302e0 Mon Sep 17 00:00:00 2001 From: Preetam Singh Ranawat Date: Thu, 23 Jul 2015 08:59:47 +0530 Subject: AVCustomizations: Enable 16 and 24 bit PCM offload. -create extended decoder and renderer -add change to pass bit width and format info to renderer. -add change for PCM conversions -add changes for time calucation Conflicts: media/libmediaplayerservice/nuplayer/NuPlayer.cpp Change-Id: I3363140fad441a7746884076c40b46e777f2e06e --- media/libavextensions/media/AVMediaExtensions.h | 12 +++++ .../mediaplayerservice/AVNuExtensions.h | 27 ++++++++++- .../mediaplayerservice/AVNuFactory.cpp | 18 ++++++++ .../mediaplayerservice/AVNuUtils.cpp | 52 ++++++++++++++++++++++ media/libavextensions/stagefright/AVExtensions.h | 14 ++++++ media/libavextensions/stagefright/AVUtils.cpp | 27 +++++++++++ 6 files changed, 149 insertions(+), 1 deletion(-) (limited to 'media/libavextensions') diff --git a/media/libavextensions/media/AVMediaExtensions.h b/media/libavextensions/media/AVMediaExtensions.h index ad907a1..4338d5e 100644 --- a/media/libavextensions/media/AVMediaExtensions.h +++ b/media/libavextensions/media/AVMediaExtensions.h @@ -39,6 +39,18 @@ namespace android { */ struct AVMediaUtils { + virtual bool AudioTrackIsPcmOffloaded(const audio_format_t /*format*/) { + return false; + } + virtual status_t AudioTrackGetPosition(AudioTrack* /*track*/, + uint32_t* /*position*/) { + return NO_INIT; + } + + virtual status_t AudioTrackGetTimestamp(AudioTrack* /*track*/, + AudioTimestamp /*timestamp*/) { + return NO_INIT; + } // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVMediaUtils); }; diff --git a/media/libavextensions/mediaplayerservice/AVNuExtensions.h b/media/libavextensions/mediaplayerservice/AVNuExtensions.h index cc69ecf..ccf3615 100644 --- a/media/libavextensions/mediaplayerservice/AVNuExtensions.h +++ b/media/libavextensions/mediaplayerservice/AVNuExtensions.h @@ -34,7 +34,6 @@ namespace android { struct NuPlayer; - /* * Factory to create extended NuPlayer objects */ @@ -46,6 +45,17 @@ struct AVNuFactory { const sp &source, const sp &renderer); + virtual sp createDecoder( + const sp ¬ify, + const sp &source, + pid_t pid, + const sp &renderer); + + virtual sp createRenderer( + const sp &sink, + const sp ¬ify, + uint32_t flags); + // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVNuFactory); }; @@ -55,6 +65,21 @@ struct AVNuFactory { */ struct AVNuUtils { + virtual sp createPCMMetaFromSource(const sp &); + virtual bool pcmOffloadException(const sp &); + virtual bool isRAWFormat(const sp &); + virtual bool isRAWFormat(const sp &); + virtual int updateAudioBitWidth(audio_format_t audioFormat, + const sp &); + virtual audio_format_t getKeyPCMFormat(const sp &); + virtual void setKeyPCMFormat(const sp &, audio_format_t audioFormat); + virtual audio_format_t getPCMFormat(const sp &); + virtual void setPCMFormat(const sp &, audio_format_t audioFormat); + virtual void setSourcePCMFormat(const sp &); + virtual void setDecodedPCMFormat(const sp &); + virtual status_t convertToSinkFormatIfNeeded(const sp &, sp &, + audio_format_t sinkFormat, bool isOffload); + // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVNuUtils); }; diff --git a/media/libavextensions/mediaplayerservice/AVNuFactory.cpp b/media/libavextensions/mediaplayerservice/AVNuFactory.cpp index 6e1f1e9..ff7c074 100644 --- a/media/libavextensions/mediaplayerservice/AVNuFactory.cpp +++ b/media/libavextensions/mediaplayerservice/AVNuFactory.cpp @@ -37,6 +37,9 @@ #include #include #include +#include +#include +#include #include #include @@ -56,6 +59,21 @@ sp AVNuFactory::createPassThruDecoder( return new NuPlayer::DecoderPassThrough(notify, source, renderer); } +sp AVNuFactory::createDecoder( + const sp ¬ify, + const sp &source, + pid_t pid, + const sp &renderer) { + return new NuPlayer::Decoder(notify, source, pid, renderer); +} + +sp AVNuFactory::createRenderer( + const sp &sink, + const sp ¬ify, + uint32_t flags) { + return new NuPlayer::Renderer(sink, notify, flags); +} + // ----- NO TRESSPASSING BEYOND THIS LINE ------ AVNuFactory::AVNuFactory() { } diff --git a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp index 563cd29..e890a61 100644 --- a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp +++ b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp @@ -44,6 +44,58 @@ namespace android { + +sp AVNuUtils::createPCMMetaFromSource(const sp &sMeta) { + return sMeta; +} + +bool AVNuUtils::pcmOffloadException(const sp &) { + return true; +} + +bool AVNuUtils::isRAWFormat(const sp &) { + return false; +} + +bool AVNuUtils::isRAWFormat(const sp &) { + return false; +} + + +int AVNuUtils::updateAudioBitWidth(audio_format_t /*audioFormat*/, + const sp &){ + return 16; +} + +audio_format_t AVNuUtils::getKeyPCMFormat(const sp &) { + return AUDIO_FORMAT_INVALID; +} + +void AVNuUtils::setKeyPCMFormat(const sp &, audio_format_t /*audioFormat*/) { + +} + +audio_format_t AVNuUtils::getPCMFormat(const sp &) { + return AUDIO_FORMAT_PCM_16_BIT; +} + +void AVNuUtils::setPCMFormat(const sp &, audio_format_t /*audioFormat*/) { + +} + +void AVNuUtils::setSourcePCMFormat(const sp &) { + +} + +void AVNuUtils::setDecodedPCMFormat(const sp &) { + +} +status_t AVNuUtils::convertToSinkFormatIfNeeded(const sp &, sp &, + audio_format_t /*sinkFormat*/, bool /*isOffload*/) { + return INVALID_OPERATION; +} + + // ----- NO TRESSPASSING BEYOND THIS LINE ------ AVNuUtils::AVNuUtils() { } diff --git a/media/libavextensions/stagefright/AVExtensions.h b/media/libavextensions/stagefright/AVExtensions.h index 29f4cbc..f9f4cf1 100644 --- a/media/libavextensions/stagefright/AVExtensions.h +++ b/media/libavextensions/stagefright/AVExtensions.h @@ -65,6 +65,20 @@ struct AVUtils { virtual sp createCustomComponentByName(const sp &looper, const char* mime, bool encoder); + + virtual bool is24bitPCMOffloadEnabled(); + virtual bool is16bitPCMOffloadEnabled(); + virtual int getPcmSampleBits(const sp &); + virtual int getPcmSampleBits(const sp &); + virtual void setPcmSampleBits(const sp &, int32_t /*bitWidth*/); + virtual void setPcmSampleBits(const sp &, int32_t /*bitWidth*/); + + virtual audio_format_t updateAudioFormat(audio_format_t audioFormat, + const sp &); + + virtual audio_format_t updateAudioFormat(audio_format_t audioFormat, + const sp &); + // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVUtils); }; diff --git a/media/libavextensions/stagefright/AVUtils.cpp b/media/libavextensions/stagefright/AVUtils.cpp index d767f45..a4100c5 100644 --- a/media/libavextensions/stagefright/AVUtils.cpp +++ b/media/libavextensions/stagefright/AVUtils.cpp @@ -59,6 +59,33 @@ status_t AVUtils::sendMetaDataToHal( return OK; } +bool AVUtils::is24bitPCMOffloadEnabled() {return false;} +bool AVUtils::is16bitPCMOffloadEnabled() {return false;} + +int AVUtils::getPcmSampleBits(const sp &) { + return 16; +} + +int AVUtils::getPcmSampleBits(const sp &) { + return 16; +} + +void AVUtils::setPcmSampleBits(const sp &, int32_t /*bitWidth*/) { +} + +void AVUtils::setPcmSampleBits(const sp &, int32_t /*bitWidth*/) { +} + +audio_format_t AVUtils::updateAudioFormat(audio_format_t audioFormat, + const sp &){ + return audioFormat; +} + +audio_format_t AVUtils::updateAudioFormat(audio_format_t audioFormat, + const sp &){ + return audioFormat; +} + static bool dumbSniffer( const sp &, String8 *, float *, sp *) { -- cgit v1.1