145 lines
7.0 KiB
C
Executable File
145 lines
7.0 KiB
C
Executable File
/*
|
|
* Copyright 2020 Rockchip Electronics Co. LTD
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*
|
|
* This is new inplement for bitstram/passthrougth
|
|
* Adaptation kernel5.1 or later version
|
|
*
|
|
* Author: hh@rock-chips.com
|
|
* Date: 2021/11/27
|
|
*/
|
|
|
|
#ifndef _RK_AUDIO_IEC958_
|
|
#define _RK_AUDIO_IEC958_
|
|
|
|
#include "stdbool.h"
|
|
|
|
/* AES/IEC958 channel status bits */
|
|
#define IEC958_AES0_PROFESSIONAL (1<<0) /* 0 = consumer, 1 = professional */
|
|
#define IEC958_AES0_NONAUDIO (1<<1) /* 0 = audio, 1 = non-audio */
|
|
#define IEC958_AES0_PRO_EMPHASIS (7<<2) /* mask - emphasis */
|
|
#define IEC958_AES0_PRO_EMPHASIS_NOTID (0<<2) /* emphasis not indicated */
|
|
#define IEC958_AES0_PRO_EMPHASIS_NONE (1<<2) /* none emphasis */
|
|
#define IEC958_AES0_PRO_EMPHASIS_5015 (3<<2) /* 50/15us emphasis */
|
|
#define IEC958_AES0_PRO_EMPHASIS_CCITT (7<<2) /* CCITT J.17 emphasis */
|
|
#define IEC958_AES0_PRO_FREQ_UNLOCKED (1<<5) /* source sample frequency: 0 = locked, 1 = unlocked */
|
|
#define IEC958_AES0_PRO_FS (3<<6) /* mask - sample frequency */
|
|
#define IEC958_AES0_PRO_FS_NOTID (0<<6) /* fs not indicated */
|
|
#define IEC958_AES0_PRO_FS_44100 (1<<6) /* 44.1kHz */
|
|
#define IEC958_AES0_PRO_FS_48000 (2<<6) /* 48kHz */
|
|
#define IEC958_AES0_PRO_FS_32000 (3<<6) /* 32kHz */
|
|
#define IEC958_AES0_CON_NOT_COPYRIGHT (1<<2) /* 0 = copyright, 1 = not copyright */
|
|
#define IEC958_AES0_CON_EMPHASIS (7<<3) /* mask - emphasis */
|
|
#define IEC958_AES0_CON_EMPHASIS_NONE (0<<3) /* none emphasis */
|
|
#define IEC958_AES0_CON_EMPHASIS_5015 (1<<3) /* 50/15us emphasis */
|
|
#define IEC958_AES0_CON_MODE (3<<6) /* mask - mode */
|
|
#define IEC958_AES1_PRO_MODE (15<<0) /* mask - channel mode */
|
|
#define IEC958_AES1_PRO_MODE_NOTID (0<<0) /* not indicated */
|
|
#define IEC958_AES1_PRO_MODE_STEREOPHONIC (2<<0) /* stereophonic - ch A is left */
|
|
#define IEC958_AES1_PRO_MODE_SINGLE (4<<0) /* single channel */
|
|
#define IEC958_AES1_PRO_MODE_TWO (8<<0) /* two channels */
|
|
#define IEC958_AES1_PRO_MODE_PRIMARY (12<<0) /* primary/secondary */
|
|
#define IEC958_AES1_PRO_MODE_BYTE3 (15<<0) /* vector to byte 3 */
|
|
#define IEC958_AES1_PRO_USERBITS (15<<4) /* mask - user bits */
|
|
#define IEC958_AES1_PRO_USERBITS_NOTID (0<<4) /* not indicated */
|
|
#define IEC958_AES1_PRO_USERBITS_192 (8<<4) /* 192-bit structure */
|
|
#define IEC958_AES1_PRO_USERBITS_UDEF (12<<4) /* user defined application */
|
|
#define IEC958_AES1_CON_CATEGORY 0x7f
|
|
#define IEC958_AES1_CON_GENERAL 0x00
|
|
#define IEC958_AES1_CON_EXPERIMENTAL 0x40
|
|
#define IEC958_AES1_CON_SOLIDMEM_MASK 0x0f
|
|
#define IEC958_AES1_CON_SOLIDMEM_ID 0x08
|
|
#define IEC958_AES1_CON_BROADCAST1_MASK 0x07
|
|
#define IEC958_AES1_CON_BROADCAST1_ID 0x04
|
|
#define IEC958_AES1_CON_DIGDIGCONV_MASK 0x07
|
|
#define IEC958_AES1_CON_DIGDIGCONV_ID 0x02
|
|
#define IEC958_AES1_CON_ADC_COPYRIGHT_MASK 0x1f
|
|
#define IEC958_AES1_CON_ADC_COPYRIGHT_ID 0x06
|
|
#define IEC958_AES1_CON_ADC_MASK 0x1f
|
|
#define IEC958_AES1_CON_ADC_ID 0x16
|
|
#define IEC958_AES1_CON_BROADCAST2_MASK 0x0f
|
|
#define IEC958_AES1_CON_BROADCAST2_ID 0x0e
|
|
#define IEC958_AES1_CON_LASEROPT_MASK 0x07
|
|
#define IEC958_AES1_CON_LASEROPT_ID 0x01
|
|
#define IEC958_AES1_CON_MUSICAL_MASK 0x07
|
|
#define IEC958_AES1_CON_MUSICAL_ID 0x05
|
|
#define IEC958_AES1_CON_MAGNETIC_MASK 0x07
|
|
#define IEC958_AES1_CON_MAGNETIC_ID 0x03
|
|
#define IEC958_AES1_CON_IEC908_CD (IEC958_AES1_CON_LASEROPT_ID|0x00)
|
|
#define IEC958_AES1_CON_NON_IEC908_CD (IEC958_AES1_CON_LASEROPT_ID|0x08)
|
|
#define IEC958_AES1_CON_PCM_CODER (IEC958_AES1_CON_DIGDIGCONV_ID|0x00)
|
|
#define IEC958_AES1_CON_SAMPLER (IEC958_AES1_CON_DIGDIGCONV_ID|0x20)
|
|
#define IEC958_AES1_CON_MIXER (IEC958_AES1_CON_DIGDIGCONV_ID|0x10)
|
|
#define IEC958_AES1_CON_RATE_CONVERTER (IEC958_AES1_CON_DIGDIGCONV_ID|0x18)
|
|
#define IEC958_AES1_CON_SYNTHESIZER (IEC958_AES1_CON_MUSICAL_ID|0x00)
|
|
#define IEC958_AES1_CON_MICROPHONE (IEC958_AES1_CON_MUSICAL_ID|0x08)
|
|
#define IEC958_AES1_CON_DAT (IEC958_AES1_CON_MAGNETIC_ID|0x00)
|
|
#define IEC958_AES1_CON_VCR (IEC958_AES1_CON_MAGNETIC_ID|0x08)
|
|
#define IEC958_AES1_CON_ORIGINAL (1<<7) /* this bits depends on the category code */
|
|
#define IEC958_AES2_PRO_SBITS (7<<0) /* mask - sample bits */
|
|
#define IEC958_AES2_PRO_SBITS_20 (2<<0) /* 20-bit - coordination */
|
|
#define IEC958_AES2_PRO_SBITS_24 (4<<0) /* 24-bit - main audio */
|
|
#define IEC958_AES2_PRO_SBITS_UDEF (6<<0) /* user defined application */
|
|
#define IEC958_AES2_PRO_WORDLEN (7<<3) /* mask - source word length */
|
|
#define IEC958_AES2_PRO_WORDLEN_NOTID (0<<3) /* not indicated */
|
|
#define IEC958_AES2_PRO_WORDLEN_22_18 (2<<3) /* 22-bit or 18-bit */
|
|
#define IEC958_AES2_PRO_WORDLEN_23_19 (4<<3) /* 23-bit or 19-bit */
|
|
#define IEC958_AES2_PRO_WORDLEN_24_20 (5<<3) /* 24-bit or 20-bit */
|
|
#define IEC958_AES2_PRO_WORDLEN_20_16 (6<<3) /* 20-bit or 16-bit */
|
|
#define IEC958_AES2_CON_SOURCE (15<<0) /* mask - source number */
|
|
#define IEC958_AES2_CON_SOURCE_UNSPEC (0<<0) /* unspecified */
|
|
#define IEC958_AES2_CON_CHANNEL (15<<4) /* mask - channel number */
|
|
#define IEC958_AES2_CON_CHANNEL_UNSPEC (0<<4) /* unspecified */
|
|
#define IEC958_AES3_CON_FS (15<<0) /* mask - sample frequency */
|
|
#define IEC958_AES3_CON_FS_22050 (0x4) /* 22.5kHz */
|
|
#define IEC958_AES3_CON_FS_24000 (0x6) /* 24kHz */
|
|
#define IEC958_AES3_CON_FS_44100 (0<<0) /* 44.1kHz */
|
|
#define IEC958_AES3_CON_FS_48000 (2<<0) /* 48kHz */
|
|
#define IEC958_AES3_CON_FS_32000 (3<<0) /* 32kHz */
|
|
#define IEC958_AES3_CON_FS_88200 (0x8) /* 88.2kHz */
|
|
#define IEC958_AES3_CON_FS_176400 (0xc) /* 176.4kHz */
|
|
#define IEC958_AES3_CON_FS_192000 (0xe) /* 192kHz */
|
|
#define IEC958_AES3_CON_FS_96000 (0xa) /* 96kHz */
|
|
#define IEC958_AES3_CON_FS_768000 (0x9) /* 768kHz */
|
|
#define IEC958_AES3_CON_CLOCK (3<<4) /* mask - clock accuracy */
|
|
#define IEC958_AES3_CON_CLOCK_1000PPM (0<<4) /* 1000 ppm */
|
|
#define IEC958_AES3_CON_CLOCK_50PPM (1<<4) /* 50 ppm */
|
|
#define IEC958_AES3_CON_CLOCK_VARIABLE (2<<4) /* variable pitch */
|
|
|
|
#define IEC958_AES4_CON_BITS24 0x0b
|
|
#define IEC958_AES4_CON_FS_44100 0xf0
|
|
#define IEC958_AES4_CON_FS_88200 0x70
|
|
#define IEC958_AES4_CON_FS_22050 0xb0
|
|
#define IEC958_AES4_CON_FS_176400 0x30
|
|
#define IEC958_AES4_CON_FS_48000 0xd0
|
|
#define IEC958_AES4_CON_FS_96000 0x50
|
|
#define IEC958_AES4_CON_FS_24000 0x90
|
|
#define IEC958_AES4_CON_FS_192000 0x10
|
|
#define IEC958_AES4_CON_FS_32000 0xc0
|
|
|
|
typedef struct _rk_iec958 {
|
|
unsigned int counter;
|
|
unsigned char status[24];
|
|
unsigned char preamble[3]; /* B/M/W or Z/X/Y */
|
|
|
|
int channels;
|
|
int samplerate;
|
|
} rk_iec958;
|
|
|
|
extern int iec958_init(rk_iec958 *iec, int samplerate, int channel, bool isPcm);
|
|
extern int iec958_deInit(rk_iec958 *iec);
|
|
extern int iec958_frame_encode(rk_iec958 *iec, char *in, int inLength, char *out, int *outLength);
|
|
|
|
#endif // _RK_AUDIO_IEC958_
|