From 3a0bcf107182665d5b8628245750f1e210ef0936 Mon Sep 17 00:00:00 2001 From: Steve Kondik Date: Thu, 19 Nov 2015 00:33:58 -0800 Subject: stagefright: Act V: I am become death, the destroyer of worlds * In which our hero unites the legions of distant worlds together as one at last to fight anew until the segfaults boil the lands and the New Version cometh. Change-Id: I869b2ab254968ed7a133827ea9e5ba6056f68a5c --- media/libavextensions/Android.mk | 4 ++++ media/libavextensions/mediaplayerservice/AVNuExtensions.h | 7 ++++++- media/libavextensions/mediaplayerservice/AVNuUtils.cpp | 15 +-------------- media/libmediaplayerservice/Android.mk | 4 ++++ media/libmediaplayerservice/MediaRecorderClient.h | 6 ++++-- media/libmediaplayerservice/StagefrightRecorder.h | 4 +++- media/libmediaplayerservice/nuplayer/Android.mk | 4 ++++ media/libmediaplayerservice/nuplayer/GenericSource.cpp | 9 ++++++++- media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp | 2 ++ media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 4 ++-- media/libstagefright/ACodec.cpp | 2 ++ media/libstagefright/Utils.cpp | 13 +++++++++++++ 12 files changed, 53 insertions(+), 21 deletions(-) (limited to 'media') diff --git a/media/libavextensions/Android.mk b/media/libavextensions/Android.mk index 3918857..0b01669 100644 --- a/media/libavextensions/Android.mk +++ b/media/libavextensions/Android.mk @@ -83,6 +83,10 @@ ifeq ($(TARGET_ENABLE_QC_AV_ENHANCEMENTS),true) LOCAL_CFLAGS += -DENABLE_AV_ENHANCEMENTS endif +ifeq ($(TARGET_BOARD_PLATFORM),msm8974) + LOCAL_CFLAGS += -DTARGET_8974 +endif + LOCAL_MODULE:= libavmediaserviceextensions LOCAL_CLANG := false diff --git a/media/libavextensions/mediaplayerservice/AVNuExtensions.h b/media/libavextensions/mediaplayerservice/AVNuExtensions.h index d7e29d1..2fe56b8 100644 --- a/media/libavextensions/mediaplayerservice/AVNuExtensions.h +++ b/media/libavextensions/mediaplayerservice/AVNuExtensions.h @@ -80,12 +80,17 @@ struct AVNuUtils { virtual void setDecodedPCMFormat(const sp &); virtual status_t convertToSinkFormatIfNeeded(const sp &, sp &, audio_format_t sinkFormat, bool isOffload); +#ifndef TARGET_8974 virtual uint32_t getFlags(); virtual bool canUseSetBuffers(const sp &Meta); - +#endif virtual void printFileName(int fd); virtual void checkFormatChange(bool *formatChange, const sp &accessUnit); +#ifdef TARGET_8974 virtual void addFlagsInMeta(const sp &buffer, int32_t flags, bool isAudio); + virtual uint32_t getFlags(); + virtual bool canUseSetBuffers(const sp &Meta); +#endif virtual bool dropCorruptFrame(); // ----- NO TRESSPASSING BEYOND THIS LINE ------ diff --git a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp index 31d7b32..8d87759 100644 --- a/media/libavextensions/mediaplayerservice/AVNuUtils.cpp +++ b/media/libavextensions/mediaplayerservice/AVNuUtils.cpp @@ -101,20 +101,7 @@ void AVNuUtils::setKeyPCMFormat(const sp &meta, audio_format_t audioFo meta->setInt32('pfmt', audioFormat); } -audio_format_t AVNuUtils::getPCMFormat(const sp &format) { - int32_t pcmFormat = 0; - if (format->findInt32("pcm-format", &pcmFormat)) - return (audio_format_t)pcmFormat; - - int32_t bits = 16; - if (format->findInt32("bits-per-sample", &bits)) { - if (bits == 8) - return AUDIO_FORMAT_PCM_8_BIT; - if (bits == 24) - return AUDIO_FORMAT_PCM_32_BIT; - if (bits == 32) - return AUDIO_FORMAT_PCM_FLOAT; - } +audio_format_t AVNuUtils::getPCMFormat(const sp &/*format*/) { return AUDIO_FORMAT_PCM_16_BIT; } diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk index c4c5b47..7c4aa3d 100644 --- a/media/libmediaplayerservice/Android.mk +++ b/media/libmediaplayerservice/Android.mk @@ -64,6 +64,10 @@ LOCAL_MODULE:= libmediaplayerservice #LOCAL_32_BIT_ONLY := true +ifeq ($(TARGET_BOARD_PLATFORM),msm8974) + LOCAL_CFLAGS += -DTARGET_8974 +endif + include $(BUILD_SHARED_LIBRARY) include $(call all-makefiles-under,$(LOCAL_PATH)) diff --git a/media/libmediaplayerservice/MediaRecorderClient.h b/media/libmediaplayerservice/MediaRecorderClient.h index 2e77d21..cfe332c 100644 --- a/media/libmediaplayerservice/MediaRecorderClient.h +++ b/media/libmediaplayerservice/MediaRecorderClient.h @@ -49,7 +49,6 @@ public: virtual status_t prepare(); virtual status_t getMaxAmplitude(int* max); virtual status_t start(); - virtual status_t pause(); virtual status_t stop(); virtual status_t reset(); virtual status_t init(); @@ -72,8 +71,11 @@ private: Mutex mLock; MediaRecorderBase *mRecorder; sp mMediaPlayerService; -}; +public: + virtual status_t pause(); + +}; }; // namespace android #endif // ANDROID_MEDIARECORDERCLIENT_H diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h index 26c5582..6c14993 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.h +++ b/media/libmediaplayerservice/StagefrightRecorder.h @@ -60,7 +60,6 @@ struct StagefrightRecorder : public MediaRecorderBase { virtual status_t setParameters(const String8& params); virtual status_t setListener(const sp& listener); virtual status_t setClientName(const String16& clientName); - virtual status_t setSourcePause(bool pause); virtual status_t prepare(); virtual status_t start(); virtual status_t pause(); @@ -199,6 +198,9 @@ protected: StagefrightRecorder(const StagefrightRecorder &); StagefrightRecorder &operator=(const StagefrightRecorder &); + +public: + virtual status_t setSourcePause(bool pause); }; } // namespace android diff --git a/media/libmediaplayerservice/nuplayer/Android.mk b/media/libmediaplayerservice/nuplayer/Android.mk index 6729cd5..cc1bdb4 100644 --- a/media/libmediaplayerservice/nuplayer/Android.mk +++ b/media/libmediaplayerservice/nuplayer/Android.mk @@ -34,6 +34,10 @@ ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT))) LOCAL_CFLAGS += -DENABLE_STAGEFRIGHT_EXPERIMENTS endif +ifeq ($(TARGET_BOARD_PLATFORM),msm8974) +LOCAL_CFLAGS += -DTARGET_8974 +endif + LOCAL_CLANG := true LOCAL_MODULE:= libstagefright_nuplayer diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp index c0355d7..d761bdf 100644 --- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp +++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp @@ -179,9 +179,14 @@ status_t NuPlayer::GenericSource::initFromDataSource() { } extractor = mWVMExtractor; } else { +#ifndef TARGET_8974 + int32_t flags = AVNuUtils::get()->getFlags(); +#else + int32_t flags = 0; +#endif extractor = MediaExtractor::Create(mDataSource, mimeType.isEmpty() ? NULL : mimeType.string(), - mIsStreaming ? 0 : AVNuUtils::get()->getFlags()); + mIsStreaming ? 0 : flags); } if (extractor == NULL) { @@ -211,10 +216,12 @@ status_t NuPlayer::GenericSource::initFromDataSource() { } } +#ifndef TARGET_8974 if (AVNuUtils::get()->canUseSetBuffers(mFileMeta)) { mUseSetBuffers = true; ALOGI("setBuffers mode enabled"); } +#endif int32_t totalBitrate = 0; diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp index 98eff88..1710076 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp @@ -597,7 +597,9 @@ bool NuPlayer::Decoder::handleAnOutputBuffer( buffer->meta()->clear(); buffer->meta()->setInt64("timeUs", timeUs); setPcmFormat(buffer->meta()); +#ifdef TARGET_8974 AVNuUtils::get()->addFlagsInMeta(buffer, flags, mIsAudio); +#endif bool eos = flags & MediaCodec::BUFFER_FLAG_EOS; // we do not expect CODECCONFIG or SYNCFRAME for decoder diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 307e0cb..52f99e4 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -1827,7 +1827,7 @@ status_t NuPlayer::Renderer::onOpenAudioSink( const PcmInfo info = { (audio_channel_mask_t)channelMask, (audio_output_flags_t)pcmFlags, - AVNuUtils::get()->getPCMFormat(format), + getPCMFormat(format), numChannels, sampleRate }; @@ -1862,7 +1862,7 @@ status_t NuPlayer::Renderer::onOpenAudioSink( sampleRate, numChannels, (audio_channel_mask_t)channelMask, - AVNuUtils::get()->getPCMFormat(format), + getPCMFormat(format), 0 /* bufferCount - unused */, mUseAudioCallback ? &NuPlayer::Renderer::AudioSinkCallback : NULL, mUseAudioCallback ? this : NULL, diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index a0282a1..9245c53 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include @@ -4274,6 +4275,7 @@ status_t ACodec::getPortFormat(OMX_U32 portIndex, sp ¬ify) { notify->setInt32("channel-count", params.nChannels); notify->setInt32("sample-rate", params.nSamplingRate); notify->setInt32("bits-per-sample", params.nBitPerSample); + notify->setInt32("pcm-format", getPCMFormat(notify)); if (mChannelMaskPresent) { notify->setInt32("channel-mask", mChannelMask); diff --git a/media/libstagefright/Utils.cpp b/media/libstagefright/Utils.cpp index 0cf76a3..6d62e03 100644 --- a/media/libstagefright/Utils.cpp +++ b/media/libstagefright/Utils.cpp @@ -1044,5 +1044,18 @@ void readFromAMessage( *sync = settings; } +audio_format_t getPCMFormat(const sp &format) { + int32_t bits = 16; + if (format->findInt32("bits-per-sample", &bits)) { + if (bits == 8) + return AUDIO_FORMAT_PCM_8_BIT; + if (bits == 24) + return AUDIO_FORMAT_PCM_32_BIT; + if (bits == 32) + return AUDIO_FORMAT_PCM_FLOAT; + } + return AUDIO_FORMAT_PCM_16_BIT; +} + } // namespace android -- cgit v1.1