Loading include/uapi/sound/compress_offload.h +3 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,7 @@ struct snd_compr_audio_info { * @SNDRV_COMPRESS_PATH_DELAY: dsp path delay in microseconds * @SNDRV_COMPRESS_RENDER_MODE: dsp render mode (audio master or stc) * @SNDRV_COMPRESS_CLK_REC_MODE: clock recovery mode ( none or auto) * @SNDRV_COMPRESS_RENDER_WINDOW: render window */ enum sndrv_compress_encoder { SNDRV_COMPRESS_ENCODER_PADDING = 1, Loading @@ -156,11 +157,13 @@ enum sndrv_compress_encoder { SNDRV_COMPRESS_PATH_DELAY = 5, SNDRV_COMPRESS_RENDER_MODE = 6, SNDRV_COMPRESS_CLK_REC_MODE = 7, SNDRV_COMPRESS_RENDER_WINDOW = 8, }; #define SNDRV_COMPRESS_PATH_DELAY SNDRV_COMPRESS_PATH_DELAY #define SNDRV_COMPRESS_RENDER_MODE SNDRV_COMPRESS_RENDER_MODE #define SNDRV_COMPRESS_CLK_REC_MODE SNDRV_COMPRESS_CLK_REC_MODE #define SNDRV_COMPRESS_RENDER_WINDOW SNDRV_COMPRESS_RENDER_WINDOW /** * struct snd_compr_metadata - compressed stream metadata Loading sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c +45 −0 Original line number Diff line number Diff line Loading @@ -272,6 +272,44 @@ static int msm_compr_set_clk_rec_mode(struct audio_client *ac, return ret; } static int msm_compr_set_render_window(struct audio_client *ac, uint32_t ws_lsw, uint32_t ws_msw, uint32_t we_lsw, uint32_t we_msw) { int ret = -EINVAL; struct asm_session_mtmx_strtr_param_window_v2_t asm_mtmx_strtr_window; uint32_t param_id; pr_debug("%s, ws_lsw 0x%x ws_msw 0x%x we_lsw 0x%x we_ms 0x%x\n", __func__, ws_lsw, ws_msw, we_lsw, we_msw); memset(&asm_mtmx_strtr_window, 0, sizeof(struct asm_session_mtmx_strtr_param_window_v2_t)); asm_mtmx_strtr_window.window_lsw = ws_lsw; asm_mtmx_strtr_window.window_msw = ws_msw; param_id = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_WINDOW_START_V2; ret = q6asm_send_mtmx_strtr_window(ac, &asm_mtmx_strtr_window, param_id); if (ret) { pr_err("%s, start window can't be set error %d\n", __func__, ret); goto exit; } asm_mtmx_strtr_window.window_lsw = we_lsw; asm_mtmx_strtr_window.window_msw = we_msw; param_id = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_WINDOW_END_V2; ret = q6asm_send_mtmx_strtr_window(ac, &asm_mtmx_strtr_window, param_id); if (ret) { pr_err("%s, end window can't be set error %d\n", __func__, ret); } exit: return ret; } static int msm_compr_set_volume(struct snd_compr_stream *cstream, uint32_t volume_l, uint32_t volume_r) { Loading Loading @@ -2804,6 +2842,13 @@ static int msm_compr_set_metadata(struct snd_compr_stream *cstream, return msm_compr_set_render_mode(prtd, metadata->value[0]); } else if (metadata->key == SNDRV_COMPRESS_CLK_REC_MODE) { return msm_compr_set_clk_rec_mode(ac, metadata->value[0]); } else if (metadata->key == SNDRV_COMPRESS_RENDER_WINDOW) { return msm_compr_set_render_window( ac, metadata->value[0], metadata->value[1], metadata->value[2], metadata->value[3]); } return 0; Loading Loading
include/uapi/sound/compress_offload.h +3 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,7 @@ struct snd_compr_audio_info { * @SNDRV_COMPRESS_PATH_DELAY: dsp path delay in microseconds * @SNDRV_COMPRESS_RENDER_MODE: dsp render mode (audio master or stc) * @SNDRV_COMPRESS_CLK_REC_MODE: clock recovery mode ( none or auto) * @SNDRV_COMPRESS_RENDER_WINDOW: render window */ enum sndrv_compress_encoder { SNDRV_COMPRESS_ENCODER_PADDING = 1, Loading @@ -156,11 +157,13 @@ enum sndrv_compress_encoder { SNDRV_COMPRESS_PATH_DELAY = 5, SNDRV_COMPRESS_RENDER_MODE = 6, SNDRV_COMPRESS_CLK_REC_MODE = 7, SNDRV_COMPRESS_RENDER_WINDOW = 8, }; #define SNDRV_COMPRESS_PATH_DELAY SNDRV_COMPRESS_PATH_DELAY #define SNDRV_COMPRESS_RENDER_MODE SNDRV_COMPRESS_RENDER_MODE #define SNDRV_COMPRESS_CLK_REC_MODE SNDRV_COMPRESS_CLK_REC_MODE #define SNDRV_COMPRESS_RENDER_WINDOW SNDRV_COMPRESS_RENDER_WINDOW /** * struct snd_compr_metadata - compressed stream metadata Loading
sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c +45 −0 Original line number Diff line number Diff line Loading @@ -272,6 +272,44 @@ static int msm_compr_set_clk_rec_mode(struct audio_client *ac, return ret; } static int msm_compr_set_render_window(struct audio_client *ac, uint32_t ws_lsw, uint32_t ws_msw, uint32_t we_lsw, uint32_t we_msw) { int ret = -EINVAL; struct asm_session_mtmx_strtr_param_window_v2_t asm_mtmx_strtr_window; uint32_t param_id; pr_debug("%s, ws_lsw 0x%x ws_msw 0x%x we_lsw 0x%x we_ms 0x%x\n", __func__, ws_lsw, ws_msw, we_lsw, we_msw); memset(&asm_mtmx_strtr_window, 0, sizeof(struct asm_session_mtmx_strtr_param_window_v2_t)); asm_mtmx_strtr_window.window_lsw = ws_lsw; asm_mtmx_strtr_window.window_msw = ws_msw; param_id = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_WINDOW_START_V2; ret = q6asm_send_mtmx_strtr_window(ac, &asm_mtmx_strtr_window, param_id); if (ret) { pr_err("%s, start window can't be set error %d\n", __func__, ret); goto exit; } asm_mtmx_strtr_window.window_lsw = we_lsw; asm_mtmx_strtr_window.window_msw = we_msw; param_id = ASM_SESSION_MTMX_STRTR_PARAM_RENDER_WINDOW_END_V2; ret = q6asm_send_mtmx_strtr_window(ac, &asm_mtmx_strtr_window, param_id); if (ret) { pr_err("%s, end window can't be set error %d\n", __func__, ret); } exit: return ret; } static int msm_compr_set_volume(struct snd_compr_stream *cstream, uint32_t volume_l, uint32_t volume_r) { Loading Loading @@ -2804,6 +2842,13 @@ static int msm_compr_set_metadata(struct snd_compr_stream *cstream, return msm_compr_set_render_mode(prtd, metadata->value[0]); } else if (metadata->key == SNDRV_COMPRESS_CLK_REC_MODE) { return msm_compr_set_clk_rec_mode(ac, metadata->value[0]); } else if (metadata->key == SNDRV_COMPRESS_RENDER_WINDOW) { return msm_compr_set_render_window( ac, metadata->value[0], metadata->value[1], metadata->value[2], metadata->value[3]); } return 0; Loading