MediaPlayer2: create MP2AudioOutput in constructor
Move MP2AudioOutput creator from setDataSource() to constructor.
Test: MediaPlayer2Test, RoutingTest
Change-Id: Ibe19c8a259c735ea2b5822f769babaf4d7f2bed0
diff --git a/media/libmediaplayer2/MediaPlayer2AudioOutput.cpp b/media/libmediaplayer2/MediaPlayer2AudioOutput.cpp
index 149f243..3040c2d 100644
--- a/media/libmediaplayer2/MediaPlayer2AudioOutput.cpp
+++ b/media/libmediaplayer2/MediaPlayer2AudioOutput.cpp
@@ -60,7 +60,7 @@
}
MediaPlayer2AudioOutput::MediaPlayer2AudioOutput(audio_session_t sessionId, uid_t uid, int pid,
- const audio_attributes_t* attr, std::vector<jobject>& routingDelegatesBackup)
+ const jobject attributes)
: mCallback(nullptr),
mCallbackCookie(nullptr),
mCallbackData(nullptr),
@@ -76,22 +76,13 @@
mAuxEffectId(0),
mFlags(AUDIO_OUTPUT_FLAG_NONE) {
ALOGV("MediaPlayer2AudioOutput(%d)", sessionId);
- if (attr != nullptr) {
- mAttributes = (audio_attributes_t *) calloc(1, sizeof(audio_attributes_t));
- if (mAttributes != nullptr) {
- memcpy(mAttributes, attr, sizeof(audio_attributes_t));
- }
- } else {
- mAttributes = nullptr;
+
+ if (attributes != nullptr) {
+ mAttributes = new JObjectHolder(attributes);
}
setMinBufferCount();
mRoutingDelegates.clear();
- for (auto routingDelegate : routingDelegatesBackup) {
- mRoutingDelegates.push_back(std::pair<jobject, jobject>(
- JAudioTrack::getListener(routingDelegate), routingDelegate));
- }
- routingDelegatesBackup.clear();
}
MediaPlayer2AudioOutput::~MediaPlayer2AudioOutput() {
@@ -99,7 +90,6 @@
JAudioTrack::removeGlobalRef(routingDelegate.second);
}
close();
- free(mAttributes);
delete mCallbackData;
}
@@ -251,16 +241,10 @@
return status;
}
-void MediaPlayer2AudioOutput::setAudioAttributes(const audio_attributes_t * attributes) {
+void MediaPlayer2AudioOutput::setAudioAttributes(const jobject attributes) {
Mutex::Autolock lock(mLock);
- if (attributes == nullptr) {
- free(mAttributes);
- mAttributes = nullptr;
- } else {
- if (mAttributes == nullptr) {
- mAttributes = (audio_attributes_t *) calloc(1, sizeof(audio_attributes_t));
- }
- memcpy(mAttributes, attributes, sizeof(audio_attributes_t));
+ if (attributes != nullptr) {
+ sp<JObjectHolder> x = new JObjectHolder(attributes);
}
}
@@ -325,7 +309,7 @@
newcbd,
frameCount,
mSessionId,
- mAttributes,
+ mAttributes != nullptr ? mAttributes->getJObject() : nullptr,
1.0f); // default value for maxRequiredSpeed
} else {
// TODO: Due to buffer memory concerns, we use a max target playback speed
@@ -344,7 +328,7 @@
nullptr,
frameCount,
mSessionId,
- mAttributes,
+ mAttributes != nullptr ? mAttributes->getJObject() : nullptr,
targetSpeed);
}
@@ -569,15 +553,6 @@
return NO_ERROR;
}
-void MediaPlayer2AudioOutput::copyAudioDeviceCallback(
- std::vector<jobject>& routingDelegateTarget) {
- ALOGV("copyAudioDeviceCallback");
- for (std::vector<std::pair<jobject, jobject>>::iterator it = mRoutingDelegates.begin();
- it != mRoutingDelegates.end(); it++) {
- routingDelegateTarget.push_back(it->second);
- }
-}
-
// static
void MediaPlayer2AudioOutput::CallbackWrapper(
int event, void *cookie, void *info) {
@@ -655,6 +630,11 @@
return mSessionId;
}
+void MediaPlayer2AudioOutput::setSessionId(const audio_session_t id) {
+ Mutex::Autolock lock(mLock);
+ mSessionId = id;
+}
+
uint32_t MediaPlayer2AudioOutput::getSampleRate() const {
Mutex::Autolock lock(mLock);
if (mJAudioTrack == 0) {