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

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

?? mpegsystem.cpp

?? This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
}void MPEGsystem::Read(){  int remaining;  int timeout;  /* Lock to prevent concurrent access to the stream */  SDL_mutexP(system_mutex);  timeout = READ_TIME_OUT;  remaining = read_buffer + read_size - pointer;  /* Only read data if buffer is rather empty */  if(remaining < MPEG_BUFFER_SIZE / 2)  {    if(remaining < 0)    {      /* Hum.. we'd better stop if we have already read past the buffer size */      errorstream = true;      SDL_mutexV(system_mutex);      return;    }    /* Replace unread data at the beginning of the stream */    memmove(read_buffer, pointer, remaining);#ifdef NO_GRIFF_MODS    read_size = SDL_RWread(source,                    read_buffer + remaining,                     READ_ALIGN(MPEG_BUFFER_SIZE - remaining));    if(read_size < 0)    {      perror("Read");      errorstream = true;      SDL_mutexV(system_mutex);      return;    }#else    /* Read new data */    int bytes_read    = 0;    int buffer_offset = remaining;    int bytes_to_read = READ_ALIGN(MPEG_BUFFER_SIZE - remaining);    int read_at_once = 0;    read_size = 0;    do    {      read_at_once =         SDL_RWread(source, read_buffer + buffer_offset, 1, bytes_to_read );      if(read_at_once < 0)      {        perror("Read");        errorstream = true;        SDL_mutexV(system_mutex);        return;      }      else      {        bytes_read    += read_at_once;        buffer_offset += read_at_once;        read_size     += read_at_once;        bytes_to_read -= read_at_once;      }    }    while( read_at_once>0 && bytes_to_read>0 );#endif    read_total += read_size;    packet_total ++;    if((MPEG_BUFFER_SIZE - remaining) != 0 && read_size <= 0)    {      if(read_size != 0)      {	errorstream = true;	SDL_mutexV(system_mutex);	return;      }    }    read_size += remaining;    /* Move the pointer */    pointer = read_buffer;      if(read_size == 0)    {      /* There is no more data */      endofstream = true;      SDL_mutexV(system_mutex);      return;    }  }  SDL_mutexV(system_mutex);}/* ASSUME: stream_list[0] = system stream *//*         packet length < MPEG_BUFFER_SIZE */Uint8 MPEGsystem::FillBuffer(){  Uint8 stream_id;  Uint32 packet_size;  Uint32 header_size;  /* - Read a new packet - */  Read();  if(Eof())  {    RequestBuffer();    return(0);  }  pointer += skip_zeros(pointer, read_buffer + read_size - pointer);   if((header_size = packet_header(pointer, read_buffer + read_size - pointer, &timestamp)) != 0)  {      pointer += header_size;      stream_list[0]->pos += header_size;#ifdef DEBUG_SYSTEM      fprintf(stderr, "MPEG packet header time: %lf\n", timestamp);#endif  }  if((header_size = stream_header(pointer, read_buffer + read_size - pointer, &packet_size, &stream_id, &stream_timestamp, timestamp)) != 0)  {      pointer += header_size;      stream_list[0]->pos += header_size;#ifdef DEBUG_SYSTEM      fprintf(stderr, "[%d] MPEG stream header [%d|%d] id: %d streamtime: %lf\n", read_total - read_size + (pointer - read_buffer),header_size, packet_size, stream_id, stream_timestamp);#endif  }  else  if(Match4(pointer, END_CODE, END_MASK) ||     Match4(pointer, END2_CODE, END2_MASK))  {    /* End codes belong to video stream */#ifdef DEBUG_SYSTEM    fprintf(stderr, "[%d] MPEG end code\n", read_total - read_size + (pointer - read_buffer));#endif    stream_id = exist_stream(VIDEO_STREAMID, 0xF0);    packet_size = 4;  }  else  {    stream_id = stream_list[0]->streamid;    if(!stream_list[1])    {       //Uint8 * packet_end;      packet_size = 0;      /* There is no system info in the stream */      /* If we're still a system stream, morph to an audio */      /* or video stream */      /* Sequence header -> gives framerate */      while((header_size = sequence_header(pointer+packet_size, read_buffer + read_size - pointer - packet_size, &frametime)) != 0)      {	stream_id = VIDEO_STREAMID;	stream_list[0]->streamid = stream_id;	packet_size += header_size;#ifdef DEBUG_SYSTEM	fprintf(stderr, "MPEG sequence header  frametime: %lf\n", frametime);#endif      }      /* GOP header */      while((header_size = gop_header(pointer+packet_size, read_buffer + read_size - pointer - packet_size, 0)) != 0)      {	packet_size += header_size; #ifdef DEBUG_SYSTEM	fprintf(stderr, "MPEG gop header\n");#endif      }      /* Picture header */      while((header_size = picture_header(pointer+packet_size, read_buffer + read_size - pointer - packet_size)) != 0)      {	packet_size += header_size;    // Warning: header size not quite correct (can be not byte aligned)	stream_timestamp += frametime; // but this is compensated by skipping a little more, as we don't need to be header aligned		packet_size += 4;              // after this, since we then check for the next header to know the slice size.#ifdef DEBUG_SYSTEM	fprintf(stderr, "MPEG picture header\n");#endif      }      /* Slice header */      while((header_size = slice_header(pointer+packet_size, read_buffer + read_size - pointer - packet_size)) != 0)      {	packet_size += header_size;    #ifdef DEBUG_SYSTEM	fprintf(stderr, "MPEG slice header\n");#endif      }      /* Audio frame */      if(audio_header(pointer+packet_size, &packet_size, &frametime))      {	  stream_id = AUDIO_STREAMID;	  stream_list[0]->streamid = stream_id;	  stream_timestamp += frametime;#ifdef DEBUG_SYSTEM	  fprintf(stderr, "MPEG audio header [%d] time: %lf @ %lf\n", packet_size, frametime, stream_timestamp);#endif      }      else      {	/* Check for next slice, picture, gop or sequence header */	register Uint8 * p;	register Uint8 c;		p = pointer + packet_size;      state0:	c = *p;	p++;	if(p >= read_buffer + read_size) goto end;	if(c != 0) goto state0;/* Not explicitly reached:      state1: */	c = *p;	p++;	if(p >= read_buffer + read_size) goto end;	if(c != 0) goto state0;      state2:	c = *p;	p++;	if(p >= read_buffer + read_size) goto end;	if(c == 0) goto state2;	if(c != 1) goto state0;/* Not explicitly reached:      state3: */	c = *p;	p++;	if(p >= read_buffer + read_size) goto end;	if(c <= 0xaf) goto end;	if(c == 0xb8) goto end;	if(c == 0xb3) goto end;	goto state0;      end:	if(p >= read_buffer + read_size) packet_size = (read_buffer + read_size) - pointer;	else packet_size = p - pointer - 4;      }      if(stream_id == SYSTEM_STREAMID)	stream_id = 0;    }    else    {#ifdef DEBUG_SYSTEM	fprintf(stderr,		"Warning: unexpected header %02x%02x%02x%02x at offset %d\n",		pointer[0],		pointer[1],		pointer[2],		pointer[3],		read_total - read_size + (pointer - read_buffer));#endif	pointer++;	stream_list[0]->pos++;	seek_next_header();	RequestBuffer();	return(0);    }  }  if(Eof())  {    RequestBuffer();    return(0);  }  assert(packet_size <= MPEG_BUFFER_SIZE);  if(skip_timestamp > timestamp){    int cur_seconds=int(timestamp)%60;    if (cur_seconds%5==0){      fprintf(stderr, "Skiping to %02d:%02d (%02d:%02d)\r",              int(skip_timestamp)/60, int(skip_timestamp)%60,              int(timestamp)/60, cur_seconds);    }    pointer += packet_size;    stream_list[0]->pos += packet_size;    /* since we skip data, request more */    RequestBuffer();    return (0);  }  switch(stream_id)  {    case 0:      /* Unknown stream, just get another packet */      pointer += packet_size;      stream_list[0]->pos += packet_size;      RequestBuffer();    return(0);    case SYSTEM_STREAMID:      /* System header */      /* This MPEG contain system information */      /* Parse the system header and create MPEG streams  */          /* Read the stream table */      pointer += 5;      stream_list[0]->pos += 5;      while (pointer[0] & 0x80 )      {	/* If the stream doesn't already exist */	if(!get_stream(pointer[0]))	{	  /* Create a new stream and add it to the list */	  add_stream(new MPEGstream(this, pointer[0]));	}	pointer += 3;	stream_list[0]->pos += 3;      }                /* Hack to detect video streams that are not advertised */      if ( ! exist_stream(VIDEO_STREAMID, 0xF0) ) {	if ( pointer[3] == 0xb3 ) {	  add_stream(new MPEGstream(this, VIDEO_STREAMID));	}      }      RequestBuffer();    return(stream_id);    default:      MPEGstream * stream;      /* Look for the stream the data must be given to */      stream = get_stream(stream_id);      if(!stream)      {		/* Hack to detect video or audio streams that are not declared in system header */	if ( ((stream_id & 0xF0) == VIDEO_STREAMID) && !exist_stream(stream_id, 0xFF) ) {#ifdef DEBUG_SYSTEM	  fprintf(stderr, "Undeclared video packet, creating a new video stream\n");#endif	    stream = new MPEGstream(this, stream_id);	    add_stream(stream);	}	else	if ( ((stream_id & 0xF0) == AUDIO_STREAMID) && !exist_stream(stream_id, 0xFF) ) {#ifdef DEBUG_SYSTEM	  fprintf(stderr, "Undeclared audio packet, creating a new audio stream\n");#endif	    stream = new MPEGstream(this, stream_id);	    add_stream(stream);	}	else	{	  /* No stream found for packet, skip it */	  pointer += packet_size;	  stream_list[0]->pos += packet_size;	  RequestBuffer();	  return(stream_id);	}      }      /* Insert the new data at the end of the stream */      if(pointer + packet_size <= read_buffer + read_size)      {	if(packet_size) stream->insert_packet(pointer, packet_size, stream_timestamp);	pointer += packet_size;      }      else      {	stream->insert_packet(pointer, 0, stream_timestamp);	errorstream = true;	pointer = read_buffer + read_size;      }      return(stream_id);  }}void MPEGsystem::Skip(double time){  if (skip_timestamp < timestamp)    skip_timestamp = timestamp;  skip_timestamp += time;} Uint32 MPEGsystem::Tell(){  register Uint32 t;  register int i;  /* Sum all stream positions */  for(i = 0, t = 0; stream_list[i]; i++)    t += stream_list[i]->pos;  if(t > TotalSize())    return(TotalSize());  else    return(t);}Uint32 MPEGsystem::TotalSize(){  off_t size;  off_t pos;  /* Lock to avoid concurrent access to the stream */  SDL_mutexP(system_mutex);  /* I made it this way (instead of fstat) to avoid #ifdef WIN32 everywhere */  /* in case 'in some weird perversion of nature' someone wants to port this to Win32 :-) */  if((pos = SDL_RWtell(source)) < 0)  {    if(errno != ESPIPE)    {      errorstream = true;      SetError(strerror(errno));    }    SDL_mutexV(system_mutex);    return(0);  }  if((size = SDL_RWseek(source, 0, SEEK_END)) < 0)  {    if(errno != ESPIPE)    {      errorstream = true;      SetError(strerror(errno));      }    SDL_mutexV(system_mutex);    return(0);  }    if((pos = SDL_RWseek(source, pos, SEEK_SET)) < 0)  {    if(errno != ESPIPE)    {      errorstream = true;      SetError(strerror(errno));      }    SDL_mutexV(system_mutex);    return(0);  }  SDL_mutexV(system_mutex);  return(size);}double MPEGsystem::TotalTime(){  off_t size, pos;  off_t file_ptr;  Uint8 * buffer, * p;  double time;  /* Lock to avoid concurrent access to the stream */  SDL_mutexP(system_mutex);  /* Save current position */  if((pos = SDL_RWtell(source)) < 0)  {    if(errno != ESPIPE)    {      errorstream = true;      SetError(strerror(errno));    }    SDL_mutexV(system_mutex);    return(false);  }  file_ptr = 0;  buffer = new Uint8[MPEG_BUFFER_SIZE];  time = 0;  /* If audio, compute total time according to bitrate of the first header and total size */  /* Note: this doesn't work on variable bitrate streams */  if(stream_list[0]->streamid == AUDIO_STREAMID)  {    do    {      if((size = SDL_RWseek(source, file_ptr, SEEK_SET)) < 0)      {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品私人影院| 成人av在线看| 国产精品一区一区| 91丨porny丨国产入口| 欧美一区二区三区免费观看视频| 2017欧美狠狠色| 午夜欧美大尺度福利影院在线看| 成人动漫一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩电影免费在线观看网站| 日韩精品一区二区三区中文不卡 | 日韩精品一区二区三区在线| 国产欧美日韩三级| 91污在线观看| 狠狠色丁香久久婷婷综合_中| 国产网红主播福利一区二区| 色视频成人在线观看免| 国产在线视频一区二区| 中文字幕日韩一区| 91麻豆精品国产自产在线 | 91免费视频网| 亚洲图片欧美色图| 久久精品一区二区三区不卡| 在线精品亚洲一区二区不卡| 婷婷国产在线综合| 午夜激情久久久| 97久久精品人人做人人爽| 一级特黄大欧美久久久| 久久蜜桃香蕉精品一区二区三区| 成人精品gif动图一区| 99v久久综合狠狠综合久久| 国产精品免费观看视频| 日韩一卡二卡三卡国产欧美| 日韩一级大片在线| 久久99精品久久只有精品| 久久伊人蜜桃av一区二区| 综合av第一页| 成人激情免费网站| 亚洲欧洲性图库| 色呦呦一区二区三区| 亚洲欧美日韩综合aⅴ视频| 97精品久久久午夜一区二区三区| 中文字幕在线一区二区三区| 亚洲成人免费观看| 亚洲三级久久久| 一区二区三区国产精品| 亚洲综合区在线| 无吗不卡中文字幕| 看片网站欧美日韩| 久久国产精品99久久人人澡| 美女精品一区二区| 粉嫩av一区二区三区粉嫩| 99久久伊人精品| 色伊人久久综合中文字幕| 欧美最猛黑人xxxxx猛交| 69精品人人人人| 欧美国产欧美综合| 一区二区成人在线视频| 久久精品免费观看| 91一区二区三区在线观看| 欧美视频中文字幕| 精品国产精品网麻豆系列| 国产精品久久久久久久久免费樱桃 | 欧美日韩综合在线免费观看| 欧美日韩电影一区| 欧美精品v日韩精品v韩国精品v| 国产成人鲁色资源国产91色综| 亚洲欧美日韩中文播放| 成人av网站在线观看免费| 奇米777欧美一区二区| √…a在线天堂一区| 成人动漫一区二区在线| 午夜精品久久久久久久99樱桃| 精品国产精品一区二区夜夜嗨| 欧美成人vps| 成人免费高清视频| 轻轻草成人在线| 1区2区3区欧美| 欧美www视频| 欧美视频在线一区| 91久久香蕉国产日韩欧美9色| 91麻豆精品国产自产在线观看一区| 久久久久久免费| 国产精品羞羞答答xxdd| 欧美一卡2卡三卡4卡5免费| 亚洲一区二区三区视频在线| heyzo一本久久综合| 欧美精品一区二区不卡| 亚洲免费观看高清| 99精品热视频| 亚洲精品国产第一综合99久久| 国产一区免费电影| 精品福利一区二区三区| 国产又粗又猛又爽又黄91精品| 91蝌蚪porny九色| 亚洲成a人片在线观看中文| 日本高清无吗v一区| 日本不卡视频在线观看| 26uuu久久综合| 精品一区二区三区视频| 国产精品久久久久久久午夜片| 91蝌蚪porny| 秋霞午夜鲁丝一区二区老狼| 精品欧美一区二区三区精品久久| 国产做a爰片久久毛片| 国产精品第四页| 日韩手机在线导航| 成人毛片老司机大片| 久久这里只有精品6| 久久国产精品第一页| 日韩理论电影院| 精品美女在线播放| 国产成人精品综合在线观看 | 日韩vs国产vs欧美| 韩国视频一区二区| 日韩欧美专区在线| 日韩欧美成人激情| 欧美老女人第四色| 日韩一区二区精品葵司在线| 欧美日韩免费观看一区三区| 国产无一区二区| 国产欧美中文在线| 国产视频一区二区在线| 国产日韩欧美精品在线| 国产人久久人人人人爽| 国产日韩精品一区二区三区在线| 久久精品亚洲麻豆av一区二区| av一本久道久久综合久久鬼色| 日韩影院在线观看| 天天做天天摸天天爽国产一区| 亚洲欧美日韩久久| 亚洲柠檬福利资源导航| 久久在线观看免费| 337p粉嫩大胆噜噜噜噜噜91av| 不卡一二三区首页| 不卡视频一二三四| 日本丶国产丶欧美色综合| www.亚洲激情.com| 在线精品观看国产| 欧美日韩综合色| 裸体歌舞表演一区二区| 久久精品夜色噜噜亚洲a∨| 亚洲免费大片在线观看| 中文字幕日韩一区二区| 亚洲第一久久影院| 日本中文字幕一区二区视频| 国产综合成人久久大片91| 成人一区二区视频| 欧美系列日韩一区| 久久―日本道色综合久久| 亚洲人成网站在线| 免费欧美日韩国产三级电影| 风间由美一区二区av101| 在线观看视频91| 久久久久久麻豆| 亚洲国产精品久久不卡毛片| 激情欧美一区二区| 色8久久精品久久久久久蜜| 欧美成人bangbros| 亚洲综合清纯丝袜自拍| 国产精品一级黄| 欧美福利一区二区| 亚洲欧美一区二区在线观看| 丝袜美腿亚洲综合| 91香蕉视频污| 欧美国产禁国产网站cc| 天天色综合成人网| 99精品桃花视频在线观看| 欧美mv日韩mv国产网站app| 亚洲情趣在线观看| 国产成人av一区二区三区在线观看| 欧美日韩一区精品| 国产精品国产自产拍高清av| 免费成人在线观看视频| 在线欧美小视频| 欧美高清在线一区| 国产老肥熟一区二区三区| 欧美久久久久中文字幕| 中文字幕日韩av资源站| 国产一区二区三区在线观看免费视频 | 91蜜桃在线免费视频| 精品国产在天天线2019| 亚洲6080在线| 欧洲国内综合视频| 国产综合色在线视频区| 欧美在线观看18| 亚洲免费av网站| 99re在线精品| 国产精品传媒视频| 国产宾馆实践打屁股91| 精品久久久久99| 精品久久久久久综合日本欧美| 喷水一区二区三区| 精品成人一区二区| 不卡av在线网| 青青草国产精品97视觉盛宴| 日韩欧美一区二区免费| 成人久久视频在线观看| 国产精品久久福利| 欧美二区乱c少妇|