📄 mpegaction.h
字号:
/* SMPEG - SDL MPEG Player Library Copyright (C) 1999 Loki Entertainment Software - Modified by Michel Darricau from eProcess <mdarricau@eprocess.fr> for popcorn - 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 virtual class to provide basic MPEG playback actions */#ifndef _MPEGACTION_H_#define _MPEGACTION_H_#include "SDL.h"#include "MPEGfilter.h"typedef enum { MPEG_ERROR = -1, MPEG_STOPPED, MPEG_PLAYING} MPEGstatus;class MPEGaction {public: MPEGaction() { playing = false; paused = false; looping = false; play_time = 0.0; } virtual void Loop(bool toggle) { looping = toggle; } virtual double Time(void) { /* Returns the time in seconds since start */ return play_time; } virtual void Play(void) = 0; virtual void Stop(void) = 0; virtual void Rewind(void) = 0; virtual void ResetSynchro(double) = 0; virtual void Skip(float seconds) = 0; virtual void Pause(void) { /* A toggle action */ if ( paused ) { paused = false; Play(); } else { Stop(); paused = true; } } /* Michel Darricau from eProcess <mdarricau@eprocess.fr> conflict name in popcorn */ virtual MPEGstatus GetStatus(void) = 0;protected: bool playing; bool paused; bool looping; double play_time; void ResetPause(void) { paused = false; }};/* For getting info about the audio portion of the stream */typedef struct MPEG_AudioInfo { int mpegversion; int mode; int frequency; int layer; int bitrate; int current_frame;} MPEG_AudioInfo;/* Audio action class */class MPEGaudioaction : public MPEGaction {public: virtual bool GetAudioInfo(MPEG_AudioInfo *info) { return(true); } virtual void Volume(int vol) = 0;};/* Matches the declaration of SDL_UpdateRect() */typedef void(*MPEG_DisplayCallback)(SDL_Surface* dst, int x, int y, unsigned int w, unsigned int h);/* For getting info about the video portion of the stream */typedef struct MPEG_VideoInfo { int width; int height; int current_frame; double current_fps;} MPEG_VideoInfo;/* Video action class */class MPEGvideoaction : public MPEGaction {public: virtual void SetTimeSource(MPEGaudioaction *source) { time_source = source; } virtual bool GetVideoInfo(MPEG_VideoInfo *info) { return(false); } virtual bool SetDisplay(SDL_Surface *dst, SDL_mutex *lock, MPEG_DisplayCallback callback) = 0; virtual void MoveDisplay(int x, int y) = 0; virtual void ScaleDisplayXY(int w, int h) = 0; virtual void SetDisplayRegion(int x, int y, int w, int h) = 0; virtual void RenderFrame(int frame) = 0; virtual void RenderFinal(SDL_Surface *dst, int x, int y) = 0; virtual SMPEG_Filter * Filter(SMPEG_Filter * filter) = 0;protected: MPEGaudioaction *time_source;};/* For getting info about the system portion of the stream */typedef struct MPEG_SystemInfo { int total_size; int current_offset; double total_time; double current_time;} MPEG_SystemInfo;#endif /* _MPEGACTION_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -