M7350/kernel/arch/arm/mach-msm/qdsp6/dal_audio_format.h
2024-09-09 08:52:07 +00:00

271 lines
7.2 KiB
C

/* Copyright (c) 2009, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __ADSP_AUDIO_MEDIA_FORMAT_H
#define __ADSP_AUDIO_MEDIA_FORMAT_H
/* Supported audio media formats */
/* format block in shmem */
#define ADSP_AUDIO_FORMAT_SHAREDMEMORY 0x01091a78
/* adsp_audio_format_raw_pcm type */
#define ADSP_AUDIO_FORMAT_PCM 0x0103d2fd
/* adsp_audio_format_raw_pcm type */
#define ADSP_AUDIO_FORMAT_DTMF 0x01087725
/* adsp_audio_format_adpcm type */
#define ADSP_AUDIO_FORMAT_ADPCM 0x0103d2ff
/* Yamaha PCM format */
#define ADSP_AUDIO_FORMAT_YADPCM 0x0108dc07
/* ISO/IEC 11172 */
#define ADSP_AUDIO_FORMAT_MP3 0x0103d308
/* ISO/IEC 14496 */
#define ADSP_AUDIO_FORMAT_MPEG4_AAC 0x010422f1
/* AMR-NB audio in FS format */
#define ADSP_AUDIO_FORMAT_AMRNB_FS 0x0105c16c
/* AMR-WB audio in FS format */
#define ADSP_AUDIO_FORMAT_AMRWB_FS 0x0105c16e
/* QCELP 13k, IS733 */
#define ADSP_AUDIO_FORMAT_V13K_FS 0x01080b8a
/* EVRC 8k, IS127 */
#define ADSP_AUDIO_FORMAT_EVRC_FS 0x01080b89
/* EVRC-B 8k, 4GV */
#define ADSP_AUDIO_FORMAT_EVRCB_FS 0x0108f2a3
/* MIDI command stream */
#define ADSP_AUDIO_FORMAT_MIDI 0x0103d300
/* A2DP SBC stream */
#define ADSP_AUDIO_FORMAT_SBC 0x0108c4d8
/* Version 10 Professional */
#define ADSP_AUDIO_FORMAT_WMA_V10PRO 0x0108aa92
/* Version 9 Starndard */
#define ADSP_AUDIO_FORMAT_WMA_V9 0x0108d430
/* AMR WideBand Plus */
#define ADSP_AUDIO_FORMAT_AMR_WB_PLUS 0x0108f3da
/* AC3 Decoder */
#define ADSP_AUDIO_FORMAT_AC3_DECODER 0x0108d5f9
/* Not yet supported audio media formats */
/* ISO/IEC 13818 */
#define ADSP_AUDIO_FORMAT_MPEG2_AAC 0x0103d309
/* 3GPP TS 26.101 Sec 4.0 */
#define ADSP_AUDIO_FORMAT_AMRNB_IF1 0x0103d305
/* 3GPP TS 26.101 Annex A */
#define ADSP_AUDIO_FORMAT_AMRNB_IF2 0x01057b31
/* 3GPP TS 26.201 */
#define ADSP_AUDIO_FORMAT_AMRWB_IF1 0x0103d306
/* 3GPP TS 26.201 */
#define ADSP_AUDIO_FORMAT_AMRWB_IF2 0x0105c16d
/* G.711 */
#define ADSP_AUDIO_FORMAT_G711 0x0106201d
/* QCELP 8k, IS96A */
#define ADSP_AUDIO_FORMAT_V8K_FS 0x01081d29
/* Version 1 codec */
#define ADSP_AUDIO_FORMAT_WMA_V1 0x01055b2b
/* Version 2, 7 & 8 codec */
#define ADSP_AUDIO_FORMAT_WMA_V8 0x01055b2c
/* Version 9 Professional codec */
#define ADSP_AUDIO_FORMAT_WMA_V9PRO 0x01055b2d
/* Version 9 Voice codec */
#define ADSP_AUDIO_FORMAT_WMA_SP1 0x01055b2e
/* Version 9 Lossless codec */
#define ADSP_AUDIO_FORMAT_WMA_LOSSLESS 0x01055b2f
/* Real Media content, low-bitrate */
#define ADSP_AUDIO_FORMAT_RA_SIPR 0x01042a0f
/* Real Media content */
#define ADSP_AUDIO_FORMAT_RA_COOK 0x01042a0e
/* For all of the audio formats, unless specified otherwise, */
/* the following apply: */
/* Format block bits are arranged in bytes and words in little-endian */
/* order, i.e., least-significant bit first and least-significant */
/* byte first. */
/* AAC Format Block. */
/* AAC format block consist of a format identifier followed by */
/* AudioSpecificConfig formatted according to ISO/IEC 14496-3 */
/* The following AAC format identifiers are supported */
#define ADSP_AUDIO_AAC_ADTS 0x010619cf
#define ADSP_AUDIO_AAC_MPEG4_ADTS 0x010619d0
#define ADSP_AUDIO_AAC_LOAS 0x010619d1
#define ADSP_AUDIO_AAC_ADIF 0x010619d2
#define ADSP_AUDIO_AAC_RAW 0x010619d3
#define ADSP_AUDIO_AAC_FRAMED_RAW 0x0108c1fb
#define ADSP_AUDIO_COMPANDING_ALAW 0x10619cd
#define ADSP_AUDIO_COMPANDING_MLAW 0x10619ce
/* Maxmum number of bytes allowed in a format block */
#define ADSP_AUDIO_FORMAT_DATA_MAX 16
struct adsp_audio_no_payload_format {
/* Media Format Code (must always be first element) */
u32 format;
/* no payload for this format type */
} __attribute__ ((packed));
/* For convenience, to be used as a standard format block */
/* for various media types that don't need a unique format block */
/* ie. PCM, DTMF, etc. */
struct adsp_audio_standard_format {
/* Media Format Code (must always be first element) */
u32 format;
/* payload */
u16 channels;
u16 bits_per_sample;
u32 sampling_rate;
u8 is_signed;
u8 is_interleaved;
} __attribute__ ((packed));
/* ADPCM format block */
struct adsp_audio_adpcm_format {
/* Media Format Code (must always be first element) */
u32 format;
/* payload */
u16 channels;
u16 bits_per_sample;
u32 sampling_rate;
u8 is_signed;
u8 is_interleaved;
u32 block_size;
} __attribute__ ((packed));
/* MIDI format block */
struct adsp_audio_midi_format {
/* Media Format Code (must always be first element) */
u32 format;
/* payload */
u32 sampling_rate;
u16 channels;
u16 mode;
} __attribute__ ((packed));
/* G711 format block */
struct adsp_audio_g711_format {
/* Media Format Code (must always be first element) */
u32 format;
/* payload */
u32 companding;
} __attribute__ ((packed));
struct adsp_audio_wma_pro_format {
/* Media Format Code (must always be first element) */
u32 format;
/* payload */
u16 format_tag;
u16 channels;
u32 samples_per_sec;
u32 avg_bytes_per_sec;
u16 block_align;
u16 valid_bits_per_sample;
u32 channel_mask;
u16 encode_opt;
u16 advanced_encode_opt;
u32 advanced_encode_opt2;
u32 drc_peak_reference;
u32 drc_peak_target;
u32 drc_average_reference;
u32 drc_average_target;
} __attribute__ ((packed));
struct adsp_audio_amrwb_plus_format {
/* Media Format Code (must always be first element) */
u32 format;
/* payload */
u32 size;
u32 version;
u32 channels;
u32 amr_band_mode;
u32 amr_dtx_mode;
u32 amr_frame_format;
u32 amr_isf_index;
} __attribute__ ((packed));
/* Binary Byte Stream Format */
/* Binary format type that defines a byte stream, */
/* can be used to specify any format (ie. AAC) */
struct adsp_audio_binary_format {
/* Media Format Code (must always be first element) */
u32 format;
/* payload */
/* number of bytes set in byte stream */
u32 num_bytes;
/* Byte stream binary data */
u8 data[ADSP_AUDIO_FORMAT_DATA_MAX];
} __attribute__ ((packed));
struct adsp_audio_shared_memory_format {
/* Media Format Code (must always be first element) */
u32 format;
/* Number of bytes in shared memory */
u32 len;
/* Phyisical address to data in shared memory */
u32 address;
} __attribute__ ((packed));
/* Union of all format types */
union adsp_audio_format {
/* Basic format block with no payload */
struct adsp_audio_no_payload_format no_payload;
/* Generic format block PCM, DTMF */
struct adsp_audio_standard_format standard;
/* ADPCM format block */
struct adsp_audio_adpcm_format adpcm;
/* MIDI format block */
struct adsp_audio_midi_format midi;
/* G711 format block */
struct adsp_audio_g711_format g711;
/* WmaPro format block */
struct adsp_audio_wma_pro_format wma_pro;
/* WmaPro format block */
struct adsp_audio_amrwb_plus_format amrwb_plus;
/* binary (byte stream) format block, used for AAC */
struct adsp_audio_binary_format binary;
/* format block in shared memory */
struct adsp_audio_shared_memory_format shared_mem;
};
#endif