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

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

?? rmdec.c.svn-base

?? ffmpeg最新源碼
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
        *pos= url_ftell(pb) - 3;        if(rm->remaining_len > 0){            num= rm->current_stream;            len= rm->remaining_len;            *timestamp = AV_NOPTS_VALUE;            *flags= 0;        }else{            state= (state<<8) + get_byte(pb);            if(state == MKBETAG('I', 'N', 'D', 'X')){                len = get_be16(pb) - 6;                if(len<0)                    continue;                goto skip;            }            if(state > (unsigned)0xFFFF || state < 12)                continue;            len=state;            state= 0xFFFFFFFF;            num = get_be16(pb);            *timestamp = get_be32(pb);            res= get_byte(pb); /* reserved */            *flags = get_byte(pb); /* flags */            len -= 12;        }        for(i=0;i<s->nb_streams;i++) {            st = s->streams[i];            if (num == st->id)                break;        }        if (i == s->nb_streams) {skip:            /* skip packet if unknown number */            url_fskip(pb, len);            rm->remaining_len -= len;            continue;        }        *stream_index= i;        return len;    }    return -1;}static int rm_assemble_video_frame(AVFormatContext *s, RMContext *rm, AVPacket *pkt, int len){    ByteIOContext *pb = s->pb;    int hdr, seq, pic_num, len2, pos;    int type;    hdr = get_byte(pb); len--;    type = hdr >> 6;    switch(type){    case 0: // slice    case 2: // last slice        seq = get_byte(pb); len--;        len2 = get_num(pb, &len);        pos = get_num(pb, &len);        pic_num = get_byte(pb); len--;        rm->remaining_len = len;        break;    case 1: //whole frame        seq = get_byte(pb); len--;        if(av_new_packet(pkt, len + 9) < 0)            return AVERROR(EIO);        pkt->data[0] = 0;        AV_WL32(pkt->data + 1, 1);        AV_WL32(pkt->data + 5, 0);        get_buffer(pb, pkt->data + 9, len);        rm->remaining_len = 0;        return 0;    case 3: //frame as a part of packet        len2 = get_num(pb, &len);        pos = get_num(pb, &len);        pic_num = get_byte(pb); len--;        rm->remaining_len = len - len2;        if(av_new_packet(pkt, len2 + 9) < 0)            return AVERROR(EIO);        pkt->data[0] = 0;        AV_WL32(pkt->data + 1, 1);        AV_WL32(pkt->data + 5, 0);        get_buffer(pb, pkt->data + 9, len2);        return 0;    }    //now we have to deal with single slice    if((seq & 0x7F) == 1 || rm->curpic_num != pic_num){        rm->slices = ((hdr & 0x3F) << 1) + 1;        rm->videobufsize = len2 + 8*rm->slices + 1;        av_free(rm->videobuf);        if(!(rm->videobuf = av_malloc(rm->videobufsize)))            return AVERROR(ENOMEM);        rm->videobufpos = 8*rm->slices + 1;        rm->cur_slice = 0;        rm->curpic_num = pic_num;        rm->pktpos = url_ftell(pb);    }    if(type == 2)        len = FFMIN(len, pos);    if(++rm->cur_slice > rm->slices)        return 1;    AV_WL32(rm->videobuf - 7 + 8*rm->cur_slice, 1);    AV_WL32(rm->videobuf - 3 + 8*rm->cur_slice, rm->videobufpos - 8*rm->slices - 1);    if(rm->videobufpos + len > rm->videobufsize)        return 1;    if (get_buffer(pb, rm->videobuf + rm->videobufpos, len) != len)        return AVERROR(EIO);    rm->videobufpos += len;    rm->remaining_len-= len;    if(type == 2 || (rm->videobufpos) == rm->videobufsize){         rm->videobuf[0] = rm->cur_slice-1;         if(av_new_packet(pkt, rm->videobufpos - 8*(rm->slices - rm->cur_slice)) < 0)             return AVERROR(ENOMEM);         memcpy(pkt->data, rm->videobuf, 1 + 8*rm->cur_slice);         memcpy(pkt->data + 1 + 8*rm->cur_slice, rm->videobuf + 1 + 8*rm->slices,                rm->videobufpos - 1 - 8*rm->slices);         pkt->pts = AV_NOPTS_VALUE;         pkt->pos = rm->pktpos;         return 0;    }    return 1;}static inline voidrm_ac3_swap_bytes (AVStream *st, AVPacket *pkt){    uint8_t *ptr;    int j;    if (st->codec->codec_id == CODEC_ID_AC3) {        ptr = pkt->data;        for (j=0;j<pkt->size;j+=2) {            FFSWAP(int, ptr[0], ptr[1]);            ptr += 2;        }    }}intff_rm_parse_packet (AVFormatContext *s, AVStream *st, int len, AVPacket *pkt,                    int *seq, int *flags, int64_t *timestamp){    ByteIOContext *pb = s->pb;    RMContext *rm = s->priv_data;    if (st->codec->codec_type == CODEC_TYPE_VIDEO) {        rm->current_stream= st->id;        if(rm_assemble_video_frame(s, rm, pkt, len) == 1)            return -1; //got partial frame    } else if (st->codec->codec_type == CODEC_TYPE_AUDIO) {        if ((st->codec->codec_id == CODEC_ID_RA_288) ||            (st->codec->codec_id == CODEC_ID_COOK) ||            (st->codec->codec_id == CODEC_ID_ATRAC3)) {            int x;            int sps = rm->sub_packet_size;            int cfs = rm->coded_framesize;            int h = rm->sub_packet_h;            int y = rm->sub_packet_cnt;            int w = rm->audio_framesize;            if (*flags & 2)                y = rm->sub_packet_cnt = 0;            if (!y)                rm->audiotimestamp = *timestamp;            switch(st->codec->codec_id) {                case CODEC_ID_RA_288:                    for (x = 0; x < h/2; x++)                        get_buffer(pb, rm->audiobuf+x*2*w+y*cfs, cfs);                    break;                case CODEC_ID_ATRAC3:                case CODEC_ID_COOK:                    for (x = 0; x < w/sps; x++)                        get_buffer(pb, rm->audiobuf+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);                    break;            }            if (++(rm->sub_packet_cnt) < h)                return -1;            else {                rm->sub_packet_cnt = 0;                rm->audio_stream_num = st->index;                rm->audio_pkt_cnt = h * w / st->codec->block_align - 1;                // Release first audio packet                av_new_packet(pkt, st->codec->block_align);                memcpy(pkt->data, rm->audiobuf, st->codec->block_align);                *timestamp = rm->audiotimestamp;                *flags = 2; // Mark first packet as keyframe            }        } else if (st->codec->codec_id == CODEC_ID_AAC) {            int x;            rm->audio_stream_num = st->index;            rm->sub_packet_cnt = (get_be16(pb) & 0xf0) >> 4;            if (rm->sub_packet_cnt) {                for (x = 0; x < rm->sub_packet_cnt; x++)                    rm->sub_packet_lengths[x] = get_be16(pb);                // Release first audio packet                rm->audio_pkt_cnt = rm->sub_packet_cnt - 1;                av_get_packet(pb, pkt, rm->sub_packet_lengths[0]);                *flags = 2; // Mark first packet as keyframe            }        } else {            av_get_packet(pb, pkt, len);            rm_ac3_swap_bytes(st, pkt);        }    } else        av_get_packet(pb, pkt, len);    if(  (st->discard >= AVDISCARD_NONKEY && !(*flags&2))       || st->discard >= AVDISCARD_ALL){        av_free_packet(pkt);        return -1;    }    pkt->stream_index = st->index;#if 0    if (st->codec->codec_type == CODEC_TYPE_VIDEO) {        if(st->codec->codec_id == CODEC_ID_RV20){            int seq= 128*(pkt->data[2]&0x7F) + (pkt->data[3]>>1);            av_log(NULL, AV_LOG_DEBUG, "%d %"PRId64" %d\n", *timestamp, *timestamp*512LL/25, seq);            seq |= (*timestamp&~0x3FFF);            if(seq - *timestamp >  0x2000) seq -= 0x4000;            if(seq - *timestamp < -0x2000) seq += 0x4000;        }    }#endif    pkt->pts= *timestamp;    if (*flags & 2)        pkt->flags |= PKT_FLAG_KEY;    return 0;}voidff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt){    ByteIOContext *pb = s->pb;    RMContext *rm = s->priv_data;    assert (rm->audio_pkt_cnt > 0);    if (st->codec->codec_id == CODEC_ID_AAC)        av_get_packet(pb, pkt, rm->sub_packet_lengths[rm->sub_packet_cnt - rm->audio_pkt_cnt]);    else {        av_new_packet(pkt, st->codec->block_align);        memcpy(pkt->data, rm->audiobuf + st->codec->block_align *               (rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - rm->audio_pkt_cnt),               st->codec->block_align);    }    rm->audio_pkt_cnt--;    pkt->flags = 0;    pkt->stream_index = st->index;}static int rm_read_packet(AVFormatContext *s, AVPacket *pkt){    RMContext *rm = s->priv_data;    ByteIOContext *pb = s->pb;    AVStream *st;    int i, len;    int64_t timestamp, pos;    int flags;    if (rm->audio_pkt_cnt) {        // If there are queued audio packet return them first        st = s->streams[rm->audio_stream_num];        ff_rm_retrieve_cache(s, st, pkt);    } else if (rm->old_format) {        st = s->streams[0];        if (st->codec->codec_id == CODEC_ID_RA_288) {            int x, y;            for (y = 0; y < rm->sub_packet_h; y++)                for (x = 0; x < rm->sub_packet_h/2; x++)                    if (get_buffer(pb, rm->audiobuf+x*2*rm->audio_framesize+y*rm->coded_framesize, rm->coded_framesize) <= 0)                        return AVERROR(EIO);            rm->audio_stream_num = 0;            rm->audio_pkt_cnt = rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - 1;            // Release first audio packet            av_new_packet(pkt, st->codec->block_align);            memcpy(pkt->data, rm->audiobuf, st->codec->block_align);            pkt->flags |= PKT_FLAG_KEY; // Mark first packet as keyframe            pkt->stream_index = 0;        } else {            /* just read raw bytes */            len = RAW_PACKET_SIZE;            len= av_get_packet(pb, pkt, len);            pkt->stream_index = 0;            if (len <= 0) {                return AVERROR(EIO);            }            pkt->size = len;        }        rm_ac3_swap_bytes(st, pkt);    } else {        int seq=1;resync:        len=sync(s, &timestamp, &flags, &i, &pos);        if(len<0)            return AVERROR(EIO);        st = s->streams[i];        if (ff_rm_parse_packet (s, st, len, pkt, &seq, &flags, &timestamp) < 0)            goto resync;        if((flags&2) && (seq&0x7F) == 1)            av_add_index_entry(st, pos, timestamp, 0, 0, AVINDEX_KEYFRAME);    }    return 0;}static int rm_read_close(AVFormatContext *s){    RMContext *rm = s->priv_data;    av_free(rm->audiobuf);    av_free(rm->videobuf);    return 0;}static int rm_probe(AVProbeData *p){    /* check file header */    if ((p->buf[0] == '.' && p->buf[1] == 'R' &&         p->buf[2] == 'M' && p->buf[3] == 'F' &&         p->buf[4] == 0 && p->buf[5] == 0) ||        (p->buf[0] == '.' && p->buf[1] == 'r' &&         p->buf[2] == 'a' && p->buf[3] == 0xfd))        return AVPROBE_SCORE_MAX;    else        return 0;}static int64_t rm_read_dts(AVFormatContext *s, int stream_index,                               int64_t *ppos, int64_t pos_limit){    RMContext *rm = s->priv_data;    int64_t pos, dts;    int stream_index2, flags, len, h;    pos = *ppos;    if(rm->old_format)        return AV_NOPTS_VALUE;    url_fseek(s->pb, pos, SEEK_SET);    rm->remaining_len=0;    for(;;){        int seq=1;        AVStream *st;        len=sync(s, &dts, &flags, &stream_index2, &pos);        if(len<0)            return AV_NOPTS_VALUE;        st = s->streams[stream_index2];        if (st->codec->codec_type == CODEC_TYPE_VIDEO) {            h= get_byte(s->pb); len--;            if(!(h & 0x40)){                seq = get_byte(s->pb); len--;            }        }        if((flags&2) && (seq&0x7F) == 1){//            av_log(s, AV_LOG_DEBUG, "%d %d-%d %"PRId64" %d\n", flags, stream_index2, stream_index, dts, seq);            av_add_index_entry(st, pos, dts, 0, 0, AVINDEX_KEYFRAME);            if(stream_index2 == stream_index)                break;        }        url_fskip(s->pb, len);    }    *ppos = pos;    return dts;}AVInputFormat rm_demuxer = {    "rm",    NULL_IF_CONFIG_SMALL("RM format"),    sizeof(RMContext),    rm_probe,    rm_read_header,    rm_read_packet,    rm_read_close,    NULL,    rm_read_dts,};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频999| xf在线a精品一区二区视频网站| 成人国产精品免费观看动漫| 中文字幕欧美激情一区| 精品视频一区三区九区| 久久99精品国产.久久久久久| 欧美日韩中文另类| 国产成人免费在线| 日本中文在线一区| 亚洲色图清纯唯美| 欧美电影免费观看高清完整版| 日韩有码一区二区三区| 亚洲国产精品成人综合| 欧美一区二区三区色| 日本道精品一区二区三区 | 欧美岛国在线观看| 色婷婷av一区二区三区之一色屋| 亚洲欧美激情在线| 久久久久九九视频| 日韩一区二区三| 欧美日韩三级在线| 91老司机福利 在线| 国产丶欧美丶日本不卡视频| 久久se这里有精品| 亚洲国产sm捆绑调教视频| 亚洲三级在线免费| 中文字幕不卡三区| 国产精品网站一区| 国产欧美日产一区| 国产欧美精品一区二区色综合朱莉| 99热精品一区二区| 波多野结衣在线一区| 成人黄色电影在线| 国产成人小视频| 国产精品一级在线| 国产电影一区在线| 国产乱子轮精品视频| 久久99精品久久久久久国产越南 | 亚洲视频中文字幕| 国产精品视频麻豆| 国产欧美中文在线| 国产日韩欧美精品一区| 欧美国产亚洲另类动漫| 欧美激情自拍偷拍| 国产精品无遮挡| 中文字幕亚洲欧美在线不卡| 中文字幕一区免费在线观看| 国产精品久久99| 国产精品不卡一区| 亚洲综合色丁香婷婷六月图片| 亚洲精品在线网站| 2020日本不卡一区二区视频| 亚洲精品在线三区| 国产三级一区二区三区| 国产精品女主播av| 亚洲男人的天堂网| 午夜国产精品一区| 欧美日韩高清在线播放| 精品一区二区三区欧美| 激情丁香综合五月| 北岛玲一区二区三区四区| 99久久精品国产导航| 欧亚一区二区三区| 欧美一区日韩一区| 欧美国产日本韩| 亚洲欧美另类小说| 亚洲成人综合在线| 麻豆成人久久精品二区三区小说| 综合在线观看色| 亚洲日本在线视频观看| 午夜电影网一区| 国产精品亚洲专一区二区三区| 久久精品999| 成人深夜福利app| 欧美午夜在线观看| ww亚洲ww在线观看国产| 中文字幕综合网| 蜜臀av一区二区三区| 不卡av电影在线播放| 欧美美女黄视频| 国产日韩三级在线| 日韩中文字幕1| www.性欧美| 精品久久久久久久久久久久久久久| 欧美日韩国产另类一区| 久久影视一区二区| 亚洲狠狠爱一区二区三区| 久久精品免费看| 色综合欧美在线视频区| 日韩欧美色电影| 亚洲婷婷综合色高清在线| 免费看精品久久片| 色欧美乱欧美15图片| 久久久久久久久久久久久久久99 | 国产成人亚洲综合a∨猫咪| 色综合天天综合在线视频| 日韩精品影音先锋| 伊人色综合久久天天| 国产福利一区二区三区视频| 欧美色网一区二区| 国产精品免费视频网站| 欧美aaa在线| 日本高清不卡视频| 中文字幕不卡在线观看| 国内精品久久久久影院一蜜桃| 国产精品99久| 欧美猛男超大videosgay| 国产午夜一区二区三区| 8v天堂国产在线一区二区| 欧美丰满一区二区免费视频 | 91丨porny丨国产| 欧美不卡一二三| 日韩精品一二三| 91传媒视频在线播放| 欧美激情中文字幕| 国产一区二区剧情av在线| 欧美日韩的一区二区| 亚洲精品亚洲人成人网 | 亚洲午夜视频在线| eeuss鲁一区二区三区| 精品少妇一区二区| 日韩中文字幕1| 欧美另类变人与禽xxxxx| 亚洲综合视频在线观看| 色哟哟国产精品| 亚洲激情一二三区| 在线免费观看视频一区| 亚洲精品第1页| 色999日韩国产欧美一区二区| 5月丁香婷婷综合| 亚洲第一av色| 欧美精品777| 免费在线看成人av| 91国偷自产一区二区开放时间| 日韩欧美成人激情| 久久国产剧场电影| 久久夜色精品一区| 岛国精品在线播放| 国产精品毛片久久久久久久| 国产精品一区二区男女羞羞无遮挡| 色婷婷久久久综合中文字幕| 亚洲免费在线视频| 欧美亚洲丝袜传媒另类| 亚洲午夜精品网| 在线播放日韩导航| 精品亚洲国产成人av制服丝袜 | 亚洲欧洲制服丝袜| gogogo免费视频观看亚洲一| 国产精品久久久久婷婷| 日本丶国产丶欧美色综合| 亚洲成人在线网站| 精品乱人伦一区二区三区| 国产一区二区三区免费观看| 久久久综合视频| av在线一区二区三区| 亚洲午夜精品久久久久久久久| 不卡免费追剧大全电视剧网站| 欧美一区二区三区视频免费| 精品一区二区三区在线观看 | 国产女同互慰高潮91漫画| 成人开心网精品视频| 亚洲女女做受ⅹxx高潮| 欧美性大战久久| 美女高潮久久久| 亚洲国产精品高清| 亚洲成人午夜影院| 91在线视频官网| 一区二区三区蜜桃网| 欧美日韩高清在线播放| 国产另类ts人妖一区二区| 亚洲色图视频免费播放| 91精品国产综合久久国产大片| 国产欧美在线观看一区| 色噜噜久久综合| 美国三级日本三级久久99| 国产精品传媒视频| 欧美一区2区视频在线观看| 成人黄色在线网站| 天堂成人国产精品一区| 国产精品视频免费看| 欧美一区二区视频观看视频| 成人高清免费观看| 日韩成人精品视频| 亚洲免费在线观看| 91精品一区二区三区久久久久久| 日韩av在线发布| 欧美国产精品专区| 69堂精品视频| www.成人在线| 国内久久婷婷综合| 香蕉久久一区二区不卡无毒影院| 56国语精品自产拍在线观看| 国产精品888| 日本成人在线看| 亚洲精品免费播放| 中文字幕第一区综合| 日韩视频一区二区在线观看| 99久久免费视频.com| 国产一区二区在线观看视频| 亚洲福利电影网|