Files
TAIXIN/sdk/lib/video/miniMP4/adts.h

68 lines
2.5 KiB
C
Raw Permalink Normal View History

/**
* @file adts.h
* @brief
* @author licaibiao
* @version 1.0
* @date 2023-12-06
*
* @copyright Copyright (c) 2023-2030 liwen01 Technology Co., Ltd
*
*/
#ifndef __AdtsHeader__adts__
#define __AdtsHeader__adts__
#include <stdio.h>
#include <stdint.h>
/*
* ADTS : Audio Data Transport Stream. AAC音频的传输流格式.
* ADTS头中相对有用的信息包括: , , . ADTS头信息的AAC流都会清晰的告诉解码器他需要的这些信息.
* ADTS的头信息都是7个字节, : 28bit是 adts_fixed_header, 28bit是 adts_variable_header.
*/
typedef struct adts_fixed_header {
unsigned short syncword: 12;
unsigned char id: 1;
unsigned char layer: 2;
unsigned char protection_absent: 1;
unsigned char profile: 2;
unsigned char sampling_frequency_index: 4;
unsigned char private_bit: 1;
unsigned char channel_configuration: 3;
unsigned char original_copy: 1;
unsigned char home: 1;
} adts_fixed_header; // length : 28 bits
typedef struct adts_variable_header {
unsigned char copyright_identification_bit: 1;
unsigned char copyright_identification_start: 1;
unsigned short aac_frame_length: 13;
unsigned short adts_buffer_fullness: 11;
unsigned char number_of_raw_data_blocks_in_frame:2;
} adts_variable_header; // length : 28 bits
// 设置adts固定的一部分
extern void set_fixed_header(adts_fixed_header *header);
// 设置adts可变的一部分
extern void set_variable_header(adts_variable_header *header, const int aac_raw_data_length);
// 解析buff中的adts固定部分头信息
extern void get_fixed_header(const unsigned char buff[7], adts_fixed_header *header);
// 解析buff中的adts可变部分头信息
extern void get_variable_header(const unsigned char buff[7], adts_variable_header *header);
// 将adts头信息转化为一个64位的整数, PS: 前面8位空着
extern void convert_adts_header2int64(const adts_fixed_header *fixed_header, const adts_variable_header *variable_header, uint64_t *header);
// 将adts头信息转化为一个7字节的buff
extern void convert_adts_header2char(const adts_fixed_header *fixed_header, const adts_variable_header *variable_header, unsigned char buffer[7]);
extern void aac_dsi_to_adts(uint8_t *dsi, uint8_t *adts, uint32_t aac_data_length);
#endif /* defined(__AdtsHeader__adts__) */