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