diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2012-09-30 11:08:06 -0700 |
---|---|---|
committer | Jean-Michel Trivi <jmtrivi@google.com> | 2012-09-30 11:12:28 -0700 |
commit | d44130339c7317faaa5cbab767eccc37347ffd25 (patch) | |
tree | 11e90cc639235d5776cb0c2d40e0cb90facea6cc /modules | |
parent | 3a90d5964bc17ace1097e06a62d0410241c6c99c (diff) | |
download | hardware_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')
-rw-r--r-- | modules/audio_remote_submix/Android.mk | 1 | ||||
-rwxr-xr-x | modules/audio_remote_submix/audio_hw.cpp | 31 |
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; } |