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

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

?? mpegstream.cpp

?? This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
?? CPP
字號:
/*    SMPEG - SDL MPEG Player Library    Copyright (C) 1999  Loki Entertainment Software    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library 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    Library General Public License for more details.    You should have received a copy of the GNU Library General Public    License along with this library; if not, write to the Free    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*//* The generic MPEG stream class */#include "MPEG.h"#include "MPEGstream.h"#include "video/video.h"/* This is the limit of the quantity of pre-read data */#define MAX_QUEUE (256 * 1024)MPEGstream::MPEGstream(MPEGsystem * System, Uint8 Streamid){  system = System;  streamid = Streamid;  br = new MPEGlist();  cleareof = true;  data = 0;  stop = 0;  pos = 0;    preread_size = 0;  looping = false;  enabled = true;  mutex = SDL_CreateMutex();}MPEGstream::~MPEGstream(){  MPEGlist * newbr;  SDL_DestroyMutex(mutex);  /* Free the list */  for(newbr = br; newbr->Prev(); newbr = newbr->Prev());  while(newbr->Next())  {    newbr = newbr->Next();    delete newbr->Prev();  }  delete newbr;}voidMPEGstream::reset_stream(){  MPEGlist * newbr;  SDL_mutexP(mutex);  /* Seek the first buffer */  for(newbr = br; newbr->Prev(); newbr = newbr->Prev());    /* Free buffers  */  while(newbr->Next())  {    newbr = newbr->Next();    delete newbr->Prev();  }   delete newbr;  br = new MPEGlist();  cleareof = true;  data = 0;  stop = 0;  pos = 0;  looping = false;  preread_size = 0;  SDL_mutexV(mutex);}voidMPEGstream::rewind_stream(){  /* Note that this will rewind all streams, and other streams than this one */  /* will finish reading their prebuffured data (they are not reseted) */  /* This should works because there are always sequence start codes or */  /* audio start codes at the beginning of the streams */  /* Of course, this won't work on network streams */  /* Restart the system */  system->Rewind();}boolMPEGstream:: next_system_buffer(void){  bool has_data = true;  /* No more buffer ? */  while(has_data && !br->Next())  {    SDL_mutexV(mutex);    system->RequestBuffer();    has_data = system->Wait();    SDL_mutexP(mutex);  }  if ( has_data && (br->Size() || cleareof) ) {    cleareof = false;    br = br->Next();    preread_size -= br->Size();  }  return(has_data);}boolMPEGstream:: next_packet(bool recurse, bool update_timestamp){  SDL_mutexP(mutex);  /* Unlock current buffer */  br->Unlock();  /* Check for the end of stream mark */  next_system_buffer();  if(eof())  {    bool system_eof;    if(looping)    {      do {        cleareof = true;        system_eof = next_system_buffer();      } while(eof() && !system_eof);    }    else    {      system_eof = true;    }    if ( system_eof ) {      /* Report eof */      SDL_mutexV(mutex);      return(false);    }  }  /* Lock the buffer */  br->Lock();  /* Make sure that we have read buffers in advance if possible */  if(preread_size < MAX_QUEUE)    system->RequestBuffer();    /* Update stream datas */  data = (Uint8 *) br->Buffer();  stop = data + br->Size();  if(update_timestamp){    timestamp = br->TimeStamp;    timestamp_pos = pos;  }  SDL_mutexV(mutex);  return(true);}MPEGstream_marker *MPEGstream:: new_marker(int offset){    MPEGstream_marker * marker;    SDL_mutexP(mutex);    /* We can't mark past the end of the stream */    if ( eof() ) {      SDL_mutexV(mutex);      return(0);    }    /* It may be possible to seek in the data stream, but punt for now */    if ( ((data+offset) < br->Buffer()) || ((data+offset) > stop) ) {        SDL_mutexV(mutex);        return(0);    }    /* Set up the mark */    marker = new MPEGstream_marker;    marker->marked_buffer = br;    marker->marked_data = data+offset;    marker->marked_stop = stop;    /* Lock the new buffer */    marker->marked_buffer->Lock();    SDL_mutexV(mutex);    return(marker);}boolMPEGstream:: seek_marker(MPEGstream_marker const * marker){    SDL_mutexP(mutex);    if ( marker ) {        /* Release current buffer */        if(br->IsLocked())	{	  br->Unlock();       	  marker->marked_buffer->Lock();	}        /* Reset the data positions */	br = marker->marked_buffer;        data = marker->marked_data;        stop = marker->marked_stop;    }    SDL_mutexV(mutex);    return(marker != 0);}voidMPEGstream:: delete_marker(MPEGstream_marker *marker){    if( marker && marker->marked_buffer)    {      marker->marked_buffer->Unlock();      delete marker;    }}Uint32MPEGstream:: copy_data(Uint8 *area, Sint32 size, bool short_read){    Uint32 copied = 0;    bool timestamped = false;    while ( (size > 0) && !eof()) {        Uint32 len;        /* Get new data if necessary */        if ( data == stop ) {            /* try to use the timestamp of the first packet */            if ( ! next_packet(true, (timestamp == -1) || !timestamped) ) {                break;            }	    timestamped = true;        }	SDL_mutexP(mutex);        /* Copy as much as we need */        if ( size <= (Sint32)(stop-data) ) {            len = size;        } else {            len = (stop-data);        }        memcpy(area, data, len);        area += len;        data += len;        size -= len;        copied += len;	pos += len;        /* Allow 32-bit aligned short reads? */        if ( ((copied%4) == 0) && short_read ) {            break;        }	SDL_mutexV(mutex);    }    return(copied);}int MPEGstream::copy_byte(void){  /* Get new data if necessary */  if ( data == stop ) {    if ( ! next_packet() ) {      return (-1);    }  }  pos ++;  return(*data++);}bool MPEGstream::eof() const{  return(!br->Size());}void MPEGstream::insert_packet(Uint8 * Data, Uint32 Size, double timestamp){  MPEGlist * newbr;  /* Discard all packets if not enabled */  if(!enabled) return;  SDL_mutexP(mutex);  preread_size += Size;  /* Seek the last buffer */  for(newbr = br; newbr->Next(); newbr = newbr->Next());  /* Position ourselves at the end of the stream */  newbr = newbr->Alloc(Size);  if ( Size ) {    memcpy(newbr->Buffer(), Data, Size);  }  newbr->TimeStamp = timestamp;  SDL_mutexV(mutex);  garbage_collect();}/* - Check for unused buffers and free them - */void MPEGstream::garbage_collect(void){  MPEGlist * newbr;  SDL_mutexP(mutex);    br->Lock();  /* First of all seek the first buffer */  for(newbr = br; newbr->Prev(); newbr = newbr->Prev());  /* Now free buffers until we find a locked buffer */  while(newbr->Next() && !newbr->IsLocked())  {    newbr = newbr->Next();    delete newbr->Prev();  }  br->Unlock();  SDL_mutexV(mutex);}void MPEGstream::loop(bool toggle){  looping = toggle;}bool MPEGstream::is_looping() const{  return(looping);}void MPEGstream::enable(bool toggle){  enabled = toggle;}double MPEGstream::time(){  return(br->TimeStamp);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲女爱视频在线| 欧美一区二区三区四区久久| 欧美私模裸体表演在线观看| 欧美精品国产精品| 精品国产91亚洲一区二区三区婷婷| 国产亚洲va综合人人澡精品 | 亚洲aⅴ怡春院| 九一九一国产精品| 不卡的av网站| 日韩午夜激情av| 国产精品欧美久久久久无广告 | 在线视频综合导航| 日韩精品一区在线观看| 亚洲欧美国产77777| 男人的天堂亚洲一区| av在线不卡免费看| 3d成人h动漫网站入口| 国产精品丝袜一区| 日韩综合小视频| 成人av在线电影| 欧美zozozo| 亚洲一区二区在线免费观看视频| 黄色成人免费在线| 欧美日韩国产综合一区二区| 国产偷国产偷亚洲高清人白洁 | 欧美日韩二区三区| 国产精品美女久久久久久久网站| 一片黄亚洲嫩模| 国产福利视频一区二区三区| 欧美精品在线观看播放| 国产精品久久久久一区二区三区 | 精品1区2区在线观看| 亚洲一区精品在线| av电影在线不卡| 精品国产免费久久| 首页亚洲欧美制服丝腿| 91麻豆自制传媒国产之光| xf在线a精品一区二区视频网站| 亚洲高清视频的网址| 成人高清免费观看| 精品国产伦理网| 天天综合色天天综合| 91视频在线看| 国产欧美精品一区二区三区四区| 毛片av中文字幕一区二区| 欧洲在线/亚洲| 亚洲欧美aⅴ...| 成人综合婷婷国产精品久久免费| 日韩欧美国产1| 日日夜夜免费精品| 欧美亚洲日本一区| 国产精品萝li| 激情av综合网| 337p日本欧洲亚洲大胆色噜噜| 肉肉av福利一精品导航| 欧美三电影在线| 亚洲精品中文在线| 91麻豆国产精品久久| 国产精品卡一卡二卡三| 成人小视频免费观看| 久久女同精品一区二区| 久久国产尿小便嘘嘘尿| 日韩欧美亚洲一区二区| 日韩高清中文字幕一区| 欧美日韩国产精品成人| 亚洲成av人**亚洲成av**| 日本高清不卡一区| 一区二区三区中文字幕在线观看| 99久久精品费精品国产一区二区| 中文字幕在线不卡视频| 北条麻妃一区二区三区| 中文字幕一区二区三| 99精品视频在线播放观看| 中文字幕亚洲在| 91色乱码一区二区三区| 中文字幕视频一区| 91亚洲资源网| 亚洲一区二区高清| 欧美日韩成人在线| 奇米影视7777精品一区二区| 欧美久久免费观看| 青青草国产成人av片免费| 日韩三级在线免费观看| 国产在线视频不卡二| 久久久99久久| 不卡av电影在线播放| 亚洲精品免费一二三区| 欧美午夜影院一区| 蜜臀久久99精品久久久画质超高清| 日韩欧美亚洲另类制服综合在线 | 日本一区二区视频在线| 国产91精品露脸国语对白| 成人欧美一区二区三区白人| 色天使色偷偷av一区二区| 亚洲一二三四在线| 欧美一级免费大片| 国产伦精品一区二区三区视频青涩 | 精品处破学生在线二十三| 国产精品一区一区| 最新成人av在线| 欧美美女喷水视频| 精品一区二区三区视频 | 91免费观看国产| 亚洲国产精品麻豆| 欧美成人免费网站| 成人免费av在线| 亚洲高清在线视频| 久久综合网色—综合色88| 成人国产精品免费观看视频| 亚洲综合精品自拍| 精品少妇一区二区三区视频免付费 | 91精品午夜视频| 国产一区欧美二区| 亚洲精选在线视频| 欧美一区二区成人| www.欧美.com| 午夜精品久久久久久久蜜桃app| 精品国产一区二区精华| 91天堂素人约啪| 久久精品国产**网站演员| 国产三级精品三级| 欧美喷潮久久久xxxxx| 国产suv一区二区三区88区| 亚洲第一综合色| 久久精品夜夜夜夜久久| 欧美三级三级三级爽爽爽| 国产精品一区二区三区网站| 亚洲精品乱码久久久久| 久久夜色精品一区| 欧美视频在线不卡| 国产精品99久| 日韩主播视频在线| 中文字幕一区二区三区在线不卡| 91精品国产欧美一区二区| 99视频精品全部免费在线| 九九**精品视频免费播放| 亚洲一区二区三区爽爽爽爽爽| 国产欧美一区二区三区鸳鸯浴 | 美女视频黄 久久| 亚洲视频在线一区| 久久女同性恋中文字幕| 在线观看av一区二区| 国产精品一线二线三线精华| 亚洲一区二区三区视频在线播放| 久久精品人人爽人人爽| 日韩欧美国产小视频| 91国偷自产一区二区开放时间| 国产精品一级在线| 免费不卡在线视频| 亚洲国产cao| 亚洲欧美激情在线| 国产女主播一区| 日韩欧美一区中文| 欧美精品乱码久久久久久| 色综合久久久久综合| 国产激情一区二区三区桃花岛亚洲| 日本伊人精品一区二区三区观看方式 | 青青草视频一区| 亚洲成人一区在线| 亚洲丝袜美腿综合| 精品精品欲导航| 欧美一区二区国产| 欧美精品少妇一区二区三区| 色综合久久六月婷婷中文字幕| 国产成人午夜99999| 紧缚捆绑精品一区二区| 日本最新不卡在线| 亚洲va欧美va人人爽| 亚洲一区在线视频| 亚洲主播在线观看| 亚洲一区二区三区中文字幕| 亚洲四区在线观看| 亚洲免费观看视频| 亚洲精品日韩综合观看成人91| 国产精品久久久久久久裸模| 中文字幕免费观看一区| 欧美国产禁国产网站cc| 久久天天做天天爱综合色| 久久综合99re88久久爱| 久久日韩粉嫩一区二区三区| 欧美xxx久久| 久久色在线观看| 久久久精品国产免费观看同学| 2021久久国产精品不只是精品| 2020国产精品自拍| 国产免费成人在线视频| 国产精品热久久久久夜色精品三区| 日本一区二区三区电影| 国产精品毛片大码女人| 综合电影一区二区三区 | 91蝌蚪porny九色| 色视频欧美一区二区三区| 色噜噜夜夜夜综合网| 欧美日韩三级视频| 在线播放日韩导航| 欧美成人一区二区三区| www久久精品| 国产精品国产三级国产专播品爱网| 国产精品久99| 亚洲综合色噜噜狠狠|