spdif_data_parse.h 2.68 KB
#ifndef _SPDIF_DATA_PARSE_C_
#define _SPDIF_DATA_PARSE_C_


//for AAC(ADTS) DATA TYPE
enum
{
	SPDIF_STREAM_UNKNOWN,
	SPDIF_STREAM_AC3,
	SPDIF_STREAM_AAC,
	SPDIF_STREAM_PCM,
	SPDIF_STREAM_DTS,
	SPDIF_STREAM_UNLOCK,
	SPDIF_STREAM_TEMP,
	SPDIF_AUTO_ON
};

//AAC DATA TYPE:7
enum {
	MPEG2_AAC_RESERVE_SAMPLE_RATE = 0,      //32 frames, 1024 samples of frames
};

//AAC DATA TYPE:19
//for AAC(ADTS) STREAM SUBDATA TYPE
enum {
	MPEG2_AAC_HALF_LOW_SAMPLE_RATE = 0,     //64 frames, 2048 samples of frames
	MPEG2_AAC_QUARTER_LOW_SAMPLE_RATE = 1,  //128 frames, 4096 samples of frames
	MPEG2_AAC_RESERVE1_LOW_SAMPLE_RATE = 2,
	MPEG2_AAC_RESERVE2_LOW_SAMPLE_RATE = 3
};

//AAC DATA TYPE:20
//for AAC(ADTS) STREAM SUBDATA TYPE
enum {
	MPEG4_AAC_NORMAL = 0,                  //32 frames, 1024 samples of frames
	MPEG4_AAC_HALF_LOW_SAMPLE_RATE = 1,    //64 frames, 2048 samples of frames
	MPEG4_AAC_QUARTER_LOW_SAMPLE_RATE = 2, //128 frames, 4096 samples of frames
	MPEG4_AAC_DOUBLE_HIGH_SAMPLE_RATE = 3, //16 frames, 512 samples of frames
};


#define PREAMBLE_PA     0xF872
#define PREAMBLE_PB     0x4E1F
//#define PREAMBLE_PAPB   0xF8724E1F

#define PREAMBLE_PC_AC3            1

#define PREAMBLE_PC_MPEG2_AAC1     7 //frame size:1024

//data type:low samle rate
#define PREAMBLE_PC_MPEG2_AAC2    (19) //BIT4-BIT0, for low sample frequency

//data type
#define PREAMBLE_PC_MPEG4_AAC     (20) //BIT4-BIT0 

//sub data type
#define PREAMBLE_PC_MPEG4_AAC_1K  ((0<<5)) //frame size:1024 
#define PREAMBLE_PC_MPEG4_AAC_2K  ((1<<5)) //frame size:2048
#define PREAMBLE_PC_MPEG4_AAC_4K  ((2<<5)) //frame size:4096
#define PREAMBLE_PC_MPEG4_AAC_4K  ((3<<5)) //frame size:512


typedef struct { 
//	U16 pa;  //header syc
//	U16 pb;  //header syc;
//	U16 pd;  //burst_payload_length;
//	U16 pc;  //burst_info;
//	U16 pe;  //if the burst-infor pc is equal 0x1F(31), the burst-preamble is extended with Pe.
//	U16 pf;  //if the burst-infor pc is equal 0x1F(31), the burst-preamble is extended with Pf.
	u16 detect_cn;
	U8  data_type;
	//U8  monitor;
#if 0
	U8 subdata_type;      //[Bit6->bit5], burst_info;
	U16 total_byte_of_frame; //repeat frames
	U16 audio_data_len;        //Pd
	U16 remain_audio_data_len; //Pd
	U16 stuff_data_len;        //No audio data
	U16 remain_stuff_data_len; //Pd
	U8	stream_no;
	U8  status;
//} SPDIF_HEADER;
#endif

} __attribute__ ((packed)) SPDIF_HEADER;

extern SPDIF_HEADER spdif_header;
extern u8 spdif_parse_read_cn;



U32 *spdif_data_parser_open(U32 *buf, U16 dword_length);
U8 spdif_data_monitor_by_u32(U32 *buf, U16 dword_length);
U8 spdif_data_monitor_by_u16(U32 *buf, U16 dword_length);

U32 spdif_get_data_burst_size(void);
U32 spdif_data_burst_parser (U8 *buf, u16 len);

void app_nav_spdif_stream_reinit1 (void);

#endif