青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,長修遠,我們不能沒有錢
隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
數據加載中……

ffmpeg分析系列之五(打開輸入的文件)

1. 打開文件:

if (!fmt || !(fmt->flags & AVFMT_NOFILE)) { 

    
因 fmt == NULL, 上面成立, 再看下面的代碼:

        ByteIOContext *pb = NULL; // 字節IO上下文

        if ((err=url_fopen(&pb, filename, URL_RDONLY)) < 0) { // 只讀方式打開輸入的文件
            goto fail;
        }
        if (buf_size > 0) { // 因 buf_size == 0, 不成立
            url_setbufsize(pb, buf_size);

        }


進入url_fopen函數:

int url_fopen(ByteIOContext **s, // 輸出參數: 字節IO上下文
              const char *filename, // 文件名
              int flags) // 標志
{
    URLContext *h; // URL(統一資源定位)上下文
    int err;

    err = url_open(&h, filename, flags); // 打開URL
    if (err < 0)
        return err;
    err = url_fdopen(s, h); // 用URL上下文打開字節IO上下文
    if (err < 0) {
        url_close(h);
        return err;
    }
    return 0;
}


進入url_open函數:

int url_open(URLContext **puc, // 輸出參數: URL上下文

const char *filename, // 文件名

int flags) // 標志

{
    URLProtocol *up;
    const char *p;
    char proto_str[128], *q;

    // 提取協議
    p = filename;
    q = proto_str;
    while (*!= '\0' && *!= ':') { // 未結束, 并未遇到分隔符':'
        if (!isalpha(*p)) // 如果不是英文字母
            goto file_proto;
        if ((- proto_str) < sizeof(proto_str) - 1)
            *q++ = *p; // 記錄協議字符串
        p++;
    }

    if (*== '\0' || is_dos_path(filename)) { // 如果上面是因為結束而跳出, 或且
文件名是DOS路徑

    file_proto:
        strcpy(proto_str, "file"); // 文件協議
    } else {
        *= '\0'; // 追加結束符
    }

    up = first_protocol;
    while (up != NULL) {
        if (!strcmp(proto_str, up->name)) // 協議匹配
            return url_open_protocol (puc, up, filename, flags); // 用這個協議打開URL
        up = up->next;
    }
    *puc = NULL;
    return AVERROR(ENOENT);
}


進入url_open_protocol函數:

int url_open_protocol (URLContext **puc, // 輸出參數: URL上下文

struct URLProtocol *up, // URL協議

const char *filename, // 文件名

int flags// 標志
{
    URLContext *uc;
    int err;

    // 網絡初始化
#if CONFIG_NETWORK
    if (!ff_network_init())
        return AVERROR(EIO);
#endif

    // 分配URL上下文并加上文件名的存儲空間
    uc = av_mallocz(sizeof(URLContext) + strlen(filename) + 1);
    if (!uc) {
        err = AVERROR(ENOMEM);
        goto fail;
    }

    // 初始化URL上下文
#if LIBAVFORMAT_VERSION_MAJOR >= 53
    uc->av_class = &urlcontext_class;
#endif

    // 記錄文件名
    uc->filename = (char *) &uc[1];
    strcpy(uc->filename, filename);
 
    uc->prot = up
// URL協議

    uc->flags = flags// 標志
    uc->is_streamed = 0// 默認不是流, 可以在up->url_open函數里修改
    uc->max_packet_size = 0; // 
包最大多大, 默認為0, 可以在up->url_open函數里修改

    // 打開URL
    err = up->url_open(uc, filename, flags);
    if (err < 0) {
        av_free(uc);
        goto fail;
    }

 

    if( (flags & (URL_WRONLY | URL_RDWR)// 如果以可寫方式打開

       || !strcmp(up->name, "file")// 或且是文件協議

         // 如果不是流并且不可以url_seek

        if(!uc->is_streamed && url_seek(uc, 0, SEEK_SET) < 0)
            uc->is_streamed= 1
// 強制為流

    // 輸出
參數: URL上下文

    *puc = uc;
    return 0;
 fail:
    *puc = NULL;
#if CONFIG_NETWORK
    ff_network_close();
#endif
    return err;
}


先來看看url_get_max_packet_size函數

int url_get_max_packet_size(URLContext *h)
{
    return h->max_packet_size; // 包最大多大, 被上面初始化為0
}


進入url_fdopen函數:

int url_fdopen(

ByteIOContext **s, // 輸出參數: 字節IO上下文

URLContext *h// URL上下文
{
    uint8_t *buffer;
    int buffer_size, max_packet_size;

    max_packet_size = url_get_max_packet_size(h);
    if (max_packet_size) {
        buffer_size = max_packet_size;
    } else {
        buffer_size = IO_BUFFER_SIZE; // 緩沖大小為IO_BUFFER_SIZE
    }
    buffer = av_malloc(buffer_size); // 分配緩沖
    if (!buffer)
        return AVERROR(ENOMEM);

    *= av_mallocz(sizeof(ByteIOContext)); // 分配字節IO上下文

    if(!*s) {
        av_free(buffer);
        return AVERROR(ENOMEM);
    }

    if (init_put_byte(*s, buffer, buffer_size,
                      (h->flags & URL_WRONLY || h->flags & URL_RDWR), h,
                      url_read, url_write, url_seek) < 0) {
        av_free(buffer);
        av_freep(s);
        return AVERROR(EIO);
    }
    (*s)->is_streamed = h->is_streamed// 是否為流
    (*s)->max_packet_size = max_packet_size// 包最大多大
    if(h->prot) {
        (*s)->read_pause = (int (*)(void *, int))h->prot->url_read_pause; // 讀暫停函數
        (*s)->read_seek = (int64_t (*)(void *, int, int64_t, int))h->prot->url_read_seek; // 讀seek函數
    }
    return 0;
}


進入init_put_byte函數:

int init_put_byte(ByteIOContext *s, // 字節IO上下文
                  unsigned char *buffer, // 緩沖
                  int buffer_size, // 緩沖的大小
                  int write_flag, // 寫標志
                  void *opaque, // URL上下文
                  int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), // 讀包
                  int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),// 寫包
                  int64_t (*seek)(void *opaque, int64_t offset, int whence)) // 調整文件指針
{
    s->buffer = buffer;
    s->buffer_size = buffer_size;
    s->buf_ptr = buffer;
    s->opaque = opaque;
    url_resetbuf(s, write_flag ? URL_WRONLY : URL_RDONLY);
    s->write_packet = write_packet;
    s->read_packet = read_packet;
    s->seek = seek;
    s->pos = 0;
    s->must_flush = 0;
    s->eof_reached = 0;
    s->error = 0;
    s->is_streamed = 0;
    s->max_packet_size = 0;
    s->update_checksum= NULL;
    if(!read_packet && !write_flag){
        s->pos = buffer_size;
        s->buf_end = s->buffer + buffer_size;
    }
    s->read_pause = NULL;
    s->read_seek = NULL;
    return 0;
}

@import url(http://m.shnenglu.com/cutesoft_client/cuteeditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

posted on 2012-12-14 01:34 Khan 閱讀(1190) 評論(0)  編輯 收藏 引用 所屬分類: GCC/G++跨平臺開發

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一区二区三区高清在线观看 | 欧美在线观看网站| 亚洲欧洲在线一区| 久久综合中文色婷婷| 久久精品视频在线| 欧美大胆a视频| 亚洲精品一区二区三区福利| 日韩午夜av电影| 亚洲一区二区三区在线观看视频| 亚洲欧美一级二级三级| 久久精品成人一区二区三区 | 亚洲午夜一区二区| 一区二区精品在线| 亚洲免费在线播放| 久久久成人网| 欧美精品一区二区三区在线看午夜 | 日韩视频一区二区在线观看| 一区二区久久| 久久不射电影网| 欧美精品一区二区三区四区| 欧美精品一区二区三区在线播放 | 亚洲国产欧美一区二区三区久久| 一区在线影院| 亚洲精品久久久久久一区二区 | 午夜欧美大尺度福利影院在线看 | 99人久久精品视频最新地址| 国产精品a级| 久久亚洲欧美| 欧美日韩国产色站一区二区三区| 国产日韩欧美不卡| 亚洲乱码精品一二三四区日韩在线 | 精品粉嫩aⅴ一区二区三区四区| 亚洲精品国产精品国产自| 亚洲影视综合| 亚洲国产成人av在线| 午夜精品成人在线| 欧美日韩亚洲一区二区三区在线| 激情欧美日韩一区| 欧美一区二区三区在线| 日韩亚洲欧美成人| 久久中文字幕导航| 一区一区视频| 久久久久一本一区二区青青蜜月| 日韩亚洲精品在线| 欧美激情一区二区三区蜜桃视频| 激情欧美一区| 久久视频在线免费观看| 欧美高清在线一区二区| 亚洲中午字幕| 欧美激情日韩| 亚洲国产导航| 久久夜色精品国产欧美乱| 亚洲视频在线二区| 欧美日韩国产综合久久| 亚洲精品久久久久中文字幕欢迎你 | 在线免费观看一区二区三区| 亚洲欧美日韩综合国产aⅴ| 亚洲一区二区精品在线| 欧美成人有码| 亚洲国产精品视频一区| 久久这里只有精品视频首页| 午夜精品久久久久久久久久久久| 欧美视频日韩视频在线观看| 一本到高清视频免费精品| 欧美激情视频在线播放| 快播亚洲色图| 亚洲精选大片| 亚洲精品之草原avav久久| 欧美一区二区视频免费观看| 亚洲视频久久| 国产麻豆精品久久一二三| 香蕉久久久久久久av网站| 亚洲欧美日韩国产综合精品二区| 国产精品美女视频网站| 欧美一级在线视频| 久久精品国产一区二区三区免费看| 国产日韩欧美夫妻视频在线观看| 亚洲高清在线观看| 一区免费观看| 欧美激情欧美激情在线五月| 欧美成人精品影院| 宅男66日本亚洲欧美视频| 亚洲一区二区视频在线| 黑人巨大精品欧美黑白配亚洲| 亚洲欧洲在线视频| 久久久之久亚州精品露出| 欧美一区二区视频在线| 激情六月婷婷久久| 男女视频一区二区| 农村妇女精品| 亚洲婷婷综合色高清在线| 午夜久久久久久久久久一区二区| 韩国欧美一区| 日韩亚洲欧美综合| 国产日韩综合| 亚洲国产精品第一区二区| 国产精品va在线| 久久一二三四| 欧美日韩中文字幕| 久久一区二区视频| 欧美日韩大陆在线| 久久视频在线免费观看| 亚洲国产天堂久久综合| 欧美成人午夜激情在线| 欧美夫妇交换俱乐部在线观看| 亚洲精品日本| 亚洲最新在线| 亚洲国产欧美另类丝袜| 亚洲一区二区三区免费观看 | 亚洲精品小视频在线观看| 亚洲一区二区三区视频| 91久久嫩草影院一区二区| 午夜国产不卡在线观看视频| 亚洲另类在线视频| 久久在线免费观看| 久久久久成人精品| 欧美日韩中文在线| 亚洲高清在线精品| 精品白丝av| 欧美亚洲一区二区在线| 亚洲一区二区三区在线视频| 欧美成人一区二区三区在线观看| 国产精品美女主播| 久久久91精品国产| 亚洲综合日韩| 免费在线成人| 国产美女精品人人做人人爽| 亚洲精品美女在线| 亚洲精品日韩精品| 久色婷婷小香蕉久久| 久久久久久久高潮| 国产一区二区三区高清| 亚洲欧美国产制服动漫| 亚洲综合色网站| 国产精品成人国产乱一区| 亚洲免费黄色| 亚洲手机成人高清视频| 欧美日本亚洲视频| 99re66热这里只有精品3直播| 亚洲日本欧美在线| 欧美国产精品日韩| 日韩午夜黄色| 亚洲欧美综合v| 国产精品永久免费视频| 亚洲欧美视频一区| 久久久午夜精品| 午夜精品免费视频| 亚洲人成网站777色婷婷| 欧美一区二区精品久久911| 欧美一区二区三区免费大片| 国产精品尤物福利片在线观看| 亚洲视频在线免费观看| 欧美在线观看一二区| 国产精品一区二区在线观看不卡| 亚洲自拍偷拍福利| 久久青草久久| 亚洲精品综合精品自拍| 欧美视频在线免费| 午夜日韩在线| 欧美激情乱人伦| 亚洲一区久久久| 国产在线精品一区二区中文| 另类专区欧美制服同性| 亚洲精品国产无天堂网2021| 亚洲欧美日韩系列| 伊人久久久大香线蕉综合直播| 欧美国产精品劲爆| 久久只有精品| 99国产欧美久久久精品| 久久精品人人做人人综合 | 亚洲国产天堂久久国产91| 一区二区三区不卡视频在线观看 | 日韩视频精品| 国产欧美一区二区精品忘忧草| 久久免费的精品国产v∧| 日韩视频精品在线| 开元免费观看欧美电视剧网站| 亚洲免费不卡| 狠狠做深爱婷婷久久综合一区| 亚洲第一视频网站| 欧美在线亚洲| 一区二区三区精品国产| 樱桃成人精品视频在线播放| 国产精品成人在线| 牛牛精品成人免费视频| 亚洲欧美中文字幕| 9i看片成人免费高清| 伊人春色精品| 国产伦精品一区二区三区在线观看| 欧美sm视频| 久久久噜久噜久久综合| 亚洲午夜影视影院在线观看| 亚洲第一视频| 老巨人导航500精品| 午夜久久影院| 这里只有视频精品| 亚洲精品综合精品自拍| 亚洲国产精品嫩草影院| 在线播放日韩欧美| 国产精品人人做人人爽人人添 |