亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? movenc.c

?? arm平臺下的H264編碼和解碼源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * MOV, 3GP, MP4 encoder. * Copyright (c) 2003 Thomas Raivio. * Copyright (c) 2004 Gildas Bazin <gbazin at videolan dot org>. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "avformat.h"#include "avi.h"#include "avio.h"#undef NDEBUG#include <assert.h>#define MOV_INDEX_CLUSTER_SIZE 16384#define globalTimescale 1000#define MODE_MP4 0#define MODE_MOV 1#define MODE_3GP 2typedef struct MOVIentry {    unsigned int flags, pos, size;    unsigned int samplesInChunk;    char         key_frame;    unsigned int entries;} MOVIentry;typedef struct MOVIndex {    int         mode;    int         entry;    int         mdat_size;    int         ents_allocated;    long        timescale;    long        time;    long        trackDuration;    long        sampleCount;    long        sampleDuration;    int         hasKeyframes;    int         trackID;    AVCodecContext *enc;    int         vosLen;    uint8_t     *vosData;    MOVIentry** cluster;} MOVTrack;typedef struct {    int     mode;    long    time;    int     nb_streams;    int     mdat_written;    offset_t mdat_pos;    long    timescale;    MOVTrack tracks[MAX_STREAMS];} MOVContext;static int mov_write_esds_tag(ByteIOContext *pb, MOVTrack* track);//FIXME supprt 64bit varaint with wide placeholdersstatic int updateSize (ByteIOContext *pb, int pos){    long curpos = url_ftell(pb);    url_fseek(pb, pos, SEEK_SET);    put_be32(pb, curpos - pos); /* rewrite size */    url_fseek(pb, curpos, SEEK_SET);    return curpos - pos;}/* Chunk offset atom */static int mov_write_stco_tag(ByteIOContext *pb, MOVTrack* track){    int i;    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "stco");    put_be32(pb, 0); /* version & flags */    put_be32(pb, track->entry); /* entry count */    for (i=0; i<track->entry; i++) {        int cl = i / MOV_INDEX_CLUSTER_SIZE;        int id = i % MOV_INDEX_CLUSTER_SIZE;        put_be32(pb, track->cluster[cl][id].pos);    }    return updateSize (pb, pos);}/* Sample size atom */static int mov_write_stsz_tag(ByteIOContext *pb, MOVTrack* track){    int equalChunks = 1;    int i, j, entries = 0, tst = -1, oldtst = -1;    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "stsz");    put_be32(pb, 0); /* version & flags */    for (i=0; i<track->entry; i++) {        int cl = i / MOV_INDEX_CLUSTER_SIZE;        int id = i % MOV_INDEX_CLUSTER_SIZE;        tst = track->cluster[cl][id].size/track->cluster[cl][id].entries;        if(oldtst != -1 && tst != oldtst) {            equalChunks = 0;        }        oldtst = tst;        entries += track->cluster[cl][id].entries;    }    if (equalChunks) {        int sSize = track->cluster[0][0].size/track->cluster[0][0].entries;        put_be32(pb, sSize); // sample size         put_be32(pb, entries); // sample count    }    else {        put_be32(pb, 0); // sample size         put_be32(pb, entries); // sample count         for (i=0; i<track->entry; i++) {            int cl = i / MOV_INDEX_CLUSTER_SIZE;            int id = i % MOV_INDEX_CLUSTER_SIZE;            for ( j=0; j<track->cluster[cl][id].entries; j++) {                put_be32(pb, track->cluster[cl][id].size /                         track->cluster[cl][id].entries);            }        }    }    return updateSize (pb, pos);}/* Sample to chunk atom */static int mov_write_stsc_tag(ByteIOContext *pb, MOVTrack* track){    int index = 0, oldval = -1, i, entryPos, curpos;    int pos = url_ftell(pb);    put_be32(pb, 0); /* size */    put_tag(pb, "stsc");    put_be32(pb, 0); // version & flags     entryPos = url_ftell(pb);    put_be32(pb, track->entry); // entry count     for (i=0; i<track->entry; i++) {        int cl = i / MOV_INDEX_CLUSTER_SIZE;        int id = i % MOV_INDEX_CLUSTER_SIZE;        if(oldval != track->cluster[cl][id].samplesInChunk)        {            put_be32(pb, i+1); // first chunk             put_be32(pb, track->cluster[cl][id].samplesInChunk); // samples per chunk            put_be32(pb, 0x1); // sample description index             oldval = track->cluster[cl][id].samplesInChunk;            index++;        }    }    curpos = url_ftell(pb);    url_fseek(pb, entryPos, SEEK_SET);    put_be32(pb, index); // rewrite size     url_fseek(pb, curpos, SEEK_SET);    return updateSize (pb, pos);}/* Sync sample atom */static int mov_write_stss_tag(ByteIOContext *pb, MOVTrack* track){    long curpos;    int i, index = 0, entryPos;    int pos = url_ftell(pb);    put_be32(pb, 0); // size     put_tag(pb, "stss");    put_be32(pb, 0); // version & flags     entryPos = url_ftell(pb);    put_be32(pb, track->entry); // entry count     for (i=0; i<track->entry; i++) {        int cl = i / MOV_INDEX_CLUSTER_SIZE;        int id = i % MOV_INDEX_CLUSTER_SIZE;        if(track->cluster[cl][id].key_frame == 1) {            put_be32(pb, i+1);            index++;        }    }    curpos = url_ftell(pb);    url_fseek(pb, entryPos, SEEK_SET);    put_be32(pb, index); // rewrite size     url_fseek(pb, curpos, SEEK_SET);    return updateSize (pb, pos);}static int mov_write_damr_tag(ByteIOContext *pb){    put_be32(pb, 0x11); /* size */    put_tag(pb, "damr");    put_tag(pb, "FFMP");    put_byte(pb, 0);    put_be16(pb, 0x80); /* Mode set (all modes for AMR_NB) */    put_be16(pb, 0xa); /* Mode change period (no restriction) */    //put_be16(pb, 0x81ff); /* Mode set (all modes for AMR_NB) */    //put_be16(pb, 1); /* Mode change period (no restriction) */    return 0x11;}static int mov_write_wave_tag(ByteIOContext *pb, MOVTrack* track){    int pos = url_ftell(pb);    put_be32(pb, 0);     /* size */    put_tag(pb, "wave");    put_be32(pb, 12);    /* size */    put_tag(pb, "frma");    put_tag(pb, "mp4a");    put_be32(pb, 12);    /* size */    put_tag(pb, "mp4a");    put_be32(pb, 0);    mov_write_esds_tag(pb, track);    put_be32(pb, 12);    /* size */    put_tag(pb, "srcq");    put_be32(pb, 0x40);    put_be32(pb, 8);     /* size */    put_be32(pb, 0);     /* null tag */    return updateSize (pb, pos);}const CodecTag codec_movaudio_tags[] = {    { CODEC_ID_PCM_MULAW, MKTAG('u', 'l', 'a', 'w') },    { CODEC_ID_PCM_ALAW, MKTAG('a', 'l', 'a', 'w') },    { CODEC_ID_ADPCM_IMA_QT, MKTAG('i', 'm', 'a', '4') },    { CODEC_ID_MACE3, MKTAG('M', 'A', 'C', '3') },    { CODEC_ID_MACE6, MKTAG('M', 'A', 'C', '6') },    { CODEC_ID_AAC, MKTAG('m', 'p', '4', 'a') },    { CODEC_ID_AMR_NB, MKTAG('s', 'a', 'm', 'r') },    { CODEC_ID_PCM_S16BE, MKTAG('t', 'w', 'o', 's') },    { CODEC_ID_PCM_S16LE, MKTAG('s', 'o', 'w', 't') },    { CODEC_ID_MP3, MKTAG('.', 'm', 'p', '3') },    { 0, 0 },};static int mov_write_audio_tag(ByteIOContext *pb, MOVTrack* track){    int pos = url_ftell(pb), tag;        put_be32(pb, 0); /* size */    tag = codec_get_tag(codec_movaudio_tags, track->enc->codec_id);    // if no mac fcc found, try with Microsoft tags    if (!tag)    {	int tmp = codec_get_tag(codec_wav_tags, track->enc->codec_id);	if (tmp)	    tag = MKTAG('m', 's', ((tmp >> 8) & 0xff), (tmp & 0xff));    }    if (!tag)	put_tag(pb, "    ");    else	put_le32(pb, tag); // store it byteswapped    put_be32(pb, 0); /* Reserved */    put_be16(pb, 0); /* Reserved */    put_be16(pb, 1); /* Data-reference index, XXX  == 1 */    /* SoundDescription */    if(track->mode == MODE_MOV && track->enc->codec_id == CODEC_ID_AAC)        put_be16(pb, 1); /* Version 1 */    else        put_be16(pb, 0); /* Version 0 */    put_be16(pb, 0); /* Revision level */    put_be32(pb, 0); /* Reserved */    put_be16(pb, track->enc->channels); /* Number of channels */    /* TODO: Currently hard-coded to 16-bit, there doesn't seem                 to be a good way to get number of bits of audio */    put_be16(pb, 0x10); /* Reserved */    put_be16(pb, 0); /* compression ID (= 0) */    put_be16(pb, 0); /* packet size (= 0) */    put_be16(pb, track->timescale); /* Time scale */    put_be16(pb, 0); /* Reserved */    if(track->mode == MODE_MOV && track->enc->codec_id == CODEC_ID_AAC)    {        /* SoundDescription V1 extended info */        put_be32(pb, track->enc->frame_size); /* Samples per packet  */        put_be32(pb, 1536); /* Bytes per packet */        put_be32(pb, 2); /* Bytes per frame */        put_be32(pb, 2); /* Bytes per sample */    }    if(track->enc->codec_id == CODEC_ID_AAC) {        if( track->mode == MODE_MOV ) mov_write_wave_tag(pb, track);        else mov_write_esds_tag(pb, track);    }    if(track->enc->codec_id == CODEC_ID_AMR_NB)        mov_write_damr_tag(pb);    return updateSize (pb, pos);}static int mov_write_d263_tag(ByteIOContext *pb){    put_be32(pb, 0xf); /* size */    put_tag(pb, "d263");    put_tag(pb, "FFMP");    put_be16(pb, 0x0a);    put_byte(pb, 0);    return 0xf;}/* TODO: No idea about these values */static int mov_write_svq3_tag(ByteIOContext *pb){    put_be32(pb, 0x15);    put_tag(pb, "SMI ");    put_tag(pb, "SEQH");    put_be32(pb, 0x5);    put_be32(pb, 0xe2c0211d);    put_be32(pb, 0xc0000000);    put_byte(pb, 0);       return 0x15;}static unsigned int descrLength(unsigned int len){    if (len < 0x00000080)        return 2 + len;    else if (len < 0x00004000)        return 3 + len;    else if(len < 0x00200000)        return 4 + len;    else        return 5 + len;}static void putDescr(ByteIOContext *pb, int tag, int size){    uint32_t len;    uint8_t  vals[4];    len = size;    vals[3] = (uint8_t)(len & 0x7f);    len >>= 7;    vals[2] = (uint8_t)((len & 0x7f) | 0x80);     len >>= 7;    vals[1] = (uint8_t)((len & 0x7f) | 0x80);     len >>= 7;    vals[0] = (uint8_t)((len & 0x7f) | 0x80);    put_byte(pb, tag); // DescriptorTag    if (size < 0x00000080)    {        put_byte(pb, vals[3]);    }    else if (size < 0x00004000)    {        put_byte(pb, vals[2]);        put_byte(pb, vals[3]);    }    else if (size < 0x00200000)    {        put_byte(pb, vals[1]);        put_byte(pb, vals[2]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
处破女av一区二区| 卡一卡二国产精品| 99在线视频精品| 国产精品国产馆在线真实露脸| 国产成人在线免费| 国产精品美女久久久久aⅴ| av一区二区三区| 亚洲乱码国产乱码精品精98午夜 | 日韩免费视频线观看| 日本不卡一二三区黄网| 亚洲精品一区二区三区福利| 国产激情视频一区二区在线观看| 国产精品激情偷乱一区二区∴| 99re8在线精品视频免费播放| 亚洲精品成a人| 91精品欧美久久久久久动漫| 国产米奇在线777精品观看| 中文字幕免费在线观看视频一区| 一本大道久久a久久综合| 首页国产欧美久久| 久久久不卡影院| 色久优优欧美色久优优| 美腿丝袜亚洲综合| 国产精品美女一区二区三区| 欧美视频在线播放| 国产在线国偷精品免费看| 日韩美女久久久| 日韩欧美亚洲国产另类| 91一区一区三区| 精品一区二区三区欧美| 国产精品国产三级国产aⅴ入口 | 首页亚洲欧美制服丝腿| 国产欧美综合色| 欧美三级日本三级少妇99| 久久成人麻豆午夜电影| 亚洲精品日韩综合观看成人91| 日韩欧美久久久| 91老师国产黑色丝袜在线| 久久99久久精品| 亚洲女同女同女同女同女同69| 日韩欧美一级二级三级| 日本道精品一区二区三区| 国产在线看一区| 亚洲成a人在线观看| 一区在线观看视频| 26uuu成人网一区二区三区| 欧美日韩国产综合一区二区三区| 成人黄动漫网站免费app| 蜜臀av一区二区在线免费观看| 亚洲精品午夜久久久| 国产欧美日韩不卡免费| 欧美成人猛片aaaaaaa| 欧美性大战久久久| www..com久久爱| 国产乱色国产精品免费视频| 日本亚洲电影天堂| 亚洲图片欧美视频| 亚洲裸体xxx| 中文字幕不卡一区| 国产偷v国产偷v亚洲高清| 欧美一级片免费看| 欧美久久久一区| 欧美亚洲图片小说| 色av一区二区| 色一情一乱一乱一91av| 99re成人在线| 成年人国产精品| 99这里都是精品| 99免费精品在线观看| 风间由美一区二区三区在线观看| 久久精品国产亚洲aⅴ| 日韩电影在线观看一区| 午夜久久久久久| 亚洲va在线va天堂| 午夜精品久久久久久久99樱桃| 亚洲一区在线电影| 亚洲mv大片欧洲mv大片精品| 性久久久久久久| 丝袜脚交一区二区| 美腿丝袜亚洲一区| 国产一区999| 国产成人激情av| 99riav久久精品riav| 91亚洲精华国产精华精华液| 91视频你懂的| 在线国产亚洲欧美| 91麻豆精品国产91久久久久久 | 91网址在线看| 91福利视频在线| 欧美日韩一区二区三区四区 | 毛片av一区二区三区| 麻豆精品一区二区综合av| 精品一区二区三区在线播放| 极品少妇xxxx精品少妇| 成人影视亚洲图片在线| 91麻豆国产福利在线观看| 欧美日韩一区二区三区免费看| 91精品国产综合久久久久| 精品剧情在线观看| 国产精品久久久99| 亚洲二区在线视频| 激情综合色播五月| 波多野结衣亚洲| 欧美精品电影在线播放| 久久久久久9999| 亚洲色图丝袜美腿| 免费成人在线观看视频| 国产成人免费视频网站| 色偷偷久久人人79超碰人人澡| 欧美精品丝袜中出| 精品国产免费人成电影在线观看四季| 国产日韩影视精品| 亚洲电影一区二区三区| 极品少妇xxxx偷拍精品少妇| 色综合天天综合网天天看片| 日韩三级视频在线观看| 中文字幕在线观看不卡| 奇米综合一区二区三区精品视频| 成人性生交大合| 欧美精品精品一区| 中文字幕日韩av资源站| 久久99精品久久久久婷婷| 色婷婷亚洲精品| 国产偷国产偷亚洲高清人白洁| 午夜在线成人av| 99久久久国产精品| 欧美精品一区二区精品网| 亚洲一区二区在线视频| 成人在线综合网| 日韩免费观看高清完整版| 国产精品国产自产拍高清av王其| 日本成人在线看| 色激情天天射综合网| 欧美国产综合一区二区| 裸体健美xxxx欧美裸体表演| 99国产精品一区| 国产视频一区在线播放| 日韩有码一区二区三区| 91官网在线观看| 国产精品另类一区| 国产乱码一区二区三区| 欧美一区二区三区公司| 亚洲一区在线看| 91社区在线播放| 国产精品久久久久久久久免费丝袜| 久久国产尿小便嘘嘘尿| 7777精品伊人久久久大香线蕉完整版 | 成人午夜在线视频| 欧美成人一区二区三区| 午夜精品久久久久久久99水蜜桃| a级高清视频欧美日韩| 久久综合九色欧美综合狠狠 | 亚洲一级不卡视频| 99麻豆久久久国产精品免费| 亚洲精品在线观看网站| 男人的j进女人的j一区| 欧美日本免费一区二区三区| 亚洲一区自拍偷拍| 欧美色综合影院| 亚洲夂夂婷婷色拍ww47| 91免费看视频| 亚洲精品中文字幕乱码三区| 91亚洲精华国产精华精华液| 中文字幕日韩欧美一区二区三区| 成人av电影观看| 最新成人av在线| 91香蕉视频污| 一区二区三区在线播| 一本久久综合亚洲鲁鲁五月天| 亚洲免费在线视频| 色一情一乱一乱一91av| 亚洲一级二级在线| 欧美日韩精品一二三区| 日本中文字幕一区| 日韩免费福利电影在线观看| 久久精品国产亚洲高清剧情介绍| 精品久久久久久最新网址| 国产很黄免费观看久久| 国产精品久久久久三级| 色婷婷综合中文久久一本| 亚洲精品视频自拍| 欧美日本乱大交xxxxx| 免费观看一级欧美片| 久久久久久一级片| jvid福利写真一区二区三区| 亚洲欧洲综合另类| 欧美日韩国产欧美日美国产精品| 日韩电影在线观看网站| 久久久www免费人成精品| 成人aa视频在线观看| 亚洲第一精品在线| 久久品道一品道久久精品| 波多野结衣中文一区| 亚洲一区二区三区四区五区中文| 制服丝袜日韩国产| 国产成人精品一区二区三区四区 | 99国产欧美另类久久久精品 | 久久天天做天天爱综合色| www.日韩精品| 免费观看成人av|