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

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

?? mpegring.cpp

?? This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
?? CPP
字號(hào):
/*    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.*/#include <stdlib.h>#include <stdio.h>#include <assert.h>#include <string.h>#include "SDL_timer.h"#include "MPEGring.h"MPEG_ring:: MPEG_ring( Uint32 size, Uint32 count ){    Uint32 tSize;    /* Set up the 'ring' pointer for all the old C code */    ring = this;    tSize = (size + sizeof(Uint32)) * count;    if( tSize )    {        ring->begin = (Uint8 *) malloc( tSize );        ring->timestamps = (double *) malloc( sizeof(double)*count );    }    else        ring->begin = 0;    if( ring->begin && count )    {        ring->end   = ring->begin + tSize;        ring->read  = ring->begin;        ring->write = ring->begin;        ring->timestamp_read  = timestamps;        ring->timestamp_write = timestamps;        ring->bufSize  = size;                ring->readwait = SDL_CreateSemaphore(0);        ring->writewait = SDL_CreateSemaphore(count);    }    else    {        ring->end   = 0;        ring->read  = 0;        ring->write = 0;        ring->bufSize  = 0;        ring->readwait = 0;    }    if ( ring->begin && ring->readwait && ring->writewait ) {        ring->active = 1;    }}/* Release any waiting threads on the ring so they can be cleaned up.   The ring isn't valid after this call, so when threads are done you   should call MPRing_sdelete() on the ring. */voidMPEG_ring:: ReleaseThreads( void ){    /* Let the threads know that the ring is now inactive */    ring->active = 0;    if ( ring->readwait ) {        while ( SDL_SemValue(ring->readwait) == 0 ) {            SDL_SemPost(ring->readwait);        }    }    if ( ring->writewait ) {        while ( SDL_SemValue(ring->writewait) == 0 ) {            SDL_SemPost(ring->writewait);        }    }}MPEG_ring:: ~MPEG_ring( void ){    if( ring )    {        /* Free up the semaphores */        ReleaseThreads();	/* Destroy the semaphores */	if( ring->readwait )	{	    SDL_DestroySemaphore( ring->readwait );	    ring->readwait = 0;	}	if( ring->writewait )	{	    SDL_DestroySemaphore( ring->writewait );	    ring->writewait = 0;	}        /* Free data buffer */        if ( ring->begin ) {            free( ring->begin );            free( ring->timestamps );            ring->begin = 0;            ring->timestamps = 0;        }    }}/*  Returns free buffer of ring->bufSize to be filled with data.  Zero is returned if there is no free buffer.*/Uint8 *MPEG_ring:: NextWriteBuffer( void ){    Uint8 *buffer;    buffer = 0;    if ( ring->active ) {	//printf("Waiting for write buffer (%d available)\n", SDL_SemValue(ring->writewait));        SDL_SemWait(ring->writewait);	//printf("Finished waiting for write buffer\n");	if ( ring->active ) {            buffer = ring->write + sizeof(Uint32);        }    }    return buffer;}/*  Call this when the buffer returned from MPRing_nextWriteBuffer() has  been filled.  The passed length must not be larger than ring->bufSize.*/voidMPEG_ring:: WriteDone( Uint32 len, double timestamp){    if ( ring->active ) {#ifdef NO_GRIFF_MODS        assert(len <= ring->bufSize);#else	if ( len > ring->bufSize )            len = ring->bufSize;#endif        *((Uint32*) ring->write) = len;        ring->write += ring->bufSize + sizeof(Uint32);        *(ring->timestamp_write++) = timestamp;        if( ring->write >= ring->end )        {            ring->write = ring->begin;            ring->timestamp_write = ring->timestamps;        }//printf("Finished write buffer of %u bytes, making available for reads (%d+1 available for reads)\n", len, SDL_SemValue(ring->readwait));        SDL_SemPost(ring->readwait);    }}/*  Returns the number of bytes in the next ring buffer and sets the buffer  pointer to this buffer.  If there is no buffer ready then the buffer  pointer is not changed and zero is returned.*/Uint32MPEG_ring:: NextReadBuffer( Uint8** buffer ){    Uint32 size;    size = 0;    if ( ring->active ) {        /* Wait for a buffer to become available *///printf("Waiting for read buffer (%d available)\n", SDL_SemValue(ring->readwait));        SDL_SemWait(ring->readwait);//printf("Finished waiting for read buffer\n");	if ( ring->active ) {            size = *((Uint32*) ring->read);            *buffer = ring->read + sizeof(Uint32);        }    }    return size;}/*  Call this when you have used some of the buffer previously returned by  MPRing_nextReadBuffer(), and want to update it so the rest of the data  is returned with the next call to MPRing_nextReadBuffer().*/doubleMPEG_ring:: ReadTimeStamp(void){  if(ring->active)    return *ring->timestamp_read;  return(0);}voidMPEG_ring:: ReadSome( Uint32 used ){    Uint8 *data;    Uint32 oldlen;    Uint32 newlen;    if ( ring->active ) {        data = ring->read + sizeof(Uint32);        oldlen = *((Uint32*) ring->read);        newlen = oldlen - used;        memmove(data, data+used, newlen);        *((Uint32*) ring->read) = newlen;//printf("Reusing read buffer (%d+1 available)\n", SDL_SemValue(ring->readwait));        SDL_SemPost(ring->readwait);    }}/*  Call this when the buffer returned from MPRing_nextReadBuffer() is no  longer needed.  This assumes there is only one read thread and one write  thread for a particular ring buffer.*/voidMPEG_ring:: ReadDone( void ){    if ( ring->active ) {        ring->read += ring->bufSize + sizeof(Uint32);        ring->timestamp_read++;        if( ring->read >= ring->end )        {            ring->read = ring->begin;            ring->timestamp_read = ring->timestamps;        }//printf("Finished read buffer, making available for writes (%d+1 available for writes)\n", SDL_SemValue(ring->writewait));        SDL_SemPost(ring->writewait);    }}/* EOF */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产精品视频免费观看| 欧美一级欧美三级| 国产精品久久久爽爽爽麻豆色哟哟| 美女网站在线免费欧美精品| 欧美一区二区免费观在线| 欧美aⅴ一区二区三区视频| 欧美精品777| 亚洲成av人片| 亚洲国产视频直播| 国产麻豆视频一区| 风间由美一区二区三区在线观看| 国产一区免费电影| 一本大道av伊人久久综合| a亚洲天堂av| 欧美三级午夜理伦三级中视频| 欧美中文字幕一二三区视频| 欧美一区二区三区视频免费| 成人午夜大片免费观看| 蜜臂av日日欢夜夜爽一区| 日韩欧美激情一区| 成人黄色在线网站| 亚洲综合色区另类av| 日韩一级成人av| 成人免费的视频| 亚洲成在人线在线播放| 亚洲精品一区二区三区精华液| 成人免费视频app| 午夜久久久影院| 久久精品人人爽人人爽| 色哟哟日韩精品| 精品综合久久久久久8888| 综合色天天鬼久久鬼色| 欧美一级欧美一级在线播放| 99热在这里有精品免费| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲国产精品av| 在线不卡欧美精品一区二区三区| 国产91色综合久久免费分享| 亚洲va在线va天堂| 中文字幕欧美三区| 精品少妇一区二区三区日产乱码 | 亚洲影视在线播放| 日韩免费视频一区| 色婷婷精品久久二区二区蜜臀av| 麻豆91免费观看| 一二三四区精品视频| 久久久久国产精品人| 欧美精品xxxxbbbb| 在线精品视频一区二区| 国产成人啪免费观看软件| 日本不卡1234视频| 亚洲精品高清在线观看| 国产亚洲欧美日韩日本| 91精品国产综合久久久久久久 | 色综合久久精品| 国产精品少妇自拍| 国产在线播放一区三区四| 中文字幕不卡在线播放| 成人中文字幕在线| 亚洲同性gay激情无套| 色综合久久六月婷婷中文字幕| 亚洲美女屁股眼交| 欧美精品色一区二区三区| 青青草国产成人av片免费| 日韩精品一区二区在线观看| av爱爱亚洲一区| 欧美精品色综合| 国产主播一区二区| 九色|91porny| 午夜久久福利影院| 亚洲v中文字幕| 亚洲午夜影视影院在线观看| 亚洲视频小说图片| 中文字幕日本不卡| 中文字幕永久在线不卡| 国产精品私人自拍| 中文字幕国产一区二区| 国产视频一区二区在线观看| 久久久午夜精品理论片中文字幕| 欧美精品一区男女天堂| 久久综合成人精品亚洲另类欧美| 精品粉嫩aⅴ一区二区三区四区 | 久久97超碰国产精品超碰| 亚洲成人激情社区| 婷婷中文字幕综合| 日韩中文字幕av电影| 首页欧美精品中文字幕| 日韩影院在线观看| 麻豆精品在线看| 精品一区二区三区av| 国内精品写真在线观看| 国产乱妇无码大片在线观看| 国产精品99久久久久久似苏梦涵| 国产精品香蕉一区二区三区| 成人性视频免费网站| 成人免费高清在线| 欧美在线观看一区| 91精品久久久久久蜜臀| 欧美精品一区二区三区四区| 久久精品人人做| 综合婷婷亚洲小说| 首页国产欧美日韩丝袜| 国产一区二区毛片| 色综合色综合色综合色综合色综合 | 99久久精品国产麻豆演员表| 欧美影院精品一区| 欧美变态tickling挠脚心| 国产亚洲精品精华液| 自拍偷拍亚洲综合| 视频一区二区三区中文字幕| 经典一区二区三区| 国内成+人亚洲+欧美+综合在线| 亚洲午夜精品17c| 色婷婷av一区二区| 欧美电影免费提供在线观看| 91精品久久久久久久91蜜桃| 精品美女在线播放| 美女精品一区二区| 日韩不卡手机在线v区| 日本不卡视频在线观看| 激情都市一区二区| 一本一道久久a久久精品综合蜜臀| 92精品国产成人观看免费| 色诱亚洲精品久久久久久| 亚洲国产精品一区二区久久恐怖片| 日韩av不卡一区二区| 国产a精品视频| 精品视频123区在线观看| 国产亚洲欧洲997久久综合| 伊人婷婷欧美激情| 九一久久久久久| 欧美图片一区二区三区| 久久综合久色欧美综合狠狠| 亚洲综合免费观看高清完整版 | 1区2区3区精品视频| 三级久久三级久久| 91在线视频官网| 日韩欧美专区在线| 亚洲男人天堂一区| 国产成人免费视频一区| 666欧美在线视频| 亚洲精品综合在线| 国产超碰在线一区| 日韩欧美aaaaaa| 午夜精品免费在线观看| 91在线视频观看| 中文乱码免费一区二区| 久久国产视频网| 欧美日韩国产精选| 亚洲视频一区二区在线| 风间由美一区二区av101| 日韩女优电影在线观看| 日韩电影在线免费| 91久久精品一区二区二区| 中文字幕一区二区三区不卡| 激情综合亚洲精品| 日韩一级完整毛片| 亚洲成人手机在线| 欧美主播一区二区三区| 亚洲免费观看视频| 成人午夜短视频| 国产精品伦理一区二区| 国产一区美女在线| 久久综合久久综合久久| 韩国女主播成人在线观看| 欧美mv日韩mv国产| 黄色日韩三级电影| 精品成人佐山爱一区二区| 久久99国产乱子伦精品免费| 日韩一级黄色片| 九九精品一区二区| 精品少妇一区二区三区免费观看 | 国产精品夜夜嗨| 欧美a一区二区| 久久成人免费网| 亚洲日本在线a| 欧美一级专区免费大片| 国产iv一区二区三区| 亚洲福利国产精品| 国产精品视频线看| 在线观看不卡一区| 国产成人在线电影| 免费观看30秒视频久久| 国产精品欧美一区喷水| wwwwxxxxx欧美| 国产精品乱人伦| 狠狠色丁香婷婷综合久久片| 精品国产一区二区三区不卡| 老汉av免费一区二区三区| 久久久久久黄色| eeuss国产一区二区三区| 亚洲黄色录像片| 欧美日韩一级黄| 久久国产日韩欧美精品| 26uuu另类欧美| 大桥未久av一区二区三区中文| 日韩美女视频一区二区| 欧美日韩精品欧美日韩精品| 蜜臀久久99精品久久久久宅男| 久久免费午夜影院|