summaryrefslogtreecommitdiffstats
path: root/media/libmedia/IAudioFlinger.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libmedia/IAudioFlinger.cpp')
-rw-r--r--media/libmedia/IAudioFlinger.cpp105
1 files changed, 62 insertions, 43 deletions
diff --git a/media/libmedia/IAudioFlinger.cpp b/media/libmedia/IAudioFlinger.cpp
index ce10c8e..81e259a 100644
--- a/media/libmedia/IAudioFlinger.cpp
+++ b/media/libmedia/IAudioFlinger.cpp
@@ -69,7 +69,8 @@ enum {
QUERY_EFFECT,
GET_EFFECT_DESCRIPTOR,
CREATE_EFFECT,
- MOVE_EFFECTS
+ MOVE_EFFECTS,
+ LOAD_HW_MODULE
};
class BpAudioFlinger : public BpInterface<IAudioFlinger>
@@ -355,38 +356,40 @@ public:
return reply.readInt32();
}
- virtual audio_io_handle_t openOutput(uint32_t *pDevices,
- uint32_t *pSamplingRate,
- audio_format_t *pFormat,
- uint32_t *pChannels,
- uint32_t *pLatencyMs,
- audio_policy_output_flags_t flags)
+ virtual audio_io_handle_t openOutput(audio_module_handle_t module,
+ audio_devices_t *pDevices,
+ uint32_t *pSamplingRate,
+ audio_format_t *pFormat,
+ audio_channel_mask_t *pChannelMask,
+ uint32_t *pLatencyMs,
+ audio_policy_output_flags_t flags)
{
Parcel data, reply;
- uint32_t devices = pDevices ? *pDevices : 0;
+ audio_devices_t devices = pDevices ? *pDevices : (audio_devices_t)0;
uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0;
audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT;
- uint32_t channels = pChannels ? *pChannels : 0;
+ audio_channel_mask_t channelMask = pChannelMask ? *pChannelMask : (audio_channel_mask_t)0;
uint32_t latency = pLatencyMs ? *pLatencyMs : 0;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
+ data.writeInt32(module);
data.writeInt32(devices);
data.writeInt32(samplingRate);
data.writeInt32(format);
- data.writeInt32(channels);
+ data.writeInt32(channelMask);
data.writeInt32(latency);
data.writeInt32((int32_t) flags);
remote()->transact(OPEN_OUTPUT, data, &reply);
audio_io_handle_t output = (audio_io_handle_t) reply.readInt32();
ALOGV("openOutput() returned output, %d", output);
- devices = reply.readInt32();
+ devices = (audio_devices_t)reply.readInt32();
if (pDevices) *pDevices = devices;
samplingRate = reply.readInt32();
if (pSamplingRate) *pSamplingRate = samplingRate;
format = (audio_format_t) reply.readInt32();
if (pFormat) *pFormat = format;
- channels = reply.readInt32();
- if (pChannels) *pChannels = channels;
+ channelMask = (audio_channel_mask_t)reply.readInt32();
+ if (pChannelMask) *pChannelMask = channelMask;
latency = reply.readInt32();
if (pLatencyMs) *pLatencyMs = latency;
return output;
@@ -430,34 +433,34 @@ public:
return reply.readInt32();
}
- virtual audio_io_handle_t openInput(uint32_t *pDevices,
- uint32_t *pSamplingRate,
- audio_format_t *pFormat,
- uint32_t *pChannels,
- audio_in_acoustics_t acoustics)
+ virtual audio_io_handle_t openInput(audio_module_handle_t module,
+ audio_devices_t *pDevices,
+ uint32_t *pSamplingRate,
+ audio_format_t *pFormat,
+ audio_channel_mask_t *pChannelMask)
{
Parcel data, reply;
- uint32_t devices = pDevices ? *pDevices : 0;
+ audio_devices_t devices = pDevices ? *pDevices : (audio_devices_t)0;
uint32_t samplingRate = pSamplingRate ? *pSamplingRate : 0;
audio_format_t format = pFormat ? *pFormat : AUDIO_FORMAT_DEFAULT;
- uint32_t channels = pChannels ? *pChannels : 0;
+ audio_channel_mask_t channelMask = pChannelMask ? *pChannelMask : (audio_channel_mask_t)0;
data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
+ data.writeInt32(module);
data.writeInt32(devices);
data.writeInt32(samplingRate);
data.writeInt32(format);
- data.writeInt32(channels);
- data.writeInt32((int32_t) acoustics);
+ data.writeInt32(channelMask);
remote()->transact(OPEN_INPUT, data, &reply);
audio_io_handle_t input = (audio_io_handle_t) reply.readInt32();
- devices = reply.readInt32();
+ devices = (audio_devices_t)reply.readInt32();
if (pDevices) *pDevices = devices;
samplingRate = reply.readInt32();
if (pSamplingRate) *pSamplingRate = samplingRate;
format = (audio_format_t) reply.readInt32();
if (pFormat) *pFormat = format;
- channels = reply.readInt32();
- if (pChannels) *pChannels = channels;
+ channelMask = (audio_channel_mask_t)reply.readInt32();
+ if (pChannelMask) *pChannelMask = channelMask;
return input;
}
@@ -668,6 +671,15 @@ public:
remote()->transact(MOVE_EFFECTS, data, &reply);
return reply.readInt32();
}
+
+ virtual audio_module_handle_t loadHwModule(const char *name)
+ {
+ Parcel data, reply;
+ data.writeInterfaceToken(IAudioFlinger::getInterfaceDescriptor());
+ data.writeCString(name);
+ remote()->transact(LOAD_HW_MODULE, data, &reply);
+ return (audio_module_handle_t) reply.readInt32();
+ }
};
IMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger");
@@ -837,24 +849,26 @@ status_t BnAudioFlinger::onTransact(
} break;
case OPEN_OUTPUT: {
CHECK_INTERFACE(IAudioFlinger, data, reply);
- uint32_t devices = data.readInt32();
+ audio_module_handle_t module = (audio_module_handle_t)data.readInt32();
+ audio_devices_t devices = (audio_devices_t)data.readInt32();
uint32_t samplingRate = data.readInt32();
audio_format_t format = (audio_format_t) data.readInt32();
- uint32_t channels = data.readInt32();
+ audio_channel_mask_t channelMask = (audio_channel_mask_t)data.readInt32();
uint32_t latency = data.readInt32();
audio_policy_output_flags_t flags = (audio_policy_output_flags_t) data.readInt32();
- audio_io_handle_t output = openOutput(&devices,
- &samplingRate,
- &format,
- &channels,
- &latency,
- flags);
+ audio_io_handle_t output = openOutput(module,
+ &devices,
+ &samplingRate,
+ &format,
+ &channelMask,
+ &latency,
+ flags);
ALOGV("OPEN_OUTPUT output, %p", output);
reply->writeInt32((int32_t) output);
reply->writeInt32(devices);
reply->writeInt32(samplingRate);
reply->writeInt32(format);
- reply->writeInt32(channels);
+ reply->writeInt32(channelMask);
reply->writeInt32(latency);
return NO_ERROR;
} break;
@@ -882,22 +896,22 @@ status_t BnAudioFlinger::onTransact(
} break;
case OPEN_INPUT: {
CHECK_INTERFACE(IAudioFlinger, data, reply);
- uint32_t devices = data.readInt32();
+ audio_module_handle_t module = (audio_module_handle_t)data.readInt32();
+ audio_devices_t devices = (audio_devices_t)data.readInt32();
uint32_t samplingRate = data.readInt32();
audio_format_t format = (audio_format_t) data.readInt32();
- uint32_t channels = data.readInt32();
- audio_in_acoustics_t acoustics = (audio_in_acoustics_t) data.readInt32();
+ audio_channel_mask_t channelMask = (audio_channel_mask_t)data.readInt32();
- audio_io_handle_t input = openInput(&devices,
- &samplingRate,
- &format,
- &channels,
- acoustics);
+ audio_io_handle_t input = openInput(module,
+ &devices,
+ &samplingRate,
+ &format,
+ &channelMask);
reply->writeInt32((int32_t) input);
reply->writeInt32(devices);
reply->writeInt32(samplingRate);
reply->writeInt32(format);
- reply->writeInt32(channels);
+ reply->writeInt32(channelMask);
return NO_ERROR;
} break;
case CLOSE_INPUT: {
@@ -1015,6 +1029,11 @@ status_t BnAudioFlinger::onTransact(
reply->writeInt32(moveEffects(session, srcOutput, dstOutput));
return NO_ERROR;
} break;
+ case LOAD_HW_MODULE: {
+ CHECK_INTERFACE(IAudioFlinger, data, reply);
+ reply->writeInt32(loadHwModule(data.readCString()));
+ return NO_ERROR;
+ } break;
default:
return BBinder::onTransact(code, data, reply, flags);
}