271 lines
7.2 KiB
C
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
|
||
|
|