www.pudn.com > iMagic_2006_0428_v098r23.rar > mp4_struct.h
/*
****************************************************************
* Magic Pixel Inc.
* Copyright 2004, Magic Pixel Inc., HsinChu, Taiwan
* All rights reserved.
*
*
*
* Filename: mp4_struct.H
*
* Programmer: Jacky Chang
* MPX E340 division
*
* Created: 11/24/2005
*
* Description: Common header file
*
*
* Change History (most recent first):
* <1> 11/24/2005 Jacky Chang first file
****************************************************************
*/
#ifndef mp4_struct_h
#define mp4_struct_h
#include "file.h"
#define MAX_TRACKS 1
#define TRACK_UNKNOWN 0
#define TRACK_AUDIO 1
#define TRACK_VIDEO 2
#define TRACK_SYSTEM 3
#define ERROR_FORMAT_SIZE (0x01)
#define FOURCC(a,b,c,d) ((a<<24)|(b<<16)|(c<<8)|(d))
#define BOX_FTYP FOURCC('f','t','y','p')
#define BOX_MDAT FOURCC('m','d','a','t')
#define BOX_MOOV FOURCC('m','o','o','v')
#define BOX_MVHD FOURCC('m','v','h','d')
#define BOX_TRAK FOURCC('t','r','a','k')
#define BOX_TKHD FOURCC('t','k','h','d')
#define BOX_TREF FOURCC('t','r','e','f')
#define BOX_EDTS FOURCC('e','d','t','s')
#define BOX_MDIA FOURCC('m','d','i','a')
#define BOX_MDHD FOURCC('m','d','h','d')
#define BOX_HDLR FOURCC('h','d','l','r')
#define BOX_MINF FOURCC('m','i','n','f')
#define BOX_VMHD FOURCC('v','m','h','d')
#define BOX_SMHD FOURCC('s','m','h','d')
#define BOX_HMHD FOURCC('h','m','h','d')
#define BOX_NMHD FOURCC('n','m','h','d')
#define BOX_DINF FOURCC('d','i','n','f')
#define BOX_DREF FOURCC('d','r','e','f')
#define BOX_STBL FOURCC('s','t','b','l')
#define BOX_STSD FOURCC('s','t','s','d')
#define BOX_STTS FOURCC('s','t','t','s')
#define BOX_CTTS FOURCC('c','t','t','s')
#define BOX_STSC FOURCC('s','t','s','c')
#define BOX_STSZ FOURCC('s','t','s','z')
#define BOX_STCO FOURCC('s','t','c','o')
#define BOX_MP4A FOURCC('m','p','4','a')
#define BOX_MP4V FOURCC('m','p','4','v')
#define BOX_MP4S FOURCC('m','p','4','s')
#define BOX_DRMS FOURCC('d','r','m','s')
#define BOX_ESDS FOURCC('e','s','d','s')
#define RP_FRAME_SAMPLE 1024
typedef struct {
unsigned char *buf; // dynamic buffer pointer of bitstream buffer
int buf_left; //this buffer left byte numbers
unsigned int cache; //the cache can be used for 8 bits or 16 bits or 32 bits
int cache_left; //the cache left bit numbers
} buffer_bs;
/* metadata tag structure */
typedef struct
{
char *item;
char *value;
} mp4ff_tag_t;
/* metadata list structure */
typedef struct
{
mp4ff_tag_t *tags;
uint32_t count;
} mp4ff_metadata_t;
typedef struct
{
int32_t stsc_first_chunk;
int32_t stsc_samples_per_chunk;
int32_t stsc_sample_desc_index;
}stsc_struct;
typedef struct
{
int32_t stts_sample_count;
int32_t stts_sample_delta;
}stts_struct;
typedef struct
{
int32_t ctts_sample_count;
int32_t ctts_sample_offset;
}ctts_struct;
typedef struct
{
int32_t type;
int32_t channelCount;
int32_t sampleSize;
uint16_t sampleRate;
int32_t audioType;
// stsd
int32_t stsd_entry_count;
// stsz
int32_t stsz_sample_size;
int32_t stsz_sample_count;
int32_t *stsz_table;
// stts
int32_t stts_entry_count;
//int32_t *stts_sample_count;
//int32_t *stts_sample_delta;
stts_struct *stts;
// stsc
int32_t stsc_entry_count;
stsc_struct *stsc;
//int32_t *stsc_first_chunk;
//int32_t *stsc_samples_per_chunk;
//int32_t *stsc_sample_desc_index;
// stsc
int32_t stco_entry_count;
int32_t *stco_chunk_offset;
// ctts
int32_t ctts_entry_count;
ctts_struct *ctts;
//int32_t *ctts_sample_count;
//int32_t *ctts_sample_offset;
// esde
unsigned char *decoderConfig;
int32_t decoderConfigLen;
uint32_t maxBitrate;
uint32_t avgBitrate;
uint32_t timeScale;
uint64_t duration;
//#ifdef ITUNES_DRM
// drms
// void *p_drms;
//#endif
} mp4ff_track_t;
// mp4 main file structure
typedef struct
{
// stream to read from
//mp4ff_callback_t *stream;
//int64_t current_position;
// int32_t moov_read;
//uint64_t moov_offset;
// uint64_t moov_size;
uint8_t last_atom;
uint64_t file_size;
// mvhd
int32_t time_scale;
int32_t duration;
// incremental track index while reading the file
int32_t total_tracks;
// track data
mp4ff_track_t track[MAX_TRACKS];
// metadata
mp4ff_metadata_t tags;
int error;
} mp4ff_t;
typedef struct
{
// Audio Specific Info
uint8_t objectTypeIndex;
uint8_t samplingFrequencyIndex;
uint32_t samplingFrequency;
uint8_t channelsConfiguration;
// GA Specific Info
uint8_t frameLengthFlag;
uint8_t dependsOnCoreCoder;
uint16_t coreCoderDelay;
uint8_t extensionFlag;
uint8_t aacSectionDataResilienceFlag;
uint8_t aacScalefactorDataResilienceFlag;
uint8_t aacSpectralDataResilienceFlag;
uint8_t epConfig;
int8_t sbr_present_flag;
int8_t forceUpSampling;
} mp4AudioSpecificConfig;
#define MP4_GRAN_NUM 2
#define MP4_BUF_SIZE 8192
#define MP4_GRAN_SIZE (MP4_BUF_SIZE/MP4_GRAN_NUM)
typedef struct
{
//unsigned char buf[MP4_BUF_SIZE]; // input bitstream buffer
unsigned char *buf;
int gnl_left;
int gnl_index;
STREAM *hfile;
unsigned char *mp4_bs_ptr;
mp4ff_t mp4ff;
mp4AudioSpecificConfig mp4asc;
int moov_exist;
int mdat_exist;
int mdat_len;
int tot_sample;
int sample_size;
int cur_sample;
int cur_track;
int cur_frame_offset;
int cur_chunk_frame;
int cur_chunk;
int stsc_entry_count;
int next_stsc_index;
int cur_chunk_totframe;
int next_various_frame_size_chunk;
}mp4_struct;
//--------------------------------------------
#define AUDIO_AAC_SDRAM 0xa0100000
typedef struct
{
STREAM *dec_fp;
int pattern_id;
int pattern_num;
int compare_tool;
int cmp_error;
int decoding;
//int header_type;
mp4_struct mp4s;
program_config pce;
char out_fn[80];
}mp4_dec;
typedef struct
{
unsigned char *host_bs_addr;
int *host_pcm_addr;
int frame_size;
int frame;
int channel_num;
int error;
int sample_rate_index;
int header_type;
int EQ_enable;
unsigned char EQ_band[16];
int frame_left;
} host_aac_struct;
//#define song_buffer_addr 0x3c000000
#define fds_frameLength 1024
#define AAC_OK 0
extern mp4_dec md;
extern host_aac_struct *aac_s;
#endif