Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ec5816c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dsp: Add frame size control parameter for AAC encoder"

parents f6416bbf be837353
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
 */

#include <linux/init.h>
@@ -2815,7 +2815,7 @@ static int msm_dai_q6_afe_enc_cfg_get(struct snd_kcontrol *kcontrol,
		case ENC_FMT_AAC_V2:
			memcpy(ucontrol->value.bytes.data + format_size,
				&dai_data->enc_config.data,
				sizeof(struct asm_aac_enc_cfg_v2_t));
				sizeof(struct asm_aac_enc_cfg_t));
			break;
		case ENC_FMT_APTX:
			memcpy(ucontrol->value.bytes.data + format_size,
@@ -2878,7 +2878,7 @@ static int msm_dai_q6_afe_enc_cfg_put(struct snd_kcontrol *kcontrol,
		case ENC_FMT_AAC_V2:
			memcpy(&dai_data->enc_config.data,
				ucontrol->value.bytes.data + format_size,
				sizeof(struct asm_aac_enc_cfg_v2_t));
				sizeof(struct asm_aac_enc_cfg_t));
			break;
		case ENC_FMT_APTX:
			memcpy(&dai_data->enc_config.data,
+32 −0
Original line number Diff line number Diff line
@@ -3662,6 +3662,7 @@ static int q6afe_send_enc_config(u16 port_id,
	struct avs_enc_set_scrambler_param_t enc_set_scrambler_param;
	struct afe_enc_level_to_bitrate_map_param_t map_param;
	struct afe_enc_dec_imc_info_param_t imc_info_param;
	struct asm_aac_frame_size_control_t frame_ctl_param;
	struct afe_port_media_type_t media_type;
	struct aptx_channel_mode_param_t channel_mode_param;
	struct param_hdr_v3 param_hdr;
@@ -3676,6 +3677,7 @@ static int q6afe_send_enc_config(u16 port_id,
	memset(&enc_set_scrambler_param, 0, sizeof(enc_set_scrambler_param));
	memset(&map_param, 0, sizeof(map_param));
	memset(&imc_info_param, 0, sizeof(imc_info_param));
	memset(&frame_ctl_param, 0, sizeof(frame_ctl_param));
	memset(&media_type, 0, sizeof(media_type));
	memset(&param_hdr, 0, sizeof(param_hdr));

@@ -3711,6 +3713,12 @@ static int q6afe_send_enc_config(u16 port_id,
		enc_blk_param.enc_cfg_blk_size =
				sizeof(union afe_enc_config_data)
					- sizeof(struct afe_abr_enc_cfg_t);
	} else if (format == ASM_MEDIA_FMT_AAC_V2) {
		param_hdr.param_size = sizeof(enc_blk_param)
				- sizeof(struct asm_aac_frame_size_control_t);
		enc_blk_param.enc_cfg_blk_size =
				sizeof(enc_blk_param.enc_blk_config)
				- sizeof(struct asm_aac_frame_size_control_t);
	} else {
		param_hdr.param_size = sizeof(struct afe_enc_cfg_blk_param_t);
		enc_blk_param.enc_cfg_blk_size =
@@ -3730,6 +3738,30 @@ static int q6afe_send_enc_config(u16 port_id,
		goto exit;
	}

	if (format == ASM_MEDIA_FMT_AAC_V2) {
		uint32_t frame_size_ctl_value = enc_blk_param.enc_blk_config.
				aac_config.frame_ctl.ctl_value;
		if (frame_size_ctl_value > 0) {
			param_hdr.param_id =
				AFE_PARAM_ID_AAC_FRM_SIZE_CONTROL;
			param_hdr.param_size = sizeof(frame_ctl_param);
			frame_ctl_param.ctl_type = enc_blk_param.
				enc_blk_config.aac_config.frame_ctl.ctl_type;
			frame_ctl_param.ctl_value = frame_size_ctl_value;
			pr_debug("%s: send AFE_PARAM_ID_AAC_FRM_SIZE_CONTROL\n",
				  __func__);
			ret = q6afe_pack_and_set_param_in_band(port_id,
					q6audio_get_port_index(port_id),
					param_hdr,
					(u8 *) &frame_ctl_param);
			if (ret) {
				pr_err("%s: AAC_FRM_SIZE_CONTROL failed %d\n",
					__func__, ret);
				goto exit;
			}
		}
	}

	if (format == ASM_MEDIA_FMT_APTX) {
		pr_debug("%s: sending AFE_PARAM_ID_APTX_SYNC_MODE to DSP",
			__func__);
+26 −2
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved.
 */


@@ -3935,6 +3935,12 @@ struct aptx_channel_mode_param_t {
 */
#define AFE_SB_DATA_FORMAT_GENERIC_COMPRESSED    0x3

/*
 * Parameter to send frame control size
 * to DSP for AAC encoder in AFE.
 */
#define AFE_PARAM_ID_AAC_FRM_SIZE_CONTROL 0x000132EA

/*
 * ID for AFE port module. This will be used to define port properties.
 * This module supports following parameter IDs:
@@ -4105,6 +4111,23 @@ struct asm_aac_enc_cfg_v2_t {
	uint32_t     sample_rate;
} __packed;

/* Structure to control frame size of AAC encoded frames. */
struct asm_aac_frame_size_control_t {
	/* Type of frame size control: MTU_SIZE / PEAK_BIT_RATE*/
	uint32_t ctl_type;
	/*
	 * Control value
	 * MTU_SIZE: MTU size in bytes
	 * PEAK_BIT_RATE: Peak bitrate in bits per second.
	 */
	uint32_t ctl_value;
} __packed;

struct asm_aac_enc_cfg_t {
	struct asm_aac_enc_cfg_v2_t aac_cfg;
	struct asm_aac_frame_size_control_t frame_ctl;
} __packed;

/* FMT ID for apt-X Classic */
#define ASM_MEDIA_FMT_APTX 0x000131ff

@@ -4416,7 +4439,7 @@ struct asm_aac_dec_cfg_v2_t {

union afe_enc_config_data {
	struct asm_sbc_enc_cfg_t sbc_config;
	struct asm_aac_enc_cfg_v2_t aac_config;
	struct asm_aac_enc_cfg_t aac_config;
	struct asm_custom_enc_cfg_t  custom_config;
	struct asm_celt_enc_cfg_t  celt_config;
	struct asm_aptx_enc_cfg_t  aptx_config;
@@ -4645,6 +4668,7 @@ union afe_port_config {
	struct afe_param_id_tdm_cfg               tdm;
	struct afe_param_id_usb_audio_cfg         usb_audio;
	struct afe_param_id_aptx_sync_mode        sync_mode_param;
	struct asm_aac_frame_size_control_t       frame_ctl_param;
	struct afe_enc_fmt_id_param_t             enc_fmt;
	struct afe_port_media_type_t              media_type;
	struct afe_enc_cfg_blk_param_t            enc_blk_param;