Merge "AudioFlinger: Add Thread history to dumpsys"
diff --git a/cmds/stagefright/record.cpp b/cmds/stagefright/record.cpp
index 44b0015..95a16f3 100644
--- a/cmds/stagefright/record.cpp
+++ b/cmds/stagefright/record.cpp
@@ -17,7 +17,6 @@
#include "SineSource.h"
#include <binder/ProcessState.h>
-#include <media/MediaExtractor.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/ALooper.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -28,6 +27,7 @@
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaCodecSource.h>
#include <media/stagefright/MetaData.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MediaExtractorFactory.h>
#include <media/stagefright/MPEG4Writer.h>
#include <media/stagefright/SimpleDecodingSource.h>
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index bddf945..0d331df 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -32,7 +32,6 @@
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
#include <media/DataSource.h>
-#include <media/MediaExtractor.h>
#include <media/MediaSource.h>
#include <media/ICrypto.h>
#include <media/IMediaHTTPService.h>
@@ -50,6 +49,7 @@
#include <media/stagefright/MediaCodecList.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MediaExtractorFactory.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/SimpleDecodingSource.h>
diff --git a/cmds/stagefright/stream.cpp b/cmds/stagefright/stream.cpp
index b0199d8..b2f39dc 100644
--- a/cmds/stagefright/stream.cpp
+++ b/cmds/stagefright/stream.cpp
@@ -24,7 +24,6 @@
#include <media/DataSource.h>
#include <media/IMediaHTTPService.h>
#include <media/IStreamSource.h>
-#include <media/MediaExtractor.h>
#include <media/mediaplayer.h>
#include <media/MediaSource.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -32,6 +31,7 @@
#include <media/stagefright/DataSourceFactory.h>
#include <media/stagefright/InterfaceUtils.h>
#include <media/stagefright/MPEG2TSWriter.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MediaExtractorFactory.h>
#include <media/stagefright/MetaData.h>
diff --git a/include/media/MediaExtractor.h b/include/media/MediaExtractor.h
deleted file mode 120000
index 4b35fe1..0000000
--- a/include/media/MediaExtractor.h
+++ /dev/null
@@ -1 +0,0 @@
-../../media/libmediaextractor/include/media/MediaExtractor.h
\ No newline at end of file
diff --git a/media/ndk/NdkMediaFormatPriv.h b/include/media/NdkMediaFormatPriv.h
similarity index 79%
rename from media/ndk/NdkMediaFormatPriv.h
rename to include/media/NdkMediaFormatPriv.h
index c6a6563..6c452c3 100644
--- a/media/ndk/NdkMediaFormatPriv.h
+++ b/include/media/NdkMediaFormatPriv.h
@@ -27,13 +27,23 @@
#ifndef _NDK_MEDIA_FORMAT_PRIV_H
#define _NDK_MEDIA_FORMAT_PRIV_H
-#include <media/NdkMediaFormat.h>
+#include <utils/String8.h>
+#include <utils/StrongPointer.h>
+#include <media/stagefright/foundation/AMessage.h>
#ifdef __cplusplus
extern "C" {
#endif
-AMediaFormat* AMediaFormat_fromMsg(void*);
+using namespace android;
+
+struct AMediaFormat {
+ sp<AMessage> mFormat;
+ String8 mDebug;
+ KeyedVector<String8, String8> mStringCache;
+};
+
+AMediaFormat* AMediaFormat_fromMsg(const void*);
void AMediaFormat_getFormat(const AMediaFormat* mData, void* dest);
#ifdef __cplusplus
diff --git a/media/extractors/mp4/AC4Parser.cpp b/media/extractors/mp4/AC4Parser.cpp
index 167d474..a95c2db 100644
--- a/media/extractors/mp4/AC4Parser.cpp
+++ b/media/extractors/mp4/AC4Parser.cpp
@@ -577,14 +577,14 @@
BYTE_ALIGN;
CHECK_BITS_LEFT(16);
uint32_t name_len = mBitReader.getBits(16);
- char* presentation_name = new char[name_len+1];
CHECK_BITS_LEFT(name_len * 8);
+ std::string &presentation_name =
+ mPresentations[presentation].mDescription;
+ presentation_name.clear();
+ presentation_name.resize(name_len);
for (uint32_t i = 0; i < name_len; i++) {
presentation_name[i] = (char)(mBitReader.getBits(8));
}
- presentation_name[name_len] = '\0';
- std::string description(presentation_name, name_len);
- mPresentations[presentation].mDescription = description;
CHECK_BITS_LEFT(5);
uint32_t n_targets = mBitReader.getBits(5);
CHECK_BITS_LEFT(n_targets * (3 + 8));
diff --git a/media/extractors/mpeg2/ExtractorBundle.cpp b/media/extractors/mpeg2/ExtractorBundle.cpp
index ff40ed4..88c2d87 100644
--- a/media/extractors/mpeg2/ExtractorBundle.cpp
+++ b/media/extractors/mpeg2/ExtractorBundle.cpp
@@ -18,7 +18,6 @@
#define LOG_TAG "MPEG2ExtractorBundle"
#include <utils/Log.h>
-#include <media/MediaExtractor.h>
#include <media/MediaExtractorPluginHelper.h>
#include "MPEG2PSExtractor.h"
#include "MPEG2TSExtractor.h"
diff --git a/media/libaaudio/src/client/AudioEndpoint.cpp b/media/libaaudio/src/client/AudioEndpoint.cpp
index f8e34d1..214f888 100644
--- a/media/libaaudio/src/client/AudioEndpoint.cpp
+++ b/media/libaaudio/src/client/AudioEndpoint.cpp
@@ -196,7 +196,7 @@
int32_t AudioEndpoint::getEmptyFramesAvailable()
{
- return mDataQueue->getFifoControllerBase()->getEmptyFramesAvailable();
+ return mDataQueue->getEmptyFramesAvailable();
}
int32_t AudioEndpoint::getFullFramesAvailable(WrappingBuffer *wrappingBuffer)
@@ -206,15 +206,15 @@
int32_t AudioEndpoint::getFullFramesAvailable()
{
- return mDataQueue->getFifoControllerBase()->getFullFramesAvailable();
+ return mDataQueue->getFullFramesAvailable();
}
void AudioEndpoint::advanceWriteIndex(int32_t deltaFrames) {
- mDataQueue->getFifoControllerBase()->advanceWriteIndex(deltaFrames);
+ mDataQueue->advanceWriteIndex(deltaFrames);
}
void AudioEndpoint::advanceReadIndex(int32_t deltaFrames) {
- mDataQueue->getFifoControllerBase()->advanceReadIndex(deltaFrames);
+ mDataQueue->advanceReadIndex(deltaFrames);
}
void AudioEndpoint::setDataReadCounter(fifo_counter_t framesRead)
diff --git a/media/libaaudio/src/fifo/FifoBuffer.cpp b/media/libaaudio/src/fifo/FifoBuffer.cpp
index b09258e..f5113f2 100644
--- a/media/libaaudio/src/fifo/FifoBuffer.cpp
+++ b/media/libaaudio/src/fifo/FifoBuffer.cpp
@@ -23,30 +23,26 @@
#include <utils/Log.h>
#include <algorithm>
+#include <memory>
#include "FifoControllerBase.h"
#include "FifoController.h"
#include "FifoControllerIndirect.h"
#include "FifoBuffer.h"
-using namespace android; // TODO just import names needed
+using android::FifoBuffer;
+using android::fifo_frames_t;
FifoBuffer::FifoBuffer(int32_t bytesPerFrame, fifo_frames_t capacityInFrames)
- : mFrameCapacity(capacityInFrames)
- , mBytesPerFrame(bytesPerFrame)
- , mStorage(nullptr)
- , mFramesReadCount(0)
- , mFramesUnderrunCount(0)
- , mUnderrunCount(0)
+ : mBytesPerFrame(bytesPerFrame)
{
- // TODO Handle possible failures to allocate. Move out of constructor?
- mFifo = new FifoController(capacityInFrames, capacityInFrames);
+ mFifo = std::make_unique<FifoController>(capacityInFrames, capacityInFrames);
// allocate buffer
int32_t bytesPerBuffer = bytesPerFrame * capacityInFrames;
mStorage = new uint8_t[bytesPerBuffer];
mStorageOwned = true;
- ALOGV("capacityInFrames = %d, bytesPerFrame = %d",
- capacityInFrames, bytesPerFrame);
+ ALOGV("%s() capacityInFrames = %d, bytesPerFrame = %d",
+ __func__, capacityInFrames, bytesPerFrame);
}
FifoBuffer::FifoBuffer( int32_t bytesPerFrame,
@@ -55,14 +51,10 @@
fifo_counter_t * writeIndexAddress,
void * dataStorageAddress
)
- : mFrameCapacity(capacityInFrames)
- , mBytesPerFrame(bytesPerFrame)
+ : mBytesPerFrame(bytesPerFrame)
, mStorage(static_cast<uint8_t *>(dataStorageAddress))
- , mFramesReadCount(0)
- , mFramesUnderrunCount(0)
- , mUnderrunCount(0)
{
- mFifo = new FifoControllerIndirect(capacityInFrames,
+ mFifo = std::make_unique<FifoControllerIndirect>(capacityInFrames,
capacityInFrames,
readIndexAddress,
writeIndexAddress);
@@ -73,10 +65,8 @@
if (mStorageOwned) {
delete[] mStorage;
}
- delete mFifo;
}
-
int32_t FifoBuffer::convertFramesToBytes(fifo_frames_t frames) {
return frames * mBytesPerFrame;
}
@@ -87,11 +77,12 @@
wrappingBuffer->data[1] = nullptr;
wrappingBuffer->numFrames[1] = 0;
if (framesAvailable > 0) {
+ fifo_frames_t capacity = mFifo->getCapacity();
uint8_t *source = &mStorage[convertFramesToBytes(startIndex)];
// Does the available data cross the end of the FIFO?
- if ((startIndex + framesAvailable) > mFrameCapacity) {
+ if ((startIndex + framesAvailable) > capacity) {
wrappingBuffer->data[0] = source;
- fifo_frames_t firstFrames = mFrameCapacity - startIndex;
+ fifo_frames_t firstFrames = capacity - startIndex;
wrappingBuffer->numFrames[0] = firstFrames;
wrappingBuffer->data[1] = &mStorage[0];
wrappingBuffer->numFrames[1] = framesAvailable - firstFrames;
@@ -107,7 +98,8 @@
fifo_frames_t FifoBuffer::getFullDataAvailable(WrappingBuffer *wrappingBuffer) {
// The FIFO might be overfull so clip to capacity.
- fifo_frames_t framesAvailable = std::min(mFifo->getFullFramesAvailable(), mFrameCapacity);
+ fifo_frames_t framesAvailable = std::min(mFifo->getFullFramesAvailable(),
+ mFifo->getCapacity());
fifo_frames_t startIndex = mFifo->getReadIndex();
fillWrappingBuffer(wrappingBuffer, framesAvailable, startIndex);
return framesAvailable;
@@ -115,7 +107,8 @@
fifo_frames_t FifoBuffer::getEmptyRoomAvailable(WrappingBuffer *wrappingBuffer) {
// The FIFO might have underrun so clip to capacity.
- fifo_frames_t framesAvailable = std::min(mFifo->getEmptyFramesAvailable(), mFrameCapacity);
+ fifo_frames_t framesAvailable = std::min(mFifo->getEmptyFramesAvailable(),
+ mFifo->getCapacity());
fifo_frames_t startIndex = mFifo->getWriteIndex();
fillWrappingBuffer(wrappingBuffer, framesAvailable, startIndex);
return framesAvailable;
@@ -183,23 +176,6 @@
return framesWritten;
}
-fifo_frames_t FifoBuffer::readNow(void *buffer, fifo_frames_t numFrames) {
- mLastReadSize = numFrames;
- fifo_frames_t framesLeft = numFrames;
- fifo_frames_t framesRead = read(buffer, numFrames);
- framesLeft -= framesRead;
- mFramesReadCount += framesRead;
- mFramesUnderrunCount += framesLeft;
- // Zero out any samples we could not set.
- if (framesLeft > 0) {
- mUnderrunCount++;
- int32_t bytesToZero = convertFramesToBytes(framesLeft);
- memset(buffer, 0, bytesToZero);
- }
-
- return framesRead;
-}
-
fifo_frames_t FifoBuffer::getThreshold() {
return mFifo->getThreshold();
}
diff --git a/media/libaaudio/src/fifo/FifoBuffer.h b/media/libaaudio/src/fifo/FifoBuffer.h
index f5a9e27..0d188c4 100644
--- a/media/libaaudio/src/fifo/FifoBuffer.h
+++ b/media/libaaudio/src/fifo/FifoBuffer.h
@@ -17,6 +17,7 @@
#ifndef FIFO_FIFO_BUFFER_H
#define FIFO_FIFO_BUFFER_H
+#include <memory>
#include <stdint.h>
#include "FifoControllerBase.h"
@@ -77,24 +78,12 @@
*/
fifo_frames_t getEmptyRoomAvailable(WrappingBuffer *wrappingBuffer);
- /**
- * Copy data from the FIFO into the buffer.
- * @param buffer
- * @param numFrames
- * @return
- */
- fifo_frames_t readNow(void *buffer, fifo_frames_t numFrames);
-
- int64_t getNextReadTime(int32_t frameRate);
-
- int32_t getUnderrunCount() const { return mUnderrunCount; }
-
- FifoControllerBase *getFifoControllerBase() { return mFifo; }
-
int32_t getBytesPerFrame() {
return mBytesPerFrame;
}
+ // Proxy methods for the internal FifoController
+
fifo_counter_t getReadCounter() {
return mFifo->getReadCounter();
}
@@ -111,6 +100,22 @@
mFifo->setWriteCounter(n);
}
+ void advanceReadIndex(fifo_frames_t numFrames) {
+ mFifo->advanceReadIndex(numFrames);
+ }
+
+ void advanceWriteIndex(fifo_frames_t numFrames) {
+ mFifo->advanceWriteIndex(numFrames);
+ }
+
+ fifo_frames_t getEmptyFramesAvailable() {
+ return mFifo->getEmptyFramesAvailable();
+ }
+
+ fifo_frames_t getFullFramesAvailable() {
+ return mFifo->getFullFramesAvailable();
+ }
+
/*
* This is generally only called before or after the buffer is used.
*/
@@ -121,15 +126,12 @@
void fillWrappingBuffer(WrappingBuffer *wrappingBuffer,
int32_t framesAvailable, int32_t startIndex);
- const fifo_frames_t mFrameCapacity;
- const int32_t mBytesPerFrame;
- uint8_t *mStorage;
- bool mStorageOwned; // did this object allocate the storage?
- FifoControllerBase *mFifo;
- fifo_counter_t mFramesReadCount;
- fifo_counter_t mFramesUnderrunCount;
- int32_t mUnderrunCount; // need? just use frames
- int32_t mLastReadSize;
+ const int32_t mBytesPerFrame;
+ // We do not use a std::unique_ptr for mStorage because it is often a pointer to
+ // memory shared between processes and cannot be deleted trivially.
+ uint8_t *mStorage = nullptr;
+ bool mStorageOwned = false; // did this object allocate the storage?
+ std::unique_ptr<FifoControllerBase> mFifo{};
};
} // android
diff --git a/media/libaaudio/src/fifo/FifoController.h b/media/libaaudio/src/fifo/FifoController.h
index 79d98a1..057a94e 100644
--- a/media/libaaudio/src/fifo/FifoController.h
+++ b/media/libaaudio/src/fifo/FifoController.h
@@ -30,7 +30,7 @@
class FifoController : public FifoControllerBase
{
public:
- FifoController(fifo_counter_t bufferSize, fifo_counter_t threshold)
+ FifoController(fifo_frames_t bufferSize, fifo_frames_t threshold)
: FifoControllerBase(bufferSize, threshold)
, mReadCounter(0)
, mWriteCounter(0)
diff --git a/media/libaaudio/tests/test_atomic_fifo.cpp b/media/libaaudio/tests/test_atomic_fifo.cpp
index 0085217..a09b74c 100644
--- a/media/libaaudio/tests/test_atomic_fifo.cpp
+++ b/media/libaaudio/tests/test_atomic_fifo.cpp
@@ -96,14 +96,14 @@
void checkWrappingBuffer() {
WrappingBuffer wrappingBuffer;
fifo_frames_t framesAvailable =
- mFifoBuffer.getFifoControllerBase()->getEmptyFramesAvailable();
+ mFifoBuffer.getEmptyFramesAvailable();
fifo_frames_t wrapAvailable = mFifoBuffer.getEmptyRoomAvailable(&wrappingBuffer);
EXPECT_EQ(framesAvailable, wrapAvailable);
fifo_frames_t bothAvailable = wrappingBuffer.numFrames[0] + wrappingBuffer.numFrames[1];
EXPECT_EQ(framesAvailable, bothAvailable);
framesAvailable =
- mFifoBuffer.getFifoControllerBase()->getFullFramesAvailable();
+ mFifoBuffer.getFullFramesAvailable();
wrapAvailable = mFifoBuffer.getFullDataAvailable(&wrappingBuffer);
EXPECT_EQ(framesAvailable, wrapAvailable);
bothAvailable = wrappingBuffer.numFrames[0] + wrappingBuffer.numFrames[1];
@@ -113,7 +113,7 @@
// Write data but do not overflow.
void writeData(fifo_frames_t numFrames) {
fifo_frames_t framesAvailable =
- mFifoBuffer.getFifoControllerBase()->getEmptyFramesAvailable();
+ mFifoBuffer.getEmptyFramesAvailable();
fifo_frames_t framesToWrite = std::min(framesAvailable, numFrames);
for (int i = 0; i < framesToWrite; i++) {
mData[i] = mNextWriteIndex++;
@@ -125,7 +125,7 @@
// Read data but do not underflow.
void verifyData(fifo_frames_t numFrames) {
fifo_frames_t framesAvailable =
- mFifoBuffer.getFifoControllerBase()->getFullFramesAvailable();
+ mFifoBuffer.getFullFramesAvailable();
fifo_frames_t framesToRead = std::min(framesAvailable, numFrames);
fifo_frames_t actual = mFifoBuffer.read(mData, framesToRead);
ASSERT_EQ(framesToRead, actual);
@@ -178,12 +178,12 @@
void checkRandomWriteRead() {
for (int i = 0; i < 20; i++) {
fifo_frames_t framesEmpty =
- mFifoBuffer.getFifoControllerBase()->getEmptyFramesAvailable();
+ mFifoBuffer.getEmptyFramesAvailable();
fifo_frames_t numFrames = (fifo_frames_t)(drand48() * framesEmpty);
writeData(numFrames);
fifo_frames_t framesFull =
- mFifoBuffer.getFifoControllerBase()->getFullFramesAvailable();
+ mFifoBuffer.getFullFramesAvailable();
numFrames = (fifo_frames_t)(drand48() * framesFull);
verifyData(numFrames);
}
diff --git a/media/libaudioprocessing/AudioResamplerDyn.h b/media/libaudioprocessing/AudioResamplerDyn.h
index 92144d0..479142e 100644
--- a/media/libaudioprocessing/AudioResamplerDyn.h
+++ b/media/libaudioprocessing/AudioResamplerDyn.h
@@ -55,6 +55,11 @@
virtual size_t resample(int32_t* out, size_t outFrameCount,
AudioBufferProvider* provider);
+ void reset() override {
+ AudioResampler::reset();
+ mInBuffer.reset();
+ }
+
// Make available key design criteria for testing
int getHalfLength() const {
return mConstants.mHalfNumCoefs;
diff --git a/media/libheif/HeifDecoderImpl.cpp b/media/libheif/HeifDecoderImpl.cpp
index 01f014f..a977300 100644
--- a/media/libheif/HeifDecoderImpl.cpp
+++ b/media/libheif/HeifDecoderImpl.cpp
@@ -86,7 +86,7 @@
sp<IMemory> mMemory;
std::unique_ptr<HeifStream> mStream;
bool mEOS;
- std::unique_ptr<uint8_t> mCache;
+ std::unique_ptr<uint8_t[]> mCache;
off64_t mCachedOffset;
size_t mCachedSize;
size_t mCacheBufferSize;
@@ -165,7 +165,7 @@
// it's reaching max cache buffer size, need to roll window, and possibly
// expand the cache buffer.
size_t newCacheBufferSize = mCacheBufferSize;
- std::unique_ptr<uint8_t> newCache;
+ std::unique_ptr<uint8_t[]> newCache;
uint8_t* dst = mCache.get();
if (newCacheBufferSize < kMaxCacheBufferSize) {
newCacheBufferSize = kMaxCacheBufferSize;
diff --git a/media/libmedia/Android.bp b/media/libmedia/Android.bp
index e6d6b3e..9fe9ee5 100644
--- a/media/libmedia/Android.bp
+++ b/media/libmedia/Android.bp
@@ -191,6 +191,7 @@
"MediaResourcePolicy.cpp",
"Visualizer.cpp",
"StringArray.cpp",
+ "NdkMediaFormatPriv.cpp",
],
aidl: {
diff --git a/media/libmedia/IMediaExtractorService.cpp b/media/libmedia/IMediaExtractorService.cpp
index d7533ca..0295abc 100644
--- a/media/libmedia/IMediaExtractorService.cpp
+++ b/media/libmedia/IMediaExtractorService.cpp
@@ -23,7 +23,6 @@
#include <sys/types.h>
#include <binder/Parcel.h>
#include <media/IMediaExtractorService.h>
-#include <media/MediaExtractor.h>
namespace android {
diff --git a/media/libmedia/MediaUtils.cpp b/media/libmedia/MediaUtils.cpp
index bcdc3bd..320c7a9 100644
--- a/media/libmedia/MediaUtils.cpp
+++ b/media/libmedia/MediaUtils.cpp
@@ -34,7 +34,7 @@
size_t percentageOfTotalMem) {
if (running_with_asan()) {
- ALOGW("Running with ASan, skip enforcing memory limitations.");
+ ALOGW("Running with (HW)ASan, skip enforcing memory limitations.");
return;
}
diff --git a/media/libmedia/MediaUtils.h b/media/libmedia/MediaUtils.h
index a678bcc..26075c4 100644
--- a/media/libmedia/MediaUtils.h
+++ b/media/libmedia/MediaUtils.h
@@ -20,9 +20,10 @@
namespace android {
extern "C" void __asan_init(void) __attribute__((weak));
+extern "C" void __hwasan_init(void) __attribute__((weak));
static inline int running_with_asan() {
- return &__asan_init != 0;
+ return &__asan_init != 0 || &__hwasan_init != 0;
}
/**
diff --git a/media/libmedia/NdkMediaFormatPriv.cpp b/media/libmedia/NdkMediaFormatPriv.cpp
new file mode 100644
index 0000000..3c84d6a
--- /dev/null
+++ b/media/libmedia/NdkMediaFormatPriv.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//#define LOG_NDEBUG 0
+#define LOG_TAG "NdkMediaFormat"
+
+#include <inttypes.h>
+
+//#include <ndk/include/media/NdkMediaFormat.h>
+
+#include <utils/Log.h>
+#include <utils/StrongPointer.h>
+#include <media/NdkMediaFormatPriv.h>
+#include <media/stagefright/foundation/ABuffer.h>
+#include <media/stagefright/foundation/AMessage.h>
+//#include <android_runtime/AndroidRuntime.h>
+//#include <android_util_Binder.h>
+
+#include <jni.h>
+
+using namespace android;
+
+extern "C" {
+
+// private functions for conversion to/from AMessage
+AMediaFormat* AMediaFormat_fromMsg(const void* data) {
+ ALOGV("private ctor");
+ AMediaFormat* mData = new AMediaFormat();
+ mData->mFormat = *((sp<AMessage>*)data);
+ if (mData->mFormat == NULL) {
+ ALOGW("got NULL format");
+ mData->mFormat = new AMessage;
+ }
+ return mData;
+}
+
+void AMediaFormat_getFormat(const AMediaFormat* mData, void* dest) {
+ *((sp<AMessage>*)dest) = mData->mFormat;
+}
+
+} // extern "C"
+
+
diff --git a/media/libmediaextractor/Android.bp b/media/libmediaextractor/Android.bp
index b9b47cd..0208ad4 100644
--- a/media/libmediaextractor/Android.bp
+++ b/media/libmediaextractor/Android.bp
@@ -29,7 +29,6 @@
"MediaBufferGroup.cpp",
"MediaSource.cpp",
"MediaTrack.cpp",
- "MediaExtractor.cpp",
"MetaData.cpp",
"MetaDataBase.cpp",
"VorbisComment.cpp",
diff --git a/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h b/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h
index 02bf891..a6bf543 100644
--- a/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h
+++ b/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h
@@ -171,7 +171,6 @@
virtual status_t prepareAsync() = 0;
virtual status_t start() = 0;
- virtual status_t stop() = 0;
virtual status_t pause() = 0;
virtual bool isPlaying() = 0;
virtual status_t setPlaybackSettings(const AudioPlaybackRate& rate) {
diff --git a/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Types.h b/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Types.h
index 211a5c0..4b0a960 100644
--- a/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Types.h
+++ b/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Types.h
@@ -168,8 +168,7 @@
MEDIA_PLAYER2_PREPARED = 1 << 3,
MEDIA_PLAYER2_STARTED = 1 << 4,
MEDIA_PLAYER2_PAUSED = 1 << 5,
- MEDIA_PLAYER2_STOPPED = 1 << 6,
- MEDIA_PLAYER2_PLAYBACK_COMPLETE = 1 << 7
+ MEDIA_PLAYER2_PLAYBACK_COMPLETE = 1 << 6
};
// Keep KEY_PARAMETER_* in sync with MediaPlayer2.java.
diff --git a/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h b/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h
index 3af212e..43fba23 100644
--- a/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h
+++ b/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h
@@ -65,7 +65,6 @@
status_t setBufferingSettings(const BufferingSettings& buffering);
status_t prepareAsync();
status_t start();
- status_t stop();
status_t pause();
bool isPlaying();
mediaplayer2_states getState();
diff --git a/media/libmediaplayer2/mediaplayer2.cpp b/media/libmediaplayer2/mediaplayer2.cpp
index 4fb47b8..f0ea59e 100644
--- a/media/libmediaplayer2/mediaplayer2.cpp
+++ b/media/libmediaplayer2/mediaplayer2.cpp
@@ -750,7 +750,7 @@
status_t MediaPlayer2::prepareAsync() {
ALOGV("prepareAsync");
Mutex::Autolock _l(mLock);
- if ((mPlayer != 0) && (mCurrentState & (MEDIA_PLAYER2_INITIALIZED | MEDIA_PLAYER2_STOPPED))) {
+ if ((mPlayer != 0) && (mCurrentState & MEDIA_PLAYER2_INITIALIZED)) {
if (mAudioAttributesParcel != NULL) {
status_t err = setAudioAttributes_l(*mAudioAttributesParcel);
if (err != OK) {
@@ -806,24 +806,6 @@
return ret;
}
-status_t MediaPlayer2::stop() {
- ALOGV("stop");
- Mutex::Autolock _l(mLock);
- if (mCurrentState & MEDIA_PLAYER2_STOPPED) return NO_ERROR;
- if ( (mPlayer != 0) && ( mCurrentState & ( MEDIA_PLAYER2_STARTED | MEDIA_PLAYER2_PREPARED |
- MEDIA_PLAYER2_PAUSED | MEDIA_PLAYER2_PLAYBACK_COMPLETE ) ) ) {
- status_t ret = mPlayer->stop();
- if (ret != NO_ERROR) {
- mCurrentState = MEDIA_PLAYER2_STATE_ERROR;
- } else {
- mCurrentState = MEDIA_PLAYER2_STOPPED;
- }
- return ret;
- }
- ALOGE("stop called in state %d, mPlayer(%p)", mCurrentState, mPlayer.get());
- return INVALID_OPERATION;
-}
-
status_t MediaPlayer2::pause() {
ALOGV("pause");
Mutex::Autolock _l(mLock);
@@ -873,8 +855,7 @@
if (mCurrentState & MEDIA_PLAYER2_STARTED) {
return MEDIAPLAYER2_STATE_PLAYING;
}
- if (mCurrentState
- & (MEDIA_PLAYER2_PAUSED | MEDIA_PLAYER2_STOPPED | MEDIA_PLAYER2_PLAYBACK_COMPLETE)) {
+ if (mCurrentState & (MEDIA_PLAYER2_PAUSED | MEDIA_PLAYER2_PLAYBACK_COMPLETE)) {
return MEDIAPLAYER2_STATE_PAUSED;
}
// now only mCurrentState & MEDIA_PLAYER2_PREPARED is true
@@ -890,7 +871,7 @@
return BAD_VALUE;
}
Mutex::Autolock _l(mLock);
- if (mPlayer == 0 || (mCurrentState & MEDIA_PLAYER2_STOPPED)) {
+ if (mPlayer == 0) {
return INVALID_OPERATION;
}
@@ -982,7 +963,7 @@
Mutex::Autolock _l(mLock);
ALOGV("getDuration_l");
bool isValidState = (mCurrentState & (MEDIA_PLAYER2_PREPARED | MEDIA_PLAYER2_STARTED |
- MEDIA_PLAYER2_PAUSED | MEDIA_PLAYER2_STOPPED | MEDIA_PLAYER2_PLAYBACK_COMPLETE));
+ MEDIA_PLAYER2_PAUSED | MEDIA_PLAYER2_PLAYBACK_COMPLETE));
if (mPlayer == 0 || !isValidState) {
ALOGE("Attempt to call getDuration in wrong state: mPlayer=%p, mCurrentState=%u",
mPlayer.get(), mCurrentState);
diff --git a/media/libmediaplayer2/nuplayer2/GenericSource2.cpp b/media/libmediaplayer2/nuplayer2/GenericSource2.cpp
index a6d88a2..e317e23 100644
--- a/media/libmediaplayer2/nuplayer2/GenericSource2.cpp
+++ b/media/libmediaplayer2/nuplayer2/GenericSource2.cpp
@@ -28,7 +28,6 @@
#include <media/IMediaExtractorService.h>
#include <media/IMediaSource.h>
#include <media/MediaHTTPService.h>
-#include <media/MediaExtractor.h>
#include <media/MediaSource.h>
#include <media/NdkWrapper.h>
#include <media/stagefright/foundation/ABuffer.h>
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp b/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
index c649573..b6b9b78 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
@@ -1684,6 +1684,7 @@
}
startPlaybackTimer("onstart");
+ notifyListener(mSrcId, MEDIA2_INFO, MEDIA2_INFO_DATA_SOURCE_START, 0);
postScanSources();
}
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp
index 3069f54..f85e3a2 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp
@@ -272,13 +272,6 @@
mState = STATE_PREPARING;
mPlayer->prepareAsync();
return OK;
- case STATE_STOPPED:
- // this is really just paused. handle as seek to start
- mAtEOS = false;
- mState = STATE_STOPPED_AND_PREPARING;
- mPlayer->seekToAsync(0, MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC /* mode */,
- true /* needNotify */);
- return OK;
default:
return INVALID_OPERATION;
};
@@ -293,7 +286,6 @@
status_t NuPlayer2Driver::start_l() {
switch (mState) {
case STATE_PAUSED:
- case STATE_STOPPED_AND_PREPARED:
case STATE_PREPARED:
{
mPlayer->start();
@@ -320,34 +312,6 @@
return OK;
}
-status_t NuPlayer2Driver::stop() {
- ALOGD("stop(%p)", this);
- Mutex::Autolock autoLock(mLock);
-
- switch (mState) {
- case STATE_RUNNING:
- mPlayer->pause();
- // fall through
-
- case STATE_PAUSED:
- mState = STATE_STOPPED;
- //notifyListener_l(MEDIA2_STOPPED);
- break;
-
- case STATE_PREPARED:
- case STATE_STOPPED:
- case STATE_STOPPED_AND_PREPARING:
- case STATE_STOPPED_AND_PREPARED:
- mState = STATE_STOPPED;
- break;
-
- default:
- return INVALID_OPERATION;
- }
-
- return OK;
-}
-
status_t NuPlayer2Driver::pause() {
ALOGD("pause(%p)", this);
// The NuPlayerRenderer may get flushed if pause for long enough, e.g. the pause timeout tear
@@ -391,7 +355,6 @@
mState = STATE_PAUSED;
} else if (rate.mSpeed != 0.f
&& (mState == STATE_PAUSED
- || mState == STATE_STOPPED_AND_PREPARED
|| mState == STATE_PREPARED)) {
err = start_l();
}
@@ -419,7 +382,6 @@
switch (mState) {
case STATE_PREPARED:
- case STATE_STOPPED_AND_PREPARED:
case STATE_PAUSED:
case STATE_RUNNING:
{
@@ -601,10 +563,6 @@
break;
}
- if (mState != STATE_STOPPED) {
- // notifyListener_l(MEDIA2_STOPPED);
- }
-
mState = STATE_RESET_IN_PROGRESS;
mPlayer->resetAsync();
@@ -780,20 +738,7 @@
ALOGV("notifySeekComplete(%p)", this);
Mutex::Autolock autoLock(mLock);
mSeekInProgress = false;
- notifySeekComplete_l(srcId);
-}
-
-void NuPlayer2Driver::notifySeekComplete_l(int64_t srcId) {
- bool wasSeeking = true;
- if (mState == STATE_STOPPED_AND_PREPARING) {
- wasSeeking = false;
- mState = STATE_STOPPED_AND_PREPARED;
- mCondition.broadcast();
- } else if (mState == STATE_STOPPED) {
- // no need to notify listener
- return;
- }
- notifyListener_l(srcId, wasSeeking ? MEDIA2_SEEK_COMPLETE : MEDIA2_PREPARED);
+ notifyListener_l(srcId, MEDIA2_SEEK_COMPLETE);
}
status_t NuPlayer2Driver::dump(
@@ -1078,9 +1023,6 @@
case STATE_RUNNING: rval = "RUNNING"; break;
case STATE_PAUSED: rval = "PAUSED"; break;
case STATE_RESET_IN_PROGRESS: rval = "RESET_IN_PROGRESS"; break;
- case STATE_STOPPED: rval = "STOPPED"; break;
- case STATE_STOPPED_AND_PREPARING: rval = "STOPPED_AND_PREPARING"; break;
- case STATE_STOPPED_AND_PREPARED: rval = "STOPPED_AND_PREPARED"; break;
default:
// yes, this buffer is shared and vulnerable to races
snprintf(rawbuffer, sizeof(rawbuffer), "%d", state);
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h
index 4da2566..6d5a007 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h
@@ -40,31 +40,31 @@
BufferingSettings* buffering /* nonnull */) override;
virtual status_t setBufferingSettings(const BufferingSettings& buffering) override;
- virtual status_t prepareAsync();
- virtual status_t start();
- virtual status_t stop();
- virtual status_t pause();
- virtual bool isPlaying();
- virtual status_t setPlaybackSettings(const AudioPlaybackRate &rate);
- virtual status_t getPlaybackSettings(AudioPlaybackRate *rate);
- virtual status_t setSyncSettings(const AVSyncSettings &sync, float videoFpsHint);
- virtual status_t getSyncSettings(AVSyncSettings *sync, float *videoFps);
+ virtual status_t prepareAsync() override;
+ virtual status_t start() override;
+ virtual status_t pause() override;
+ virtual bool isPlaying() override;
+ virtual status_t setPlaybackSettings(const AudioPlaybackRate &rate) override;
+ virtual status_t getPlaybackSettings(AudioPlaybackRate *rate) override;
+ virtual status_t setSyncSettings(const AVSyncSettings &sync, float videoFpsHint) override;
+ virtual status_t getSyncSettings(AVSyncSettings *sync, float *videoFps) override;
virtual status_t seekTo(
- int64_t msec, MediaPlayer2SeekMode mode = MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC);
- virtual status_t getCurrentPosition(int64_t *msec);
- virtual status_t getDuration(int64_t *msec);
- virtual status_t reset();
+ int64_t msec,
+ MediaPlayer2SeekMode mode = MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC) override;
+ virtual status_t getCurrentPosition(int64_t *msec) override;
+ virtual status_t getDuration(int64_t *msec) override;
+ virtual status_t reset() override;
virtual status_t notifyAt(int64_t mediaTimeUs) override;
- virtual status_t setLooping(int loop);
- virtual status_t invoke(const Parcel &request, Parcel *reply);
- virtual void setAudioSink(const sp<AudioSink> &audioSink);
- virtual status_t setParameter(int key, const Parcel &request);
- virtual status_t getParameter(int key, Parcel *reply);
+ virtual status_t setLooping(int loop) override;
+ virtual status_t invoke(const Parcel &request, Parcel *reply) override;
+ virtual void setAudioSink(const sp<AudioSink> &audioSink) override;
+ virtual status_t setParameter(int key, const Parcel &request) override;
+ virtual status_t getParameter(int key, Parcel *reply) override;
virtual status_t getMetadata(
- const media::Metadata::Filter& ids, Parcel *records);
+ const media::Metadata::Filter& ids, Parcel *records) override;
- virtual status_t dump(int fd, const Vector<String16> &args) const;
+ virtual status_t dump(int fd, const Vector<String16> &args) const override;
virtual void onMessageReceived(const sp<AMessage> &msg) override;
@@ -77,7 +77,6 @@
void notifyMoreRebufferingTimeUs(int64_t srcId, int64_t timeUs);
void notifyRebufferingWhenExit(int64_t srcId, bool status);
void notifySeekComplete(int64_t srcId);
- void notifySeekComplete_l(int64_t srcId);
void notifyListener(int64_t srcId, int msg, int ext1 = 0, int ext2 = 0,
const Parcel *in = NULL);
void notifyFlagsChanged(int64_t srcId, uint32_t flags);
@@ -99,9 +98,6 @@
STATE_RUNNING,
STATE_PAUSED,
STATE_RESET_IN_PROGRESS,
- STATE_STOPPED, // equivalent to PAUSED
- STATE_STOPPED_AND_PREPARING, // equivalent to PAUSED, but seeking
- STATE_STOPPED_AND_PREPARED, // equivalent to PAUSED, but seek complete
};
std::string stateString(State state);
diff --git a/media/libmediaplayerservice/nuplayer/GenericSource.cpp b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
index 23d66bb..8cd6eda 100644
--- a/media/libmediaplayerservice/nuplayer/GenericSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/GenericSource.cpp
@@ -25,7 +25,6 @@
#include <cutils/properties.h>
#include <media/DataSource.h>
#include <media/MediaBufferHolder.h>
-#include <media/MediaExtractor.h>
#include <media/MediaSource.h>
#include <media/IMediaExtractorService.h>
#include <media/IMediaHTTPService.h>
@@ -38,6 +37,7 @@
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaClock.h>
#include <media/stagefright/MediaDefs.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MediaExtractorFactory.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/Utils.h>
diff --git a/media/libstagefright/Android.bp b/media/libstagefright/Android.bp
index 27383cb..fec40b6 100644
--- a/media/libstagefright/Android.bp
+++ b/media/libstagefright/Android.bp
@@ -120,6 +120,7 @@
"MediaCodecList.cpp",
"MediaCodecListOverrides.cpp",
"MediaCodecSource.cpp",
+ "MediaExtractor.cpp",
"MediaExtractorFactory.cpp",
"MediaSync.cpp",
"http/ClearMediaHTTP.cpp",
@@ -241,6 +242,7 @@
"HevcUtils.cpp",
"InterfaceUtils.cpp",
"MediaClock.cpp",
+ "MediaExtractor.cpp",
"MediaExtractorFactory.cpp",
"NdkUtils.cpp",
"NuCachedSource2.cpp",
diff --git a/media/libmediaextractor/MediaExtractor.cpp b/media/libstagefright/MediaExtractor.cpp
similarity index 97%
rename from media/libmediaextractor/MediaExtractor.cpp
rename to media/libstagefright/MediaExtractor.cpp
index 8bf44c8..5e1dc77 100644
--- a/media/libmediaextractor/MediaExtractor.cpp
+++ b/media/libstagefright/MediaExtractor.cpp
@@ -19,8 +19,8 @@
#include <utils/Log.h>
#include <pwd.h>
-#include <media/MediaExtractor.h>
#include <media/stagefright/foundation/ADebug.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MetaData.h>
namespace android {
diff --git a/media/libstagefright/MediaExtractorFactory.cpp b/media/libstagefright/MediaExtractorFactory.cpp
index 7578b1e..72ddb71 100644
--- a/media/libstagefright/MediaExtractorFactory.cpp
+++ b/media/libstagefright/MediaExtractorFactory.cpp
@@ -21,9 +21,9 @@
#include <binder/IServiceManager.h>
#include <media/DataSource.h>
#include <media/MediaAnalyticsItem.h>
-#include <media/MediaExtractor.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/InterfaceUtils.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MediaExtractorFactory.h>
#include <media/IMediaExtractor.h>
#include <media/IMediaExtractorService.h>
@@ -126,6 +126,7 @@
Mutex MediaExtractorFactory::gPluginMutex;
std::shared_ptr<std::list<sp<ExtractorPlugin>>> MediaExtractorFactory::gPlugins;
bool MediaExtractorFactory::gPluginsRegistered = false;
+bool MediaExtractorFactory::gIgnoreVersion = false;
// static
CreatorFunc MediaExtractorFactory::sniff(
@@ -193,7 +194,7 @@
for (auto it = pluginList.begin(); it != pluginList.end(); ++it) {
if (memcmp(&((*it)->def.extractor_uuid), &plugin->def.extractor_uuid, 16) == 0) {
// there's already an extractor with the same uuid
- if ((*it)->def.extractor_version < plugin->def.extractor_version) {
+ if (gIgnoreVersion || (*it)->def.extractor_version < plugin->def.extractor_version) {
// this one is newer, replace the old one
ALOGW("replacing extractor '%s' version %u with version %u",
plugin->def.extractor_name,
@@ -308,6 +309,8 @@
return;
}
+ gIgnoreVersion = property_get_bool("debug.extractor.ignore_version", false);
+
std::shared_ptr<std::list<sp<ExtractorPlugin>>> newList(new std::list<sp<ExtractorPlugin>>());
RegisterExtractorsInSystem("/system/lib"
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 4a7d6ca..8e8c77c 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -24,7 +24,6 @@
#include "include/NuCachedSource2.h"
#include <media/DataSource.h>
-#include <media/MediaExtractor.h>
#include <media/MediaSource.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -34,6 +33,7 @@
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MediaExtractorFactory.h>
#include <media/stagefright/MetaData.h>
#include <media/stagefright/Utils.h>
diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp
index e80ec3b..f8dde79 100644
--- a/media/libstagefright/StagefrightMetadataRetriever.cpp
+++ b/media/libstagefright/StagefrightMetadataRetriever.cpp
@@ -32,6 +32,7 @@
#include <media/stagefright/MediaCodecList.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/MediaExtractorFactory.h>
#include <media/stagefright/MetaData.h>
#include <media/CharacterEncodingDetector.h>
diff --git a/media/libstagefright/bqhelper/GraphicBufferSource.cpp b/media/libstagefright/bqhelper/GraphicBufferSource.cpp
index dd03d38..6d93807 100644
--- a/media/libstagefright/bqhelper/GraphicBufferSource.cpp
+++ b/media/libstagefright/bqhelper/GraphicBufferSource.cpp
@@ -767,7 +767,7 @@
double nFrames = (timeUs - mPrevCaptureUs) * mCaptureFps / 1000000;
if (nFrames < 0.5 - kTimestampFluctuation) {
// skip this frame as it's too close to previous capture
- ALOGV("skipping frame, timeUs %lld", static_cast<long long>(timeUs));
+ ALOGD("skipping frame, timeUs %lld", static_cast<long long>(timeUs));
return false;
}
if (nFrames <= 1.0) {
diff --git a/media/libstagefright/include/StagefrightMetadataRetriever.h b/media/libstagefright/include/StagefrightMetadataRetriever.h
index f78e125..a7090ad 100644
--- a/media/libstagefright/include/StagefrightMetadataRetriever.h
+++ b/media/libstagefright/include/StagefrightMetadataRetriever.h
@@ -26,7 +26,6 @@
namespace android {
class DataSource;
-class MediaExtractor;
struct ImageDecoder;
struct FrameRect;
diff --git a/media/libstagefright/include/media/stagefright/InterfaceUtils.h b/media/libstagefright/include/media/stagefright/InterfaceUtils.h
index f0ebd48..b83a958 100644
--- a/media/libstagefright/include/media/stagefright/InterfaceUtils.h
+++ b/media/libstagefright/include/media/stagefright/InterfaceUtils.h
@@ -18,7 +18,6 @@
#define INTERFACE_UTILS_H_
#include <utils/RefBase.h>
-#include <media/MediaExtractor.h>
#include <media/stagefright/RemoteMediaExtractor.h>
#include <media/MediaSource.h>
#include <media/IMediaExtractor.h>
diff --git a/media/libmediaextractor/include/media/MediaExtractor.h b/media/libstagefright/include/media/stagefright/MediaExtractor.h
similarity index 100%
rename from media/libmediaextractor/include/media/MediaExtractor.h
rename to media/libstagefright/include/media/stagefright/MediaExtractor.h
diff --git a/media/libstagefright/include/media/stagefright/MediaExtractorFactory.h b/media/libstagefright/include/media/stagefright/MediaExtractorFactory.h
index 4ee5556..e603176 100644
--- a/media/libstagefright/include/media/stagefright/MediaExtractorFactory.h
+++ b/media/libstagefright/include/media/stagefright/MediaExtractorFactory.h
@@ -21,7 +21,6 @@
#include <stdio.h>
#include <media/IMediaExtractor.h>
-#include <media/MediaExtractor.h>
namespace android {
@@ -41,6 +40,7 @@
static Mutex gPluginMutex;
static std::shared_ptr<std::list<sp<ExtractorPlugin>>> gPlugins;
static bool gPluginsRegistered;
+ static bool gIgnoreVersion;
static void RegisterExtractorsInApk(
const char *apkPath, std::list<sp<ExtractorPlugin>> &pluginList);
diff --git a/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h
index 509e669..9925114 100644
--- a/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h
+++ b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h
@@ -18,7 +18,7 @@
#define REMOTE_MEDIA_EXTRACTOR_H_
#include <media/IMediaExtractor.h>
-#include <media/MediaExtractor.h>
+#include <media/stagefright/MediaExtractor.h>
#include <media/stagefright/foundation/ABase.h>
namespace android {
diff --git a/media/libstagefright/omx/tests/OMXHarness.cpp b/media/libstagefright/omx/tests/OMXHarness.cpp
index 895a4ce..5388ba7 100644
--- a/media/libstagefright/omx/tests/OMXHarness.cpp
+++ b/media/libstagefright/omx/tests/OMXHarness.cpp
@@ -28,7 +28,6 @@
#include <cutils/properties.h>
#include <media/DataSource.h>
#include <media/IMediaHTTPService.h>
-#include <media/MediaExtractor.h>
#include <media/MediaSource.h>
#include <media/OMXBuffer.h>
#include <media/stagefright/foundation/ADebug.h>
diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp
index ccddd6e..cff2803 100644
--- a/media/mtp/MtpServer.cpp
+++ b/media/mtp/MtpServer.cpp
@@ -99,6 +99,7 @@
MTP_EVENT_STORE_ADDED,
MTP_EVENT_STORE_REMOVED,
MTP_EVENT_DEVICE_PROP_CHANGED,
+ MTP_EVENT_OBJECT_INFO_CHANGED,
};
MtpServer::MtpServer(IMtpDatabase* database, int controlFd, bool ptp,
@@ -259,6 +260,11 @@
sendEvent(MTP_EVENT_OBJECT_REMOVED, handle);
}
+void MtpServer::sendObjectInfoChanged(MtpObjectHandle handle) {
+ ALOGV("sendObjectInfoChanged %d\n", handle);
+ sendEvent(MTP_EVENT_OBJECT_INFO_CHANGED, handle);
+}
+
void MtpServer::sendStoreAdded(MtpStorageID id) {
ALOGV("sendStoreAdded %08X\n", id);
sendEvent(MTP_EVENT_STORE_ADDED, id);
diff --git a/media/mtp/MtpServer.h b/media/mtp/MtpServer.h
index f6939d7..1f8799f 100644
--- a/media/mtp/MtpServer.h
+++ b/media/mtp/MtpServer.h
@@ -115,6 +115,7 @@
void sendObjectAdded(MtpObjectHandle handle);
void sendObjectRemoved(MtpObjectHandle handle);
+ void sendObjectInfoChanged(MtpObjectHandle handle);
void sendDevicePropertyChanged(MtpDeviceProperty property);
private:
diff --git a/media/ndk/NdkMediaCodec.cpp b/media/ndk/NdkMediaCodec.cpp
index 42285f8..c23f19b 100644
--- a/media/ndk/NdkMediaCodec.cpp
+++ b/media/ndk/NdkMediaCodec.cpp
@@ -21,8 +21,8 @@
#include <media/NdkMediaCodec.h>
#include <media/NdkMediaError.h>
+#include <media/NdkMediaFormatPriv.h>
#include "NdkMediaCryptoPriv.h"
-#include "NdkMediaFormatPriv.h"
#include <utils/Log.h>
#include <utils/StrongPointer.h>
diff --git a/media/ndk/NdkMediaCrypto.cpp b/media/ndk/NdkMediaCrypto.cpp
index d7193ca..b8af5ff 100644
--- a/media/ndk/NdkMediaCrypto.cpp
+++ b/media/ndk/NdkMediaCrypto.cpp
@@ -20,7 +20,7 @@
#include <media/NdkMediaCrypto.h>
#include <media/NdkMediaCodec.h>
-#include "NdkMediaFormatPriv.h"
+#include <media/NdkMediaFormatPriv.h>
#include <cutils/properties.h>
diff --git a/media/ndk/NdkMediaExtractor.cpp b/media/ndk/NdkMediaExtractor.cpp
index b5e60a4..8c1ac59 100644
--- a/media/ndk/NdkMediaExtractor.cpp
+++ b/media/ndk/NdkMediaExtractor.cpp
@@ -20,8 +20,8 @@
#include <media/NdkMediaError.h>
#include <media/NdkMediaExtractor.h>
+#include <media/NdkMediaFormatPriv.h>
#include "NdkMediaDataSourcePriv.h"
-#include "NdkMediaFormatPriv.h"
#include <inttypes.h>
diff --git a/media/ndk/NdkMediaFormat.cpp b/media/ndk/NdkMediaFormat.cpp
index f32b83e..a66f3b3 100644
--- a/media/ndk/NdkMediaFormat.cpp
+++ b/media/ndk/NdkMediaFormat.cpp
@@ -20,6 +20,7 @@
#include <inttypes.h>
#include <media/NdkMediaFormat.h>
+#include <media/NdkMediaFormatPriv.h>
#include <utils/Log.h>
#include <utils/StrongPointer.h>
@@ -32,12 +33,6 @@
using namespace android;
-struct AMediaFormat {
- sp<AMessage> mFormat;
- String8 mDebug;
- KeyedVector<String8, String8> mStringCache;
-};
-
extern "C" {
// private functions for conversion to/from AMessage
@@ -74,6 +69,18 @@
return AMEDIA_OK;
}
+EXPORT
+void AMediaFormat_clear(AMediaFormat *format) {
+ format->mFormat->clear();
+}
+
+EXPORT
+media_status_t AMediaFormat_copy(AMediaFormat *to, AMediaFormat *from) {
+ to->mFormat->clear();
+ to->mFormat->extend(from->mFormat);
+ return AMEDIA_OK;
+}
+
EXPORT
const char* AMediaFormat_toString(AMediaFormat *mData) {
@@ -256,7 +263,7 @@
}
EXPORT
-void AMediaFormat_setBuffer(AMediaFormat* format, const char* name, void* data, size_t size) {
+void AMediaFormat_setBuffer(AMediaFormat* format, const char* name, const void* data, size_t size) {
// the ABuffer(void*, size_t) constructor doesn't take ownership of the data, so create
// a new buffer and copy the data into it
sp<ABuffer> buf = new ABuffer(size);
diff --git a/media/ndk/NdkMediaMuxer.cpp b/media/ndk/NdkMediaMuxer.cpp
index dffc4d7..b213fa9 100644
--- a/media/ndk/NdkMediaMuxer.cpp
+++ b/media/ndk/NdkMediaMuxer.cpp
@@ -20,7 +20,7 @@
#include <media/NdkMediaMuxer.h>
#include <media/NdkMediaCodec.h>
-#include "NdkMediaFormatPriv.h"
+#include <media/NdkMediaFormatPriv.h>
#include <utils/Log.h>
diff --git a/media/ndk/include/media/NdkMediaFormat.h b/media/ndk/include/media/NdkMediaFormat.h
index 5f7804d..3f853d0 100644
--- a/media/ndk/include/media/NdkMediaFormat.h
+++ b/media/ndk/include/media/NdkMediaFormat.h
@@ -83,7 +83,7 @@
/**
* The provided data is copied into the format.
*/
-void AMediaFormat_setBuffer(AMediaFormat*, const char* name, void* data, size_t size) __INTRODUCED_IN(21);
+void AMediaFormat_setBuffer(AMediaFormat*, const char* name, const void* data, size_t size) __INTRODUCED_IN(21);
@@ -170,6 +170,18 @@
int32_t left, int32_t top, int32_t right, int32_t bottom) __INTRODUCED_IN(28);
#endif /* __ANDROID_API__ >= 28 */
+#if __ANDROID_API__ >= 29
+/**
+ * remove all key/value pairs from the given AMediaFormat
+ */
+void AMediaFormat_clear(AMediaFormat*) __INTRODUCED_IN(29);
+
+/**
+ * copy one AMediaFormat to another
+ */
+media_status_t AMediaFormat_copy(AMediaFormat *to, AMediaFormat *from) __INTRODUCED_IN(29);
+#endif /* __ANDROID_API__ >= 29 */
+
__END_DECLS
#endif // _NDK_MEDIA_FORMAT_H
diff --git a/media/ndk/libmediandk.map.txt b/media/ndk/libmediandk.map.txt
index d828d6a..0751a55 100644
--- a/media/ndk/libmediandk.map.txt
+++ b/media/ndk/libmediandk.map.txt
@@ -185,6 +185,8 @@
AMediaExtractor_setDataSourceCustom; # introduced=28
AMediaExtractor_setDataSourceFd;
AMediaExtractor_unselectTrack;
+ AMediaFormat_clear; # introduced=29
+ AMediaFormat_copy; # introduced=29
AMediaFormat_delete;
AMediaFormat_getBuffer;
AMediaFormat_getDouble; # introduced=28
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index b0e6b0f..2a8b397 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -4994,7 +4994,7 @@
} else if (isInCall() ||
isStrategyActiveOnSameModule(outputDesc, STRATEGY_PHONE)) {
device = getDeviceForStrategy(STRATEGY_PHONE, fromCache);
- } else if (isStrategyActive(outputDesc, STRATEGY_SONIFICATION)) {
+ } else if (isStrategyActiveOnSameModule(outputDesc, STRATEGY_SONIFICATION)) {
device = getDeviceForStrategy(STRATEGY_SONIFICATION, fromCache);
} else if (isStrategyActive(outputDesc, STRATEGY_ENFORCED_AUDIBLE)) {
device = getDeviceForStrategy(STRATEGY_ENFORCED_AUDIBLE, fromCache);
diff --git a/services/camera/libcameraservice/tests/Android.mk b/services/camera/libcameraservice/tests/Android.mk
index f77069c..8d80ff1 100644
--- a/services/camera/libcameraservice/tests/Android.mk
+++ b/services/camera/libcameraservice/tests/Android.mk
@@ -38,6 +38,7 @@
LOCAL_CFLAGS += -Wall -Wextra -Werror
LOCAL_MODULE:= cameraservice_test
+LOCAL_COMPATIBILITY_SUITE := device-tests
LOCAL_MODULE_TAGS := tests
include $(BUILD_NATIVE_TEST)
diff --git a/services/mediaextractor/MediaExtractorService.cpp b/services/mediaextractor/MediaExtractorService.cpp
index f0f44f5..f4d8b43 100644
--- a/services/mediaextractor/MediaExtractorService.cpp
+++ b/services/mediaextractor/MediaExtractorService.cpp
@@ -21,7 +21,6 @@
#include <utils/Vector.h>
#include <media/DataSource.h>
-#include <media/MediaExtractor.h>
#include <media/stagefright/DataSourceFactory.h>
#include <media/stagefright/InterfaceUtils.h>
#include <media/stagefright/MediaExtractorFactory.h>
diff --git a/services/oboeservice/AAudioMixer.cpp b/services/oboeservice/AAudioMixer.cpp
index b031888..1c03b7f 100644
--- a/services/oboeservice/AAudioMixer.cpp
+++ b/services/oboeservice/AAudioMixer.cpp
@@ -99,7 +99,7 @@
}
partIndex++;
}
- fifo->getFifoControllerBase()->advanceReadIndex(framesDesired);
+ fifo->advanceReadIndex(framesDesired);
#if AAUDIO_MIXER_ATRACE_ENABLED
ATRACE_END();
diff --git a/services/oboeservice/AAudioServiceEndpointCapture.cpp b/services/oboeservice/AAudioServiceEndpointCapture.cpp
index efac788..7ae7f1b 100644
--- a/services/oboeservice/AAudioServiceEndpointCapture.cpp
+++ b/services/oboeservice/AAudioServiceEndpointCapture.cpp
@@ -102,7 +102,7 @@
streamShared->setTimestampPositionOffset(positionOffset);
// Is the buffer too full to write a burst?
- if (fifo->getFifoControllerBase()->getEmptyFramesAvailable() <
+ if (fifo->getEmptyFramesAvailable() <
getFramesPerBurst()) {
streamShared->incrementXRunCount();
} else {