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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mov.c

?? mediastreamer2是開源的網(wǎng)絡(luò)傳輸媒體流的庫
?? C
?? 第 1 頁 / 共 4 頁
字號:
{ MKTAG( 'm', 'o', 'o', 'v' ), mov_read_moov },{ MKTAG( 'm', 'v', 'h', 'd' ), mov_read_mvhd },{ MKTAG( 'S', 'M', 'I', ' ' ), mov_read_smi }, /* Sorenson extension ??? */{ MKTAG( 'a', 'l', 'a', 'c' ), mov_read_extradata }, /* alac specific atom */{ MKTAG( 'a', 'v', 'c', 'C' ), mov_read_glbl },{ MKTAG( 's', 't', 'b', 'l' ), mov_read_default },{ MKTAG( 's', 't', 'c', 'o' ), mov_read_stco },{ MKTAG( 's', 't', 's', 'c' ), mov_read_stsc },{ MKTAG( 's', 't', 's', 'd' ), mov_read_stsd }, /* sample description */{ MKTAG( 's', 't', 's', 's' ), mov_read_stss }, /* sync sample */{ MKTAG( 's', 't', 's', 'z' ), mov_read_stsz }, /* sample size */{ MKTAG( 's', 't', 't', 's' ), mov_read_stts },{ MKTAG( 't', 'k', 'h', 'd' ), mov_read_tkhd }, /* track header */{ MKTAG( 't', 'r', 'a', 'k' ), mov_read_trak },{ MKTAG( 'u', 'd', 't', 'a' ), mov_read_udta },{ MKTAG( 'w', 'a', 'v', 'e' ), mov_read_wave },{ MKTAG( 'e', 's', 'd', 's' ), mov_read_esds },{ MKTAG( 'w', 'i', 'd', 'e' ), mov_read_wide }, /* place holder */{ MKTAG( 'c', 'm', 'o', 'v' ), mov_read_cmov },{ 0, NULL }};/* XXX: is it sufficient ? */static int mov_probe(AVProbeData *p){    unsigned int offset;    uint32_t tag;    int score = 0;    /* check file header */    offset = 0;    for(;;) {        /* ignore invalid offset */        if ((offset + 8) > (unsigned int)p->buf_size)            return score;        tag = AV_RL32(p->buf + offset + 4);        switch(tag) {        /* check for obvious tags */        case MKTAG( 'j', 'P', ' ', ' ' ): /* jpeg 2000 signature */        case MKTAG( 'm', 'o', 'o', 'v' ):        case MKTAG( 'm', 'd', 'a', 't' ):        case MKTAG( 'p', 'n', 'o', 't' ): /* detect movs with preview pics like ew.mov and april.mov */        case MKTAG( 'u', 'd', 't', 'a' ): /* Packet Video PVAuthor adds this and a lot of more junk */            return AVPROBE_SCORE_MAX;        /* those are more common words, so rate then a bit less */        case MKTAG( 'e', 'd', 'i', 'w' ): /* xdcam files have reverted first tags */        case MKTAG( 'w', 'i', 'd', 'e' ):        case MKTAG( 'f', 'r', 'e', 'e' ):        case MKTAG( 'j', 'u', 'n', 'k' ):        case MKTAG( 'p', 'i', 'c', 't' ):            return AVPROBE_SCORE_MAX - 5;        case MKTAG( 'f', 't', 'y', 'p' ):        case MKTAG( 's', 'k', 'i', 'p' ):        case MKTAG( 'u', 'u', 'i', 'd' ):            offset = AV_RB32(p->buf+offset) + offset;            /* if we only find those cause probedata is too small at least rate them */            score = AVPROBE_SCORE_MAX - 50;            break;        default:            /* unrecognized tag */            return score;        }    }    return score;}static void mov_build_index(MOVContext *mov, AVStream *st){    MOVStreamContext *sc = st->priv_data;    offset_t current_offset;    int64_t current_dts = 0;    unsigned int stts_index = 0;    unsigned int stsc_index = 0;    unsigned int stss_index = 0;    unsigned int i, j, k;    if (sc->sample_sizes || st->codec->codec_type == CODEC_TYPE_VIDEO ||        sc->audio_cid == -2) {        unsigned int current_sample = 0;        unsigned int stts_sample = 0;        unsigned int keyframe, sample_size;        unsigned int distance = 0;        st->nb_frames = sc->sample_count;        for (i = 0; i < sc->chunk_count; i++) {            current_offset = sc->chunk_offsets[i];            if (stsc_index + 1 < sc->sample_to_chunk_sz &&                i + 1 == sc->sample_to_chunk[stsc_index + 1].first)                stsc_index++;            for (j = 0; j < sc->sample_to_chunk[stsc_index].count; j++) {                if (current_sample >= sc->sample_count) {                    av_log(mov->fc, AV_LOG_ERROR, "wrong sample count\n");                    goto out;                }                keyframe = !sc->keyframe_count || current_sample + 1 == sc->keyframes[stss_index];                if (keyframe) {                    distance = 0;                    if (stss_index + 1 < sc->keyframe_count)                        stss_index++;                }                sample_size = sc->sample_size > 0 ? sc->sample_size : sc->sample_sizes[current_sample];                dprintf(mov->fc, "AVIndex stream %d, sample %d, offset %"PRIx64", dts %"PRId64", "                        "size %d, distance %d, keyframe %d\n", st->index, current_sample,                        current_offset, current_dts, sample_size, distance, keyframe);                if(sc->sample_to_chunk[stsc_index].id - 1 == sc->pseudo_stream_id)                    av_add_index_entry(st, current_offset, current_dts, sample_size, distance,                                    keyframe ? AVINDEX_KEYFRAME : 0);                current_offset += sample_size;                assert(sc->stts_data[stts_index].duration % sc->time_rate == 0);                current_dts += sc->stts_data[stts_index].duration / sc->time_rate;                distance++;                stts_sample++;                current_sample++;                if (stts_index + 1 < sc->stts_count && stts_sample == sc->stts_data[stts_index].count) {                    stts_sample = 0;                    stts_index++;                }            }        }    } else { /* read whole chunk */        unsigned int chunk_samples, chunk_size, chunk_duration;        unsigned int frames = 1;        for (i = 0; i < sc->chunk_count; i++) {            current_offset = sc->chunk_offsets[i];            if (stsc_index + 1 < sc->sample_to_chunk_sz &&                i + 1 == sc->sample_to_chunk[stsc_index + 1].first)                stsc_index++;            chunk_samples = sc->sample_to_chunk[stsc_index].count;            /* get chunk size */            if (sc->sample_size > 1 ||                st->codec->codec_id == CODEC_ID_PCM_U8 || st->codec->codec_id == CODEC_ID_PCM_S8)                chunk_size = chunk_samples * sc->sample_size;            else if (sc->samples_per_frame > 0 &&                     (chunk_samples * sc->bytes_per_frame % sc->samples_per_frame == 0)) {                if (sc->samples_per_frame < 1024)                    chunk_size = chunk_samples * sc->bytes_per_frame / sc->samples_per_frame;                else {                    chunk_size = sc->bytes_per_frame;                    frames = chunk_samples / sc->samples_per_frame;                    chunk_samples = sc->samples_per_frame;                }            } else { /* workaround to find nearest next chunk offset */                chunk_size = INT_MAX;                for (j = 0; j < mov->fc->nb_streams; j++) {                    MOVStreamContext *msc = mov->fc->streams[j]->priv_data;                    for (k = msc->next_chunk; k < msc->chunk_count; k++) {                        if (msc->chunk_offsets[k] > current_offset &&                            msc->chunk_offsets[k] - current_offset < chunk_size) {                            chunk_size = msc->chunk_offsets[k] - current_offset;                            msc->next_chunk = k;                            break;                        }                    }                }                /* check for last chunk */                if (chunk_size == INT_MAX)                    for (j = 0; j < mov->mdat_count; j++) {                        dprintf(mov->fc, "mdat %d, offset %"PRIx64", size %"PRId64", current offset %"PRIx64"\n",                                j, mov->mdat_list[j].offset, mov->mdat_list[j].size, current_offset);                        if (mov->mdat_list[j].offset <= current_offset &&                            mov->mdat_list[j].offset + mov->mdat_list[j].size > current_offset)                            chunk_size = mov->mdat_list[j].offset + mov->mdat_list[j].size - current_offset;                    }                assert(chunk_size != INT_MAX);                for (j = 0; j < mov->fc->nb_streams; j++) {                    MOVStreamContext *msc = mov->fc->streams[j]->priv_data;                    msc->next_chunk = 0;                }            }            for (j = 0; j < frames; j++) {            av_add_index_entry(st, current_offset, current_dts, chunk_size, 0, AVINDEX_KEYFRAME);            /* get chunk duration */            chunk_duration = 0;            while (chunk_samples > 0) {                if (chunk_samples < sc->stts_data[stts_index].count) {                    chunk_duration += sc->stts_data[stts_index].duration * chunk_samples;                    sc->stts_data[stts_index].count -= chunk_samples;                    break;                } else {                    chunk_duration += sc->stts_data[stts_index].duration * chunk_samples;                    chunk_samples -= sc->stts_data[stts_index].count;                    if (stts_index + 1 < sc->stts_count)                        stts_index++;                }            }            current_offset += sc->bytes_per_frame;            dprintf(mov->fc, "AVIndex stream %d, chunk %d, offset %"PRIx64", dts %"PRId64", size %d, "                    "duration %d\n", st->index, i, current_offset, current_dts, chunk_size, chunk_duration);            assert(chunk_duration % sc->time_rate == 0);            current_dts += chunk_duration / sc->time_rate;            }        }    } out:    /* adjust sample count to avindex entries */    sc->sample_count = st->nb_index_entries;}static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap){    MOVContext *mov = s->priv_data;    ByteIOContext *pb = s->pb;    int i, err;    MOV_atom_t atom = { 0, 0, 0 };    mov->fc = s;    if(!url_is_streamed(pb)) /* .mov and .mp4 aren't streamable anyway (only progressive download if moov is before mdat) */        atom.size = url_fsize(pb);    else        atom.size = INT64_MAX;    /* check MOV header */    err = mov_read_default(mov, pb, atom);    if (err<0 || (!mov->found_moov && !mov->found_mdat)) {        av_log(s, AV_LOG_ERROR, "mov: header not found !!! (err:%d, moov:%d, mdat:%d) pos:%"PRId64"\n",                err, mov->found_moov, mov->found_mdat, url_ftell(pb));        return -1;    }    dprintf(mov->fc, "on_parse_exit_offset=%d\n", (int) url_ftell(pb));    for(i=0; i<s->nb_streams; i++) {        AVStream *st = s->streams[i];        MOVStreamContext *sc = st->priv_data;        /* sanity checks */        if(!sc->stts_count || !sc->chunk_count || !sc->sample_to_chunk_sz ||           (!sc->sample_size && !sc->sample_count)){            av_log(s, AV_LOG_ERROR, "missing mandatory atoms, broken header\n");            sc->sample_count = 0; //ignore track            continue;        }        if(!sc->time_rate)            sc->time_rate=1;        if(!sc->time_scale)            sc->time_scale= mov->time_scale;        av_set_pts_info(st, 64, sc->time_rate, sc->time_scale);        if (st->codec->codec_type == CODEC_TYPE_AUDIO && sc->stts_count == 1)            st->codec->frame_size = sc->stts_data[0].duration;        if(st->duration != AV_NOPTS_VALUE){            assert(st->duration % sc->time_rate == 0);            st->duration /= sc->time_rate;        }        sc->ffindex = i;        mov_build_index(mov, st);    }    for(i=0; i<s->nb_streams; i++) {        MOVStreamContext *sc = s->streams[i]->priv_data;        /* Do not need those anymore. */        av_freep(&sc->chunk_offsets);        av_freep(&sc->sample_to_chunk);        av_freep(&sc->sample_sizes);        av_freep(&sc->keyframes);        av_freep(&sc->stts_data);    }    av_freep(&mov->mdat_list);    return 0;}static int mov_read_packet(AVFormatContext *s, AVPacket *pkt){    MOVContext *mov = s->priv_data;    MOVStreamContext *sc = 0;    AVIndexEntry *sample = 0;    int64_t best_dts = INT64_MAX;    int i;    for (i = 0; i < s->nb_streams; i++) {        AVStream *st = s->streams[i];        MOVStreamContext *msc = st->priv_data;        if (st->discard != AVDISCARD_ALL && msc->current_sample < msc->sample_count) {            AVIndexEntry *current_sample = &st->index_entries[msc->current_sample];            int64_t dts = av_rescale(current_sample->timestamp * (int64_t)msc->time_rate,                                     AV_TIME_BASE, msc->time_scale);            dprintf(s, "stream %d, sample %d, dts %"PRId64"\n", i, msc->current_sample, dts);            if (!sample || (url_is_streamed(s->pb) && current_sample->pos < sample->pos) ||                (!url_is_streamed(s->pb) &&                 ((FFABS(best_dts - dts) <= AV_TIME_BASE && current_sample->pos < sample->pos) ||                  (FFABS(best_dts - dts) > AV_TIME_BASE && dts < best_dts)))) {                sample = current_sample;                best_dts = dts;                sc = msc;            }        }    }    if (!sample)        return -1;    /* must be done just before reading, to avoid infinite loop on sample */    sc->current_sample++;    if (url_fseek(s->pb, sample->pos, SEEK_SET) != sample->pos) {        av_log(mov->fc, AV_LOG_ERROR, "stream %d, offset 0x%"PRIx64": partial file\n",               sc->ffindex, sample->pos);        return -1;    }    av_get_packet(s->pb, pkt, sample->size);#ifdef CONFIG_DV_DEMUXER    if (mov->dv_demux && sc->dv_audio_container) {        dv_produce_packet(mov->dv_demux, pkt, pkt->data, pkt->size);        av_free(pkt->data);        pkt->size = 0;        if (dv_get_packet(mov->dv_demux, pkt) < 0)            return -1;    }#endif    pkt->stream_index = sc->ffindex;    pkt->dts = sample->timestamp;    if (sc->ctts_data) {        assert(sc->ctts_data[sc->sample_to_ctime_index].duration % sc->time_rate == 0);        pkt->pts = pkt->dts + sc->ctts_data[sc->sample_to_ctime_index].duration / sc->time_rate;        /* update ctts context */        sc->sample_to_ctime_sample++;        if (sc->sample_to_ctime_index < sc->ctts_count &&            sc->ctts_data[sc->sample_to_ctime_index].count == sc->sample_to_ctime_sample) {            sc->sample_to_ctime_index++;            sc->sample_to_ctime_sample = 0;        }    } else {        pkt->pts = pkt->dts;    }    pkt->flags |= sample->flags & AVINDEX_KEYFRAME ? PKT_FLAG_KEY : 0;    pkt->pos = sample->pos;    dprintf(s, "stream %d, pts %"PRId64", dts %"PRId64", pos 0x%"PRIx64", duration %d\n",            pkt->stream_index, pkt->pts, pkt->dts, pkt->pos, pkt->duration);    return 0;}static int mov_seek_stream(AVStream *st, int64_t timestamp, int flags){    MOVStreamContext *sc = st->priv_data;    int sample, time_sample;    int i;    sample = av_index_search_timestamp(st, timestamp, flags);    dprintf(st->codec, "stream %d, timestamp %"PRId64", sample %d\n", st->index, timestamp, sample);    if (sample < 0) /* not sure what to do */        return -1;    sc->current_sample = sample;    dprintf(st->codec, "stream %d, found sample %d\n", st->index, sc->current_sample);    /* adjust ctts index */    if (sc->ctts_data) {        time_sample = 0;        for (i = 0; i < sc->ctts_count; i++) {            int next = time_sample + sc->ctts_data[i].count;            if (next > sc->current_sample) {                sc->sample_to_ctime_index = i;                sc->sample_to_ctime_sample = sc->current_sample - time_sample;                break;            }            time_sample = next;        }    }    return sample;}static int mov_read_seek(AVFormatContext *s, int stream_index, int64_t sample_time, int flags){    AVStream *st;    int64_t seek_timestamp, timestamp;    int sample;    int i;    if (stream_index >= s->nb_streams)        return -1;    st = s->streams[stream_index];    sample = mov_seek_stream(st, sample_time, flags);    if (sample < 0)        return -1;    /* adjust seek timestamp to found sample timestamp */    seek_timestamp = st->index_entries[sample].timestamp;    for (i = 0; i < s->nb_streams; i++) {        st = s->streams[i];        if (stream_index == i || st->discard == AVDISCARD_ALL)            continue;        timestamp = av_rescale_q(seek_timestamp, s->streams[stream_index]->time_base, st->time_base);        mov_seek_stream(st, timestamp, flags);    }    return 0;}static int mov_read_close(AVFormatContext *s){    int i;    MOVContext *mov = s->priv_data;    for(i=0; i<s->nb_streams; i++) {        MOVStreamContext *sc = s->streams[i]->priv_data;        av_freep(&sc->ctts_data);    }    if(mov->dv_demux){        for(i=0; i<mov->dv_fctx->nb_streams; i++){            av_freep(&mov->dv_fctx->streams[i]->codec);            av_freep(&mov->dv_fctx->streams[i]);        }        av_freep(&mov->dv_fctx);        av_freep(&mov->dv_demux);    }    return 0;}AVInputFormat mov_demuxer = {    "mov,mp4,m4a,3gp,3g2,mj2",    "QuickTime/MPEG4/Motion JPEG 2000 format",    sizeof(MOVContext),    mov_probe,    mov_read_header,    mov_read_packet,    mov_read_close,    mov_read_seek,};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品福利久久久| 亚洲123区在线观看| 午夜av一区二区三区| 色综合天天做天天爱| 亚洲欧美激情一区二区| 色婷婷精品大在线视频 | 国产电影一区在线| 国产婷婷精品av在线| 成人性生交大片免费| 国产精品久久久久婷婷| 色成人在线视频| 亚洲成在人线免费| 日韩欧美一区二区三区在线| 激情另类小说区图片区视频区| 国产欧美一区二区精品性色超碰| 国产91在线看| 一级做a爱片久久| 51精品秘密在线观看| 国内精品自线一区二区三区视频| 国产精品素人一区二区| 欧美亚洲图片小说| 久久国产精品区| 国产精品丝袜一区| 欧美优质美女网站| 伦理电影国产精品| 亚洲美女精品一区| 91精品国产欧美一区二区| 国产二区国产一区在线观看| 一区二区三区四区激情| 精品剧情v国产在线观看在线| www.亚洲精品| 日本免费在线视频不卡一不卡二| 欧美极品xxx| 777久久久精品| 97精品久久久久中文字幕| 日日噜噜夜夜狠狠视频欧美人 | 国产精品家庭影院| 91麻豆精品国产| 成人免费毛片a| 日韩av电影免费观看高清完整版在线观看| 国产三级三级三级精品8ⅰ区| 欧美性大战久久久| 粉嫩13p一区二区三区| 日产国产欧美视频一区精品| 1024国产精品| 久久这里只有精品首页| 欧美日韩国产小视频在线观看| 国产91精品久久久久久久网曝门 | 国产精品久久久久7777按摩 | 色一情一乱一乱一91av| 精品一二三四区| 亚洲国产成人av网| 亚洲视频中文字幕| 欧美激情一区二区三区在线| 9191国产精品| 色成人在线视频| 97久久精品人人做人人爽50路 | 亚洲一二三四在线观看| 国产日韩欧美精品电影三级在线 | 精品久久久久久久一区二区蜜臀| 欧美在线免费观看亚洲| 成人h动漫精品一区二区| 九九九久久久精品| 奇米影视在线99精品| 亚洲嫩草精品久久| 中文字幕一区二区在线观看| 中文字幕乱码一区二区免费| 日韩欧美中文字幕公布| 欧美人成免费网站| 91电影在线观看| 一本大道久久a久久精二百 | 国产精品免费av| 国产日韩精品一区| 久久九九国产精品| 久久天天做天天爱综合色| 精品日韩在线观看| 精品免费日韩av| 欧美电视剧免费观看| 欧美久久免费观看| 欧美日韩激情在线| 欧美精品 日韩| 欧美乱妇20p| 欧美一区二区三区四区在线观看| 欧美日韩国产综合一区二区三区| 欧美日韩国产小视频| 67194成人在线观看| 91精品国产乱码| 精品久久免费看| 久久亚洲二区三区| 国产精品区一区二区三区| 国产精品区一区二区三| 亚洲免费观看高清完整版在线| 亚洲影院免费观看| 午夜精品在线看| 玖玖九九国产精品| 国产精品亚洲一区二区三区妖精| 成人性视频网站| 在线看不卡av| 日韩精品中午字幕| 国产午夜精品久久久久久免费视 | 色综合久久久久| 亚洲图片你懂的| 日韩精品一区二区三区视频| 亚洲与欧洲av电影| 天涯成人国产亚洲精品一区av| 日韩毛片精品高清免费| 成人欧美一区二区三区黑人麻豆| 中文字幕制服丝袜一区二区三区| 亚洲精品一区二区精华| 国产午夜精品福利| 中文字幕一区二区三区蜜月| 一色桃子久久精品亚洲| 一区二区三区四区国产精品| 亚洲精品自拍动漫在线| 亚洲激情在线激情| 美国毛片一区二区三区| 国产91精品精华液一区二区三区| 欧美综合亚洲图片综合区| 日韩一卡二卡三卡国产欧美| 国产精品卡一卡二| 视频一区在线播放| av毛片久久久久**hd| 91麻豆精品国产自产在线观看一区| 精品久久五月天| 亚洲精品一卡二卡| 久久国产尿小便嘘嘘| 91在线免费看| 精品欧美一区二区在线观看| 亚洲综合小说图片| 国产一区999| 欧美日韩极品在线观看一区| 国产欧美精品国产国产专区| 天天综合天天综合色| 国产精品白丝jk黑袜喷水| 欧美美女一区二区| 亚洲精品日韩一| 国产成人av在线影院| 91精品婷婷国产综合久久竹菊| 国产精品少妇自拍| 精品一区二区三区免费| 欧美中文字幕一区| 中文字幕日韩一区| 国产精品99久| 日韩视频免费观看高清完整版| 亚洲最色的网站| av电影在线观看完整版一区二区| 欧美大片国产精品| 爽好久久久欧美精品| 91蜜桃传媒精品久久久一区二区| xf在线a精品一区二区视频网站| 亚洲国产三级在线| 色综合久久久久综合| 国产精品美女久久久久久| 久久国产精品区| 日韩精品最新网址| 日本欧美韩国一区三区| 欧美日韩国产天堂| 亚洲成人av福利| 色噜噜狠狠色综合中国| 亚洲人成网站色在线观看| 从欧美一区二区三区| 国产欧美日韩另类一区| 国模套图日韩精品一区二区| 欧美一区二区三区电影| 视频一区视频二区中文| 欧美精品电影在线播放| 午夜视频一区在线观看| 欧美视频一区二| 亚洲午夜久久久| 欧美午夜电影网| 亚洲成av人片www| 91精品欧美福利在线观看| 性欧美疯狂xxxxbbbb| 欧美精品一二三区| 日韩电影在线一区二区三区| 欧美一区二区三级| 精品一区二区三区在线观看国产 | 国产伦理精品不卡| 精品久久一区二区三区| 国产精品亚洲一区二区三区妖精 | 国产一区二区三区香蕉| 久久―日本道色综合久久| 国产一区二三区| 国产精品青草久久| 91福利精品视频| 日韩国产欧美在线视频| 精品国产露脸精彩对白| 国产美女av一区二区三区| 国产精品久久久久四虎| 欧美在线你懂得| 奇米在线7777在线精品 | 国产99久久久国产精品免费看| 久久久亚洲国产美女国产盗摄 | 一区二区三区久久| 欧美精品在线一区二区| 国产一级精品在线| 一区二区三区中文字幕电影| 欧美一级在线免费| 国产激情精品久久久第一区二区 | 在线不卡免费欧美|