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

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

?? mpegts.c

?? arm平臺下的H264編碼和解碼源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * MPEG2 transport stream (aka DVB) demux * Copyright (c) 2002-2003 Fabrice Bellard. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "avformat.h"#include "mpegts.h"//#define DEBUG_SI//#define DEBUG_SEEK/* 1.0 second at 24Mbit/s */#define MAX_SCAN_PACKETS 32000/* maximum size in which we look for synchronisation if   synchronisation is lost */#define MAX_RESYNC_SIZE 4096static int add_pes_stream(MpegTSContext *ts, int pid, int stream_type);enum MpegTSFilterType {    MPEGTS_PES,    MPEGTS_SECTION,};typedef void PESCallback(void *opaque, const uint8_t *buf, int len, int is_start);typedef struct MpegTSPESFilter {    PESCallback *pes_cb;    void *opaque;} MpegTSPESFilter;typedef void SectionCallback(void *opaque, const uint8_t *buf, int len);typedef void SetServiceCallback(void *opaque, int ret);typedef struct MpegTSSectionFilter {    int section_index;    int section_h_size;    uint8_t *section_buf;    int check_crc:1;    int end_of_section_reached:1;    SectionCallback *section_cb;    void *opaque;} MpegTSSectionFilter;typedef struct MpegTSFilter {    int pid;    int last_cc; /* last cc code (-1 if first packet) */    enum MpegTSFilterType type;    union {        MpegTSPESFilter pes_filter;        MpegTSSectionFilter section_filter;    } u;} MpegTSFilter;typedef struct MpegTSService {    int running:1;    int sid;    char *provider_name;    char *name;} MpegTSService;struct MpegTSContext {    /* user data */    AVFormatContext *stream;    int raw_packet_size; /* raw packet size, including FEC if present */    int auto_guess; /* if true, all pids are analized to find streams */    int set_service_ret;    int mpeg2ts_raw;  /* force raw MPEG2 transport stream output, if possible */    int mpeg2ts_compute_pcr; /* compute exact PCR for each transport stream packet */    /* used to estimate the exact PCR */    int64_t cur_pcr;    int pcr_incr;    int pcr_pid;        /* data needed to handle file based ts */    int stop_parse; /* stop parsing loop */    AVPacket *pkt; /* packet containing av data */    /******************************************/    /* private mpegts data */    /* scan context */    MpegTSFilter *sdt_filter;    int nb_services;    MpegTSService **services;        /* set service context (XXX: allocated it ?) */    SetServiceCallback *set_service_cb;    void *set_service_opaque;    MpegTSFilter *pat_filter;    MpegTSFilter *pmt_filter;    int req_sid;    MpegTSFilter *pids[NB_PID_MAX];};static void write_section_data(AVFormatContext *s, MpegTSFilter *tss1,                               const uint8_t *buf, int buf_size, int is_start){    MpegTSSectionFilter *tss = &tss1->u.section_filter;    int len;    unsigned int crc;        if (is_start) {        memcpy(tss->section_buf, buf, buf_size);        tss->section_index = buf_size;        tss->section_h_size = -1;        tss->end_of_section_reached = 0;    } else {        if (tss->end_of_section_reached)            return;        len = 4096 - tss->section_index;        if (buf_size < len)            len = buf_size;        memcpy(tss->section_buf + tss->section_index, buf, len);        tss->section_index += len;    }    /* compute section length if possible */    if (tss->section_h_size == -1 && tss->section_index >= 3) {        len = (((tss->section_buf[1] & 0xf) << 8) | tss->section_buf[2]) + 3;        if (len > 4096)            return;        tss->section_h_size = len;    }    if (tss->section_h_size != -1 && tss->section_index >= tss->section_h_size) {        if (tss->check_crc) {            crc = mpegts_crc32(tss->section_buf, tss->section_h_size);            if (crc != 0)                goto invalid_crc;        }        tss->section_cb(tss->opaque, tss->section_buf, tss->section_h_size);    invalid_crc:        tss->end_of_section_reached = 1;    }}MpegTSFilter *mpegts_open_section_filter(MpegTSContext *ts, unsigned int pid,                                          SectionCallback *section_cb, void *opaque,                                         int check_crc){    MpegTSFilter *filter;    MpegTSSectionFilter *sec;    #ifdef DEBUG_SI    printf("Filter: pid=0x%x\n", pid);#endif    if (pid >= NB_PID_MAX || ts->pids[pid])        return NULL;    filter = av_mallocz(sizeof(MpegTSFilter));    if (!filter)         return NULL;    ts->pids[pid] = filter;    filter->type = MPEGTS_SECTION;    filter->pid = pid;    filter->last_cc = -1;    sec = &filter->u.section_filter;    sec->section_cb = section_cb;    sec->opaque = opaque;    sec->section_buf = av_malloc(MAX_SECTION_SIZE);    sec->check_crc = check_crc;    if (!sec->section_buf) {        av_free(filter);        return NULL;    }    return filter;}MpegTSFilter *mpegts_open_pes_filter(MpegTSContext *ts, unsigned int pid,                                      PESCallback *pes_cb,                                     void *opaque){    MpegTSFilter *filter;    MpegTSPESFilter *pes;    if (pid >= NB_PID_MAX || ts->pids[pid])        return NULL;    filter = av_mallocz(sizeof(MpegTSFilter));    if (!filter)         return NULL;    ts->pids[pid] = filter;    filter->type = MPEGTS_PES;    filter->pid = pid;    filter->last_cc = -1;    pes = &filter->u.pes_filter;    pes->pes_cb = pes_cb;    pes->opaque = opaque;    return filter;}void mpegts_close_filter(MpegTSContext *ts, MpegTSFilter *filter){    int pid;    pid = filter->pid;    if (filter->type == MPEGTS_SECTION)        av_freep(&filter->u.section_filter.section_buf);    else if (filter->type == MPEGTS_PES)        av_freep(&filter->u.pes_filter.opaque);    av_free(filter);    ts->pids[pid] = NULL;}static int analyze(const uint8_t *buf, int size, int packet_size, int *index){    int stat[packet_size];    int i;    int x=0;    int best_score=0;    memset(stat, 0, packet_size*sizeof(int));    for(x=i=0; i<size; i++){        if(buf[i] == 0x47){            stat[x]++;            if(stat[x] > best_score){                best_score= stat[x];                if(index) *index= x;            }        }        x++;        if(x == packet_size) x= 0;    }    return best_score;}/* autodetect fec presence. Must have at least 1024 bytes  */static int get_packet_size(const uint8_t *buf, int size){    int score, fec_score;    if (size < (TS_FEC_PACKET_SIZE * 5 + 1))        return -1;            score    = analyze(buf, size, TS_PACKET_SIZE, NULL);    fec_score= analyze(buf, size, TS_FEC_PACKET_SIZE, NULL);//    av_log(NULL, AV_LOG_DEBUG, "score: %d, fec_score: %d \n", score, fec_score);        if     (score > fec_score) return TS_PACKET_SIZE;    else if(score < fec_score) return TS_FEC_PACKET_SIZE;    else                       return -1;}typedef struct SectionHeader {    uint8_t tid;    uint16_t id;    uint8_t version;    uint8_t sec_num;    uint8_t last_sec_num;} SectionHeader;static inline int get8(const uint8_t **pp, const uint8_t *p_end){    const uint8_t *p;    int c;    p = *pp;    if (p >= p_end)        return -1;    c = *p++;    *pp = p;    return c;}static inline int get16(const uint8_t **pp, const uint8_t *p_end){    const uint8_t *p;    int c;    p = *pp;    if ((p + 1) >= p_end)        return -1;    c = (p[0] << 8) | p[1];    p += 2;    *pp = p;    return c;}/* read and allocate a DVB string preceeded by its length */static char *getstr8(const uint8_t **pp, const uint8_t *p_end){    int len;    const uint8_t *p;    char *str;    p = *pp;    len = get8(&p, p_end);    if (len < 0)        return NULL;    if ((p + len) > p_end)        return NULL;    str = av_malloc(len + 1);    if (!str)        return NULL;    memcpy(str, p, len);    str[len] = '\0';    p += len;    *pp = p;    return str;}static int parse_section_header(SectionHeader *h,                                 const uint8_t **pp, const uint8_t *p_end){    int val;    val = get8(pp, p_end);    if (val < 0)        return -1;    h->tid = val;    *pp += 2;    val = get16(pp, p_end);    if (val < 0)        return -1;    h->id = val;    val = get8(pp, p_end);    if (val < 0)        return -1;    h->version = (val >> 1) & 0x1f;    val = get8(pp, p_end);    if (val < 0)        return -1;    h->sec_num = val;    val = get8(pp, p_end);    if (val < 0)        return -1;    h->last_sec_num = val;    return 0;}static MpegTSService *new_service(MpegTSContext *ts, int sid,                                   char *provider_name, char *name){    MpegTSService *service;#ifdef DEBUG_SI    printf("new_service: sid=0x%04x provider='%s' name='%s'\n",            sid, provider_name, name);#endif    service = av_mallocz(sizeof(MpegTSService));    if (!service)        return NULL;    service->sid = sid;    service->provider_name = provider_name;    service->name = name;    dynarray_add(&ts->services, &ts->nb_services, service);    return service;}static void pmt_cb(void *opaque, const uint8_t *section, int section_len){    MpegTSContext *ts = opaque;    SectionHeader h1, *h = &h1;    const uint8_t *p, *p_end;    int program_info_length, pcr_pid, pid, stream_type, desc_length;    #ifdef DEBUG_SI    printf("PMT:\n");    av_hex_dump(stdout, (uint8_t *)section, section_len);#endif    p_end = section + section_len - 4;    p = section;    if (parse_section_header(h, &p, p_end) < 0)        return;#ifdef DEBUG_SI    printf("sid=0x%x sec_num=%d/%d\n", h->id, h->sec_num, h->last_sec_num);#endif    if (h->tid != PMT_TID || (ts->req_sid >= 0 && h->id != ts->req_sid) )        return;    pcr_pid = get16(&p, p_end) & 0x1fff;    if (pcr_pid < 0)        return;    ts->pcr_pid = pcr_pid;#ifdef DEBUG_SI    printf("pcr_pid=0x%x\n", pcr_pid);#endif    program_info_length = get16(&p, p_end) & 0xfff;    if (program_info_length < 0)        return;    p += program_info_length;    if (p >= p_end)        return;    for(;;) {        stream_type = get8(&p, p_end);        if (stream_type < 0)            break;        pid = get16(&p, p_end) & 0x1fff;        if (pid < 0)            break;        desc_length = get16(&p, p_end) & 0xfff;        if (desc_length < 0)            break;        p += desc_length;        if (p > p_end)            return;#ifdef DEBUG_SI        printf("stream_type=%d pid=0x%x\n", stream_type, pid);#endif        /* now create ffmpeg stream */        switch(stream_type) {        case STREAM_TYPE_AUDIO_MPEG1:        case STREAM_TYPE_AUDIO_MPEG2:        case STREAM_TYPE_VIDEO_MPEG1:        case STREAM_TYPE_VIDEO_MPEG2:        case STREAM_TYPE_VIDEO_MPEG4:        case STREAM_TYPE_VIDEO_H264:        case STREAM_TYPE_AUDIO_AAC:        case STREAM_TYPE_AUDIO_AC3:            add_pes_stream(ts, pid, stream_type);            break;        default:            /* we ignore the other streams */            break;        }    }    /* all parameters are there */    ts->set_service_cb(ts->set_service_opaque, 0);    mpegts_close_filter(ts, ts->pmt_filter);    ts->pmt_filter = NULL;}static void pat_cb(void *opaque, const uint8_t *section, int section_len){    MpegTSContext *ts = opaque;    SectionHeader h1, *h = &h1;    const uint8_t *p, *p_end;    int sid, pmt_pid;#ifdef DEBUG_SI    printf("PAT:\n");    av_hex_dump(stdout, (uint8_t *)section, section_len);#endif    p_end = section + section_len - 4;    p = section;    if (parse_section_header(h, &p, p_end) < 0)        return;    if (h->tid != PAT_TID)        return;    for(;;) {        sid = get16(&p, p_end);        if (sid < 0)            break;        pmt_pid = get16(&p, p_end) & 0x1fff;        if (pmt_pid < 0)            break;#ifdef DEBUG_SI        printf("sid=0x%x pid=0x%x\n", sid, pmt_pid);#endif        if (sid == 0x0000) {            /* NIT info */        } else {            if (ts->req_sid == sid) {                ts->pmt_filter = mpegts_open_section_filter(ts, pmt_pid,                                                             pmt_cb, ts, 1);                goto found;            }        }    }    /* not found */    ts->set_service_cb(ts->set_service_opaque, -1); found:    mpegts_close_filter(ts, ts->pat_filter);    ts->pat_filter = NULL;}/* add all services found in the PAT */static void pat_scan_cb(void *opaque, const uint8_t *section, int section_len){    MpegTSContext *ts = opaque;    SectionHeader h1, *h = &h1;    const uint8_t *p, *p_end;    int sid, pmt_pid;    char *provider_name, *name;    char buf[256];#ifdef DEBUG_SI    printf("PAT:\n");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频免费看| 久久久久久久久一| www.亚洲国产| 国产一区二三区| 精品一区二区三区久久久| 美女mm1313爽爽久久久蜜臀| 天天亚洲美女在线视频| 亚洲图片欧美色图| 亚洲国产另类av| 亚洲va国产va欧美va观看| 亚洲影院理伦片| 亚洲精品va在线观看| 亚洲精品va在线观看| 亚洲一级不卡视频| 日日欢夜夜爽一区| 日本美女一区二区| 美女诱惑一区二区| 精品无码三级在线观看视频| 国产一区视频网站| 99久久国产综合色|国产精品| 粉嫩欧美一区二区三区高清影视| 成人黄色777网| 色综合久久综合中文综合网| 欧美在线观看18| 欧美一区二区福利视频| 久久综合狠狠综合久久综合88| 日韩欧美一级在线播放| 久久久精品欧美丰满| **网站欧美大片在线观看| 一区二区三区免费网站| 日本伊人精品一区二区三区观看方式| 秋霞影院一区二区| 国产成人免费在线| 91社区在线播放| 欧美男女性生活在线直播观看| 欧美成人伊人久久综合网| 国产精品热久久久久夜色精品三区| 中文字幕不卡在线播放| 亚洲影院在线观看| 久久99久国产精品黄毛片色诱| 成人手机电影网| 欧美日韩二区三区| 亚洲国产激情av| 亚洲成国产人片在线观看| 国产另类ts人妖一区二区| 色综合中文综合网| 欧洲一区二区av| 91精品国产一区二区人妖| 日本一区二区成人在线| 亚洲va欧美va人人爽午夜| 国产成人在线看| 69久久夜色精品国产69蝌蚪网| 国产网站一区二区三区| 视频一区二区三区中文字幕| 成人免费视频视频在线观看免费| 8x8x8国产精品| 亚洲男人的天堂在线aⅴ视频| 裸体在线国模精品偷拍| 欧美性大战xxxxx久久久| 国产精品人人做人人爽人人添| 美女视频网站久久| 欧美视频一区二| 综合久久久久久| 粗大黑人巨茎大战欧美成人| 日韩欧美中文字幕公布| 婷婷久久综合九色综合绿巨人| 成人av在线观| 国产欧美日本一区二区三区| 麻豆成人av在线| 日韩一区二区不卡| 视频一区二区三区在线| 欧美午夜精品久久久| 亚洲免费观看高清| 99re视频精品| 中文字幕一区二区在线观看| 国产福利精品一区| 精品国产三级电影在线观看| 肉色丝袜一区二区| 欧美日韩精品一区二区| 亚洲电影在线播放| 欧美视频三区在线播放| 亚洲成人自拍偷拍| 欧美日韩激情一区二区| 天堂资源在线中文精品| 欧美视频日韩视频| 日韩电影在线观看电影| 欧美一区二区三区四区高清| 日韩—二三区免费观看av| 欧美一区二区视频在线观看2022| 午夜伦欧美伦电影理论片| 欧美日韩另类一区| 美洲天堂一区二卡三卡四卡视频| 欧美一级片在线| 久久97超碰色| 欧美激情艳妇裸体舞| 成人久久视频在线观看| 亚洲卡通动漫在线| 欧美日韩国产免费| 美国三级日本三级久久99| 精品国产一区二区国模嫣然| 风间由美中文字幕在线看视频国产欧美| 久久理论电影网| 99久久国产综合精品麻豆| 亚洲国产另类精品专区| 日韩午夜av电影| 国产福利一区在线观看| 依依成人精品视频| 日韩欧美国产一区二区在线播放| 欧美日韩高清影院| 精品一区二区三区不卡| 国产精品久久久久久福利一牛影视 | 亚洲成在人线免费| 精品粉嫩超白一线天av| 成人av手机在线观看| 夜夜夜精品看看| 久久久久久久久久久久久久久99| av一本久道久久综合久久鬼色| 亚洲国产wwwccc36天堂| 欧美精品一区二区三区蜜臀 | 国产麻豆精品一区二区| 一区二区三区四区在线| 日韩美女视频在线| 色综合久久综合网97色综合 | 日韩欧美一二三区| 色婷婷一区二区三区四区| 久久国产精品无码网站| 一区二区三区四区在线播放| 久久久亚洲欧洲日产国码αv| 91久久精品一区二区三| 国产精品亚洲а∨天堂免在线| 一区二区三区四区国产精品| 久久久五月婷婷| 欧美精品v日韩精品v韩国精品v| 成人伦理片在线| 精品午夜一区二区三区在线观看| 一区二区三区欧美| 国产精品不卡在线| 久久女同精品一区二区| 欧美一区二区三区播放老司机| 91浏览器在线视频| 成人av免费在线| 国内精品国产三级国产a久久| 亚洲午夜久久久久| 亚洲欧美日韩国产一区二区三区| 久久久久久久综合色一本| 欧美一区二区三区视频免费播放| 91热门视频在线观看| 不卡的av在线播放| 国产精华液一区二区三区| 久久超级碰视频| 蜜臀va亚洲va欧美va天堂| 日韩国产欧美在线播放| 亚洲国产成人tv| 亚洲国产毛片aaaaa无费看| 一区二区三区欧美亚洲| 一区二区三区在线观看欧美| **欧美大码日韩| 自拍偷拍欧美精品| 亚洲另类一区二区| 亚洲一区免费视频| 亚洲观看高清完整版在线观看| 亚洲欧美综合色| 亚洲日穴在线视频| 亚洲蜜桃精久久久久久久| 亚洲欧美区自拍先锋| 一区二区三区在线视频免费观看| 亚洲欧美一区二区三区极速播放| 亚洲视频小说图片| 亚洲电影第三页| 午夜视频在线观看一区| 日本欧美韩国一区三区| 日韩二区三区四区| 国产在线视频一区二区| 成人激情免费电影网址| 91在线国内视频| 欧美午夜影院一区| 欧美刺激脚交jootjob| 国产婷婷色一区二区三区| 国产精品色婷婷久久58| 亚洲综合偷拍欧美一区色| 日韩av二区在线播放| 久久成人综合网| zzijzzij亚洲日本少妇熟睡| 色婷婷av一区二区| 欧美一级片免费看| 国产精品国产三级国产| 伊人婷婷欧美激情| 精品在线观看免费| 99精品一区二区三区| 欧美疯狂性受xxxxx喷水图片| 日韩欧美一二三四区| 亚洲视频中文字幕| 欧美美女一区二区在线观看| 欧美精品在线观看播放| 久久久国产午夜精品| 亚洲一区二区中文在线| 国产精品伊人色| 欧美美女喷水视频| 中文字幕乱码日本亚洲一区二区| 一区二区欧美视频|