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

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

?? mpeg2demux.cc

?? ac3的解碼程序
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/*   File: mpeg2demux.cc   Description:   The MPEG 2 demultiplexer class reads MPEG 2 TS, PS and PES data    and demultiplexes a Transport Stream or Program Stream in its    Packetized Elementary Streams. Elementary Streams are just passed    through.   Created: February 1996, Alex Theo de Jong, NIST*/#include "athread.hh"#include <stdio.h>#include <stdlib.h>#include <String.h>#include <fstream.h>#include <sys/errno.h>#ifdef IRIX#include <dmedia/audio.h>#endif#ifdef SOLARIS#include <sys/audioio.h>#endif// network stuff #include <sys/types.h>#include <sys/uio.h>#include <unistd.h>#include <errno.h>#include "error.hh"#include "debug.hh"#include "util.hh"#include "sync.hh"#include "mpeg2const.hh"#include "mpeg2buff.hh"#include "mpeg2audio.hh"#include "mpeg2video.hh"#include "mpeg2demux.hh"#include "network.hh"// Options for Audio and Video playerextern int audio_argc;extern char** audio_argv;extern int video_argc;extern char** video_argv;extern int time_stamp_qsize;extern int frame_stamp_qsize;extern int audio_buffer_size;extern int video_buffer_size;// Input socketextern SocketMulti* sock;#ifdef TRACEMpeg2Buffer* ab=0;Mpeg2Buffer* vb=0;Synchronization* ds=0;#endif#define DELIMITER   0x001B8/* * * De-multiplexor * */Mpeg2Demux::Mpeg2Demux(int pdu_size, int sel_vstream, int sel_astream, int a_on, int v_on, int s_on, int q) :  pes_audio_bytes(0),  pes_video_bytes(0),  pes_audio_time(0.0),  pes_video_time(0.0),  audio_on(a_on),  video_on(v_on),  sync_on(s_on),  quiet(q),  vstream(sel_vstream),  astream(sel_astream){  audio_buffer=new Mpeg2Buffer(audio_buffer_size);  video_buffer=new Mpeg2Buffer(video_buffer_size);#ifdef TRACE  ::ab=audio_buffer;  ::vb=video_buffer;#endif  aalpdu_size=pdu_size;  aalpdu=new unsigned char[aalpdu_size+1];  aalpdu_max=aalpdu+aalpdu_size;  // input counters  bytecount=0;  byteptr=0;  pdu_mpeg_packet=aalpdu_max; // set to max for proper init  // MPEG packet counters   counter=0;  transport_packets=0;  transport_packet_errors=0;  sync_byte_errors=0;  lost_packets=0;  adaptation_fields=0;  program_association_tables=0;  pes_packets=0;  psi_packets=0;  audio_packets=0;  video_packets=0;  // transport packet header information  transport_error_indicator=0;  payload_unit_start_indicator=0;  pid=0;  audio_pid=-1;  video_pid=-1;  adaptation_field_control=0;  audio=0;  video=0;  sync=0;  int err;#ifdef EOFEXIT  Mpeg2Demux::init(this);#else  if ((err=athr_create((void*(*)(void*))Mpeg2Demux::init, this, &thread_id))<0){    error("could not create thread");  }  sched_param param;  int policy;  if ((err=athr_getschedparam(thread_id, &policy, &param))<0){    warning("could not get thread prio - ignored");  }  else {#ifdef LINUX    param.sched_priority+=1;//    policy = SCHED_RR;    TRACER("TIMERPRIORITY=" << param.sched_priority << "(" << param.sched_priority-1 << ")");#else    param.prio+=1;    TRACER("TIMERPRIORITY=" << param.prio << "(" << param.prio-1 << ")");#endif    if ((err=athr_setschedparam(thread_id, policy, &param))<0){      warning("could not set thread prio - ignored");    }  }//  TRACER("DEMUXPRIORITY=" << param.prio);#endif  terminated=0;}Mpeg2Demux::~Mpeg2Demux(){  TRACER("Mpeg2Demux::~Mpeg2Demux()");  if (!terminated){ // check if thread is still alive    TRACER("waiting for demux thread to terminate ...");    athr_join(thread_id);  }  TRACER("delete video ...");  delete video;  TRACER("video deleted\ndelete audio ...");  delete audio;  TRACER("audio deleted\ndelete sync ...");  delete sync;  TRACER("sync deleted\ndemux deleted");  delete aalpdu;  delete audio_buffer;  delete video_buffer;}int Mpeg2Demux::stop(){  terminate=1;  if (!terminated){    // check to see if thread is available    athr_join(thread_id);    gettimeofday(&tstop,(struct timezone *)NULL);     int runtime = 1000*(tstop.tv_sec-tstart.tv_sec) + (tstop.tv_usec-tstart.tv_usec)/1000;    msg("Bitrate: ");     msg(dtoa(counter*MPEG2_TS_Packet_size*8/runtime));    message(" Kbps");  }  return terminated; }void* Mpeg2Demux::init(Mpeg2Demux* base){  TRACER("void* Mpeg2Demux::init(Mpeg2Demux* base)");  base->terminate=0;  base->terminated=0;  if (base->sync_on){    if (base->video_on && base->audio_on)      base->sync=new Synchronization(0, time_stamp_qsize, frame_stamp_qsize); // sync video/audio    if (base->video_on && !base->audio_on)      base->sync=new Synchronization(1, time_stamp_qsize, frame_stamp_qsize); // just video    if (!base->video_on && base->audio_on)      base->sync=new Synchronization(2, time_stamp_qsize, frame_stamp_qsize); // just audio  }  else base->sync=0;  if (base->video_on)    base->video=new Mpeg2Video(base->video_buffer, base->sync, video_argc, video_argv);  else base->video=0;  if (base->audio_on)    base->audio=new Mpeg2Audio(base->audio_buffer, base->sync, base->audio_on, audio_argc, audio_argv);  else base->audio=0;  // wait for network connection or file to be ready!  sock->accept();  if (0){    error("could not receive connection!");    athr_exit(0);  }  if (base->nextpacket()<=0){  // init first pdu    error("could not read first packet");    athr_exit(0);  }  unsigned int bits=base->nextbits32();  gettimeofday(&base->tstart,(struct timezone *)NULL);   if (((bits >> 24) & 0xff)==Sync_byte){    message("Playing MPEG 2 TS Audio/Video");#ifdef TRACE    ::ds=base->sync;#endif          base->transport_stream();  }  else if (bits == Pack_start_code){    // Create players and start    message("Playing MPEG 2 PS Audio/Video");    base->program_stream();  }  else if (base->audio_on && (bits & 0xfff00000)==0xfff00000){  // just plain audio    message("Playing MPEG 2 PES Audio");    base->pes_stream_audio();  }  else if (base->video_on && bits==Sequence_start_code){ // just video    message("Playing MPEG 2 PES Video");    base->pes_stream_video();  }  else error("Stream is not valid MPEG 2 Stream (TS, PS, Audio ES, Video ES)");  base->stop();  base->terminated=1;  TRACER("demux thread done");#ifdef EOFEXIT  exit(0);  // stop everything right here (after EOF!)#else  athr_exit(0);#endif  return 0;}int Mpeg2Demux::copybytes(Mpeg2Buffer* output, int length){  if (bytecount+length>MPEG2_TS_Packet_size){    warning("copying bytes beyond transport packet length");    length=MPEG2_TS_Packet_size-bytecount;  }  if (output->write(byteptr, length)!=length){    error("failed to copy input to output");    // write to output  }  bytecount+=length;  byteptr+=length;  return length;}int Mpeg2Demux::skipbytes(int length){  int i = length;  while(i--)    getbits8();  return length;  if (bytecount+length>MPEG2_TS_Packet_size){    warning("skipping bytes beyond transport packet length");    length=MPEG2_TS_Packet_size - bytecount;  }  bytecount+=length;  byteptr+=length;  return length;}int Mpeg2Demux::copy_ps_bytes(Mpeg2Buffer* output, unsigned int *header,int len){  unsigned char c;//    if (video_on == 2) {      if (output->write(byteptr, len)!=len){        error("failed to copy input to output");    // write to output      }      if (!nextpacket()) {        *header = 0;        return 1;      }      *header = getbits32();#if 0    }    else {      *header = getbits32();      while ((*header <= DELIMITER) || (*header > 0x1ff)) {        c = *header >> 24;        *header = (*header << 8) | getbits8();        if (output->write(&c, 1)!=1){          error("failed to copy input to output");    // write to output        }      }    }#endif  return 0;}int Mpeg2Demux::skip_ps_bytes(unsigned int *header){//  if (video_on==2) {    if (!nextpacket()) {      *header = 0;      return 1;    }    *header = getbits32();    return 0;#if 0  }  else {    *header = getbits32();    while ((*header <= DELIMITER) || (*header >  0x1ff)){      *header = (*header << 8) |  getbits8();    }  }#endif  return 0;}int Mpeg2Demux::nextpacket(){    DEBUGGER("int Mpeg2Demux::nextpacket()");  if (pdu_mpeg_packet>=aalpdu_max){    DEBUGGER("sock->recv()");    if ((lastpdu_size=sock->recv(aalpdu, aalpdu_size))!=aalpdu_size){      if (lastpdu_size==0){       //	if (audio_buffer)//          while (audio_buffer->used() > 10000 )  sleep(1);//	if (video_buffer) //          while (video_buffer->used() > 30000 ) sleep(1);		sleep(1);        terminate=1;        if (sync) sync->stop();        if (audio) audio->stop();        if (video) video->stop();	sleep(1);        if (sync) sync->stop();        TRACER("EOF!");        return 0; // eof      }      error("invalid pdu size (" << itoa(lastpdu_size) << ")");      return -1;    }    byteptr=pdu_mpeg_packet=aalpdu;    pdu_mpeg_packet+=MPEG2_TS_Packet_size;    bytecount=0;  }  else {    byteptr=pdu_mpeg_packet;    pdu_mpeg_packet+=MPEG2_TS_Packet_size;    bytecount=0;  }  return 1;}/* * * Mpeg Transport Stream * */int Mpeg2Demux::transport_stream(){  do {    counter++;    if (!get_transport_packet()){      if (!quiet){        String err("incorrect packet ");        err+=itoa(counter);        error(err.chars());      }    }    if (!quiet){      if ((counter % 100)==0) msg(".");      if ((counter % 5000)==0){        message(itoa(counter));        athr_yield();      }    }    if (terminate){      if ((!sync || sync->stop()) && (!audio || audio->stop()) && (!video || video->stop()))        break;  // continue until all threads terminated    }  }  while (nextpacket());  TRACER("closing audio buffer ...");  audio_buffer->close();  TRACER("closed audio buffer\nclosing video buffer ...");  video_buffer->close();  TRACER("closed video buffer");  file.close();  return (counter==0) ? 0 : 1;}int Mpeg2Demux::get_transport_packet(){    if (get_sync_byte()){              // align with sync    transport_packets++;    unsigned int bits=(getbits24() & 0x0000ffff);  // drop sync byte    // printf("First 2 bytes: %d\n", bits);    // exit(0);    transport_error_indicator=bits >> 15;    payload_unit_start_indicator=(bits >> 14) & 1;    pid=bits & 0x00001fff;    transport_scrambling_control=(nextbits8() >> 6)&0x3;    adaptation_field_control=(nextbits8() >> 4)&0x3;    continuity_counter=(getbits8()&0xf);    if (transport_error_indicator){      transport_packet_errors++;      return 0;  // error set!    }    if (pid==0x1fff){      return 1;  // padding; just go to next    }    int i;    for (i=0; pidtable[i]!=0 && pid!=pidtable[i]; i++); // get pid    if (pidtable[i]==0){  // not in table yet      pidtable[i]=pid;      continuity_counters[i]=continuity_counter;  // init      pidtable[i+1]=0;    }        if (pid!=(int)Program_Association_Table && pid!=(int)Conditional_Access_Table        && (adaptation_field_control==1 || adaptation_field_control==3)){      // Check counters      if (continuity_counters[i]!=continuity_counter){        if (!quiet){          String err("lost MPEG ");          err+=itoa(continuity_counter-continuity_counters[i]);          err+=" packet(s)";          error(err.chars());        }        continuity_counters[i]=continuity_counter; // reset        lost_packets++;      }      if (++continuity_counters[i]>15) continuity_counters[i]=0;    }    if (adaptation_field_control==2 || adaptation_field_control==3)      get_adaptation_field();    if (adaptation_field_control==1 || adaptation_field_control==3)      get_payload();  }  else {    sync_byte_errors++;    return 0;  }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区婷婷月色 | 激情国产一区二区| 精品在线播放免费| 成人听书哪个软件好| 色婷婷激情一区二区三区| 91精品中文字幕一区二区三区| 精品国产免费一区二区三区香蕉| 中文字幕+乱码+中文字幕一区| 亚洲综合清纯丝袜自拍| 精品一区二区三区蜜桃| 精品久久久久久久人人人人传媒 | 91蜜桃免费观看视频| 懂色av一区二区三区免费看| 色婷婷久久一区二区三区麻豆| 精品视频在线视频| 久久美女艺术照精彩视频福利播放| 欧美精品一区二区三区在线播放| 欧美国产日产图区| 亚洲国产精品一区二区久久恐怖片 | 欧美精品日日鲁夜夜添| 国产网站一区二区| 亚洲成va人在线观看| 视频一区在线播放| 极品少妇xxxx精品少妇偷拍| 成人午夜碰碰视频| 久久网这里都是精品| 99久久精品一区| 性欧美疯狂xxxxbbbb| 国产亚洲精品aa午夜观看| 亚洲五码中文字幕| 成人免费视频视频| 欧美tickling挠脚心丨vk| 亚洲另类中文字| 成人综合婷婷国产精品久久蜜臀 | 国产日韩欧美麻豆| 天使萌一区二区三区免费观看| 从欧美一区二区三区| 日韩精品中文字幕一区二区三区| 亚洲人成影院在线观看| 国产在线观看免费一区| 欧美在线视频不卡| 国产精品女上位| 国产精一品亚洲二区在线视频| 在线成人高清不卡| 亚洲精品老司机| aaa国产一区| 欧美国产日产图区| 激情小说欧美图片| 欧美一区二区三区免费视频| 亚洲欧美日韩电影| 国产成人免费视频网站高清观看视频| 日韩欧美在线一区二区三区| 亚洲一区二区三区四区不卡| av亚洲精华国产精华精| 久久久久久电影| 久久国产精品色| 欧美一级久久久久久久大片| 亚洲综合激情网| 色综合久久九月婷婷色综合| 国产精品人人做人人爽人人添| 天天综合色天天| 欧美日韩国产高清一区二区| 亚洲精品视频一区| 91亚洲精品乱码久久久久久蜜桃 | a4yy欧美一区二区三区| 欧美国产精品v| 国产成人在线视频网址| 久久久精品黄色| 国产成人在线观看免费网站| 久久久精品一品道一区| 国产尤物一区二区在线| 精品成a人在线观看| 久久99久久精品欧美| 欧美v日韩v国产v| 精品一区二区三区视频| 久久影音资源网| 国产精品1024| 中文av一区二区| 9人人澡人人爽人人精品| 亚洲人成人一区二区在线观看| 色综合欧美在线视频区| 亚洲激情图片小说视频| 欧美日韩一级片在线观看| 午夜精品在线看| 欧美一级淫片007| 精品在线亚洲视频| 国产欧美1区2区3区| 成人美女视频在线看| 亚洲精品久久嫩草网站秘色| 欧美伊人久久久久久久久影院| 国产午夜精品久久| 91黄视频在线观看| 国产一区欧美日韩| 亚洲成人动漫在线观看| 国产精品网站在线| 欧美不卡在线视频| 欧美日韩成人综合在线一区二区| 激情综合色播五月| 日韩和欧美一区二区三区| 国产精品美女久久久久aⅴ| 欧美一区二区免费观在线| 93久久精品日日躁夜夜躁欧美| 日本va欧美va精品| 亚洲国产综合人成综合网站| 国产精品久久久久一区二区三区共| 欧美mv日韩mv国产| 欧美一级日韩不卡播放免费| 日韩精品一区二| 精品国产123| 国产精品萝li| 成人欧美一区二区三区白人| 欧美久久久一区| 懂色av一区二区夜夜嗨| 欧美午夜精品一区二区三区| 中文字幕高清不卡| 日本三级亚洲精品| 欧美va亚洲va香蕉在线| av爱爱亚洲一区| 午夜欧美大尺度福利影院在线看| 日韩三级在线观看| 成人毛片老司机大片| 天堂久久一区二区三区| 国产性天天综合网| 在线精品视频一区二区三四| 免费人成精品欧美精品| 国产精品国产三级国产| 日韩视频在线你懂得| jizzjizzjizz欧美| 男男成人高潮片免费网站| 国产精品久久久久久久久免费相片 | 92精品国产成人观看免费| 日日摸夜夜添夜夜添精品视频| 国产日韩精品一区二区浪潮av| 在线国产亚洲欧美| 国产精华液一区二区三区| 亚洲国产成人av网| 国产精品欧美一区二区三区| 91精品国产色综合久久不卡电影| 97se亚洲国产综合自在线观| 久久精品国内一区二区三区| 亚洲精品成人精品456| 久久精品亚洲国产奇米99| 欧美日韩在线一区二区| fc2成人免费人成在线观看播放| 日韩电影一二三区| 亚洲欧美日韩国产综合在线 | 成人黄色777网| 男人的j进女人的j一区| 亚洲精品免费在线观看| 久久久精品2019中文字幕之3| 欧美日韩国产综合久久| 91香蕉视频在线| 国产精品一区二区91| 蜜臀久久久久久久| 亚洲午夜激情网站| 国产精品的网站| 国产喷白浆一区二区三区| 日韩手机在线导航| 欧美嫩在线观看| 欧美系列一区二区| 色综合久久久久网| 99在线精品一区二区三区| 国产原创一区二区| 久久99精品国产.久久久久久| 亚洲国产中文字幕在线视频综合| 亚洲三级久久久| 国产精品欧美精品| 国产午夜一区二区三区| 亚洲精品一区二区三区精华液| 欧美男人的天堂一二区| 欧洲在线/亚洲| 在线区一区二视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产激情偷乱视频一区二区三区 | 久久综合久久综合久久综合| 日韩精品一区二区三区在线观看| 欧美精品一卡二卡| 欧美日韩黄色影视| 欧美久久高跟鞋激| 欧美一区二区三区免费在线看| 欧美人与性动xxxx| 欧美日本视频在线| 欧美精品久久99| 在线播放日韩导航| 91精品国产色综合久久不卡蜜臀| 91精品国产综合久久久久久 | 久久不见久久见免费视频7| 蜜桃av一区二区| 狠狠色狠狠色综合系列| 蜜臀av亚洲一区中文字幕| 亚洲成人久久影院| 亚洲成av人在线观看| 五月综合激情婷婷六月色窝| 丝袜亚洲另类丝袜在线| 日韩vs国产vs欧美| 久久精品久久99精品久久| 国产一本一道久久香蕉| 粉嫩欧美一区二区三区高清影视| 成人免费看的视频| 91美女片黄在线观看91美女|