summaryrefslogtreecommitdiffstats
path: root/modules/audio_remote_submix
diff options
context:
space:
mode:
authorJean-Michel Trivi <jmtrivi@google.com>2012-09-30 11:08:06 -0700
committerJean-Michel Trivi <jmtrivi@google.com>2012-09-30 11:12:28 -0700
commitd44130339c7317faaa5cbab767eccc37347ffd25 (patch)
tree11e90cc639235d5776cb0c2d40e0cb90facea6cc /modules/audio_remote_submix
parent3a90d5964bc17ace1097e06a62d0410241c6c99c (diff)
downloadhardware_libhardware-d44130339c7317faaa5cbab767eccc37347ffd25.zip
hardware_libhardware-d44130339c7317faaa5cbab767eccc37347ffd25.tar.gz
hardware_libhardware-d44130339c7317faaa5cbab767eccc37347ffd25.tar.bz2
bug 7253033 Add "exiting" state to remote audio submix module
Support receiving a parameter that sets the remote audio submix module in a state where the audio pipe will unblock any current write operation and not block anymore. Change-Id: Ia3119cd79972afff0de24187dae627855a468ebf
Diffstat (limited to 'modules/audio_remote_submix')
-rw-r--r--modules/audio_remote_submix/Android.mk1
-rwxr-xr-xmodules/audio_remote_submix/audio_hw.cpp31
2 files changed, 30 insertions, 2 deletions
diff --git a/modules/audio_remote_submix/Android.mk b/modules/audio_remote_submix/Android.mk
index 735215e..5f54902 100644
--- a/modules/audio_remote_submix/Android.mk
+++ b/modules/audio_remote_submix/Android.mk
@@ -24,6 +24,7 @@ LOCAL_C_INCLUDES += \
frameworks/av/include/ \
frameworks/native/include/
LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libnbaio
+LOCAL_STATIC_LIBRARIES := libmedia_helper
LOCAL_MODULE_TAGS := optional
include $(BUILD_SHARED_LIBRARY)
diff --git a/modules/audio_remote_submix/audio_hw.cpp b/modules/audio_remote_submix/audio_hw.cpp
index 0f8adab..b24608f 100755
--- a/modules/audio_remote_submix/audio_hw.cpp
+++ b/modules/audio_remote_submix/audio_hw.cpp
@@ -31,12 +31,13 @@
#include <system/audio.h>
#include <hardware/audio.h>
-//#include <media/nbaio/Pipe.h>
-//#include <media/nbaio/PipeReader.h>
#include <media/nbaio/MonoPipe.h>
#include <media/nbaio/MonoPipeReader.h>
#include <media/AudioBufferProvider.h>
+#include <utils/String8.h>
+#include <media/AudioParameter.h>
+
extern "C" {
namespace android {
@@ -175,6 +176,32 @@ static int out_dump(const struct audio_stream *stream, int fd)
static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
{
+ int exiting = -1;
+ AudioParameter parms = AudioParameter(String8(kvpairs));
+ // FIXME this is using hard-coded strings but in the future, this functionality will be
+ // converted to use audio HAL extensions required to support tunneling
+ if ((parms.getInt(String8("exiting"), exiting) == NO_ERROR) && (exiting > 0)) {
+ const struct submix_stream_out *out =
+ reinterpret_cast<const struct submix_stream_out *>(stream);
+
+ pthread_mutex_lock(&out->dev->lock);
+
+ MonoPipe* sink = out->dev->rsxSink.get();
+ if (sink != NULL) {
+ sink->incStrong(out);
+ } else {
+ pthread_mutex_unlock(&out->dev->lock);
+ return 0;
+ }
+
+ ALOGI("shutdown");
+ sink->shutdown(true);
+
+ sink->decStrong(out);
+
+ pthread_mutex_unlock(&out->dev->lock);
+ }
+
return 0;
}