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

📄 movenc.c

📁 pmpmodavc102_sub_src,psp下很好的播放器源码
💻 C
📖 第 1 页 / 共 4 页
字号:
{    put_be32(pb, 0x34); /* size ... reports as 28 in mp4box! */    put_tag(pb, "uuid");    put_tag(pb, "USMT");    put_be32(pb, 0x21d24fce);    put_be32(pb, 0xbb88695c);    put_be32(pb, 0xfac9c740);    put_be32(pb, 0x1c);     // another size here!    put_tag(pb, "MTDT");    put_be32(pb, 0x00010012);    put_be32(pb, 0x0a);    put_be32(pb, 0x55c40000);    put_be32(pb, 0x1);    put_be32(pb, 0x0);    return 0x34;}static int mov_write_trak_tag(ByteIOContext *pb, MOVTrack* track){    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "trak");    mov_write_tkhd_tag(pb, track);    if (track->mode == MODE_PSP)         mov_write_edts_tag(pb, track);  // PSP Movies require edts box    mov_write_mdia_tag(pb, track);    if (track->mode == MODE_PSP)         mov_write_uuid_tag_psp(pb,track);  // PSP Movies require this uuid box    return updateSize(pb, pos);}#if 0/* TODO: Not sorted out, but not necessary either */static int mov_write_iods_tag(ByteIOContext *pb, MOVContext *mov){    put_be32(pb, 0x15); /* size */    put_tag(pb, "iods");    put_be32(pb, 0);    /* version & flags */    put_be16(pb, 0x1007);    put_byte(pb, 0);    put_be16(pb, 0x4fff);    put_be16(pb, 0xfffe);    put_be16(pb, 0x01ff);    return 0x15;}#endifstatic int mov_write_mvhd_tag(ByteIOContext *pb, MOVContext *mov){    int maxTrackID = 1, maxTrackLen = 0, i;    int64_t maxTrackLenTemp;    put_be32(pb, 0x6c); /* size (always 0x6c) */    put_tag(pb, "mvhd");    put_be32(pb, 0); /* version & flags */    put_be32(pb, mov->time); /* creation time */    put_be32(pb, mov->time); /* modification time */    put_be32(pb, mov->timescale); /* timescale */    for (i=0; i<MAX_STREAMS; i++) {        if(mov->tracks[i].entry > 0) {            maxTrackLenTemp = av_rescale_rnd(mov->tracks[i].trackDuration, globalTimescale, mov->tracks[i].timescale, AV_ROUND_UP);            if(maxTrackLen < maxTrackLenTemp)                maxTrackLen = maxTrackLenTemp;            if(maxTrackID < mov->tracks[i].trackID)                maxTrackID = mov->tracks[i].trackID;        }    }    put_be32(pb, maxTrackLen); /* duration of longest track */    put_be32(pb, 0x00010000); /* reserved (preferred rate) 1.0 = normal */    put_be16(pb, 0x0100); /* reserved (preferred volume) 1.0 = normal */    put_be16(pb, 0); /* reserved */    put_be32(pb, 0); /* reserved */    put_be32(pb, 0); /* reserved */    /* Matrix structure */    put_be32(pb, 0x00010000); /* reserved */    put_be32(pb, 0x0); /* reserved */    put_be32(pb, 0x0); /* reserved */    put_be32(pb, 0x0); /* reserved */    put_be32(pb, 0x00010000); /* reserved */    put_be32(pb, 0x0); /* reserved */    put_be32(pb, 0x0); /* reserved */    put_be32(pb, 0x0); /* reserved */    put_be32(pb, 0x40000000); /* reserved */    put_be32(pb, 0); /* reserved (preview time) */    put_be32(pb, 0); /* reserved (preview duration) */    put_be32(pb, 0); /* reserved (poster time) */    put_be32(pb, 0); /* reserved (selection time) */    put_be32(pb, 0); /* reserved (selection duration) */    put_be32(pb, 0); /* reserved (current time) */    put_be32(pb, maxTrackID+1); /* Next track id */    return 0x6c;}static int mov_write_itunes_hdlr_tag(ByteIOContext *pb, MOVContext* mov,                                     AVFormatContext *s){    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "hdlr");    put_be32(pb, 0);    put_be32(pb, 0);    put_tag(pb, "mdir");    put_tag(pb, "appl");    put_be32(pb, 0);    put_be32(pb, 0);    put_be16(pb, 0);    return updateSize(pb, pos);}/* helper function to write a data tag with the specified string as data */static int mov_write_string_data_tag(ByteIOContext *pb, MOVContext* mov,                                     AVFormatContext *s, const char *data){    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "data");    put_be32(pb, 1);    put_be32(pb, 0);    put_buffer(pb, data, strlen(data));    return updateSize(pb, pos);}/* iTunes name of the song/movie */static int mov_write_nam_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    int size = 0;    if ( s->title[0] ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251nam");        mov_write_string_data_tag(pb, mov, s, s->title);        size = updateSize(pb, pos);    }    return size;}/* iTunes name of the artist/performer */static int mov_write_ART_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    int size = 0;    if ( s->author[0] ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251ART");        // we use the author here as this is the only thing that we have...        mov_write_string_data_tag(pb, mov, s, s->author);        size = updateSize(pb, pos);    }    return size;}/* iTunes name of the writer */static int mov_write_wrt_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    int size = 0;    if ( s->author[0] ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251wrt");        mov_write_string_data_tag(pb, mov, s, s->author);        size = updateSize(pb, pos);    }    return size;}/* iTunes name of the album */static int mov_write_alb_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    int size = 0;    if ( s->album[0] ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251alb");        mov_write_string_data_tag(pb, mov, s, s->album);        size = updateSize(pb, pos);    }    return size;}/* iTunes year */static int mov_write_day_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    char year[5];    int size = 0;    if ( s->year ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251day");        snprintf(year, 5, "%04d", s->year);        mov_write_string_data_tag(pb, mov, s, year);        size = updateSize(pb, pos);    }    return size;}/* iTunes tool used to create the file */static int mov_write_too_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "\251too");    mov_write_string_data_tag(pb, mov, s, LIBAVFORMAT_IDENT);    return updateSize(pb, pos);}/* iTunes comment */static int mov_write_cmt_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    int size = 0;    if ( s->comment[0] ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251cmt");        mov_write_string_data_tag(pb, mov, s, s->comment);        size = updateSize(pb, pos);    }    return size;}/* iTunes custom genre */static int mov_write_gen_tag(ByteIOContext *pb, MOVContext* mov,                             AVFormatContext *s){    int size = 0;    if ( s->genre[0] ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251gen");        mov_write_string_data_tag(pb, mov, s, s->genre);        size = updateSize(pb, pos);    }    return size;}/* iTunes track number */static int mov_write_trkn_tag(ByteIOContext *pb, MOVContext* mov,                              AVFormatContext *s){    int size = 0;    if ( s->track ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "trkn");        {            int pos = url_ftell(pb);            put_be32(pb, 0); /* size */            put_tag(pb, "data");            put_be32(pb, 0);        // 8 bytes empty            put_be32(pb, 0);            put_be16(pb, 0);        // empty            put_be16(pb, s->track); // track number            put_be16(pb, 0);        // total track number            put_be16(pb, 0);        // empty            updateSize(pb, pos);        }        size = updateSize(pb, pos);    }    return size;}/* iTunes meta data list */static int mov_write_ilst_tag(ByteIOContext *pb, MOVContext* mov,                              AVFormatContext *s){    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "ilst");    mov_write_nam_tag(pb, mov, s);    mov_write_ART_tag(pb, mov, s);    mov_write_wrt_tag(pb, mov, s);    mov_write_alb_tag(pb, mov, s);    mov_write_day_tag(pb, mov, s);    mov_write_too_tag(pb, mov, s);    mov_write_cmt_tag(pb, mov, s);    mov_write_gen_tag(pb, mov, s);    mov_write_trkn_tag(pb, mov, s);    return updateSize(pb, pos);}/* iTunes meta data tag */static int mov_write_meta_tag(ByteIOContext *pb, MOVContext* mov,                              AVFormatContext *s){    int size = 0;    // only save meta tag if required    if ( s->title[0] || s->author[0] || s->album[0] || s->year ||          s->comment[0] || s->genre[0] || s->track ) {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "meta");        put_be32(pb, 0);        mov_write_itunes_hdlr_tag(pb, mov, s);        mov_write_ilst_tag(pb, mov, s);        size = updateSize(pb, pos);    }    return size;}    static int mov_write_udta_tag(ByteIOContext *pb, MOVContext* mov,                              AVFormatContext *s){    int pos = url_ftell(pb);    int i;    put_be32(pb, 0); /* size */    put_tag(pb, "udta");    /* iTunes meta data */    mov_write_meta_tag(pb, mov, s);    /* Requirements */    for (i=0; i<MAX_STREAMS; i++) {        if(mov->tracks[i].entry <= 0) continue;        if (mov->tracks[i].enc->codec_id == CODEC_ID_AAC ||            mov->tracks[i].enc->codec_id == CODEC_ID_MPEG4) {            int pos = url_ftell(pb);            put_be32(pb, 0); /* size */            put_tag(pb, "\251req");            put_be16(pb, sizeof("QuickTime 6.0 or greater") - 1);            put_be16(pb, 0);            put_buffer(pb, "QuickTime 6.0 or greater",                       sizeof("QuickTime 6.0 or greater") - 1);            updateSize(pb, pos);            break;        }    }    /* Encoder */    if(mov->tracks[0].enc && !(mov->tracks[0].enc->flags & CODEC_FLAG_BITEXACT))    {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251enc");        put_be16(pb, sizeof(LIBAVFORMAT_IDENT) - 1); /* string length */        put_be16(pb, 0);        put_buffer(pb, LIBAVFORMAT_IDENT, sizeof(LIBAVFORMAT_IDENT) - 1);        updateSize(pb, pos);    }    if( s->title[0] )    {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251nam");        put_be16(pb, strlen(s->title)); /* string length */        put_be16(pb, 0);        put_buffer(pb, s->title, strlen(s->title));        updateSize(pb, pos);    }    if( s->author[0] )    {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, /*"\251aut"*/ "\251day" );        put_be16(pb, strlen(s->author)); /* string length */        put_be16(pb, 0);        put_buffer(pb, s->author, strlen(s->author));        updateSize(pb, pos);    }    if( s->comment[0] )    {        int pos = url_ftell(pb);        put_be32(pb, 0); /* size */        put_tag(pb, "\251des");        put_be16(pb, strlen(s->comment)); /* string length */        put_be16(pb, 0);        put_buffer(pb, s->comment, strlen(s->comment));        updateSize(pb, pos);    }    return updateSize(pb, pos);}static int mov_write_moov_tag(ByteIOContext *pb, MOVContext *mov,                              AVFormatContext *s){    int pos, i;    pos = url_ftell(pb);    put_be32(pb, 0); /* size placeholder*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -