@ -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 ;
}