diff -r 000000000000 -r 474a1293c3c0 player-mp3.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/player-mp3.h Sat Dec 29 14:47:40 2007 +0100 @@ -0,0 +1,141 @@ +/* + * MP3/MPlayer plugin to VDR (C++) + * + * (C) 2001-2005 Stefan Huelswitt + * + * This code is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This code 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Or, point your browser to http://www.gnu.org/copyleft/gpl.html + */ + +#ifndef ___DVB_MP3_H +#define ___DVB_MP3_H + +#include +#include + +// ------------------------------------------------------------------- + +class cRingBufferFrame; +class cFrame; + +class cPlayList; +class cSong; +class cSongInfo; +class cBackgroundScan; +class cDecoder; +class cOutput; +class cOutputDvb; +class cShuffle; + +// ------------------------------------------------------------------- + +class cMP3PlayInfo { +public: + char Title[64], Artist[64], Album[64], SMode[32], Filename[256]; + int Year, SampleFreq, Bitrate, MaxBitrate; + int Num, MaxNum; + // not in hash + bool Loop, Shuffle; + int Hash; + }; + +// ------------------------------------------------------------------- + +class cPlayManager : public cThread { +private: + cMutex listMutex; + cCondVar fgCond, bgCond; + cList list; + cSong *curr; + int currIndex, maxIndex; + // + cSong *play; + bool playNew, eol; + // + cShuffle *shuffle; + bool shuffleMode, loopMode; + // + cSong *scan; + bool stopscan, throttle, pass2, release; + // + virtual void Action(void); + void NoScan(cSong *nono); + void NoPlay(cSong *nono); + void ThrottleWait(void); +public: + cPlayManager(void); + ~cPlayManager(); + // Control interface (to be called from frontend thread only!) + void Flush(void); + void Add(cPlayList *pl); + bool Next(void); + bool Prev(void); + void Goto(int num); + void ToggleShuffle(void); + void ToggleLoop(void); + bool Info(int num, cMP3PlayInfo *info); + void Halt(void); + // Player interface (to be called from player thread only!) + cSong *Current(void); + bool NewCurrent(void); + bool NextCurrent(void); + void Release(void); + void Throttle(bool thr); + }; + +extern cPlayManager *mgr; + +// ------------------------------------------------------------------- + +class cMP3Player : public cPlayer, cThread { +friend class cOutputDvb; +private: + bool active, started; + cRingBufferFrame *ringBuffer; + cMutex playModeMutex; + cCondVar playModeCond; +// + int playindex, total; + cDecoder *decoder; + cOutput *output; + cFrame *rframe, *pframe; + enum ePlayMode { pmPlay, pmStopped, pmPaused, pmStartup }; + ePlayMode playMode; + enum eState { msStart, msStop, msDecode, msNormalize, msResample, msOutput, msError, msEof, msWait, msRestart }; + eState state; + bool levelgood, isStream; + unsigned int dvbSampleRate; +// + void Empty(void); + void StopPlay(void); + void SetPlayMode(ePlayMode mode); + void WaitPlayMode(ePlayMode mode, bool inv); +protected: + virtual void Activate(bool On); + virtual void Action(void); +public: + cMP3Player(void); + virtual ~cMP3Player(); + void Pause(void); + void Play(void); + bool PrevCheck(void); + void SkipSeconds(int secs); + virtual bool GetIndex(int &Current, int &Total, bool SnapToIFrame=false); + virtual bool GetReplayMode(bool &Play, bool &Forward, int &Speed); + bool Active(void) { return active; } + bool IsStream(void) { return isStream; } + }; + +#endif //___DVB_MP3_H