/* * 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_