📄 qt.c
字号:
/*-----------------------------------------------------------------------------\
@RoutineName :: MovieHeaderAtom
@Description ::
Constructs a Movie Header Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
Uint32 Time_Scale :: Time scale
Uint32 Duration :: Duration of the movie in time scale units
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void MovieHeaderAtom(Bytestream *stream, Uint32 Time_Scale, Uint32 Duration ) {
put_bytes(stream, 4, 0x6c); /* atom size */
put_bytes(stream, 4, ('m'<<24)+('v'<<16)+('h'<<8)+'d'); /* 'mvhd' */
put_bytes(stream, 4, 0); /* Version + flags */
put_bytes(stream, 4, 0); /* Creation time */
put_bytes(stream, 4, 0); /* Modification Time */
put_bytes(stream, 4, Time_Scale); /* Time Scale */
put_bytes(stream, 4, Duration); /* Duration */
put_bytes(stream, 4, 0x00010000); /* Preferred rate */
put_bytes(stream, 4, 0x01000000); /* preferred volume + 2 bytes reserved */
put_bytes(stream, 4, 0); /* reserved */
put_bytes(stream, 4, 0); /* reserved */
put_bytes(stream, 4, 0x00010000); /* a */
put_bytes(stream, 4, 0); /* b */
put_bytes(stream, 4, 0); /* u */
put_bytes(stream, 4, 0); /* c */
put_bytes(stream, 4, 0x00010000); /* d */
put_bytes(stream, 4, 0); /* v */
put_bytes(stream, 4, 0); /* x */
put_bytes(stream, 4, 0); /* y */
put_bytes(stream, 4, 0x40000000); /* w */
put_bytes(stream, 4, 0); /* preview time */
put_bytes(stream, 4, 0); /* preview duration */
put_bytes(stream, 4, 0); /* poster time */
put_bytes(stream, 4, 0); /* Selection time */
put_bytes(stream, 4, 0); /* Selectione duration */
put_bytes(stream, 4, 0); /* Current time */
put_bytes(stream, 4, QT_NEXT_TRACK_ID); /* Next Track ID */
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackHeaderAtom
@Description ::
Constructs a Track Header Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
Uint32 Track_ID :: Track ID
Uint32 duration :: Track Duration
Uint16 disp_width :: Display width
Uint16 disp_height :: Display Height
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void TrackHeaderAtom(Bytestream *stream, Uint32 Track_ID, Uint32 duration, Uint16 disp_width, Uint16 disp_height) {
put_bytes(stream, 4, 0x5c); /* Atom Size */
put_bytes(stream, 4, ('t'<<24)+('k'<<16)+('h'<<8)+'d'); /* 'tkhd' */
put_bytes(stream, 4, 0x000f); /* version + flags */
put_bytes(stream, 4, 0); /* creation time */
put_bytes(stream, 4, 0); /* modification time */
put_bytes(stream, 4, Track_ID); /* track ID */
put_bytes(stream, 4, 0); /* reserved */
put_bytes(stream, 4, duration); /* Duration, TBD */
put_bytes(stream, 4, 0); /* reserved */
put_bytes(stream, 4, 0); /* reserved */
put_bytes(stream, 4, 0); /* Layer + Alternate group */
put_bytes(stream, 4, 0x01000000); /* volume + reserved */
put_bytes(stream, 4, 0x00010000); /* a */
put_bytes(stream, 4, 0); /* b */
put_bytes(stream, 4, 0); /* u */
put_bytes(stream, 4, 0); /* c */
put_bytes(stream, 4, 0x00010000); /* d */
put_bytes(stream, 4, 0); /* v */
put_bytes(stream, 4, 0); /* x */
put_bytes(stream, 4, 0); /* y */
put_bytes(stream, 4, 0x40000000); /* w */
put_bytes(stream, 4, disp_width<<16); /* width */
put_bytes(stream, 4, disp_height<<16); /* height */
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackEditAtom
@Description ::
Constructs a Track Edit Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
Uint32 Track_Duration :: Track Duration
Uint32 Media_Time :: Track Media Time
Uint32 Media_Rate :: Track Media Rate
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void TrackEditAtom(Bytestream *stream, Uint32 Track_Duration, Uint32 Media_Time, Uint32 Media_Rate) {
put_bytes(stream, 4, 0x0024); /* atom size*/
put_bytes(stream, 4, ('e'<<24)+('d'<<16)+('t'<<8)+'s'); /* edts */
put_bytes(stream, 4, 0x001c); /* elst atom size */
put_bytes(stream, 4, ('e'<<24)+('l'<<16)+('s'<<8)+'t'); /* elst */
put_bytes(stream, 4, 0); /* version+flags */
put_bytes(stream, 4, 1); /* number of entries */
/* Edit list table */
put_bytes(stream, 4, Track_Duration);
put_bytes(stream, 4, Media_Time);
put_bytes(stream, 4, Media_Rate);
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackUserDataAtom
@Description ::
Constructs a Track User Data Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void TrackUserDataAtom(Bytestream *stream) {
put_bytes(stream, 4, 0x0008); /* atom size*/
put_bytes(stream, 4, ('u'<<24)+('d'<<16)+('t'<<8)+'a'); /* udta */
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackMediaHeaderAtom
@Description ::
Constructs a Track Media Header Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
Uint32 Time_scale :: Time scale
Uint32 Duration :: Media Duration
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void TrackMediaHeaderAtom(Bytestream *stream, Uint32 Time_scale, Uint32 Duration) {
put_bytes(stream, 4, 0x0020); /* atom size*/
put_bytes(stream, 4, ('m'<<24)+('d'<<16)+('h'<<8)+'d'); /* mdhd */
put_bytes(stream, 4, 0); /* version+flags */
put_bytes(stream, 4, 0); /* creation time */
put_bytes(stream, 4, 0); /* modification time */
put_bytes(stream, 4, Time_scale); /* time scale */
put_bytes(stream, 4, Duration); /* duration */
put_bytes(stream, 4, 0); /* language+quality */
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackMediaHeaderReferenceAtom
@Description ::
Constructs a Track Media Header Reference Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
int comp_type :: compression type
int comp_subtype :: compression sub-type
Uint32 comp_flag :: compression flag
Uint32 comp_mask :: compression mask
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void TrackMediaHeaderReferenceAtom(Bytestream *stream, int comp_type,
int comp_subtype, Uint32 comp_flag, Uint32 comp_mask) {
put_bytes(stream, 4, 0x003c); /* atom size */
put_bytes(stream, 4, ('h'<<24)+('d'<<16)+('l'<<8)+'r'); /* hdlr */
put_bytes(stream, 4, 0); /* version + flags */
if (comp_type==0) {
put_bytes(stream, 4, ('m'<<24)+('h'<<16)+('l'<<8)+'r'); /* Movie handler */
if (comp_subtype==0)
put_bytes(stream, 4, ('s'<<24)+('o'<<16)+('u'<<8)+'n');
else
put_bytes(stream, 4, ('v'<<24)+('i'<<16)+('d'<<8)+'e');
} else {
put_bytes(stream, 4, ('d'<<24)+('h'<<16)+('l'<<8)+'r');
put_bytes(stream, 4, ('a'<<24)+('l'<<16)+('i'<<8)+'s');
}
put_bytes(stream, 4, ('a'<<24)+('p'<<16)+('p'<<8)+'l'); /* Component manufacturer */
put_bytes(stream, 4, comp_flag); /* Component flags */
put_bytes(stream, 4, comp_mask); /* Component mask */
/* Component name */
/* put_bytes(stream, 4, 's In'); */
/* put_bytes(stream, 4, 'stru'); */
/* put_bytes(stream, 4, 'ment'); */
/* put_bytes(stream, 4, 's Me'); */
/* put_bytes(stream, 4, 'dia '); */
/* put_bytes(stream, 4, 'Hand'); */
/* put_bytes(stream, 4, 'ler '); */
put_bytes(stream, 4, ('s'<<24)+(' '<<16)+ ('I'<<8)+'n');
put_bytes(stream, 4, ('s'<<24)+('t'<<16)+ ('r'<<8)+'u');
put_bytes(stream, 4, ('m'<<24)+('e'<<16)+ ('n'<<8)+'t');
put_bytes(stream, 4, ('s'<<24)+(' '<<16)+ ('M'<<8)+'e');
put_bytes(stream, 4, ('d'<<24)+('i'<<16)+ ('a'<<8)+' ');
put_bytes(stream, 4, ('H'<<24)+('a'<<16)+ ('n'<<8)+'d');
put_bytes(stream, 4, ('l'<<24)+('e'<<16)+ ('r'<<8)+' ');
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackMediaVideoMediaInfoHeaderAtom
@Description ::
Constructs a Track Video Media Info Header Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
Uint16 GraphicsMode :: Graphics mode
Uint16 Opcolor :: Optional color
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void TrackMediaVideoMediaInfoHeaderAtom(Bytestream *stream, Uint16 GraphicsMode, Uint16 Opcolor) {
put_bytes(stream, 4, 0x0014);
put_bytes(stream, 4, ('v'<<24)+('m'<<16)+('h'<<8)+'d'); /* vmhd */
put_bytes(stream, 4, 0x0001); /* Version + flags */
put_bytes(stream, 4, ( GraphicsMode << 16 ) + Opcolor ); /* Graphics mode + Opcolor */
put_bytes(stream, 4, ( Opcolor << 16 ) + Opcolor ); /* Opcolor */
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackMediaDataInformationAtom
@Description ::
Constructs a Track Media Data Information Atom
@Parameters ::
Bytestream *stream :: The QT Atom byte stream
@Return ::
NONE
\-----------------------------------------------------------------------------*/
void TrackMediaDataInformationAtom(Bytestream *stream) {
put_bytes(stream, 4, 0x0024); /* Atom Size */
put_bytes(stream, 4, ('d'<<24)+('i'<<16)+('n'<<8)+'f'); /* dinf */
put_bytes(stream, 4, 0x001c); /* Atom Size */
put_bytes(stream, 4, ('d'<<24)+('r'<<16)+('e'<<8)+'f'); /* dref */
put_bytes(stream, 4, 0); /* version + flags */
put_bytes(stream, 4, 1); /* number of entries */
put_bytes(stream, 4, 0x0000000c); /* data reference */
put_bytes(stream, 4, ('a'<<24)+('l'<<16)+('i'<<8)+'s'); /* data reference */
put_bytes(stream, 4, 0x00000001); /* data reference */
}
/*-----------------------------------------------------------------------------\
@RoutineName :: TrackMediaVideoSampleDescriptionAtom
@Description ::
Constructs a Track Media Video Sample Description Atom
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -