Merge "Add AMediaFormat functions to clear and copy"
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/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/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/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/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/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);