Loading sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c +34 −6 Original line number Diff line number Diff line Loading @@ -599,6 +599,19 @@ static void compr_event_handler(uint32_t opcode, } } static int msm_compr_get_partial_drain_delay(int frame_sz, int sample_rate) { int delay_time_ms = 0; delay_time_ms = ((DSP_NUM_OUTPUT_FRAME_BUFFERED * frame_sz * 1000) / sample_rate) + DSP_PP_BUFFERING_IN_MSEC; delay_time_ms = delay_time_ms > PARTIAL_DRAIN_ACK_EARLY_BY_MSEC ? delay_time_ms - PARTIAL_DRAIN_ACK_EARLY_BY_MSEC : 0; pr_debug("%s: partial drain delay %d\n", __func__, delay_time_ms); return delay_time_ms; } static void populate_codec_list(struct msm_compr_audio *prtd) { pr_debug("%s\n", __func__); Loading Loading @@ -1221,8 +1234,9 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, { struct snd_compr_runtime *runtime = cstream->runtime; struct msm_compr_audio *prtd = runtime->private_data; int ret = 0, frame_sz = 0, delay_time_ms = 0; int ret = 0, frame_sz = 0; int i, num_rates; bool is_format_gapless = false; pr_debug("%s\n", __func__); Loading Loading @@ -1261,6 +1275,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_MP3\n"); prtd->codec = FORMAT_MP3; frame_sz = MP3_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1268,6 +1283,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_AAC\n"); prtd->codec = FORMAT_MPEG4_AAC; frame_sz = AAC_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1275,6 +1291,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_AC3\n"); prtd->codec = FORMAT_AC3; frame_sz = AC3_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1282,6 +1299,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_EAC3\n"); prtd->codec = FORMAT_EAC3; frame_sz = EAC3_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1306,6 +1324,13 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, case SND_AUDIOCODEC_FLAC: { pr_debug("%s: SND_AUDIOCODEC_FLAC\n", __func__); prtd->codec = FORMAT_FLAC; /* * DSP bufferring is based on blk size, * consider mininum buffering to rule out any false wait */ frame_sz = prtd->codec_param.codec.options.flac_dec.min_blk_size; is_format_gapless = true; break; } Loading @@ -1332,11 +1357,11 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, return -EINVAL; } delay_time_ms = ((DSP_NUM_OUTPUT_FRAME_BUFFERED * frame_sz * 1000) / prtd->sample_rate) + DSP_PP_BUFFERING_IN_MSEC; delay_time_ms = delay_time_ms > PARTIAL_DRAIN_ACK_EARLY_BY_MSEC ? delay_time_ms - PARTIAL_DRAIN_ACK_EARLY_BY_MSEC : 0; prtd->partial_drain_delay = delay_time_ms; if (!is_format_gapless) prtd->gapless_state.use_dsp_gapless_mode = false; prtd->partial_drain_delay = msm_compr_get_partial_drain_delay(frame_sz, prtd->sample_rate); memcpy(&prtd->codec_param, params, sizeof(struct snd_compr_params)); Loading Loading @@ -2159,6 +2184,9 @@ static int msm_compr_set_metadata(struct snd_compr_stream *cstream, if (ret < 0) pr_err("%s: CMD Format block failed ret %d\n", __func__, ret); prtd->partial_drain_delay = msm_compr_get_partial_drain_delay( flac_cfg.min_blk_size, prtd->sample_rate); } return 0; } Loading Loading
sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c +34 −6 Original line number Diff line number Diff line Loading @@ -599,6 +599,19 @@ static void compr_event_handler(uint32_t opcode, } } static int msm_compr_get_partial_drain_delay(int frame_sz, int sample_rate) { int delay_time_ms = 0; delay_time_ms = ((DSP_NUM_OUTPUT_FRAME_BUFFERED * frame_sz * 1000) / sample_rate) + DSP_PP_BUFFERING_IN_MSEC; delay_time_ms = delay_time_ms > PARTIAL_DRAIN_ACK_EARLY_BY_MSEC ? delay_time_ms - PARTIAL_DRAIN_ACK_EARLY_BY_MSEC : 0; pr_debug("%s: partial drain delay %d\n", __func__, delay_time_ms); return delay_time_ms; } static void populate_codec_list(struct msm_compr_audio *prtd) { pr_debug("%s\n", __func__); Loading Loading @@ -1221,8 +1234,9 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, { struct snd_compr_runtime *runtime = cstream->runtime; struct msm_compr_audio *prtd = runtime->private_data; int ret = 0, frame_sz = 0, delay_time_ms = 0; int ret = 0, frame_sz = 0; int i, num_rates; bool is_format_gapless = false; pr_debug("%s\n", __func__); Loading Loading @@ -1261,6 +1275,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_MP3\n"); prtd->codec = FORMAT_MP3; frame_sz = MP3_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1268,6 +1283,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_AAC\n"); prtd->codec = FORMAT_MPEG4_AAC; frame_sz = AAC_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1275,6 +1291,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_AC3\n"); prtd->codec = FORMAT_AC3; frame_sz = AC3_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1282,6 +1299,7 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, pr_debug("SND_AUDIOCODEC_EAC3\n"); prtd->codec = FORMAT_EAC3; frame_sz = EAC3_OUTPUT_FRAME_SZ; is_format_gapless = true; break; } Loading @@ -1306,6 +1324,13 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, case SND_AUDIOCODEC_FLAC: { pr_debug("%s: SND_AUDIOCODEC_FLAC\n", __func__); prtd->codec = FORMAT_FLAC; /* * DSP bufferring is based on blk size, * consider mininum buffering to rule out any false wait */ frame_sz = prtd->codec_param.codec.options.flac_dec.min_blk_size; is_format_gapless = true; break; } Loading @@ -1332,11 +1357,11 @@ static int msm_compr_set_params(struct snd_compr_stream *cstream, return -EINVAL; } delay_time_ms = ((DSP_NUM_OUTPUT_FRAME_BUFFERED * frame_sz * 1000) / prtd->sample_rate) + DSP_PP_BUFFERING_IN_MSEC; delay_time_ms = delay_time_ms > PARTIAL_DRAIN_ACK_EARLY_BY_MSEC ? delay_time_ms - PARTIAL_DRAIN_ACK_EARLY_BY_MSEC : 0; prtd->partial_drain_delay = delay_time_ms; if (!is_format_gapless) prtd->gapless_state.use_dsp_gapless_mode = false; prtd->partial_drain_delay = msm_compr_get_partial_drain_delay(frame_sz, prtd->sample_rate); memcpy(&prtd->codec_param, params, sizeof(struct snd_compr_params)); Loading Loading @@ -2159,6 +2184,9 @@ static int msm_compr_set_metadata(struct snd_compr_stream *cstream, if (ret < 0) pr_err("%s: CMD Format block failed ret %d\n", __func__, ret); prtd->partial_drain_delay = msm_compr_get_partial_drain_delay( flac_cfg.min_blk_size, prtd->sample_rate); } return 0; } Loading