Loading include/media/AudioSystem.h +9 −8 Original line number Diff line number Diff line Loading @@ -228,6 +228,7 @@ public: audio_format_t format = AUDIO_FORMAT_DEFAULT, audio_channel_mask_t channelMask = AUDIO_CHANNEL_OUT_STEREO, audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE, const audio_offload_info_t *offloadInfo = NULL); static status_t startOutput(audio_io_handle_t output, audio_stream_type_t stream, Loading include/media/AudioTrack.h +24 −0 Original line number Diff line number Diff line Loading @@ -477,6 +477,26 @@ private: audio_io_handle_t getOutput() const; public: /* Selects the audio device to use for output of this AudioTrack. A value of * AUDIO_PORT_HANDLE_NONE indicates default (AudioPolicyManager) routing. * * Parameters: * The device ID of the selected device (as returned by the AudioDevicesManager API). * * Returned value: * - NO_ERROR: successful operation * TODO: what else can happen here? */ status_t setOutputDevice(audio_port_handle_t deviceId); /* Returns the ID of the audio device used for output of this AudioTrack. * A value of AUDIO_PORT_HANDLE_NONE indicates default (AudioPolicyManager) routing. * * Parameters: * none. */ audio_port_handle_t getOutputDevice(); /* Returns the unique session ID associated with this track. * * Parameters: Loading Loading @@ -817,6 +837,10 @@ protected: bool mInUnderrun; // whether track is currently in underrun state uint32_t mPausedPosition; // For Device Selection API // a value of AUDIO_PORT_HANDLE_NONE indicated default (AudioPolicyManager) routing. int mSelectedDeviceId; private: class DeathNotifier : public IBinder::DeathRecipient { public: Loading include/media/IAudioPolicyService.h +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ public: audio_format_t format = AUDIO_FORMAT_DEFAULT, audio_channel_mask_t channelMask = 0, audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE, const audio_offload_info_t *offloadInfo = NULL) = 0; virtual status_t startOutput(audio_io_handle_t output, audio_stream_type_t stream, Loading media/libmedia/AudioSystem.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -658,13 +658,14 @@ status_t AudioSystem::getOutputForAttr(const audio_attributes_t *attr, audio_format_t format, audio_channel_mask_t channelMask, audio_output_flags_t flags, audio_port_handle_t selectedDeviceId, const audio_offload_info_t *offloadInfo) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return NO_INIT; return aps->getOutputForAttr(attr, output, session, stream, samplingRate, format, channelMask, flags, offloadInfo); flags, selectedDeviceId, offloadInfo); } status_t AudioSystem::startOutput(audio_io_handle_t output, Loading media/libmedia/AudioTrack.cpp +26 −7 Original line number Diff line number Diff line Loading @@ -121,7 +121,8 @@ AudioTrack::AudioTrack() mIsTimed(false), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) { mAttributes.content_type = AUDIO_CONTENT_TYPE_UNKNOWN; mAttributes.usage = AUDIO_USAGE_UNKNOWN; Loading Loading @@ -149,7 +150,8 @@ AudioTrack::AudioTrack( mIsTimed(false), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) { mStatus = set(streamType, sampleRate, format, channelMask, frameCount, flags, cbf, user, notificationFrames, Loading Loading @@ -177,7 +179,8 @@ AudioTrack::AudioTrack( mIsTimed(false), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) { mStatus = set(streamType, sampleRate, format, channelMask, 0 /*frameCount*/, flags, cbf, user, notificationFrames, Loading Loading @@ -928,6 +931,21 @@ audio_io_handle_t AudioTrack::getOutput() const return mOutput; } status_t AudioTrack::setOutputDevice(audio_port_handle_t deviceId) { AutoMutex lock(mLock); if (mSelectedDeviceId != deviceId) { mSelectedDeviceId = deviceId; return restoreTrack_l("setOutputDevice() restart"); } else { return NO_ERROR; } } audio_port_handle_t AudioTrack::getOutputDevice() { AutoMutex lock(mLock); return mSelectedDeviceId; } status_t AudioTrack::attachAuxEffect(int effectId) { AutoMutex lock(mLock); Loading Loading @@ -960,11 +978,12 @@ status_t AudioTrack::createTrack_l() audio_io_handle_t output; audio_stream_type_t streamType = mStreamType; audio_attributes_t *attr = (mStreamType == AUDIO_STREAM_DEFAULT) ? &mAttributes : NULL; status_t status = AudioSystem::getOutputForAttr(attr, &output, status_t status; status = AudioSystem::getOutputForAttr(attr, &output, (audio_session_t)mSessionId, &streamType, mSampleRate, mFormat, mChannelMask, mFlags, mOffloadInfo); mFlags, mSelectedDeviceId, mOffloadInfo); if (status != NO_ERROR || output == AUDIO_IO_HANDLE_NONE) { ALOGE("Could not get audio output for session %d, stream type %d, usage %d, sample rate %u, format %#x," Loading Loading
include/media/AudioSystem.h +9 −8 Original line number Diff line number Diff line Loading @@ -228,6 +228,7 @@ public: audio_format_t format = AUDIO_FORMAT_DEFAULT, audio_channel_mask_t channelMask = AUDIO_CHANNEL_OUT_STEREO, audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE, const audio_offload_info_t *offloadInfo = NULL); static status_t startOutput(audio_io_handle_t output, audio_stream_type_t stream, Loading
include/media/AudioTrack.h +24 −0 Original line number Diff line number Diff line Loading @@ -477,6 +477,26 @@ private: audio_io_handle_t getOutput() const; public: /* Selects the audio device to use for output of this AudioTrack. A value of * AUDIO_PORT_HANDLE_NONE indicates default (AudioPolicyManager) routing. * * Parameters: * The device ID of the selected device (as returned by the AudioDevicesManager API). * * Returned value: * - NO_ERROR: successful operation * TODO: what else can happen here? */ status_t setOutputDevice(audio_port_handle_t deviceId); /* Returns the ID of the audio device used for output of this AudioTrack. * A value of AUDIO_PORT_HANDLE_NONE indicates default (AudioPolicyManager) routing. * * Parameters: * none. */ audio_port_handle_t getOutputDevice(); /* Returns the unique session ID associated with this track. * * Parameters: Loading Loading @@ -817,6 +837,10 @@ protected: bool mInUnderrun; // whether track is currently in underrun state uint32_t mPausedPosition; // For Device Selection API // a value of AUDIO_PORT_HANDLE_NONE indicated default (AudioPolicyManager) routing. int mSelectedDeviceId; private: class DeathNotifier : public IBinder::DeathRecipient { public: Loading
include/media/IAudioPolicyService.h +1 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ public: audio_format_t format = AUDIO_FORMAT_DEFAULT, audio_channel_mask_t channelMask = 0, audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE, audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE, const audio_offload_info_t *offloadInfo = NULL) = 0; virtual status_t startOutput(audio_io_handle_t output, audio_stream_type_t stream, Loading
media/libmedia/AudioSystem.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -658,13 +658,14 @@ status_t AudioSystem::getOutputForAttr(const audio_attributes_t *attr, audio_format_t format, audio_channel_mask_t channelMask, audio_output_flags_t flags, audio_port_handle_t selectedDeviceId, const audio_offload_info_t *offloadInfo) { const sp<IAudioPolicyService>& aps = AudioSystem::get_audio_policy_service(); if (aps == 0) return NO_INIT; return aps->getOutputForAttr(attr, output, session, stream, samplingRate, format, channelMask, flags, offloadInfo); flags, selectedDeviceId, offloadInfo); } status_t AudioSystem::startOutput(audio_io_handle_t output, Loading
media/libmedia/AudioTrack.cpp +26 −7 Original line number Diff line number Diff line Loading @@ -121,7 +121,8 @@ AudioTrack::AudioTrack() mIsTimed(false), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) { mAttributes.content_type = AUDIO_CONTENT_TYPE_UNKNOWN; mAttributes.usage = AUDIO_USAGE_UNKNOWN; Loading Loading @@ -149,7 +150,8 @@ AudioTrack::AudioTrack( mIsTimed(false), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) { mStatus = set(streamType, sampleRate, format, channelMask, frameCount, flags, cbf, user, notificationFrames, Loading Loading @@ -177,7 +179,8 @@ AudioTrack::AudioTrack( mIsTimed(false), mPreviousPriority(ANDROID_PRIORITY_NORMAL), mPreviousSchedulingGroup(SP_DEFAULT), mPausedPosition(0) mPausedPosition(0), mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE) { mStatus = set(streamType, sampleRate, format, channelMask, 0 /*frameCount*/, flags, cbf, user, notificationFrames, Loading Loading @@ -928,6 +931,21 @@ audio_io_handle_t AudioTrack::getOutput() const return mOutput; } status_t AudioTrack::setOutputDevice(audio_port_handle_t deviceId) { AutoMutex lock(mLock); if (mSelectedDeviceId != deviceId) { mSelectedDeviceId = deviceId; return restoreTrack_l("setOutputDevice() restart"); } else { return NO_ERROR; } } audio_port_handle_t AudioTrack::getOutputDevice() { AutoMutex lock(mLock); return mSelectedDeviceId; } status_t AudioTrack::attachAuxEffect(int effectId) { AutoMutex lock(mLock); Loading Loading @@ -960,11 +978,12 @@ status_t AudioTrack::createTrack_l() audio_io_handle_t output; audio_stream_type_t streamType = mStreamType; audio_attributes_t *attr = (mStreamType == AUDIO_STREAM_DEFAULT) ? &mAttributes : NULL; status_t status = AudioSystem::getOutputForAttr(attr, &output, status_t status; status = AudioSystem::getOutputForAttr(attr, &output, (audio_session_t)mSessionId, &streamType, mSampleRate, mFormat, mChannelMask, mFlags, mOffloadInfo); mFlags, mSelectedDeviceId, mOffloadInfo); if (status != NO_ERROR || output == AUDIO_IO_HANDLE_NONE) { ALOGE("Could not get audio output for session %d, stream type %d, usage %d, sample rate %u, format %#x," Loading