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

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

?? qt-faststart.c

?? FFmpeg is an audio/video conversion tool. It includes libavcodec, the leading open source codec libr
?? C
字號:
/* * qt-faststart.c, v0.1 * by Mike Melanson (melanson@pcisys.net) * This file is placed in the public domain. Use the program however you * see fit. * * This utility rearranges a Quicktime file such that the moov atom * is in front of the data, thus facilitating network streaming. * * Compile this program using: *  cc qt-faststart.c -o qt-faststart * Invoke the program with: *  qt-faststart <infile.mov> <outfile.mov> * * Notes: Quicktime files can come in many configurations of top-level * atoms. This utility stipulates that the very last atom in the file needs * to be a moov atom. When given such a file, this utility will rearrange * the top-level atoms by shifting the moov atom from the back of the file * to the front, and patch the chunk offsets along the way. This utility * presently only operates on uncompressed moov atoms. */#include <stdio.h>#include <stdlib.h>#include <inttypes.h>#define BE_16(x) ((((uint8_t*)(x))[0] << 8) | ((uint8_t*)(x))[1])#define BE_32(x) ((((uint8_t*)(x))[0] << 24) | \                  (((uint8_t*)(x))[1] << 16) | \                  (((uint8_t*)(x))[2] << 8) | \                   ((uint8_t*)(x))[3])#define BE_64(x) (((uint64_t)(((uint8_t*)(x))[0]) << 56) | \                  ((uint64_t)(((uint8_t*)(x))[1]) << 48) | \                  ((uint64_t)(((uint8_t*)(x))[2]) << 40) | \                  ((uint64_t)(((uint8_t*)(x))[3]) << 32) | \                  ((uint64_t)(((uint8_t*)(x))[4]) << 24) | \                  ((uint64_t)(((uint8_t*)(x))[5]) << 16) | \                  ((uint64_t)(((uint8_t*)(x))[6]) << 8) | \                  ((uint64_t)((uint8_t*)(x))[7]))#define BE_FOURCC( ch0, ch1, ch2, ch3 )             \        ( (uint32_t)(unsigned char)(ch3) |          \        ( (uint32_t)(unsigned char)(ch2) << 8 ) |   \        ( (uint32_t)(unsigned char)(ch1) << 16 ) |  \        ( (uint32_t)(unsigned char)(ch0) << 24 ) )#define QT_ATOM BE_FOURCC/* top level atoms */#define FREE_ATOM QT_ATOM('f', 'r', 'e', 'e')#define JUNK_ATOM QT_ATOM('j', 'u', 'n', 'k')#define MDAT_ATOM QT_ATOM('m', 'd', 'a', 't')#define MOOV_ATOM QT_ATOM('m', 'o', 'o', 'v')#define PNOT_ATOM QT_ATOM('p', 'n', 'o', 't')#define SKIP_ATOM QT_ATOM('s', 'k', 'i', 'p')#define WIDE_ATOM QT_ATOM('w', 'i', 'd', 'e')#define PICT_ATOM QT_ATOM('P', 'I', 'C', 'T')#define FTYP_ATOM QT_ATOM('f', 't', 'y', 'p')#define CMOV_ATOM QT_ATOM('c', 'm', 'o', 'v')#define STCO_ATOM QT_ATOM('s', 't', 'c', 'o')#define CO64_ATOM QT_ATOM('c', 'o', '6', '4')#define ATOM_PREAMBLE_SIZE 8#define COPY_BUFFER_SIZE 1024int main(int argc, char *argv[]){    FILE *infile;    FILE *outfile;    unsigned char atom_bytes[ATOM_PREAMBLE_SIZE];    uint32_t atom_type = 0;    uint64_t atom_size;    uint64_t last_offset;    unsigned char *moov_atom;    uint64_t moov_atom_size;    uint64_t i, j;    uint32_t offset_count;    uint64_t current_offset;    unsigned char copy_buffer[COPY_BUFFER_SIZE];    int bytes_to_copy;    if (argc != 3) {        printf ("Usage: qt-faststart <infile.mov> <outfile.mov>\n");        return 0;    }    infile = fopen(argv[1], "rb");    if (!infile) {        perror(argv[1]);        return 1;    }    /* traverse through the atoms in the file to make sure that 'moov' is     * at the end */    while (!feof(infile)) {        if (fread(atom_bytes, ATOM_PREAMBLE_SIZE, 1, infile) != 1) {            break;        }        atom_size = BE_32(&atom_bytes[0]);        atom_type = BE_32(&atom_bytes[4]);        if ((atom_type != FREE_ATOM) &&            (atom_type != JUNK_ATOM) &&            (atom_type != MDAT_ATOM) &&            (atom_type != MOOV_ATOM) &&            (atom_type != PNOT_ATOM) &&            (atom_type != SKIP_ATOM) &&            (atom_type != WIDE_ATOM) &&            (atom_type != PICT_ATOM) &&            (atom_type != FTYP_ATOM)) {            printf ("encountered non-QT top-level atom (is this a Quicktime file?)\n");            break;        }        /* 64-bit special case */        if (atom_size == 1) {            if (fread(atom_bytes, ATOM_PREAMBLE_SIZE, 1, infile) != 1) {                break;            }            atom_size = BE_64(&atom_bytes[0]);            fseek(infile, atom_size - ATOM_PREAMBLE_SIZE * 2, SEEK_CUR);        } else {            fseek(infile, atom_size - ATOM_PREAMBLE_SIZE, SEEK_CUR);        }    }    if (atom_type != MOOV_ATOM) {        printf ("last atom in file was not a moov atom\n");        fclose(infile);        return 0;    }    /* moov atom was, in fact, the last atom in the chunk; load the whole     * moov atom */    fseek(infile, -atom_size, SEEK_END);    last_offset = (uint64_t)ftell(infile);    moov_atom_size = atom_size;    moov_atom = malloc(moov_atom_size);    if (!moov_atom) {        printf ("could not allocate 0x%llX byte for moov atom\n",            atom_size);        fclose(infile);        return 1;    }    if (fread(moov_atom, atom_size, 1, infile) != 1) {        perror(argv[1]);        free(moov_atom);        fclose(infile);        return 1;    }    /* this utility does not support compressed atoms yet, so disqualify     * files with compressed QT atoms */    if (BE_32(&moov_atom[12]) == CMOV_ATOM) {        printf ("this utility does not support compressed moov atoms yet\n");        free(moov_atom);        fclose(infile);        return 1;    }    /* close; will be re-opened later */    fclose(infile);    /* crawl through the moov chunk in search of stco or co64 atoms */    for (i = 4; i < moov_atom_size - 4; i++) {        atom_type = BE_32(&moov_atom[i]);        if (atom_type == STCO_ATOM) {            printf (" patching stco atom...\n");            atom_size = BE_32(&moov_atom[i - 4]);            if (i + atom_size - 4 > moov_atom_size) {                printf (" bad atom size\n");                free(moov_atom);                return 1;            }            offset_count = BE_32(&moov_atom[i + 8]);            for (j = 0; j < offset_count; j++) {                current_offset = BE_32(&moov_atom[i + 12 + j * 4]);                current_offset += moov_atom_size;                moov_atom[i + 12 + j * 4 + 0] = (current_offset >> 24) & 0xFF;                moov_atom[i + 12 + j * 4 + 1] = (current_offset >> 16) & 0xFF;                moov_atom[i + 12 + j * 4 + 2] = (current_offset >>  8) & 0xFF;                moov_atom[i + 12 + j * 4 + 3] = (current_offset >>  0) & 0xFF;            }            i += atom_size - 4;        } else if (atom_type == CO64_ATOM) {            printf (" patching co64 atom...\n");            atom_size = BE_32(&moov_atom[i - 4]);            if (i + atom_size - 4 > moov_atom_size) {                printf (" bad atom size\n");                free(moov_atom);                return 1;            }            offset_count = BE_32(&moov_atom[i + 8]);            for (j = 0; j < offset_count; j++) {                current_offset = BE_64(&moov_atom[i + 12 + j * 8]);                current_offset += moov_atom_size;                moov_atom[i + 12 + j * 8 + 0] = (current_offset >> 56) & 0xFF;                moov_atom[i + 12 + j * 8 + 1] = (current_offset >> 48) & 0xFF;                moov_atom[i + 12 + j * 8 + 2] = (current_offset >> 40) & 0xFF;                moov_atom[i + 12 + j * 8 + 3] = (current_offset >> 32) & 0xFF;                moov_atom[i + 12 + j * 8 + 4] = (current_offset >> 24) & 0xFF;                moov_atom[i + 12 + j * 8 + 5] = (current_offset >> 16) & 0xFF;                moov_atom[i + 12 + j * 8 + 6] = (current_offset >>  8) & 0xFF;                moov_atom[i + 12 + j * 8 + 7] = (current_offset >>  0) & 0xFF;            }            i += atom_size - 4;        }    }    /* re-open the input file and open the output file */    infile = fopen(argv[1], "rb");    if (!infile) {        perror(argv[1]);        free(moov_atom);        return 1;    }    outfile = fopen(argv[2], "wb");    if (!outfile) {        perror(argv[2]);        fclose(outfile);        free(moov_atom);        return 1;    }    /* dump the new moov atom */    printf (" writing moov aton...\n");    if (fwrite(moov_atom, moov_atom_size, 1, outfile) != 1) {        perror(argv[2]);        goto error_out;    }    /* copy the remainder of the infile, from offset 0 -> last_offset - 1 */    printf (" copying rest of file...\n");    while (last_offset) {        if (last_offset > COPY_BUFFER_SIZE)            bytes_to_copy = COPY_BUFFER_SIZE;        else            bytes_to_copy = last_offset;        if (fread(copy_buffer, bytes_to_copy, 1, infile) != 1) {            perror(argv[1]);            goto error_out;        }        if (fwrite(copy_buffer, bytes_to_copy, 1, outfile) != 1) {            perror(argv[2]);            goto error_out;        }        last_offset -= bytes_to_copy;    }    fclose(infile);    fclose(outfile);    free(moov_atom);    return 0;error_out:    fclose(infile);    fclose(outfile);    free(moov_atom);    return 1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区三区网站| 欧美人妇做爰xxxⅹ性高电影| 色天天综合久久久久综合片| 久久午夜免费电影| 国产露脸91国语对白| 麻豆国产欧美一区二区三区| 日韩欧美国产综合一区| 日韩成人伦理电影在线观看| 日韩欧美综合一区| 床上的激情91.| 亚洲综合在线视频| 欧美电影免费观看高清完整版在线观看| 欧美亚洲高清一区二区三区不卡| 亚洲国产日韩一区二区| 欧美一级黄色录像| 日韩欧美视频一区| 久久久久久久久久久电影| 成人的网站免费观看| 一区二区国产盗摄色噜噜| 一区二区三区鲁丝不卡| 日本不卡一区二区三区| 久久九九久久九九| 国产91富婆露脸刺激对白| 亚洲综合色视频| 久久午夜电影网| 日韩码欧中文字| 7777精品伊人久久久大香线蕉的 | 国产精品二三区| 在线播放中文字幕一区| 91麻豆精东视频| 国产精品1区2区3区| 99国产精品久久久久久久久久久| 国产一区二区在线电影| 亚洲一区二区在线观看视频| 舔着乳尖日韩一区| 一区二区三区影院| 男女性色大片免费观看一区二区| 蜜桃一区二区三区在线| 99国产精品国产精品毛片| 在线电影院国产精品| 国产无人区一区二区三区| 伊人夜夜躁av伊人久久| 久久久www免费人成精品| 亚洲人成网站精品片在线观看| 国产亚洲欧洲997久久综合| 亚洲少妇屁股交4| 免费av网站大全久久| eeuss鲁一区二区三区| 国产乱码字幕精品高清av| 91蜜桃免费观看视频| 日韩精品一区二区三区四区 | 国产精品国产精品国产专区不蜜 | 蜜桃av噜噜一区| 东方aⅴ免费观看久久av| 欧美日韩成人综合天天影院| 欧美国产亚洲另类动漫| 欧美国产精品中文字幕| 麻豆免费精品视频| 91精品办公室少妇高潮对白| jlzzjlzz亚洲日本少妇| 日韩天堂在线观看| 天天亚洲美女在线视频| 91免费看`日韩一区二区| 久久五月婷婷丁香社区| 免费av网站大全久久| 在线观看91精品国产麻豆| 性做久久久久久久免费看| 日韩福利视频网| 欧美性生活影院| 国产精品卡一卡二| 成人永久aaa| 国产精品私人影院| 一区二区欧美精品| 99re这里只有精品首页| 中文字幕欧美区| 成人性生交大片免费看视频在线 | 国产情人综合久久777777| 久久综合狠狠综合久久综合88| 日韩电影在线看| 欧美日韩免费电影| 日日噜噜夜夜狠狠视频欧美人 | 国产精品久久久久久久久久久免费看 | 亚洲男人的天堂在线观看| 高清av一区二区| 国产精品三级av在线播放| 国产91在线|亚洲| 国产欧美一区二区精品久导航| 国产一区二区三区国产| 国产欧美1区2区3区| 成人动漫中文字幕| 一区二区三区日韩欧美精品| 欧美色图天堂网| 欧美刺激脚交jootjob| 国产精品美女视频| 91在线视频观看| 亚洲电影一级片| 日韩欧美一二三| 成人av电影免费观看| 亚洲激情图片一区| 欧美一二区视频| 国产成人av一区二区三区在线观看| 99久久国产免费看| 亚洲亚洲人成综合网络| 欧美大片免费久久精品三p| 国产精品自在在线| 亚洲综合一区二区| 日韩免费观看高清完整版| 国产精品一二一区| 一区二区三区毛片| 久久久久久久综合| 日本高清视频一区二区| 久久成人久久爱| 欧美美女直播网站| 国产一区二区网址| 伊人夜夜躁av伊人久久| 日韩免费观看2025年上映的电影 | 亚洲欧美日韩中文播放| 91精选在线观看| 白白色亚洲国产精品| 天天影视涩香欲综合网| 亚洲欧洲另类国产综合| 国产大陆a不卡| 亚洲h精品动漫在线观看| 国产欧美日韩精品a在线观看| 欧美在线你懂得| 一区二区三区免费看视频| 欧美精品一区二区三区蜜臀| 麻豆精品视频在线观看| 亚洲视频在线一区观看| 26uuu久久综合| 欧美综合一区二区| 懂色av一区二区三区免费看| 亚洲成人动漫在线免费观看| 亚洲欧洲成人精品av97| 欧美电视剧免费全集观看| 欧美亚洲综合一区| www.日韩在线| 国产在线精品免费| 免费看黄色91| 亚洲小说欧美激情另类| 亚洲美女区一区| 中文字幕一区二区三区视频| 久久久亚洲精品石原莉奈| 51精品久久久久久久蜜臀| 在线观看免费成人| 欧美亚洲综合一区| 色综合一个色综合亚洲| 亚洲欧美日韩久久| 亚洲欧洲无码一区二区三区| 欧美国产精品专区| 久久综合色鬼综合色| 精品少妇一区二区三区免费观看 | 北条麻妃国产九九精品视频| 国产精品一级二级三级| 国产成人精品午夜视频免费| 国产真实乱偷精品视频免| 欧美国产激情二区三区| 国产亚洲一区字幕| 欧美经典三级视频一区二区三区| 国产三级欧美三级日产三级99| 久久综合九色综合97婷婷| 欧美精品一区二区蜜臀亚洲| 亚洲精品一区二区三区蜜桃下载| 欧美电视剧在线观看完整版| 精品国产乱码久久久久久久久| 欧美成人官网二区| 欧美精品一区二区精品网| 久久综合色之久久综合| 欧美极品少妇xxxxⅹ高跟鞋 | 欧美高清你懂得| 欧美美女网站色| 日韩欧美国产高清| 国产亚洲一本大道中文在线| 国产精品女上位| 亚洲午夜久久久久久久久电影院| 亚洲成在线观看| 麻豆91在线播放| 国产91露脸合集magnet| 91在线精品秘密一区二区| 51精品视频一区二区三区| 久久久久久久久免费| 亚洲精品大片www| 老司机一区二区| 成人黄色一级视频| 欧美精品在线视频| 国产欧美视频在线观看| 亚洲人成网站在线| 精品系列免费在线观看| 亚洲五码中文字幕| 韩国成人福利片在线播放| 成人18精品视频| 日韩一区二区三区在线视频| 久久久久久久综合狠狠综合| 一区二区在线观看视频| 久久精品国产秦先生| 99久久国产综合色|国产精品| 91精品综合久久久久久| 亚洲欧美色图小说| 国产一区二区在线免费观看| 91搞黄在线观看|