⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpegring.h

📁 This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
💻 H
字号:
/*    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.*//* A ring-buffer class for multi-threaded applications.   This assumes a single reader and a single writer, with blocking reads. */#ifndef _MPEGRING_H#define _MPEGRING_H#include "SDL_types.h"#include "SDL_thread.h"class MPEG_ring {public:    /* Create a ring with 'count' buffers, each 'size' bytes long */    MPEG_ring(Uint32 size, Uint32 count = 16);    /* 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.     */    void ReleaseThreads(void);    /* Destroy a ring after all threads are no longer using it */    virtual ~MPEG_ring();    /* Returns the maximum size of each buffer */    Uint32 BufferSize( void ) {        return(bufSize);    }    /* Returns how many buffers have available data */    int BuffersWritten(void) {        return(SDL_SemValue(ring->readwait));    }    /* Reserve a buffer for writing in the ring */    Uint8 *NextWriteBuffer( void );    /* Release a buffer, written to in the ring */    void WriteDone( Uint32 len, double timestamp=-1 );    /* Reserve a buffer for reading in the ring */    Uint32 NextReadBuffer( Uint8** buffer );    /* Read the timestamp of the current buffer */    double ReadTimeStamp(void);    /* Release a buffer having read some of it */    void ReadSome( Uint32 used );    /* Release a buffer having read all of it */    void ReadDone( void );protected:    MPEG_ring *ring;    /* Converted from C code, an alias for 'this' */    /* read only */    Uint32 bufSize;        /* private */    Uint8 *begin;    Uint8 *end;    double *timestamps;    double *timestamp_read;    double *timestamp_write;     Uint8 *read;    Uint8 *write;    /* For read/write synchronization */    int active;    SDL_semaphore *readwait;    SDL_semaphore *writewait;};#endif /* _MPEGRING_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -