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

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>
            欧美激情片在线观看| 亚洲在线1234| 久久蜜桃精品| 性做久久久久久久免费看| av成人老司机| 亚洲肉体裸体xxxx137| 久久精品一本久久99精品| 久久国产欧美| 欧美在线播放视频| 狂野欧美激情性xxxx欧美| 欧美+日本+国产+在线a∨观看| 久久青草久久| 欧美国产丝袜视频| 亚洲精品国产精品国产自| 亚洲人人精品| 亚洲男人av电影| 久久网站热最新地址| 女仆av观看一区| 欧美日韩一区高清| 国产日韩欧美在线观看| 国内伊人久久久久久网站视频 | 欧美大片免费| 最新高清无码专区| 午夜精品亚洲| 久久免费高清视频| 欧美日韩国产色视频| 国产精品亚洲综合| 亚洲日韩第九十九页| 午夜精品在线看| 亚洲二区在线视频| 亚洲欧美日韩一区在线观看| 老司机精品福利视频| 国产精品久久久久高潮| 亚洲国产岛国毛片在线| 亚洲伦理在线| 亚洲午夜国产成人av电影男同| 亚洲精品久久嫩草网站秘色| 亚洲一区精彩视频| 免费久久99精品国产自| 国产日韩精品电影| 亚洲视频一区二区免费在线观看| 久久一区二区视频| 亚洲一区二区三区在线看| 久久天堂国产精品| 国产伦精品一区二区三区在线观看 | 欧美激情性爽国产精品17p| 国产精品丝袜白浆摸在线| 亚洲精品乱码久久久久久日本蜜臀 | 99精品久久久| 免费视频一区| 黄色亚洲免费| 欧美亚洲专区| 在线亚洲高清视频| 欧美激情精品久久久久久| 红桃视频国产一区| 久久久一区二区三区| 亚洲自拍电影| 国产精品嫩草99av在线| 亚洲线精品一区二区三区八戒| 亚洲高清三级视频| 猛干欧美女孩| 亚洲美洲欧洲综合国产一区| 欧美777四色影视在线| 久久久久天天天天| 一区在线播放视频| 欧美国产日韩视频| 欧美福利电影网| 99精品热视频只有精品10| 亚洲品质自拍| 欧美日韩黄视频| 在线综合亚洲欧美在线视频| 日韩一级欧洲| 国产精品草草| 久久精品亚洲一区二区三区浴池 | 久久久久网站| 影音先锋日韩资源| 亚洲国产精彩中文乱码av在线播放| 久久gogo国模裸体人体| 狠狠综合久久av一区二区小说 | 国产最新精品精品你懂的| 久久免费视频在线观看| 久久伊伊香蕉| 一本一道久久综合狠狠老精东影业 | 久久精品视频导航| 黑人一区二区三区四区五区| 久久蜜桃av一区精品变态类天堂| 亚洲欧美在线免费| 亚洲福利国产精品| 亚洲电影免费| 欧美日韩不卡一区| 欧美一区二区日韩| 久久综合狠狠| 一区二区三区免费观看| 亚洲欧美日韩爽爽影院| 激情五月婷婷综合| 亚洲国产色一区| 国产精品免费一区二区三区观看| 米奇777超碰欧美日韩亚洲| 欧美激情第8页| 欧美一区二区在线视频| 免费在线亚洲| 久久成人一区| 欧美激情综合色| 香蕉久久夜色精品国产| 免费日韩av片| 性色av香蕉一区二区| 久久人人97超碰人人澡爱香蕉| 正在播放亚洲| 久久先锋影音| 亚洲免费视频观看| 欧美韩日一区二区| 久久在线免费| 国产精品区二区三区日本| 欧美成人精品三级在线观看| 国产精品一区二区三区久久| 亚洲黄网站黄| 国产中文一区二区| 中文欧美在线视频| 99国产精品国产精品毛片| 久久嫩草精品久久久久| 欧美在线视屏| 国产精品久久久一区麻豆最新章节| 欧美国产日韩二区| 一区福利视频| 久久久久一区二区三区| 欧美在线观看视频一区二区三区| 欧美日韩视频一区二区| 亚洲黄色精品| 最近看过的日韩成人| 久久噜噜亚洲综合| 久久国产精品72免费观看| 国产精品乱码久久久久久| 日韩一区二区精品在线观看| 亚洲精品影视在线观看| 毛片av中文字幕一区二区| 欧美14一18处毛片| 亚洲国产精品日韩| 欧美+亚洲+精品+三区| 欧美福利一区二区| 亚洲激情成人| 欧美激情一二三区| 91久久久久| 一本一本久久a久久精品综合麻豆| 欧美精品免费播放| 亚洲精选久久| 亚洲欧美久久久| 国产乱码精品| 欧美黄污视频| 亚洲区第一页| 欧美高清不卡在线| 亚洲精品少妇| 亚洲无人区一区| 欧美性大战xxxxx久久久| 一区二区三区日韩精品视频| 亚洲欧美国产另类| 国产欧美日本在线| 久久久999精品免费| 欧美激情网友自拍| 在线亚洲精品福利网址导航| 国产精品99一区| 欧美一区二区三区视频在线 | 亚洲国产精品va在线看黑人| 欧美.com| 亚洲视频一二区| 久久久欧美一区二区| 亚洲欧洲精品一区| 欧美午夜不卡在线观看免费 | 欧美久久成人| 亚洲色图自拍| 久久资源av| 一区二区三区成人精品| 国产欧美日韩精品在线| 久久婷婷国产麻豆91天堂| 亚洲精品一品区二品区三品区| 午夜精品在线| 亚洲精品欧美| 国产日韩欧美日韩大片| 免费av成人在线| 亚洲在线观看视频网站| 欧美激情按摩在线| 欧美一区二区国产| 亚洲人在线视频| 国产欧美一区二区三区视频| 久久久久女教师免费一区| 一区二区三区视频在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区日本视频| 亚洲第一网站| 国产日韩在线看| 欧美日韩中文字幕精品| 久久亚洲精品欧美| 欧美一区二区私人影院日本| 99re6热在线精品视频播放速度 | 新狼窝色av性久久久久久| 亚洲国内自拍| 免费观看亚洲视频大全| 欧美一区二区视频在线观看| 亚洲神马久久| 一本色道久久综合亚洲91| 亚洲激情校园春色|