diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp index a3c66fe700..5e7cda7d87 100644 --- a/media/libaudioclient/AudioTrack.cpp +++ b/media/libaudioclient/AudioTrack.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -2342,6 +2343,17 @@ status_t AudioTrack::setParameters(const String8& keyValuePairs) return mAudioTrack->setParameters(keyValuePairs); } +status_t AudioTrack::selectPresentation(int presentationId, int programId) +{ + AutoMutex lock(mLock); + AudioParameter param = AudioParameter(); + param.addInt(String8(AudioParameter::keyPresentationId), presentationId); + param.addInt(String8(AudioParameter::keyProgramId), programId); + ALOGV("PresentationId/ProgramId[%s]",param.toString().string()); + + return mAudioTrack->setParameters(param.toString()); +} + VolumeShaper::Status AudioTrack::applyVolumeShaper( const sp& configuration, const sp& operation) diff --git a/media/libaudioclient/include/media/AudioParameter.h b/media/libaudioclient/include/media/AudioParameter.h index 1ace607a2c..59ac1db998 100644 --- a/media/libaudioclient/include/media/AudioParameter.h +++ b/media/libaudioclient/include/media/AudioParameter.h @@ -58,6 +58,12 @@ public: static const char * const keyMonoOutput; static const char * const keyStreamHwAvSync; + // keys for presentation selection + // keyPresentationId: Audio presentation identifier + // keyProgramId: Audio presentation program identifier + static const char * const keyPresentationId; + static const char * const keyProgramId; + // keyStreamConnect / Disconnect: value is an int in audio_devices_t static const char * const keyStreamConnect; static const char * const keyStreamDisconnect; diff --git a/media/libaudioclient/include/media/AudioTrack.h b/media/libaudioclient/include/media/AudioTrack.h index c146db95e1..7c8a0fa79d 100644 --- a/media/libaudioclient/include/media/AudioTrack.h +++ b/media/libaudioclient/include/media/AudioTrack.h @@ -760,6 +760,9 @@ public: /* Gets the volume shaper state */ sp getVolumeShaperState(int id); + /* Selects the presentation (if available) */ + status_t selectPresentation(int presentationId, int programId); + /* Get parameters */ String8 getParameters(const String8& keys); diff --git a/media/libmedia/AudioParameter.cpp b/media/libmedia/AudioParameter.cpp index 65fc70b89b..cb0e927209 100644 --- a/media/libmedia/AudioParameter.cpp +++ b/media/libmedia/AudioParameter.cpp @@ -34,6 +34,8 @@ const char * const AudioParameter::keyInputSource = AUDIO_PARAMETER_STREAM_INPUT const char * const AudioParameter::keyScreenState = AUDIO_PARAMETER_KEY_SCREEN_STATE; const char * const AudioParameter::keyBtNrec = AUDIO_PARAMETER_KEY_BT_NREC; const char * const AudioParameter::keyHwAvSync = AUDIO_PARAMETER_HW_AV_SYNC; +const char * const AudioParameter::keyPresentationId = AUDIO_PARAMETER_STREAM_PRESENTATION_ID; +const char * const AudioParameter::keyProgramId = AUDIO_PARAMETER_STREAM_PROGRAM_ID; const char * const AudioParameter::keyMonoOutput = AUDIO_PARAMETER_MONO_OUTPUT; const char * const AudioParameter::keyStreamHwAvSync = AUDIO_PARAMETER_STREAM_HW_AV_SYNC; const char * const AudioParameter::keyStreamConnect = AUDIO_PARAMETER_DEVICE_CONNECT;