Add selectPresentation API to IAudioTrack
The Java AudioTrack interface has a setPresentation API. This
calls the setParameters API in IAudioTrack. However, this does
not eventuate into a call into the android.hardware.audio@4.0
IStreamOut selectPresentation API.
Add selectPresentation API to IAudioTrack and call down to the
android.hardware.audio@4.0 IStreamOut selectPresentation API.
Translate into calls to setParameters API for legacy HAL
interfaces.
Bug: 63901775
Test: compile
Change-Id: Id634a107f3f93ab18dc80d2bd0af67bda35e859f
diff --git a/media/libaudioclient/IAudioTrack.cpp b/media/libaudioclient/IAudioTrack.cpp
index adff057..83a568a 100644
--- a/media/libaudioclient/IAudioTrack.cpp
+++ b/media/libaudioclient/IAudioTrack.cpp
@@ -39,6 +39,7 @@
PAUSE,
ATTACH_AUX_EFFECT,
SET_PARAMETERS,
+ SELECT_PRESENTATION,
GET_TIMESTAMP,
SIGNAL,
APPLY_VOLUME_SHAPER,
@@ -127,6 +128,19 @@
return status;
}
+ /* Selects the presentation (if available) */
+ virtual status_t selectPresentation(int presentationId, int programId) {
+ Parcel data, reply;
+ data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
+ data.writeInt32(presentationId);
+ data.writeInt32(programId);
+ status_t status = remote()->transact(SELECT_PRESENTATION, data, &reply);
+ if (status == NO_ERROR) {
+ status = reply.readInt32();
+ }
+ return status;
+ }
+
virtual status_t getTimestamp(AudioTimestamp& timestamp) {
Parcel data, reply;
data.writeInterfaceToken(IAudioTrack::getInterfaceDescriptor());
@@ -239,6 +253,11 @@
reply->writeInt32(setParameters(keyValuePairs));
return NO_ERROR;
} break;
+ case SELECT_PRESENTATION: {
+ CHECK_INTERFACE(IAudioTrack, data, reply);
+ reply->writeInt32(selectPresentation(data.readInt32(), data.readInt32()));
+ return NO_ERROR;
+ } break;
case GET_TIMESTAMP: {
CHECK_INTERFACE(IAudioTrack, data, reply);
AudioTimestamp timestamp;