⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qt.c

📁 dm270 source code
💻 C
📖 第 1 页 / 共 3 页
字号:

/*-----------------------------------------------------------------------------\
@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 + -