Add support for ICS audio blobs
Enable with the ICS_AUDIO_BLOB CFLAG
Change-Id: Ie174d5997202b8931c1f11db62b6ec2e377f096a
Conflicts:
services/audioflinger/AudioFlinger.cpp
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index e95d03b..e4b0698 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -121,11 +121,13 @@
if (rc) {
goto out;
}
+#if !defined(ICS_AUDIO_BLOB) && !defined(MR0_AUDIO_BLOB)
if ((*dev)->common.version != AUDIO_DEVICE_API_VERSION_CURRENT) {
ALOGE("%s wrong audio hw device version %04x", __func__, (*dev)->common.version);
rc = BAD_VALUE;
goto out;
}
+#endif
return 0;
out:
@@ -756,8 +758,10 @@
// assigned to HALs which do not have master mute support will apply master
// mute during the mix operation. Threads with HALs which do support master
// mute will simply ignore the setting.
+#ifndef ICS_AUDIO_BLOB
for (size_t i = 0; i < mPlaybackThreads.size(); i++)
mPlaybackThreads.valueAt(i)->setMasterMute(muted);
+#endif
return NO_ERROR;
}
@@ -1010,7 +1014,11 @@
config.format = format;
audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
+#ifndef ICS_AUDIO_BLOB
size_t size = dev->get_input_buffer_size(dev, &config);
+#else
+ size_t size = dev->get_input_buffer_size(dev, sampleRate, format, popcount(channelMask));
+#endif
mHardwareStatus = AUDIO_HW_IDLE;
return size;
}
@@ -1362,6 +1370,7 @@
{ // scope for auto-lock pattern
AutoMutex lock(mHardwareLock);
+#if !defined(ICS_AUDIO_BLOB) && !defined(MR0_AUDIO_BLOB)
if (0 == mAudioHwDevs.size()) {
mHardwareStatus = AUDIO_HW_GET_MASTER_VOLUME;
if (NULL != dev->get_master_volume) {
@@ -1379,6 +1388,7 @@
}
}
}
+#endif
mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME;
if ((NULL != dev->set_master_volume) &&
@@ -1387,12 +1397,14 @@
AudioHwDevice::AHWD_CAN_SET_MASTER_VOLUME);
}
+#if !defined(ICS_AUDIO_BLOB) && !defined(MR0_AUDIO_BLOB)
mHardwareStatus = AUDIO_HW_SET_MASTER_MUTE;
if ((NULL != dev->set_master_mute) &&
(OK == dev->set_master_mute(dev, mMasterMute))) {
flags = static_cast<AudioHwDevice::Flags>(flags |
AudioHwDevice::AHWD_CAN_SET_MASTER_MUTE);
}
+#endif
mHardwareStatus = AUDIO_HW_IDLE;
}
@@ -1488,12 +1500,24 @@
mHardwareStatus = AUDIO_HW_OUTPUT_OPEN;
- status_t status = hwDevHal->open_output_stream(hwDevHal,
+ status_t status;
+#ifndef ICS_AUDIO_BLOB
+ status = hwDevHal->open_output_stream(hwDevHal,
id,
*pDevices,
(audio_output_flags_t)flags,
&config,
&outStream);
+#else
+ status = hwDevHal->open_output_stream(hwDevHal,
+ *pDevices,
+ (int *)&config.format,
+ &config.channel_mask,
+ &config.sample_rate,
+ &outStream);
+ uint32_t newflags = flags | AUDIO_OUTPUT_FLAG_PRIMARY;
+ flags = (audio_output_flags_t)newflags;
+#endif
mHardwareStatus = AUDIO_HW_IDLE;
ALOGV("openOutput() openOutputStream returned output %p, SamplingRate %d, Format %#08x, "
@@ -1700,8 +1724,16 @@
audio_hw_device_t *inHwHal = inHwDev->hwDevice();
audio_io_handle_t id = nextUniqueId();
+#ifndef ICS_AUDIO_BLOB
status = inHwHal->open_input_stream(inHwHal, id, *pDevices, &config,
&inStream);
+#else
+ status = inHwHal->open_input_stream(inHwHal, *pDevices,
+ (int *)&config.format,
+ &config.channel_mask,
+ &config.sample_rate, (audio_in_acoustics_t)0,
+ &inStream);
+#endif
ALOGV("openInput() openInputStream returned input %p, SamplingRate %d, Format %d, Channels %x, "
"status %d",
inStream,
@@ -1719,7 +1751,15 @@
(popcount(config.channel_mask) <= FCC_2) && (popcount(reqChannels) <= FCC_2)) {
ALOGV("openInput() reopening with proposed sampling rate and channel mask");
inStream = NULL;
+#ifndef ICS_AUDIO_BLOB
status = inHwHal->open_input_stream(inHwHal, id, *pDevices, &config, &inStream);
+#else
+ status = inHwHal->open_input_stream(inHwHal, *pDevices,
+ (int *)&config.format,
+ &config.channel_mask,
+ &config.sample_rate, (audio_in_acoustics_t)0,
+ &inStream);
+#endif
}
if (status == NO_ERROR && inStream != NULL) {
diff --git a/services/audioflinger/AudioPolicyService.cpp b/services/audioflinger/AudioPolicyService.cpp
index 35e816b..dc503c4 100644
--- a/services/audioflinger/AudioPolicyService.cpp
+++ b/services/audioflinger/AudioPolicyService.cpp
@@ -418,12 +418,15 @@
return BAD_VALUE;
}
Mutex::Autolock _l(mLock);
+#ifndef ICS_AUDIO_BLOB
if (mpAudioPolicy->set_stream_volume_index_for_device) {
return mpAudioPolicy->set_stream_volume_index_for_device(mpAudioPolicy,
stream,
index,
device);
- } else {
+ } else
+#endif
+ {
return mpAudioPolicy->set_stream_volume_index(mpAudioPolicy, stream, index);
}
}
@@ -439,12 +442,15 @@
return BAD_VALUE;
}
Mutex::Autolock _l(mLock);
+#ifndef ICS_AUDIO_BLOB
if (mpAudioPolicy->get_stream_volume_index_for_device) {
return mpAudioPolicy->get_stream_volume_index_for_device(mpAudioPolicy,
stream,
index,
device);
- } else {
+ } else
+#endif
+ {
return mpAudioPolicy->get_stream_volume_index(mpAudioPolicy, stream, index);
}
}
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 9c8fd1f..2135e79 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -2705,11 +2705,13 @@
int64_t pts;
status_t status = INVALID_OPERATION;
+#ifndef ICS_AUDIO_BLOB
if (mNormalSink != 0) {
status = mNormalSink->getNextWriteTimestamp(&pts);
} else {
status = mOutputSink->getNextWriteTimestamp(&pts);
}
+#endif
if (status != NO_ERROR) {
pts = AudioBufferProvider::kInvalidPTS;