hal: Add support for force stopped capture session status
Add support for adding force stopped capture session status. HAL will check whether the session is force stopped before requesting for read(). ALSA sleeps for ~20s when the read() fails. In order to avoid this before requesting read(), HAL check whether the stream is closed, if yes then the read() request will be ignored to avoid the ~20s delay. Allow compress stop for all compress input usecases. Currently stop is allowed only for IEC61937 format only. Change-Id: I3616594f78ebffa83079fd0a734cdbe6f98ceab7
This commit is contained in:
parent
fa377bff15
commit
30cc7ae69b
|
@ -2909,6 +2909,8 @@ int start_input_stream(struct stream_in *in)
|
|||
if (audio_extn_ext_hw_plugin_usecase_start(adev->ext_hw_plugin, uc_info))
|
||||
ALOGE("%s: failed to start ext hw plugin", __func__);
|
||||
|
||||
android_atomic_acquire_cas(true, false, &(in->capture_stopped));
|
||||
|
||||
if (audio_extn_cin_attached_usecase(in->usecase)) {
|
||||
ret = audio_extn_cin_open_input_stream(in);
|
||||
if (ret)
|
||||
|
@ -6532,6 +6534,13 @@ static ssize_t in_read(struct audio_stream_in *stream, void *buffer,
|
|||
in->standby = 0;
|
||||
}
|
||||
|
||||
/* Avoid read if capture_stopped is set */
|
||||
if (android_atomic_acquire_load(&(in->capture_stopped)) > 0) {
|
||||
ALOGD("%s: force stopped catpure session, ignoring read request", __func__);
|
||||
ret = -EINVAL;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
// what's the duration requested by the client?
|
||||
long ns = 0;
|
||||
|
||||
|
|
|
@ -472,6 +472,8 @@ struct stream_in {
|
|||
float zoom;
|
||||
audio_microphone_direction_t direction;
|
||||
|
||||
volatile int32_t capture_stopped;
|
||||
|
||||
/* Array of supported channel mask configurations. +1 so that the last entry is always 0 */
|
||||
audio_channel_mask_t supported_channel_masks[MAX_SUPPORTED_CHANNEL_MASKS + 1];
|
||||
audio_format_t supported_formats[MAX_SUPPORTED_FORMATS + 1];
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include <inttypes.h>
|
||||
#include <errno.h>
|
||||
#include <log/log.h>
|
||||
#include <cutils/atomic.h>
|
||||
|
||||
#include <hardware/audio.h>
|
||||
#include "sound/compress_params.h"
|
||||
|
@ -201,9 +202,13 @@ int qahwi_in_stop(struct audio_stream_in* stream) {
|
|||
if (!in->standby) {
|
||||
if (in->pcm != NULL ) {
|
||||
pcm_stop(in->pcm);
|
||||
} else if (audio_extn_cin_format_supported(in->format)) {
|
||||
} else if (audio_extn_cin_attached_usecase(in->usecase)) {
|
||||
audio_extn_cin_stop_input_stream(in);
|
||||
}
|
||||
|
||||
/* Set the atomic variable when the session is stopped */
|
||||
if (android_atomic_acquire_cas(false, true, &(in->capture_stopped)) == 0)
|
||||
ALOGI("%s: capture_stopped bit set", __func__);
|
||||
}
|
||||
|
||||
pthread_mutex_unlock(&adev->lock);
|
||||
|
|
Loading…
Reference in New Issue