Loading include/media/AudioSystem.h +5 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,11 @@ public: static void acquireAudioSessionId(int audioSession, pid_t pid); static void releaseAudioSessionId(int audioSession, pid_t pid); // Get the HW synchronization source used for an audio session. // Return a valid source or AUDIO_HW_SYNC_INVALID if an error occurs // or no HW sync source is used. static audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId); // types of io configuration change events received with ioConfigChanged() enum io_config_event { OUTPUT_OPENED, Loading include/media/IAudioFlinger.h +2 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,8 @@ public: /* Set audio port configuration */ virtual status_t setAudioPortConfig(const struct audio_port_config *config) = 0; /* Get the HW synchronization source used for an audio session */ virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId) = 0; }; Loading media/libmedia/AudioSystem.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -450,6 +450,13 @@ void AudioSystem::releaseAudioSessionId(int audioSession, pid_t pid) } } audio_hw_sync_t AudioSystem::getAudioHwSyncForSession(audio_session_t sessionId) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return AUDIO_HW_SYNC_INVALID; return af->getAudioHwSyncForSession(sessionId); } // --------------------------------------------------------------------------- void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who __unused) Loading media/libmedia/IAudioFlinger.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,8 @@ enum { CREATE_AUDIO_PATCH, RELEASE_AUDIO_PATCH, LIST_AUDIO_PATCHES, SET_AUDIO_PORT_CONFIG SET_AUDIO_PORT_CONFIG, GET_AUDIO_HW_SYNC }; class BpAudioFlinger : public BpInterface<IAudioFlinger> Loading Loading @@ -883,6 +884,17 @@ public: } return status; } virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.writeInt32(sessionId); status_t status = remote()->transact(GET_AUDIO_HW_SYNC, data, &reply); if (status != NO_ERROR) { return AUDIO_HW_SYNC_INVALID; } return (audio_hw_sync_t)reply.readInt32(); } }; IMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); Loading Loading @@ -1345,6 +1357,11 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32(status); return NO_ERROR; } break; case GET_AUDIO_HW_SYNC: { CHECK_INTERFACE(IAudioFlinger, data, reply); reply->writeInt32(getAudioHwSyncForSession((audio_session_t)data.readInt32())); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading services/audioflinger/AudioFlinger.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -1579,6 +1579,25 @@ status_t AudioFlinger::setLowRamDevice(bool isLowRamDevice) return NO_ERROR; } audio_hw_sync_t AudioFlinger::getAudioHwSyncForSession(audio_session_t sessionId) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mPlaybackThreads.size(); i++) { sp<PlaybackThread> thread = mPlaybackThreads.valueAt(i); if ((thread->hasAudioSession(sessionId) & ThreadBase::TRACK_SESSION) != 0) { // A session can only be on one thread, so exit after first match String8 reply = thread->getParameters(String8(AUDIO_PARAMETER_STREAM_HW_AV_SYNC)); AudioParameter param = AudioParameter(reply); int value; if (param.getInt(String8(AUDIO_PARAMETER_STREAM_HW_AV_SYNC), value) == NO_ERROR) { return value; } break; } } return AUDIO_HW_SYNC_INVALID; } // ---------------------------------------------------------------------------- Loading Loading
include/media/AudioSystem.h +5 −0 Original line number Diff line number Diff line Loading @@ -149,6 +149,11 @@ public: static void acquireAudioSessionId(int audioSession, pid_t pid); static void releaseAudioSessionId(int audioSession, pid_t pid); // Get the HW synchronization source used for an audio session. // Return a valid source or AUDIO_HW_SYNC_INVALID if an error occurs // or no HW sync source is used. static audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId); // types of io configuration change events received with ioConfigChanged() enum io_config_event { OUTPUT_OPENED, Loading
include/media/IAudioFlinger.h +2 −0 Original line number Diff line number Diff line Loading @@ -235,6 +235,8 @@ public: /* Set audio port configuration */ virtual status_t setAudioPortConfig(const struct audio_port_config *config) = 0; /* Get the HW synchronization source used for an audio session */ virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId) = 0; }; Loading
media/libmedia/AudioSystem.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -450,6 +450,13 @@ void AudioSystem::releaseAudioSessionId(int audioSession, pid_t pid) } } audio_hw_sync_t AudioSystem::getAudioHwSyncForSession(audio_session_t sessionId) { const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger(); if (af == 0) return AUDIO_HW_SYNC_INVALID; return af->getAudioHwSyncForSession(sessionId); } // --------------------------------------------------------------------------- void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who __unused) Loading
media/libmedia/IAudioFlinger.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -79,7 +79,8 @@ enum { CREATE_AUDIO_PATCH, RELEASE_AUDIO_PATCH, LIST_AUDIO_PATCHES, SET_AUDIO_PORT_CONFIG SET_AUDIO_PORT_CONFIG, GET_AUDIO_HW_SYNC }; class BpAudioFlinger : public BpInterface<IAudioFlinger> Loading Loading @@ -883,6 +884,17 @@ public: } return status; } virtual audio_hw_sync_t getAudioHwSyncForSession(audio_session_t sessionId) { Parcel data, reply; data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor()); data.writeInt32(sessionId); status_t status = remote()->transact(GET_AUDIO_HW_SYNC, data, &reply); if (status != NO_ERROR) { return AUDIO_HW_SYNC_INVALID; } return (audio_hw_sync_t)reply.readInt32(); } }; IMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); Loading Loading @@ -1345,6 +1357,11 @@ status_t BnAudioFlinger::onTransact( reply->writeInt32(status); return NO_ERROR; } break; case GET_AUDIO_HW_SYNC: { CHECK_INTERFACE(IAudioFlinger, data, reply); reply->writeInt32(getAudioHwSyncForSession((audio_session_t)data.readInt32())); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading
services/audioflinger/AudioFlinger.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -1579,6 +1579,25 @@ status_t AudioFlinger::setLowRamDevice(bool isLowRamDevice) return NO_ERROR; } audio_hw_sync_t AudioFlinger::getAudioHwSyncForSession(audio_session_t sessionId) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mPlaybackThreads.size(); i++) { sp<PlaybackThread> thread = mPlaybackThreads.valueAt(i); if ((thread->hasAudioSession(sessionId) & ThreadBase::TRACK_SESSION) != 0) { // A session can only be on one thread, so exit after first match String8 reply = thread->getParameters(String8(AUDIO_PARAMETER_STREAM_HW_AV_SYNC)); AudioParameter param = AudioParameter(reply); int value; if (param.getInt(String8(AUDIO_PARAMETER_STREAM_HW_AV_SYNC), value) == NO_ERROR) { return value; } break; } } return AUDIO_HW_SYNC_INVALID; } // ---------------------------------------------------------------------------- Loading