hal: qaf: handling qaf_get_render_position
-extending support for get_render_postion in qaf hal
-update the handle for get_render_postion with qaf enable
Change-Id: Id07fc1a8d3a9083aab35ab636cc197305c0a9701
diff --git a/hal/audio_extn/qaf.c b/hal/audio_extn/qaf.c
index 9817563..c1c0af7 100755
--- a/hal/audio_extn/qaf.c
+++ b/hal/audio_extn/qaf.c
@@ -998,6 +998,36 @@
return ret;
}
+static int qaf_out_get_render_position(const struct audio_stream_out *stream,
+ uint32_t *dsp_frames)
+{
+ struct stream_out *out = (struct stream_out *)stream;
+ int ret = 0;
+ uint64_t frames=0;
+ struct qaf_module* qaf_mod = NULL;
+ ALOGV("%s, Output Stream %p,dsp frames %d",__func__, stream, (int)dsp_frames);
+
+ qaf_mod = get_qaf_module_for_input_stream(out);
+ if (!qaf_mod) {
+ ret = out->stream.get_render_position(stream, dsp_frames);
+ ALOGV("%s, non qaf_MOD DSP FRAMES %d",__func__, (int)dsp_frames);
+ return ret;
+ }
+
+ if (p_qaf->passthrough_out) {
+ pthread_mutex_lock(&p_qaf->lock);
+ ret = p_qaf->passthrough_out->stream.get_render_position((struct audio_stream_out *)p_qaf->passthrough_out, dsp_frames);
+ pthread_mutex_unlock(&p_qaf->lock);
+ ALOGV("%s, PASS THROUGH DSP FRAMES %p",__func__, dsp_frames);
+ return ret;
+ }
+ frames=*dsp_frames;
+ ret = qaf_get_rendered_frames(out, &frames);
+ *dsp_frames = (uint32_t)frames;
+ ALOGV("%s, DSP FRAMES %d",__func__, (int)dsp_frames);
+ return ret;
+}
+
static int qaf_out_get_presentation_position(const struct audio_stream_out *stream,
uint64_t *frames,
struct timespec *timestamp)
@@ -2545,6 +2575,7 @@
out->stream.common.standby = qaf_out_standby;
out->stream.common.set_parameters = qaf_out_set_parameters;
out->stream.get_latency = qaf_out_get_latency;
+ out->stream.get_render_position = qaf_out_get_render_position;
out->stream.write = qaf_out_write;
out->stream.get_presentation_position = qaf_out_get_presentation_position;
out->platform_latency = 0;