ASoc: msm: qdsp6v2: Fix timestamp glitch during gapless transition
Change conditions to query DSP for session time Bug: 21633313 Change-Id: I7676d11747083eb35826c52abaa0de47f50032fc Signed-off-by: Haynes Mathew George <hgeorge@codeaurora.org>
This commit is contained in:
parent
9d9cf7636c
commit
3d90a144e7
1 changed files with 14 additions and 10 deletions
|
@ -1983,20 +1983,25 @@ static int msm_compr_pointer(struct snd_compr_stream *cstream,
|
|||
gapless_transition = prtd->gapless_state.gapless_transition;
|
||||
spin_unlock_irqrestore(&prtd->lock, flags);
|
||||
|
||||
if (gapless_transition)
|
||||
pr_debug("%s session time in gapless transition",
|
||||
__func__);
|
||||
|
||||
/*
|
||||
Query timestamp from DSP if some data is with it.
|
||||
This prevents timeouts.
|
||||
- Do not query if no buffer has been given.
|
||||
- Do not query on a gapless transition.
|
||||
Playback for the 2nd stream can start (thus returning time
|
||||
starting from 0) before the driver knows about EOS of first stream.
|
||||
*/
|
||||
if (!first_buffer || gapless_transition) {
|
||||
if (gapless_transition)
|
||||
pr_debug("%s session time in gapless transition",
|
||||
__func__);
|
||||
|
||||
if (!first_buffer && !gapless_transition) {
|
||||
if (pdata->use_legacy_api)
|
||||
rc = q6asm_get_session_time_legacy(prtd->audio_client,
|
||||
×tamp);
|
||||
&prtd->marker_timestamp);
|
||||
else
|
||||
rc = q6asm_get_session_time(prtd->audio_client,
|
||||
×tamp);
|
||||
&prtd->marker_timestamp);
|
||||
|
||||
if (rc < 0) {
|
||||
pr_err("%s: Get Session Time return value =%lld\n",
|
||||
__func__, timestamp);
|
||||
|
@ -2005,9 +2010,8 @@ static int msm_compr_pointer(struct snd_compr_stream *cstream,
|
|||
else
|
||||
return -EAGAIN;
|
||||
}
|
||||
} else {
|
||||
timestamp = prtd->marker_timestamp;
|
||||
}
|
||||
timestamp = prtd->marker_timestamp;
|
||||
|
||||
/* DSP returns timestamp in usec */
|
||||
pr_debug("%s: timestamp = %lld usec\n", __func__, timestamp);
|
||||
|
|
Loading…
Add table
Reference in a new issue