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

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

?? ts.c

?? VLC Player Source Code
?? C
?? 第 1 頁 / 共 5 頁
字號:
    bool                b_key_frame;} ts_stream_t;struct sout_mux_sys_t{    int             i_pcr_pid;    sout_input_t    *p_pcr_input;    vlc_mutex_t     csa_lock;    int             i_audio_bound;    int             i_video_bound;    bool            b_es_id_pid;    bool            b_sdt;    int             i_pid_video;    int             i_pid_audio;    int             i_pid_spu;    int             i_pid_free; /* first usable pid */    int             i_tsid;    int             i_netid;    int             i_num_pmt;    int             i_pmtslots;    int             i_pat_version_number;    ts_stream_t     pat;    int             i_pmt_version_number;    ts_stream_t     pmt[MAX_PMT];    pmt_map_t       pmtmap[MAX_PMT_PID];    int             i_pmt_program_number[MAX_PMT];    sdt_desc_t      sdt_descriptors[MAX_PMT];    bool            b_data_alignment;    int             i_mpeg4_streams;    int             i_null_continuity_counter;  /* Needed ? */    ts_stream_t     sdt;    dvbpsi_pmt_t    *dvbpmt;    /* for TS building */    int64_t         i_bitrate_min;    int64_t         i_bitrate_max;    int64_t         i_shaping_delay;    int64_t         i_pcr_delay;    int64_t         i_dts_delay;    bool            b_use_key_frames;    mtime_t         i_pcr;  /* last PCR emited */    csa_t           *csa;    int             i_csa_pkt_size;    bool            b_crypt_audio;    bool            b_crypt_video;};/* Reserve a pid and return it */static int  AllocatePID( sout_mux_sys_t *p_sys, int i_cat ){    int i_pid;    if ( i_cat == VIDEO_ES && p_sys->i_pid_video )    {        i_pid = p_sys->i_pid_video;        p_sys->i_pid_video = 0;    }    else if ( i_cat == AUDIO_ES && p_sys->i_pid_audio )    {        i_pid = p_sys->i_pid_audio;        p_sys->i_pid_audio = 0;    }    else if ( i_cat == SPU_ES && p_sys->i_pid_spu )    {        i_pid = p_sys->i_pid_spu;        p_sys->i_pid_spu = 0;    }    else    {        i_pid = ++p_sys->i_pid_free;    }    return i_pid;}static int pmtcompare( const void *pa, const void *pb ){    if ( ((pmt_map_t *)pa)->i_pid  < ((pmt_map_t *)pb)->i_pid )        return -1;    else if ( ((pmt_map_t *)pa)->i_pid  > ((pmt_map_t *)pb)->i_pid )        return 1;    else        return 0;}static int intcompare( const void *pa, const void *pb ){    if ( *(int *)pa  < *(int *)pb )        return -1;    else if ( *(int *)pa > *(int *)pb )        return 1;    else        return 0;}/***************************************************************************** * Local prototypes *****************************************************************************/static int Control  ( sout_mux_t *, int, va_list );static int AddStream( sout_mux_t *, sout_input_t * );static int DelStream( sout_mux_t *, sout_input_t * );static int Mux      ( sout_mux_t * );static block_t *FixPES( sout_mux_t *p_mux, block_fifo_t *p_fifo );static block_t *Add_ADTS( block_t *, es_format_t * );static void TSSchedule  ( sout_mux_t *p_mux, sout_buffer_chain_t *p_chain_ts,                          mtime_t i_pcr_length, mtime_t i_pcr_dts );static void TSDate      ( sout_mux_t *p_mux, sout_buffer_chain_t *p_chain_ts,                          mtime_t i_pcr_length, mtime_t i_pcr_dts );static void GetPAT( sout_mux_t *p_mux, sout_buffer_chain_t *c );static void GetPMT( sout_mux_t *p_mux, sout_buffer_chain_t *c );static block_t *TSNew( sout_mux_t *p_mux, ts_stream_t *p_stream, bool b_pcr );static void TSSetPCR( block_t *p_ts, mtime_t i_dts );static void PEStoTS  ( sout_instance_t *, sout_buffer_chain_t *, block_t *, ts_stream_t * );/***************************************************************************** * Open: *****************************************************************************/static int Open( vlc_object_t *p_this ){    sout_mux_t          *p_mux =(sout_mux_t*)p_this;    sout_mux_sys_t      *p_sys = NULL;    vlc_value_t         val;    int i;    config_ChainParse( p_mux, SOUT_CFG_PREFIX, ppsz_sout_options, p_mux->p_cfg );    p_sys = malloc( sizeof( sout_mux_sys_t ) );    if( !p_sys )        return VLC_ENOMEM;    p_sys->i_pmtslots = p_sys->b_sdt = 0;    p_sys->i_num_pmt = 1;    p_sys->dvbpmt = NULL;    memset( &p_sys->pmtmap, 0, sizeof(p_sys->pmtmap) );    vlc_mutex_init( &p_sys->csa_lock );    p_mux->pf_control   = Control;    p_mux->pf_addstream = AddStream;    p_mux->pf_delstream = DelStream;    p_mux->pf_mux       = Mux;    p_mux->p_sys        = p_sys;    srand( (uint32_t)mdate() );    for ( i = 0; i < MAX_PMT; i++ )        p_sys->sdt_descriptors[i].psz_service_name            = p_sys->sdt_descriptors[i].psz_provider = NULL;    memset( p_sys->sdt_descriptors, 0, sizeof(sdt_desc_t) );    p_sys->i_audio_bound = 0;    p_sys->i_video_bound = 0;    var_Get( p_mux, SOUT_CFG_PREFIX "es-id-pid", &val );    p_sys->b_es_id_pid = val.b_bool;    var_Get( p_mux, SOUT_CFG_PREFIX "muxpmt", &val );    /*       fetch string of pmts. Here's a sample: --sout-ts-muxpmt="0x451,0x200,0x28a,0x240,,0x450,0x201,0x28b,0x241,,0x452,0x202,0x28c,0x242"       This would mean 0x451, 0x200, 0x28a, 0x240 would fall under one pmt (program), 0x450,0x201,0x28b,0x241 would fall under another    */    if( val.psz_string != NULL && *val.psz_string )    {        char *psz_next;        char *psz = val.psz_string;        uint16_t i_pid;        psz_next = psz;        while( psz != NULL )        {            i_pid = strtoul( psz, &psz_next, 0 );            if ( strlen(psz_next) > 0 )                psz = &psz_next[1];            if ( i_pid == 0 )            {                p_sys->i_num_pmt++;                if ( p_sys->i_num_pmt > MAX_PMT )                {                    msg_Err( p_mux,             "Number of PMTs greater than compiled maximum (%d)", MAX_PMT );                    p_sys->i_num_pmt = MAX_PMT;                }            }            else            {                p_sys->pmtmap[p_sys->i_pmtslots].i_pid = i_pid;                p_sys->pmtmap[p_sys->i_pmtslots].i_prog = p_sys->i_num_pmt - 1;                p_sys->i_pmtslots++;                if ( p_sys->i_pmtslots > MAX_PMT_PID )                {                    msg_Err( p_mux,             "Number of pids in PMT greater than compiled maximum (%d)",                             MAX_PMT_PID );                    p_sys->i_pmtslots = MAX_PMT_PID;                }            }            /* Now sort according to pids for fast search later on */            qsort( (void *)p_sys->pmtmap, p_sys->i_pmtslots,                   sizeof(pmt_map_t), &pmtcompare );            if ( !*psz_next )                psz = NULL;        }    }    free( val.psz_string );    p_sys->i_pat_version_number = rand() % 32;    p_sys->pat.i_pid = 0;    p_sys->pat.i_continuity_counter = 0;    p_sys->pat.b_discontinuity = false;    var_Get( p_mux, SOUT_CFG_PREFIX "tsid", &val );    if ( val.i_int )        p_sys->i_tsid = val.i_int;    else        p_sys->i_tsid = rand() % 65536;    p_sys->i_netid = rand() % 65536;#ifdef HAVE_DVBPSI_SDT    var_Get( p_mux, SOUT_CFG_PREFIX "netid", &val );    if ( val.i_int )        p_sys->i_netid = val.i_int;#endif    p_sys->i_pmt_version_number = rand() % 32;    for( i = 0; i < p_sys->i_num_pmt; i++ )    {        p_sys->pmt[i].i_continuity_counter = 0;        p_sys->pmt[i].b_discontinuity = false;    }    p_sys->sdt.i_pid = 0x11;    p_sys->sdt.i_continuity_counter = 0;    p_sys->sdt.b_discontinuity = false;#ifdef HAVE_DVBPSI_SDT    var_Get( p_mux, SOUT_CFG_PREFIX "sdtdesc", &val );    p_sys->b_sdt = val.psz_string && *val.psz_string ? true : false;    /* Syntax is provider_sdt1,service_name_sdt1,provider_sdt2,service_name_sdt2... */    if( p_sys->b_sdt )    {        char *psz = val.psz_string;        char *psz_sdttoken = psz;        i = 0;        while ( psz_sdttoken != NULL )        {            char *psz_end = strchr( psz_sdttoken, ',' );            if( psz_end != NULL )            {                *psz_end++ = '\0';            }            if ( !(i % 2) )            {                p_sys->sdt_descriptors[i/2].psz_provider                    = strdup(psz_sdttoken);            }            else            {                p_sys->sdt_descriptors[i/2].psz_service_name                    = strdup(psz_sdttoken);            }            i++;            psz_sdttoken = psz_end;        }    }    free( val.psz_string );#else    p_sys->b_sdt = false;#endif    var_Get( p_mux, SOUT_CFG_PREFIX "alignment", &val );    p_sys->b_data_alignment = val.b_bool;    var_Get( p_mux, SOUT_CFG_PREFIX "program-pmt", &val );    if( val.psz_string && *val.psz_string )    {        char *psz_next;        char *psz = val.psz_string;        uint16_t i_pid;        psz_next = psz;        i = 0;        while ( psz != NULL )        {            i_pid = strtoul( psz, &psz_next, 0 );            if( strlen(psz_next) > 0 )                psz = &psz_next[1];            else                psz = NULL;            if( i_pid == 0 )            {                if( i > MAX_PMT )                    msg_Err( p_mux, "Number of PMTs > maximum (%d)",                             MAX_PMT );            }            else            {                p_sys->i_pmt_program_number[i] = i_pid;                i++;            }        }    }    else    {        /* Option not specified, use 1, 2, 3... */        for( i = 0; i < p_sys->i_num_pmt; i++ )            p_sys->i_pmt_program_number[i] = i + 1;    }    free( val.psz_string );    var_Get( p_mux, SOUT_CFG_PREFIX "pid-pmt", &val );    if( val.i_int )    {        for( i = 0; i < p_sys->i_num_pmt; i++ )            p_sys->pmt[i].i_pid = val.i_int + i; /* Does this make any sense? */    }    else    {        for( i = 0; i < p_sys->i_num_pmt; i++ )            p_sys->pmt[i].i_pid = 0x42 + i;    }    p_sys->i_pid_free = p_sys->pmt[p_sys->i_num_pmt - 1].i_pid + 1;    var_Get( p_mux, SOUT_CFG_PREFIX "pid-video", &val );    p_sys->i_pid_video = val.i_int;    if ( p_sys->i_pid_video > p_sys->i_pid_free )    {        p_sys->i_pid_free = p_sys->i_pid_video + 1;    }    var_Get( p_mux, SOUT_CFG_PREFIX "pid-audio", &val );    p_sys->i_pid_audio = val.i_int;    if ( p_sys->i_pid_audio > p_sys->i_pid_free )    {        p_sys->i_pid_free = p_sys->i_pid_audio + 1;    }    var_Get( p_mux, SOUT_CFG_PREFIX "pid-spu", &val );    p_sys->i_pid_spu = val.i_int;    if ( p_sys->i_pid_spu > p_sys->i_pid_free )    {        p_sys->i_pid_free = p_sys->i_pid_spu + 1;    }    p_sys->i_pcr_pid = 0x1fff;    p_sys->p_pcr_input = NULL;    p_sys->i_mpeg4_streams = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品视频一区二区三区| 美女视频黄 久久| 高清不卡在线观看| wwwwww.欧美系列| 久久精品国产久精国产爱| 91精品国产aⅴ一区二区| 亚洲成人你懂的| 欧美三电影在线| 亚洲成人久久影院| 欧美亚州韩日在线看免费版国语版| 国产精品久久久久久福利一牛影视 | 亚洲va欧美va人人爽| 国产精品一卡二卡在线观看| 99国产精品视频免费观看| 国产精品蜜臀av| 成人av电影免费在线播放| 国产欧美精品一区二区色综合朱莉| 狠狠v欧美v日韩v亚洲ⅴ| 久久色.com| 国产麻豆精品一区二区| 久久久五月婷婷| 国产成人精品午夜视频免费| 国产精品免费视频观看| 国产成人在线视频播放| 亚洲国产电影在线观看| 97超碰欧美中文字幕| 亚洲人成网站在线| 日本大香伊一区二区三区| 亚洲综合久久久| 欧美精品1区2区3区| 美女一区二区在线观看| 欧美变态tickle挠乳网站| 久热成人在线视频| 国产午夜亚洲精品羞羞网站| www.欧美色图| 一个色在线综合| 制服丝袜国产精品| 国产在线国偷精品产拍免费yy| 国产精品视频免费看| 色婷婷av一区二区三区软件| 一区二区三区日韩欧美精品| 欧美日本韩国一区| 蓝色福利精品导航| 国产欧美日韩卡一| 91精品办公室少妇高潮对白| 亚洲福利一区二区| 日韩女优av电影| 99热99精品| 无码av中文一区二区三区桃花岛| 精品欧美一区二区久久| 成人污视频在线观看| 亚洲国产综合人成综合网站| 欧美xingq一区二区| av资源网一区| 日韩精品91亚洲二区在线观看 | 在线免费观看不卡av| 日韩电影在线免费| 国产欧美日韩三区| 欧美日韩在线直播| 国产二区国产一区在线观看| 伊人婷婷欧美激情| 久久亚洲精品小早川怜子| 色综合天天在线| 久久精品二区亚洲w码| 亚洲图片另类小说| 精品奇米国产一区二区三区| 东方aⅴ免费观看久久av| 欧美大肚乱孕交hd孕妇| 91碰在线视频| 日韩电影在线观看电影| 国产精品免费aⅴ片在线观看| 欧美日本一区二区三区四区| 国产·精品毛片| 午夜精品久久久久| 中文字幕视频一区二区三区久| 欧美日韩成人激情| 成人av电影在线| 奇米一区二区三区| 自拍偷拍亚洲综合| 久久在线观看免费| 制服丝袜成人动漫| 国产suv精品一区二区6| 午夜影视日本亚洲欧洲精品| 国产精品亲子伦对白| 欧美一区二区三区在线视频| 99在线精品观看| 国产麻豆9l精品三级站| 天堂一区二区在线| 亚洲免费在线视频| 国产午夜精品在线观看| 欧美高清www午色夜在线视频| 97超碰欧美中文字幕| 国产一区 二区| 青青草91视频| 夜夜揉揉日日人人青青一国产精品| 欧美不卡视频一区| 欧美精品三级在线观看| 91视频免费播放| 国产高清不卡二三区| 蜜芽一区二区三区| 亚洲日本va午夜在线影院| 2023国产精品| 欧美视频三区在线播放| 色屁屁一区二区| 日本成人在线电影网| 欧美一级生活片| 狠狠狠色丁香婷婷综合久久五月| 亚洲欧洲日韩女同| 欧美一区二区三区免费在线看| 激情久久五月天| 国产精品久久久久一区二区三区共| 欧美一区二区黄色| 丁香六月综合激情| 丝瓜av网站精品一区二区| 91精品在线免费观看| 首页亚洲欧美制服丝腿| 国产日产欧美一区| 国产91丝袜在线18| 国产一区二区视频在线播放| 丝袜亚洲另类丝袜在线| 亚洲一级在线观看| 一区二区三区在线观看视频| 国产精品每日更新| 日本一区二区三区dvd视频在线| 26uuu国产电影一区二区| 欧美一区三区四区| 91.com在线观看| 欧美日韩一区二区电影| 欧美性色黄大片| 精品视频在线看| 欧美日韩精品欧美日韩精品一| 在线一区二区三区做爰视频网站| 日韩欧美一区二区三区在线| 国产成人精品www牛牛影视| 成人免费视频在线观看| 欧美最猛性xxxxx直播| 五月天欧美精品| 91精品国产免费| 91影院在线观看| 老司机免费视频一区二区| 中文av字幕一区| 欧美三级一区二区| 成人免费视频免费观看| 青青草97国产精品免费观看| 国产精品欧美经典| 欧美日韩视频专区在线播放| 91在线视频免费观看| 久久99国产精品麻豆| 久久99热国产| 国产精品亚洲视频| 成人午夜在线播放| 99久久精品国产精品久久| 91捆绑美女网站| 欧美日韩一区不卡| 日韩美女一区二区三区| 精品福利一二区| 欧美精彩视频一区二区三区| 国产精品久久福利| 亚洲另类在线一区| 亚洲国产精品久久久久婷婷884| 图片区日韩欧美亚洲| 久久国产视频网| 国产福利一区在线| 91年精品国产| 欧美日本在线观看| 欧美va天堂va视频va在线| 欧美经典一区二区| 亚洲狼人国产精品| 日本亚洲视频在线| 国产一区二区三区免费观看| www.色综合.com| 欧美日韩国产成人在线91| 欧美va亚洲va在线观看蝴蝶网| 国产精品美女一区二区| 亚洲gay无套男同| 国产欧美一区视频| 自拍偷拍亚洲欧美日韩| 日韩av午夜在线观看| 国产成人免费视| 91在线国内视频| 在线成人高清不卡| 久久精子c满五个校花| 亚洲主播在线播放| 国产综合一区二区| 91成人免费电影| 精品国产一区a| 亚洲嫩草精品久久| 美国av一区二区| 99国产精品久久久久久久久久久| 在线观看91av| 亚洲国产精品ⅴa在线观看| 亚洲综合一区二区| 韩国成人在线视频| 欧美又粗又大又爽| 久久人人爽人人爽| 亚洲高清中文字幕| 粉嫩蜜臀av国产精品网站| 在线播放欧美女士性生活| 欧美激情艳妇裸体舞| 青草国产精品久久久久久|