OSDN Git Service

AudioPolicyManager supports querying active record sources
authorJean-Michel Trivi <jmtrivi@google.com>
Wed, 10 Oct 2012 19:39:04 +0000 (12:39 -0700)
committerJean-Michel Trivi <jmtrivi@google.com>
Wed, 10 Oct 2012 22:19:35 +0000 (15:19 -0700)
Add support for querying whether there is currently a recording
  underway from the specified audio source.

Bug 7314859

Change-Id: I8894845b176241134870af5df2bebc5ef27e4de4

audio/AudioPolicyManagerBase.cpp
audio/audio_policy_hal.cpp
include/hardware_legacy/AudioPolicyInterface.h
include/hardware_legacy/AudioPolicyManagerBase.h

index c7519c9..cacc37d 100644 (file)
@@ -1159,6 +1159,19 @@ bool AudioPolicyManagerBase::isStreamActive(int stream, uint32_t inPastMs) const
     return false;
 }
 
+bool AudioPolicyManagerBase::isSourceActive(audio_source_t source) const
+{
+    for (size_t i = 0; i < mInputs.size(); i++) {
+        const AudioInputDescriptor * inputDescriptor = mInputs.valueAt(i);
+        if ((inputDescriptor->mInputSource == (int) source)
+                && (inputDescriptor->mRefCount > 0)) {
+            return true;
+        }
+    }
+    return false;
+}
+
+
 
 status_t AudioPolicyManagerBase::dump(int fd)
 {
index 9e29bc4..bff6b74 100644 (file)
@@ -302,6 +302,12 @@ static bool ap_is_stream_active(const struct audio_policy *pol, audio_stream_typ
     return lap->apm->isStreamActive((int) stream, in_past_ms);
 }
 
+static bool ap_is_source_active(const struct audio_policy *pol, audio_source_t source)
+{
+    const struct legacy_audio_policy *lap = to_clap(pol);
+    return lap->apm->isSourceActive(source);
+}
+
 static int ap_dump(const struct audio_policy *pol, int fd)
 {
     const struct legacy_audio_policy *lap = to_clap(pol);
@@ -352,6 +358,7 @@ static int create_legacy_ap(const struct audio_policy_device *device,
     lap->policy.unregister_effect = ap_unregister_effect;
     lap->policy.set_effect_enabled = ap_set_effect_enabled;
     lap->policy.is_stream_active = ap_is_stream_active;
+    lap->policy.is_source_active = ap_is_source_active;
     lap->policy.dump = ap_dump;
 
     lap->service = service;
index 3ff68b9..51f4822 100644 (file)
@@ -157,6 +157,7 @@ public:
     virtual status_t setEffectEnabled(int id, bool enabled) = 0;
 
     virtual bool isStreamActive(int stream, uint32_t inPastMs = 0) const = 0;
+    virtual bool isSourceActive(audio_source_t source) const = 0;
 
     //dump state
     virtual status_t    dump(int fd) = 0;
index f110c20..4eefc0a 100644 (file)
@@ -133,6 +133,7 @@ public:
         virtual status_t setEffectEnabled(int id, bool enabled);
 
         virtual bool isStreamActive(int stream, uint32_t inPastMs = 0) const;
+        virtual bool isSourceActive(audio_source_t source) const;
 
         virtual status_t dump(int fd);