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

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

?? oggdec.c.svn-base

?? ffmpeg最新源碼
?? SVN-BASE
字號(hào):
/* * Ogg bitstream support * Luca Barbato <lu_zero@gentoo.org> * Based on tcvp implementation * *//**    Copyright (C) 2005  Michael Ahlberg, M?ns Rullg?rd    Permission is hereby granted, free of charge, to any person    obtaining a copy of this software and associated documentation    files (the "Software"), to deal in the Software without    restriction, including without limitation the rights to use, copy,    modify, merge, publish, distribute, sublicense, and/or sell copies    of the Software, and to permit persons to whom the Software is    furnished to do so, subject to the following conditions:    The above copyright notice and this permission notice shall be    included in all copies or substantial portions of the Software.    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER    DEALINGS IN THE SOFTWARE.**/#include <stdio.h>#include "oggdec.h"#include "avformat.h"#define MAX_PAGE_SIZE 65307#define DECODER_BUFFER_SIZE MAX_PAGE_SIZEstatic ogg_codec_t *ogg_codecs[] = {    &speex_codec,    &vorbis_codec,    &theora_codec,    &flac_codec,    &old_flac_codec,    &ogm_video_codec,    &ogm_audio_codec,    &ogm_text_codec,    &ogm_old_codec,    NULL};//FIXME We could avoid some structure duplicationstatic intogg_save (AVFormatContext * s){    ogg_t *ogg = s->priv_data;    ogg_state_t *ost =        av_malloc(sizeof (*ost) + (ogg->nstreams-1) * sizeof (*ogg->streams));    int i;    ost->pos = url_ftell (s->pb);    ost->curidx = ogg->curidx;    ost->next = ogg->state;    ost->nstreams = ogg->nstreams;    memcpy(ost->streams, ogg->streams, ogg->nstreams * sizeof(*ogg->streams));    for (i = 0; i < ogg->nstreams; i++){        ogg_stream_t *os = ogg->streams + i;        os->buf = av_malloc (os->bufsize);        memset (os->buf, 0, os->bufsize);        memcpy (os->buf, ost->streams[i].buf, os->bufpos);    }    ogg->state = ost;    return 0;}static intogg_restore (AVFormatContext * s, int discard){    ogg_t *ogg = s->priv_data;    ByteIOContext *bc = s->pb;    ogg_state_t *ost = ogg->state;    int i;    if (!ost)        return 0;    ogg->state = ost->next;    if (!discard){        for (i = 0; i < ogg->nstreams; i++)            av_free (ogg->streams[i].buf);        url_fseek (bc, ost->pos, SEEK_SET);        ogg->curidx = ost->curidx;        ogg->nstreams = ost->nstreams;        memcpy(ogg->streams, ost->streams,               ost->nstreams * sizeof(*ogg->streams));    }    av_free (ost);    return 0;}static intogg_reset (ogg_t * ogg){    int i;    for (i = 0; i < ogg->nstreams; i++){        ogg_stream_t *os = ogg->streams + i;        os->bufpos = 0;        os->pstart = 0;        os->psize = 0;        os->granule = -1;        os->lastgp = -1;        os->nsegs = 0;        os->segp = 0;    }    ogg->curidx = -1;    return 0;}static ogg_codec_t *ogg_find_codec (uint8_t * buf, int size){    int i;    for (i = 0; ogg_codecs[i]; i++)        if (size >= ogg_codecs[i]->magicsize &&            !memcmp (buf, ogg_codecs[i]->magic, ogg_codecs[i]->magicsize))            return ogg_codecs[i];    return NULL;}static intogg_find_stream (ogg_t * ogg, int serial){    int i;    for (i = 0; i < ogg->nstreams; i++)        if (ogg->streams[i].serial == serial)            return i;    return -1;}static intogg_new_stream (AVFormatContext * s, uint32_t serial){    ogg_t *ogg = s->priv_data;    int idx = ogg->nstreams++;    AVStream *st;    ogg_stream_t *os;    ogg->streams = av_realloc (ogg->streams,                               ogg->nstreams * sizeof (*ogg->streams));    memset (ogg->streams + idx, 0, sizeof (*ogg->streams));    os = ogg->streams + idx;    os->serial = serial;    os->bufsize = DECODER_BUFFER_SIZE;    os->buf = av_malloc(os->bufsize);    os->header = -1;    st = av_new_stream (s, idx);    if (!st)        return AVERROR(ENOMEM);    av_set_pts_info(st, 64, 1, 1000000);    return idx;}static intogg_new_buf(ogg_t *ogg, int idx){    ogg_stream_t *os = ogg->streams + idx;    uint8_t *nb = av_malloc(os->bufsize);    int size = os->bufpos - os->pstart;    if(os->buf){        memcpy(nb, os->buf + os->pstart, size);        av_free(os->buf);    }    os->buf = nb;    os->bufpos = size;    os->pstart = 0;    return 0;}static intogg_read_page (AVFormatContext * s, int *str){    ByteIOContext *bc = s->pb;    ogg_t *ogg = s->priv_data;    ogg_stream_t *os;    int i = 0;    int flags, nsegs;    uint64_t gp;    uint32_t serial;    uint32_t seq;    uint32_t crc;    int size, idx;    uint8_t sync[4];    int sp = 0;    if (get_buffer (bc, sync, 4) < 4)        return -1;    do{        int c;        if (sync[sp & 3] == 'O' &&            sync[(sp + 1) & 3] == 'g' &&            sync[(sp + 2) & 3] == 'g' && sync[(sp + 3) & 3] == 'S')            break;        c = url_fgetc (bc);        if (c < 0)            return -1;        sync[sp++ & 3] = c;    }while (i++ < MAX_PAGE_SIZE);    if (i >= MAX_PAGE_SIZE){        av_log (s, AV_LOG_INFO, "ogg, can't find sync word\n");        return -1;    }    if (url_fgetc (bc) != 0)      /* version */        return -1;    flags = url_fgetc (bc);    gp = get_le64 (bc);    serial = get_le32 (bc);    seq = get_le32 (bc);    crc = get_le32 (bc);    nsegs = url_fgetc (bc);    idx = ogg_find_stream (ogg, serial);    if (idx < 0){        idx = ogg_new_stream (s, serial);        if (idx < 0)            return -1;    }    os = ogg->streams + idx;    if(os->psize > 0)        ogg_new_buf(ogg, idx);    if (get_buffer (bc, os->segments, nsegs) < nsegs)        return -1;    os->nsegs = nsegs;    os->segp = 0;    size = 0;    for (i = 0; i < nsegs; i++)        size += os->segments[i];    if (flags & OGG_FLAG_CONT){        if (!os->psize){            while (os->segp < os->nsegs){                int seg = os->segments[os->segp++];                os->pstart += seg;                if (seg < 255)                  break;            }        }    }else{      os->psize = 0;    }    if (os->bufsize - os->bufpos < size){        uint8_t *nb = av_malloc (os->bufsize *= 2);        memcpy (nb, os->buf, os->bufpos);        av_free (os->buf);        os->buf = nb;    }    if (get_buffer (bc, os->buf + os->bufpos, size) < size)        return -1;    os->lastgp = os->granule;    os->bufpos += size;    os->granule = gp;    os->flags = flags;    if (str)        *str = idx;    return 0;}static intogg_packet (AVFormatContext * s, int *str, int *dstart, int *dsize){    ogg_t *ogg = s->priv_data;    int idx;    ogg_stream_t *os;    int complete = 0;    int segp = 0, psize = 0;#if 0    av_log (s, AV_LOG_DEBUG, "ogg_packet: curidx=%i\n", ogg->curidx);#endif    do{        idx = ogg->curidx;        while (idx < 0){            if (ogg_read_page (s, &idx) < 0)                return -1;        }        os = ogg->streams + idx;#if 0        av_log (s, AV_LOG_DEBUG,                "ogg_packet: idx=%d pstart=%d psize=%d segp=%d nsegs=%d\n",                idx, os->pstart, os->psize, os->segp, os->nsegs);#endif        if (!os->codec){            if (os->header < 0){                os->codec = ogg_find_codec (os->buf, os->bufpos);                if (!os->codec){                    os->header = 0;                    return 0;                }            }else{                return 0;            }        }        segp = os->segp;        psize = os->psize;        while (os->segp < os->nsegs){            int ss = os->segments[os->segp++];            os->psize += ss;            if (ss < 255){                complete = 1;                break;            }        }        if (!complete && os->segp == os->nsegs){            ogg->curidx = -1;        }    }while (!complete);#if 0    av_log (s, AV_LOG_DEBUG,            "ogg_packet: idx %i, frame size %i, start %i\n",            idx, os->psize, os->pstart);#endif    ogg->curidx = idx;    if (os->header < 0){        int hdr = os->codec->header (s, idx);        if (!hdr){          os->header = os->seq;          os->segp = segp;          os->psize = psize;          ogg->headers = 1;        }else{          os->pstart += os->psize;          os->psize = 0;        }    }    if (os->header > -1 && os->seq > os->header){        os->pflags = 0;        if (os->codec && os->codec->packet)            os->codec->packet (s, idx);        if (str)            *str = idx;        if (dstart)            *dstart = os->pstart;        if (dsize)            *dsize = os->psize;        os->pstart += os->psize;        os->psize = 0;    }    os->seq++;    if (os->segp == os->nsegs)        ogg->curidx = -1;    return 0;}static intogg_get_headers (AVFormatContext * s){    ogg_t *ogg = s->priv_data;    do{        if (ogg_packet (s, NULL, NULL, NULL) < 0)            return -1;    }while (!ogg->headers);#if 0    av_log (s, AV_LOG_DEBUG, "found headers\n");#endif    return 0;}static uint64_togg_gptopts (AVFormatContext * s, int i, uint64_t gp){    ogg_t *ogg = s->priv_data;    ogg_stream_t *os = ogg->streams + i;    uint64_t pts = AV_NOPTS_VALUE;    if(os->codec->gptopts){        pts = os->codec->gptopts(s, i, gp);    } else {        pts = gp;    }    return pts;}static intogg_get_length (AVFormatContext * s){    ogg_t *ogg = s->priv_data;    int idx = -1, i;    offset_t size, end;    if(url_is_streamed(s->pb))        return 0;// already set    if (s->duration != AV_NOPTS_VALUE)        return 0;    size = url_fsize(s->pb);    if(size < 0)        return 0;    end = size > MAX_PAGE_SIZE? size - MAX_PAGE_SIZE: size;    ogg_save (s);    url_fseek (s->pb, end, SEEK_SET);    while (!ogg_read_page (s, &i)){        if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 &&            ogg->streams[i].codec)            idx = i;    }    if (idx != -1){        s->streams[idx]->duration =            ogg_gptopts (s, idx, ogg->streams[idx].granule);    }    ogg->size = size;    ogg_restore (s, 0);    return 0;}static intogg_read_header (AVFormatContext * s, AVFormatParameters * ap){    ogg_t *ogg = s->priv_data;    ogg->curidx = -1;    //linear headers seek from start    if (ogg_get_headers (s) < 0){      return -1;    }    //linear granulepos seek from end    ogg_get_length (s);    //fill the extradata in the per codec callbacks    return 0;}static intogg_read_packet (AVFormatContext * s, AVPacket * pkt){    ogg_t *ogg;    ogg_stream_t *os;    int idx = -1;    int pstart, psize;    //Get an ogg packet    do{        if (ogg_packet (s, &idx, &pstart, &psize) < 0)            return AVERROR(EIO);    }while (idx < 0 || !s->streams[idx]);    ogg = s->priv_data;    os = ogg->streams + idx;    //Alloc a pkt    if (av_new_packet (pkt, psize) < 0)        return AVERROR(EIO);    pkt->stream_index = idx;    memcpy (pkt->data, os->buf + pstart, psize);    if (os->lastgp != -1LL){        pkt->pts = ogg_gptopts (s, idx, os->lastgp);        os->lastgp = -1;    }    pkt->flags = os->pflags;    return psize;}static intogg_read_close (AVFormatContext * s){    ogg_t *ogg = s->priv_data;    int i;    for (i = 0; i < ogg->nstreams; i++){        av_free (ogg->streams[i].buf);        av_free (ogg->streams[i].private);    }    av_free (ogg->streams);    return 0;}static int64_togg_read_timestamp (AVFormatContext * s, int stream_index, int64_t * pos_arg,                    int64_t pos_limit){    ogg_t *ogg = s->priv_data;    ByteIOContext *bc = s->pb;    int64_t pts = AV_NOPTS_VALUE;    int i;    url_fseek(bc, *pos_arg, SEEK_SET);    while (url_ftell(bc) < pos_limit && !ogg_read_page (s, &i)) {        if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 &&            ogg->streams[i].codec && i == stream_index) {            pts = ogg_gptopts(s, i, ogg->streams[i].granule);            // FIXME: this is the position of the packet after the one with above            // pts.            *pos_arg = url_ftell(bc);            break;        }    }    ogg_reset(ogg);    return pts;}static int ogg_probe(AVProbeData *p){    if (p->buf[0] == 'O' && p->buf[1] == 'g' &&        p->buf[2] == 'g' && p->buf[3] == 'S' &&        p->buf[4] == 0x0 && p->buf[5] <= 0x7 )        return AVPROBE_SCORE_MAX;    else        return 0;}AVInputFormat ogg_demuxer = {    "ogg",    NULL_IF_CONFIG_SMALL("Ogg"),    sizeof (ogg_t),    ogg_probe,    ogg_read_header,    ogg_read_packet,    ogg_read_close,    NULL,    ogg_read_timestamp,    .extensions = "ogg",};

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国精品主播一区二区在线观看 | 日韩三级免费观看| 久久蜜桃香蕉精品一区二区三区| 中文字幕的久久| 一区二区久久久| 国产一区二区调教| 色视频欧美一区二区三区| 欧美一区二区三区视频免费| 国产清纯美女被跳蛋高潮一区二区久久w | 色偷偷成人一区二区三区91| 欧美精品欧美精品系列| 26uuu成人网一区二区三区| 日韩av电影免费观看高清完整版在线观看 | 欧美日韩成人综合在线一区二区 | 精品国产123| 欧美精品丝袜久久久中文字幕| 久久久久久久久蜜桃| 午夜欧美2019年伦理| 久久99精品久久久久婷婷| 欧美一a一片一级一片| 欧美激情资源网| 欧美bbbbb| 欧美三级日本三级少妇99| 久久久精品免费网站| 一区二区三区精品在线观看| 大陆成人av片| 久久久久99精品国产片| 日韩中文字幕麻豆| 色网站国产精品| 中文字幕精品一区二区三区精品| 日韩精品久久理论片| 日本道精品一区二区三区| 国产清纯在线一区二区www| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美在线观看视频在线| 国产精品三级视频| 国产综合色视频| 日韩一二三区视频| 亚洲成人资源在线| 色噜噜夜夜夜综合网| 中文字幕亚洲不卡| 久久精品国产999大香线蕉| 欧美日韩国产一区| 亚洲乱码中文字幕综合| 成人的网站免费观看| 国产三级一区二区| 日本女优在线视频一区二区| 亚洲乱码国产乱码精品精98午夜| 成人综合在线观看| 国产亚洲精品免费| 国产精品一二二区| 久久久久久久综合| 国产美女在线精品| 久久日一线二线三线suv| 国产原创一区二区| 精品免费国产二区三区 | 欧美日韩日日摸| 亚洲主播在线播放| 欧美色视频在线| 亚洲国产精品久久人人爱蜜臀| 日本道色综合久久| 亚洲欧美日韩一区二区三区在线观看 | 日韩精品一区二区三区视频在线观看| 日本人妖一区二区| 日韩一区二区不卡| 激情综合五月婷婷| 精品黑人一区二区三区久久| 老司机精品视频在线| 久久久久久久久久久久电影 | 久久香蕉国产线看观看99| 国产在线视频精品一区| 国产日韩欧美a| 99久久久久久99| 亚洲成a人片综合在线| 欧美一级免费观看| 精品一区二区免费在线观看| 国产精品久久三| 欧美系列一区二区| 青青青伊人色综合久久| 欧美一区二区三区系列电影| 韩国一区二区三区| 欧美国产精品一区二区| 盗摄精品av一区二区三区| 亚洲视频一区在线观看| 欧美日本一道本在线视频| 日本欧美韩国一区三区| 亚洲精品在线电影| 成人av电影免费在线播放| 亚洲免费观看在线视频| 欧美在线小视频| 经典三级在线一区| 国产精品久久夜| 欧美日韩国产免费一区二区| 国产曰批免费观看久久久| 亚洲色大成网站www久久九九| 欧美日韩国产影片| 国产成人自拍网| 亚洲一二三区视频在线观看| 欧美不卡在线视频| 色综合色综合色综合| 日本不卡一区二区三区高清视频| 国产校园另类小说区| 91蜜桃网址入口| 国产伦精一区二区三区| 中文字幕一区二区三区视频| 欧美美女bb生活片| 成人午夜av在线| 青草av.久久免费一区| 国产精品女人毛片| 成人免费高清视频在线观看| 日韩av在线发布| 久久精品99国产国产精| 亚洲欧美日韩国产成人精品影院| 日韩精品一区二区在线观看| 一本一道久久a久久精品| 久久精品国产**网站演员| 亚洲国产一区二区视频| 精品国产乱码久久| 欧美日韩精品一区二区| 波多野结衣一区二区三区| 经典三级视频一区| 三级不卡在线观看| 伊人性伊人情综合网| 久久久噜噜噜久久人人看| 欧美福利一区二区| 色综合天天综合网天天狠天天| 国产美女精品人人做人人爽| 亚洲成人av在线电影| 日韩三级视频在线观看| 久久精品国产网站| 亚洲精品在线免费观看视频| proumb性欧美在线观看| 久久精品久久99精品久久| proumb性欧美在线观看| ●精品国产综合乱码久久久久 | 午夜精品久久久久久不卡8050| 国产精品麻豆视频| 久久久久久影视| 欧美一区二区在线看| 欧美日韩视频在线观看一区二区三区 | 久久精品国产一区二区三| 午夜久久久久久电影| 亚洲一区二区av电影| 亚洲精品水蜜桃| 中文字幕一区三区| 国产清纯美女被跳蛋高潮一区二区久久w| 久久影院午夜片一区| 久久综合资源网| 在线免费观看日本一区| 色综合久久综合网97色综合| 97精品国产97久久久久久久久久久久| 岛国精品一区二区| 久久女同性恋中文字幕| 欧美成人a∨高清免费观看| 日韩欧美国产成人一区二区| 欧美群妇大交群的观看方式| 欧美日韩一区视频| 7777精品伊人久久久大香线蕉| 欧美人伦禁忌dvd放荡欲情| 欧美裸体bbwbbwbbw| 777奇米四色成人影色区| 9191成人精品久久| 91精品国产黑色紧身裤美女| 51久久夜色精品国产麻豆| 欧美一级二级在线观看| 日韩视频免费直播| 精品久久久久久久久久久久久久久 | 成人黄色小视频在线观看| 成人免费观看视频| 972aa.com艺术欧美| 色94色欧美sute亚洲线路二| 欧美色视频一区| 91精品在线免费观看| 精品久久五月天| 亚洲国产精品av| 亚洲美女在线国产| 天堂蜜桃一区二区三区| 美国三级日本三级久久99| 国产精品综合久久| 99久久国产综合色|国产精品| 91电影在线观看| 欧美一级日韩一级| 国产亚洲精品bt天堂精选| 综合av第一页| 亚洲成人激情综合网| 狠狠色狠狠色综合日日91app| 成人午夜视频网站| 在线日韩一区二区| 欧美一区二区三区公司| xfplay精品久久| 国产精品麻豆欧美日韩ww| 亚洲午夜精品网| 黑人巨大精品欧美黑白配亚洲| av亚洲精华国产精华精华| 精品婷婷伊人一区三区三| 精品剧情在线观看| 日韩伦理免费电影| 日韩av中文字幕一区二区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产一区二区三区黄视频 |