|
|
|
@ -85,9 +85,6 @@ MediaPlayer2AudioOutput::MediaPlayer2AudioOutput(int32_t sessionId, uid_t uid, i
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MediaPlayer2AudioOutput::~MediaPlayer2AudioOutput() {
|
|
|
|
|
for (auto routingDelegate : mRoutingDelegates) {
|
|
|
|
|
JAudioTrack::removeGlobalRef(routingDelegate.second);
|
|
|
|
|
}
|
|
|
|
|
close();
|
|
|
|
|
delete mCallbackData;
|
|
|
|
|
}
|
|
|
|
@ -524,13 +521,16 @@ jobject MediaPlayer2AudioOutput::getRoutedDevice() {
|
|
|
|
|
status_t MediaPlayer2AudioOutput::addAudioDeviceCallback(jobject jRoutingDelegate) {
|
|
|
|
|
ALOGV("addAudioDeviceCallback");
|
|
|
|
|
Mutex::Autolock lock(mLock);
|
|
|
|
|
jobject listener = JAudioTrack::getListener(jRoutingDelegate);
|
|
|
|
|
if (mJAudioTrack != nullptr &&
|
|
|
|
|
JAudioTrack::findByKey(mRoutingDelegates, listener) == nullptr) {
|
|
|
|
|
jobject handler = JAudioTrack::getHandler(jRoutingDelegate);
|
|
|
|
|
jobject routingDelegate = JAudioTrack::addGlobalRef(jRoutingDelegate);
|
|
|
|
|
jobject listener = (new JObjectHolder(
|
|
|
|
|
JAudioTrack::getListener(jRoutingDelegate)))->getJObject();
|
|
|
|
|
if (JAudioTrack::findByKey(mRoutingDelegates, listener) == nullptr) {
|
|
|
|
|
jobject handler = (new JObjectHolder(
|
|
|
|
|
JAudioTrack::getHandler(jRoutingDelegate)))->getJObject();
|
|
|
|
|
jobject routingDelegate = (new JObjectHolder(jRoutingDelegate))->getJObject();
|
|
|
|
|
mRoutingDelegates.push_back(std::pair<jobject, jobject>(listener, routingDelegate));
|
|
|
|
|
return mJAudioTrack->addAudioDeviceCallback(routingDelegate, handler);
|
|
|
|
|
if (mJAudioTrack != nullptr) {
|
|
|
|
|
return mJAudioTrack->addAudioDeviceCallback(routingDelegate, handler);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return NO_ERROR;
|
|
|
|
|
}
|
|
|
|
@ -539,13 +539,11 @@ status_t MediaPlayer2AudioOutput::removeAudioDeviceCallback(jobject listener) {
|
|
|
|
|
ALOGV("removeAudioDeviceCallback");
|
|
|
|
|
Mutex::Autolock lock(mLock);
|
|
|
|
|
jobject routingDelegate = nullptr;
|
|
|
|
|
if (mJAudioTrack != nullptr &&
|
|
|
|
|
(routingDelegate = JAudioTrack::findByKey(mRoutingDelegates, listener)) != nullptr) {
|
|
|
|
|
mJAudioTrack->removeAudioDeviceCallback(routingDelegate);
|
|
|
|
|
JAudioTrack::eraseByKey(mRoutingDelegates, listener);
|
|
|
|
|
if (JAudioTrack::removeGlobalRef(routingDelegate) != NO_ERROR) {
|
|
|
|
|
return BAD_VALUE;
|
|
|
|
|
if ((routingDelegate = JAudioTrack::findByKey(mRoutingDelegates, listener)) != nullptr) {
|
|
|
|
|
if (mJAudioTrack != nullptr) {
|
|
|
|
|
mJAudioTrack->removeAudioDeviceCallback(routingDelegate);
|
|
|
|
|
}
|
|
|
|
|
JAudioTrack::eraseByKey(mRoutingDelegates, listener);
|
|
|
|
|
}
|
|
|
|
|
return NO_ERROR;
|
|
|
|
|
}
|
|
|
|
|