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

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

?? muxers.c

?? 絕對好的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/***************************************************************************** * muxers.c: h264 file i/o plugins ***************************************************************************** * Copyright (C) 2003-2006 x264 project * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************/#define _LARGEFILE_SOURCE#define _FILE_OFFSET_BITS 64#include <stdio.h>#include <string.h>#include <sys/types.h>#include "common/common.h"#include "x264.h"#include "matroska.h"#include "muxers.h"#ifndef _MSC_VER#include "config.h"#endif#ifdef AVIS_INPUT#include <windows.h>#include <vfw.h>#endif#ifdef MP4_OUTPUT#include <gpac/isomedia.h>#endiftypedef struct {    FILE *fh;    int width, height;    int next_frame;} yuv_input_t;/* raw 420 yuv file operation */int open_file_yuv( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param ){    yuv_input_t *h = malloc(sizeof(yuv_input_t));    h->width = p_param->i_width;    h->height = p_param->i_height;    h->next_frame = 0;    if( !strcmp(psz_filename, "-") )        h->fh = stdin;    else        h->fh = fopen(psz_filename, "rb");    if( h->fh == NULL )        return -1;    *p_handle = (hnd_t)h;    return 0;}int get_frame_total_yuv( hnd_t handle ){    yuv_input_t *h = handle;    int i_frame_total = 0;    if( !fseek( h->fh, 0, SEEK_END ) )    {        uint64_t i_size = ftell( h->fh );        fseek( h->fh, 0, SEEK_SET );        i_frame_total = (int)(i_size / ( h->width * h->height * 3 / 2 ));    }    return i_frame_total;}int read_frame_yuv( x264_picture_t *p_pic, hnd_t handle, int i_frame ){    yuv_input_t *h = handle;    if( i_frame != h->next_frame )        if( fseek( h->fh, (uint64_t)i_frame * h->width * h->height * 3 / 2, SEEK_SET ) )            return -1;    if( fread( p_pic->img.plane[0], 1, h->width * h->height, h->fh ) <= 0            || fread( p_pic->img.plane[1], 1, h->width * h->height / 4, h->fh ) <= 0            || fread( p_pic->img.plane[2], 1, h->width * h->height / 4, h->fh ) <= 0 )        return -1;    h->next_frame = i_frame+1;    return 0;}int close_file_yuv(hnd_t handle){    yuv_input_t *h = handle;    if( !h || !h->fh )        return 0;    return fclose(h->fh);}/* YUV4MPEG2 raw 420 yuv file operation */typedef struct {    FILE *fh;    int width, height;    int next_frame;    int seq_header_len, frame_header_len;    int frame_size;} y4m_input_t;#define Y4M_MAGIC "YUV4MPEG2"#define MAX_YUV4_HEADER 80#define Y4M_FRAME_MAGIC "FRAME"#define MAX_FRAME_HEADER 80int open_file_y4m( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param ){    int  i, n, d;    int  interlaced;    char header[MAX_YUV4_HEADER+10];    char *tokstart, *tokend, *header_end;    y4m_input_t *h = malloc(sizeof(y4m_input_t));    h->next_frame = 0;    if( !strcmp(psz_filename, "-") )        h->fh = stdin;    else        h->fh = fopen(psz_filename, "rb");    if( h->fh == NULL )        return -1;    h->frame_header_len = strlen(Y4M_FRAME_MAGIC)+1;    /* Read header */    for( i=0; i<MAX_YUV4_HEADER; i++ )    {        header[i] = fgetc(h->fh);        if( header[i] == '\n' )        {            /* Add a space after last option. Makes parsing "444" vs               "444alpha" easier. */            header[i+1] = 0x20;            header[i+2] = 0;            break;        }    }    if( i == MAX_YUV4_HEADER || strncmp(header, Y4M_MAGIC, strlen(Y4M_MAGIC)) )        return -1;    /* Scan properties */    header_end = &header[i+1]; /* Include space */    h->seq_header_len = i+1;    for( tokstart = &header[strlen(Y4M_MAGIC)+1]; tokstart < header_end; tokstart++ )    {        if(*tokstart==0x20) continue;        switch(*tokstart++)        {        case 'W': /* Width. Required. */            h->width = p_param->i_width = strtol(tokstart, &tokend, 10);            tokstart=tokend;            break;        case 'H': /* Height. Required. */            h->height = p_param->i_height = strtol(tokstart, &tokend, 10);            tokstart=tokend;            break;        case 'C': /* Color space */            if( strncmp("420", tokstart, 3) )            {                fprintf(stderr, "Colorspace unhandled\n");                return -1;            }            tokstart = strchr(tokstart, 0x20);            break;        case 'I': /* Interlace type */            switch(*tokstart++)            {            case 'p': interlaced = 0; break;            case '?':            case 't':            case 'b':            case 'm':            default: interlaced = 1;                fprintf(stderr, "Warning, this sequence might be interlaced\n");            }            break;        case 'F': /* Frame rate - 0:0 if unknown */            if( sscanf(tokstart, "%d:%d", &n, &d) == 2 && n && d )            {                x264_reduce_fraction( &n, &d );                p_param->i_fps_num = n;                p_param->i_fps_den = d;            }            tokstart = strchr(tokstart, 0x20);            break;        case 'A': /* Pixel aspect - 0:0 if unknown */            if( sscanf(tokstart, "%d:%d", &n, &d) == 2 && n && d )            {                x264_reduce_fraction( &n, &d );                p_param->vui.i_sar_width = n;                p_param->vui.i_sar_height = d;            }            tokstart = strchr(tokstart, 0x20);            break;        case 'X': /* Vendor extensions */            if( !strncmp("YSCSS=",tokstart,6) )            {                /* Older nonstandard pixel format representation */                tokstart += 6;                if( strncmp("420JPEG",tokstart,7) &&                    strncmp("420MPEG2",tokstart,8) &&                    strncmp("420PALDV",tokstart,8) )                {                    fprintf(stderr, "Unsupported extended colorspace\n");                    return -1;                }            }            tokstart = strchr(tokstart, 0x20);            break;        }    }    fprintf(stderr, "yuv4mpeg: %ix%i@%i/%ifps, %i:%i\n",            h->width, h->height, p_param->i_fps_num, p_param->i_fps_den,            p_param->vui.i_sar_width, p_param->vui.i_sar_height);    *p_handle = (hnd_t)h;    return 0;}/* Most common case: frame_header = "FRAME" */int get_frame_total_y4m( hnd_t handle ){    y4m_input_t *h             = handle;    int          i_frame_total = 0;    off_t        init_pos      = ftell(h->fh);    if( !fseek( h->fh, 0, SEEK_END ) )    {        uint64_t i_size = ftell( h->fh );        fseek( h->fh, init_pos, SEEK_SET );        i_frame_total = (int)((i_size - h->seq_header_len) /                              (3*(h->width*h->height)/2+h->frame_header_len));    }    return i_frame_total;}int read_frame_y4m( x264_picture_t *p_pic, hnd_t handle, int i_frame ){    int          slen = strlen(Y4M_FRAME_MAGIC);    int          i    = 0;    char         header[16];    y4m_input_t *h    = handle;    if( i_frame != h->next_frame )    {        if (fseek(h->fh, (uint64_t)i_frame*(3*(h->width*h->height)/2+h->frame_header_len)                  + h->seq_header_len, SEEK_SET))            return -1;    }    /* Read frame header - without terminating '\n' */    if (fread(header, 1, slen, h->fh) != slen)        return -1;        header[slen] = 0;    if (strncmp(header, Y4M_FRAME_MAGIC, slen))    {        fprintf(stderr, "Bad header magic (%08X <=> %s)\n",                *((uint32_t*)header), header);        return -1;    }      /* Skip most of it */    while (i<MAX_FRAME_HEADER && fgetc(h->fh) != '\n')        i++;    if (i == MAX_FRAME_HEADER)    {        fprintf(stderr, "Bad frame header!\n");        return -1;    }    h->frame_header_len = i+slen+1;    if( fread(p_pic->img.plane[0], 1, h->width*h->height, h->fh) <= 0        || fread(p_pic->img.plane[1], 1, h->width * h->height / 4, h->fh) <= 0        || fread(p_pic->img.plane[2], 1, h->width * h->height / 4, h->fh) <= 0)        return -1;    h->next_frame = i_frame+1;    return 0;}int close_file_y4m(hnd_t handle){    y4m_input_t *h = handle;    if( !h || !h->fh )        return 0;    return fclose(h->fh);}/* avs/avi input file support under cygwin */#ifdef AVIS_INPUTtypedef struct {    PAVISTREAM p_avi;    int width, height;} avis_input_t;int gcd(int a, int b){    int c;    while (1)    {        c = a % b;        if (!c)            return b;        a = b;        b = c;    }}int open_file_avis( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param ){    avis_input_t *h = malloc(sizeof(avis_input_t));    AVISTREAMINFO info;    int i;    *p_handle = (hnd_t)h;    AVIFileInit();    if( AVIStreamOpenFromFile( &h->p_avi, psz_filename, streamtypeVIDEO, 0, OF_READ, NULL ) )    {        AVIFileExit();        return -1;    }    if( AVIStreamInfo(h->p_avi, &info, sizeof(AVISTREAMINFO)) )    {        AVIStreamRelease(h->p_avi);        AVIFileExit();        return -1;    }    // check input format    if (info.fccHandler != MAKEFOURCC('Y', 'V', '1', '2'))    {        fprintf( stderr, "avis [error]: unsupported input format (%c%c%c%c)\n",            (char)(info.fccHandler & 0xff), (char)((info.fccHandler >> 8) & 0xff),            (char)((info.fccHandler >> 16) & 0xff), (char)((info.fccHandler >> 24)) );        AVIStreamRelease(h->p_avi);        AVIFileExit();        return -1;    }    h->width =    p_param->i_width = info.rcFrame.right - info.rcFrame.left;    h->height =    p_param->i_height = info.rcFrame.bottom - info.rcFrame.top;    i = gcd(info.dwRate, info.dwScale);    p_param->i_fps_den = info.dwScale / i;    p_param->i_fps_num = info.dwRate / i;    fprintf( stderr, "avis [info]: %dx%d @ %.2f fps (%d frames)\n",        p_param->i_width, p_param->i_height,        (double)p_param->i_fps_num / (double)p_param->i_fps_den,        (int)info.dwLength );    return 0;}int get_frame_total_avis( hnd_t handle ){    avis_input_t *h = handle;    AVISTREAMINFO info;    if( AVIStreamInfo(h->p_avi, &info, sizeof(AVISTREAMINFO)) )        return -1;    return info.dwLength;}int read_frame_avis( x264_picture_t *p_pic, hnd_t handle, int i_frame ){    avis_input_t *h = handle;    p_pic->img.i_csp = X264_CSP_YV12;    if( AVIStreamRead(h->p_avi, i_frame, 1, p_pic->img.plane[0], h->width * h->height * 3 / 2, NULL, NULL ) )        return -1;    return 0;}int close_file_avis( hnd_t handle ){    avis_input_t *h = handle;    AVIStreamRelease(h->p_avi);    AVIFileExit();    free(h);    return 0;}#endif#ifdef HAVE_PTHREADtypedef struct {    int (*p_read_frame)( x264_picture_t *p_pic, hnd_t handle, int i_frame );    int (*p_close_infile)( hnd_t handle );    hnd_t p_handle;    x264_picture_t pic;    pthread_t tid;    int next_frame;    int frame_total;    struct thread_input_arg_t *next_args;} thread_input_t;typedef struct thread_input_arg_t {    thread_input_t *h;    x264_picture_t *pic;    int i_frame;    int status;} thread_input_arg_t;int open_file_thread( char *psz_filename, hnd_t *p_handle, x264_param_t *p_param ){    thread_input_t *h = malloc(sizeof(thread_input_t));    x264_picture_alloc( &h->pic, X264_CSP_I420, p_param->i_width, p_param->i_height );    h->p_read_frame = p_read_frame;    h->p_close_infile = p_close_infile;    h->p_handle = *p_handle;    h->next_frame = -1;    h->next_args = malloc(sizeof(thread_input_arg_t));    h->next_args->h = h;    h->next_args->status = 0;    h->frame_total = p_get_frame_total( h->p_handle );    *p_handle = (hnd_t)h;    return 0;}int get_frame_total_thread( hnd_t handle ){    thread_input_t *h = handle;    return h->frame_total;}void read_frame_thread_int( thread_input_arg_t *i ){    i->status = i->h->p_read_frame( i->pic, i->h->p_handle, i->i_frame );}int read_frame_thread( x264_picture_t *p_pic, hnd_t handle, int i_frame ){    thread_input_t *h = handle;    UNUSED void *stuff;    int ret = 0;    if( h->next_frame >= 0 )    {        pthread_join( h->tid, &stuff );        ret |= h->next_args->status;    }    if( h->next_frame == i_frame )    {        XCHG( x264_picture_t, *p_pic, h->pic );    }    else    {        ret |= h->p_read_frame( p_pic, h->p_handle, i_frame );    }    if( !h->frame_total || i_frame+1 < h->frame_total )    {        h->next_frame =        h->next_args->i_frame = i_frame+1;        h->next_args->pic = &h->pic;        pthread_create( &h->tid, NULL, (void*)read_frame_thread_int, h->next_args );    }    else        h->next_frame = -1;    return ret;}int close_file_thread( hnd_t handle ){    thread_input_t *h = handle;    h->p_close_infile( h->p_handle );    x264_picture_clean( &h->pic );    free( h );

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区免费大片 | 国产成人精品一区二区三区四区 | 国产精品美女视频| 亚洲人亚洲人成电影网站色| 亚洲日本韩国一区| 日韩电影免费在线观看网站| 精品一区二区在线视频| 北岛玲一区二区三区四区| 欧美三级电影网| 欧美zozo另类异族| 一区二区三区在线播| 麻豆精品一区二区综合av| 不卡视频一二三四| 4438成人网| 国产精品久久免费看| 婷婷国产在线综合| av电影在线不卡| 7777精品伊人久久久大香线蕉经典版下载 | 色婷婷精品久久二区二区蜜臂av| 制服丝袜成人动漫| 国产精品丝袜久久久久久app| 亚洲一区二区三区影院| 懂色av一区二区三区免费看| 欧美乱熟臀69xxxxxx| 国产精品日韩成人| 日韩**一区毛片| 色综合 综合色| 久久噜噜亚洲综合| 视频一区在线视频| 波波电影院一区二区三区| 日韩视频中午一区| 亚洲综合成人在线视频| 国产精品综合在线视频| 5858s免费视频成人| 亚洲视频一区在线观看| 国内成人免费视频| 欧美酷刑日本凌虐凌虐| 亚洲欧美日韩综合aⅴ视频| 国产美女一区二区三区| 欧美日韩高清一区二区不卡| 中文字幕一区二| 国产精品一区二区在线观看不卡 | 丝袜脚交一区二区| 一本一本大道香蕉久在线精品| 久久婷婷国产综合国色天香| 视频一区中文字幕| 欧美午夜精品久久久| 中文字幕亚洲欧美在线不卡| 国产盗摄一区二区三区| 精品国产亚洲在线| 免费成人你懂的| 欧美猛男男办公室激情| 亚洲一区二区三区在线看| 91麻豆免费在线观看| 国产精品免费视频观看| 国产99精品在线观看| 久久亚洲一级片| 麻豆高清免费国产一区| 在线电影国产精品| 午夜不卡av免费| 欧美色倩网站大全免费| 亚洲黄色免费网站| 色狠狠av一区二区三区| 日韩理论电影院| 91香蕉国产在线观看软件| |精品福利一区二区三区| 丰满放荡岳乱妇91ww| 国产偷国产偷亚洲高清人白洁 | 久久精品亚洲一区二区三区浴池| 美日韩黄色大片| 日韩一区二区在线看| 日韩高清欧美激情| 91精品国产乱| 另类调教123区| 精品不卡在线视频| 国产裸体歌舞团一区二区| 久久精品一区二区三区不卡| 国产传媒一区在线| 欧美高清在线精品一区| 成人高清免费在线播放| 中文字幕中文字幕在线一区 | 亚洲一区欧美一区| 欧美网站大全在线观看| 亚洲高清久久久| 欧美日本国产一区| 久久精品国产澳门| 久久婷婷色综合| 丁香婷婷综合色啪| 综合av第一页| 欧洲国内综合视频| 日韩国产欧美三级| 精品美女被调教视频大全网站| 国内成人精品2018免费看| 国产日韩av一区| 91小视频免费观看| 日韩国产成人精品| 久久久久久久综合色一本| 不卡的av电影| 亚洲图片欧美一区| 欧美精品一区视频| 91天堂素人约啪| 五月婷婷久久综合| 久久久精品国产99久久精品芒果| 成人爱爱电影网址| 亚洲成人精品一区| 精品奇米国产一区二区三区| 成人中文字幕电影| 亚洲国产aⅴ天堂久久| 日韩欧美国产精品| 97se亚洲国产综合自在线观| 亚洲成人中文在线| 久久网站最新地址| 在线看国产一区二区| 奇米色777欧美一区二区| 日本一区二区三级电影在线观看| 91麻豆福利精品推荐| 蜜臀91精品一区二区三区| 国产亚洲欧美日韩日本| 欧美无砖砖区免费| 国产精品一区2区| 亚洲国产一区二区三区青草影视| 精品国产成人系列| 91极品美女在线| 韩国欧美一区二区| 亚洲影院在线观看| 久久精品人人做人人爽97| 欧美日韩中文字幕一区二区| 国产一区在线观看麻豆| 亚洲一级在线观看| 国产日韩欧美一区二区三区乱码| 欧美伊人久久久久久午夜久久久久| 韩国精品久久久| 亚洲激情自拍偷拍| 久久亚洲捆绑美女| 91.麻豆视频| 99精品欧美一区二区三区小说| 日韩av一区二区在线影视| 亚洲免费观看高清| 久久精品一二三| 欧美一区二区精品| 在线观看网站黄不卡| 国产精品1区2区| 肉丝袜脚交视频一区二区| 1区2区3区国产精品| 久久综合国产精品| 制服丝袜日韩国产| 欧美在线免费视屏| av亚洲精华国产精华精华| 极品瑜伽女神91| 午夜精品福利一区二区三区蜜桃| 国产精品美女久久久久aⅴ国产馆| 日韩一二三区不卡| 欧美日韩aaaaaa| 91官网在线免费观看| 成人av在线电影| 国产一区二区不卡在线| 免费成人在线影院| 亚洲成人激情综合网| 亚洲精品国产成人久久av盗摄| 国产三区在线成人av| 欧美不卡一区二区三区四区| 欧美日本乱大交xxxxx| 精品视频在线免费观看| 99国产精品国产精品毛片| 国产91综合网| 国产精品中文字幕一区二区三区| 免费观看在线综合| 日韩国产在线观看| 丝袜亚洲精品中文字幕一区| 洋洋成人永久网站入口| 亚洲欧美日韩成人高清在线一区| 国产精品网曝门| 欧美国产精品v| 欧美国产精品中文字幕| 欧美韩日一区二区三区四区| 国产亲近乱来精品视频| 久久九九99视频| 欧美激情在线观看视频免费| 国产亚洲精品7777| 中文乱码免费一区二区| 中文字幕巨乱亚洲| 日韩美女视频一区| 亚洲精品欧美二区三区中文字幕| 一区二区三区在线视频观看| 亚洲精品国久久99热| 一区二区在线观看免费视频播放 | 欧美日韩亚洲高清一区二区| 欧洲精品中文字幕| 欧美日本在线一区| 日韩欧美一卡二卡| 欧美精品一区二区三区蜜臀| 久久精品视频一区| 中文字幕亚洲电影| 亚洲影院免费观看| 青青草国产精品亚洲专区无| 国内精品嫩模私拍在线| 成人夜色视频网站在线观看| 成人一区在线观看| 一本色道久久加勒比精品 | 午夜精品一区二区三区免费视频|