summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-11-19 00:33:58 -0800
committerSteve Kondik <steve@cyngn.com>2015-11-24 04:02:48 -0800
commit3a0bcf107182665d5b8628245750f1e210ef0936 (patch)
tree5e530ee0e0da1b786466dcbf8362d671c6ea6057
parent29c75250c58bdcc3b38513813ba521cba82d5c61 (diff)
downloadframeworks_av-3a0bcf107182665d5b8628245750f1e210ef0936.zip
frameworks_av-3a0bcf107182665d5b8628245750f1e210ef0936.tar.gz
frameworks_av-3a0bcf107182665d5b8628245750f1e210ef0936.tar.bz2
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
-rw-r--r--include/media/IMediaRecorder.h3
-rw-r--r--include/media/MediaRecorderBase.h7
-rwxr-xr-xinclude/media/mediarecorder.h4
-rw-r--r--include/media/stagefright/AudioSource.h6
-rw-r--r--include/media/stagefright/FileSource.h8
-rw-r--r--include/media/stagefright/Utils.h2
-rw-r--r--media/libavextensions/Android.mk4
-rw-r--r--media/libavextensions/mediaplayerservice/AVNuExtensions.h7
-rw-r--r--media/libavextensions/mediaplayerservice/AVNuUtils.cpp15
-rw-r--r--media/libmediaplayerservice/Android.mk4
-rw-r--r--media/libmediaplayerservice/MediaRecorderClient.h6
-rw-r--r--media/libmediaplayerservice/StagefrightRecorder.h4
-rw-r--r--media/libmediaplayerservice/nuplayer/Android.mk4
-rw-r--r--media/libmediaplayerservice/nuplayer/GenericSource.cpp9
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp2
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp4
-rw-r--r--media/libstagefright/ACodec.cpp2
-rw-r--r--media/libstagefright/Utils.cpp13
18 files changed, 73 insertions, 31 deletions
diff --git a/include/media/IMediaRecorder.h b/include/media/IMediaRecorder.h
index 339bd9e..7e6befd 100644
--- a/include/media/IMediaRecorder.h
+++ b/include/media/IMediaRecorder.h
@@ -51,7 +51,6 @@ public:
virtual status_t prepare() = 0;
virtual status_t getMaxAmplitude(int* max) = 0;
virtual status_t start() = 0;
- virtual status_t pause() = 0;
virtual status_t stop() = 0;
virtual status_t reset() = 0;
virtual status_t init() = 0;
@@ -59,6 +58,8 @@ public:
virtual status_t release() = 0;
virtual status_t setInputSurface(const sp<IGraphicBufferConsumer>& surface) = 0;
virtual sp<IGraphicBufferProducer> querySurfaceMediaSource() = 0;
+
+ virtual status_t pause() = 0;
};
// ----------------------------------------------------------------------------
diff --git a/include/media/MediaRecorderBase.h b/include/media/MediaRecorderBase.h
index 48d8b70..4290563 100644
--- a/include/media/MediaRecorderBase.h
+++ b/include/media/MediaRecorderBase.h
@@ -53,7 +53,6 @@ struct MediaRecorderBase {
virtual status_t prepare() = 0;
virtual status_t start() = 0;
virtual status_t stop() = 0;
- virtual status_t pause() = 0;
virtual status_t close() = 0;
virtual status_t reset() = 0;
virtual status_t getMaxAmplitude(int *max) = 0;
@@ -61,13 +60,17 @@ struct MediaRecorderBase {
virtual status_t setInputSurface(const sp<IGraphicBufferConsumer>& surface) = 0;
virtual sp<IGraphicBufferProducer> querySurfaceMediaSource() const = 0;
-
protected:
String16 mOpPackageName;
private:
MediaRecorderBase(const MediaRecorderBase &);
MediaRecorderBase &operator=(const MediaRecorderBase &);
+
+public:
+ virtual status_t pause() = 0;
+
+
};
} // namespace android
diff --git a/include/media/mediarecorder.h b/include/media/mediarecorder.h
index 96c84bb..0cf1146 100755
--- a/include/media/mediarecorder.h
+++ b/include/media/mediarecorder.h
@@ -249,7 +249,6 @@ public:
status_t getMaxAmplitude(int* max);
virtual status_t start();
virtual status_t stop();
- virtual status_t pause();
status_t reset();
status_t init();
status_t close();
@@ -278,6 +277,9 @@ protected:
bool mIsOutputFileSet;
Mutex mLock;
Mutex mNotifyLock;
+
+public:
+ virtual status_t pause();
};
}; // namespace android
diff --git a/include/media/stagefright/AudioSource.h b/include/media/stagefright/AudioSource.h
index e48765e..699b1b4 100644
--- a/include/media/stagefright/AudioSource.h
+++ b/include/media/stagefright/AudioSource.h
@@ -46,8 +46,6 @@ struct AudioSource : public MediaSource, public MediaBufferObserver {
virtual status_t stop() { return reset(); }
virtual sp<MetaData> getFormat();
- virtual status_t pause();
-
// Returns the maximum amplitude since last call.
int16_t getMaxAmplitude();
@@ -113,6 +111,10 @@ protected:
AudioSource(const AudioSource &);
AudioSource &operator=(const AudioSource &);
+
+public:
+ virtual status_t pause();
+
};
} // namespace android
diff --git a/include/media/stagefright/FileSource.h b/include/media/stagefright/FileSource.h
index 21844ca..7051b20 100644
--- a/include/media/stagefright/FileSource.h
+++ b/include/media/stagefright/FileSource.h
@@ -39,14 +39,14 @@ public:
virtual status_t getSize(off64_t *size);
- virtual String8 getUri() {
- return mUri;
- }
-
virtual sp<DecryptHandle> DrmInitialization(const char *mime);
virtual void getDrmInfo(sp<DecryptHandle> &handle, DrmManagerClient **client);
+ virtual String8 getUri() {
+ return mUri;
+ }
+
protected:
virtual ~FileSource();
diff --git a/include/media/stagefright/Utils.h b/include/media/stagefright/Utils.h
index 5e9d7d4..1e9de1a 100644
--- a/include/media/stagefright/Utils.h
+++ b/include/media/stagefright/Utils.h
@@ -85,6 +85,8 @@ void writeToAMessage(sp<AMessage> msg, const AVSyncSettings &sync, float videoFp
void readFromAMessage(
const sp<AMessage> &msg, AVSyncSettings *sync /* nonnull */, float *videoFps /* nonnull */);
+audio_format_t getPCMFormat(const sp<AMessage> &format);
+
} // namespace android
#endif // UTILS_H_
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<AMessage> &);
virtual status_t convertToSinkFormatIfNeeded(const sp<ABuffer> &, sp<ABuffer> &,
audio_format_t sinkFormat, bool isOffload);
+#ifndef TARGET_8974
virtual uint32_t getFlags();
virtual bool canUseSetBuffers(const sp<MetaData> &Meta);
-
+#endif
virtual void printFileName(int fd);
virtual void checkFormatChange(bool *formatChange, const sp<ABuffer> &accessUnit);
+#ifdef TARGET_8974
virtual void addFlagsInMeta(const sp<ABuffer> &buffer, int32_t flags, bool isAudio);
+ virtual uint32_t getFlags();
+ virtual bool canUseSetBuffers(const sp<MetaData> &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<MetaData> &meta, audio_format_t audioFo
meta->setInt32('pfmt', audioFormat);
}
-audio_format_t AVNuUtils::getPCMFormat(const sp<AMessage> &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<AMessage> &/*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<MediaPlayerService> 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<IMediaRecorderClient>& 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 <media/stagefright/PersistentSurface.h>
#include <media/stagefright/SurfaceUtils.h>
#include <media/stagefright/FFMPEGSoftCodec.h>
+#include <media/stagefright/Utils.h>
#include <media/hardware/HardwareAPI.h>
@@ -4274,6 +4275,7 @@ status_t ACodec::getPortFormat(OMX_U32 portIndex, sp<AMessage> &notify) {
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<AMessage> &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