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

Commit 4b813164 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 CELT encoder support"

parents 116595df 54028490
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ enum {
	ENC_FMT_AAC_V2 = ASM_MEDIA_FMT_AAC_V2,
	ENC_FMT_APTX = ASM_MEDIA_FMT_APTX,
	ENC_FMT_APTX_HD = ASM_MEDIA_FMT_APTX_HD,
	ENC_FMT_CELT = ASM_MEDIA_FMT_CELT,
};

enum {
@@ -2146,7 +2147,12 @@ static int msm_dai_q6_afe_enc_cfg_get(struct snd_kcontrol *kcontrol,
		case ENC_FMT_APTX_HD:
			memcpy(ucontrol->value.bytes.data + format_size,
				&dai_data->enc_config.data,
				sizeof(struct asm_aac_enc_cfg_v2_t));
				sizeof(struct asm_custom_enc_cfg_t));
			break;
		case ENC_FMT_CELT:
			memcpy(ucontrol->value.bytes.data + format_size,
				&dai_data->enc_config.data,
				sizeof(struct asm_celt_enc_cfg_t));
			break;
		default:
			pr_debug("%s: unknown format = %d\n",
@@ -2190,7 +2196,12 @@ static int msm_dai_q6_afe_enc_cfg_put(struct snd_kcontrol *kcontrol,
		case ENC_FMT_APTX_HD:
			memcpy(&dai_data->enc_config.data,
				ucontrol->value.bytes.data + format_size,
				sizeof(struct asm_custom_enc_cfg_aptx_t));
				sizeof(struct asm_custom_enc_cfg_t));
			break;
		case ENC_FMT_CELT:
			memcpy(&dai_data->enc_config.data,
				ucontrol->value.bytes.data + format_size,
				sizeof(struct asm_celt_enc_cfg_t));
			break;
		default:
			pr_debug("%s: Ignore enc config for unknown format = %d\n",
+2 −1
Original line number Diff line number Diff line
@@ -2824,7 +2824,8 @@ static int q6afe_send_enc_config(u16 port_id,

	pr_debug("%s:update DSP for enc format = %d\n", __func__, format);
	if (format != ASM_MEDIA_FMT_SBC && format != ASM_MEDIA_FMT_AAC_V2 &&
	    format != ASM_MEDIA_FMT_APTX && format != ASM_MEDIA_FMT_APTX_HD) {
	    format != ASM_MEDIA_FMT_APTX && format != ASM_MEDIA_FMT_APTX_HD &&
	    format != ASM_MEDIA_FMT_CELT) {
		pr_err("%s:Unsuppported format Ignore AFE config\n", __func__);
		return 0;
	}
+49 −2
Original line number Diff line number Diff line
@@ -3255,7 +3255,7 @@ struct asm_aac_enc_cfg_v2_t {
#define PCM_CHANNEL_R         2
#define PCM_CHANNEL_C         3

struct asm_custom_enc_cfg_aptx_t {
struct asm_custom_enc_cfg_t {
	uint32_t    sample_rate;
	/* Mono or stereo */
	uint16_t    num_channels;
@@ -3266,6 +3266,52 @@ struct asm_custom_enc_cfg_aptx_t {
	uint8_t     channel_mapping[8];
	uint32_t    custom_size;
} __packed;
#define ASM_MEDIA_FMT_CELT 0x00013221
struct asm_celt_specific_enc_cfg_t {
	/*
	 * Bit rate used for encoding.
	 * This is used to calculate the upper threshold
	 * for bytes per frame if vbr_flag is 1.
	 * Or else, this will be used as a regular constant
	 * bit rate for encoder output.
	 * @Range : 32000 to 1536000
	 * @Default: 128
	 */
	uint32_t                     bit_rate;
	/*
	 * Frame size used for encoding.
	 * @Range : 64, 128, 256, 512
	 * @Default: 256
	 */
	uint16_t                     frame_size;
	/*
	 * complexity of algorithm.
	 * @Range : 0-10
	 * @Default: 3
	 */
	uint16_t                     complexity;
	/*
	 * Switch variable for prediction feature.
	 * Used to choose between the level of interframe
	 * predictions allowed while encoding.
	 * @Range:
	 * 0: Independent Frames.
	 * 1: Short Term interframe prediction allowed.
	 * 2: Long term prediction allowed.
	 * @Default: 2
	 */
	uint16_t                     prediction_mode;
	/*
	 * Variable Bit Rate flag.
	 * @Default: 0
	 */
	uint16_t                     vbr_flag;
} __packed;

struct asm_celt_enc_cfg_t {
	struct asm_custom_enc_cfg_t  custom_config;
	struct asm_celt_specific_enc_cfg_t  celt_specific_config;
} __packed;

struct afe_enc_fmt_id_param_t {
	/*
@@ -3334,7 +3380,8 @@ struct afe_port_media_type_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_custom_enc_cfg_aptx_t  aptx_config;
	struct asm_custom_enc_cfg_t  custom_config;
	struct asm_celt_enc_cfg_t  celt_config;
};

struct afe_enc_config {