#ifndef _MP_INTERFACE_H_ #define _MP_INTERFACE_H_ //============================================================================= // // File : mp_interface.h // Creation date : Fri Mar 25 20:01:25 2005 GMT by Szymon Stefanek // // This file is part of the KVirc irc client distribution // Copyright (C) 2005 Szymon Stefanek (pragma at kvirc dot net) // // This program 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 opinion) any later version. // // This program 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. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // //============================================================================= #include "kvi_settings.h" #include "kvi_qstring.h" #include "kvi_kvs_types.h" class KviMediaPlayerInterface { public: // don't do any initialization in the constructor // implement lazy initialization in each function instead KviMediaPlayerInterface(){}; virtual ~KviMediaPlayerInterface(){}; protected: TQString m_szLastError; public: const TQString & lastError(){ return m_szLastError; }; // // mandatory interface // // This should attempt to detect if the player is available on the user's system // and returning a score from 0 to 100 depending on how likely the player will work // and how many of its functions are available. 100 means that the interface // is absolutely sure that the player will start and play stuff. // If bStart is true then the function is allowed to explicitly start the player, // otherwise a startup attempt should not be made and different methods should be used. // This function is used for auto-detection and is called twice: the first time // with bStart set to false to determine the players that potentially could run. // If no player returns a reasonably high value by just guessing, then // a second loop may be attempted with the "bStart" parameter set to true. // A level of 0 is considered total failure: in this case detect() should // also set the last error to a descriptive string. virtual int detect(bool bStart) = 0; // play previous media, return false only on communication failure virtual bool prev() = 0; // play next media, return false only on communication failure virtual bool next() = 0; // start playback now, return false only on communication failure (i.e. return true when already playing) virtual bool play() = 0; // stop playback now, return false only on communication failure (i.e. return true when already stopped) virtual bool stop() = 0; // pause playback now (do NOT toggle pause, just pause), return false only on communication failure virtual bool pause() = 0; // current media related // currently played media: it should include AT least the title // but may also include other informations. // this string MUST be non-empty when the player is playing something. // If it is empty then either the player is not playing or there are // communication errors. virtual TQString nowPlaying() = 0; // currently played media resource locator // file:// for local files, dvb:// for dvb media , dvd:// for dvd's // http:// for audio streams etc... // empty if player is not playing (or in the tragic case that the player // can't determine the url). virtual TQString mrl() = 0; // optional interface // this should play the specified mrl // the mrl may be (or may be not) added to the player's playlist // the function should return false if the player doesn't support // this function or there is a communication error virtual bool playMrl(const TQString &mrl); // what is this ? :D virtual bool amipExec(const TQString &cmd); virtual TQString amipEval(const TQString &cmd); // this is functions to hide,show and minimize the player interface virtual bool hide(); virtual bool show(); virtual bool minimize(); // set the volume of mediaplayer (0-255) virtual bool setVol(kvs_int_t &iVol); // get the pvolume value(0-255) virtual int getVol(); //mute the volume virtual bool mute(); // should quit the player if it's running // return false only on communication failure virtual bool quit(); // return the current player status enum PlayerStatus { Unknown, Stopped, Playing, Paused }; virtual KviMediaPlayerInterface::PlayerStatus status(); // current position in the media (msecs) // 0 if the player isn't playing anything and -1 if unknown virtual int position(); // total length of the media (msecs) // 0 if the player isn't playing anyting and -1 if unknown (e.g. a stream) virtual int length(); // jump to position virtual bool jumpTo(int &iPos); // interface with a default implementation for certain types of media (read for mp3) // reimplement only if the player knows better // currently played media title (it's player choice if the title // is to be derived from the media file name or from the informations // stored inside the file like the ID3 tag...) // If the player is not playing, the returned string should be empty virtual TQString title(); // currently played media artist's name // If the player is not playing, the returned string should be empty // If the player can't guess the artist it should return the string "unknown" virtual TQString artist(); // currently plaued media genre // If the player is not playing, the returned string should be empty // If the player can't guess the genre it should return the string "unknown" virtual TQString genre(); // currently played media comment. // Empty string if the player isn't playing anything or there is no comment virtual TQString comment(); // currently played media year // Empty string if the player isn't playing anything or the year is unknown virtual TQString year(); // currently played media album // Empty string if the player isn't playing anything // If the player can't guess the album/collection then this string should be "unknown" virtual TQString album(); // bit rate in bits/sec, 0 if unknown virtual int bitRate(); // sample rate in samples/sec (Hz), 0 if unknown virtual int sampleRate(); // number of channels virtual int channels(); // frequency // the type of the media (MPEG Layer 3, MPEG Layer 4, OGG Vorbis, AVI Stream etc..) virtual TQString mediaType(); // get the position in the playlist virtual int getPlayListPos(); // set the position in the playlist virtual bool setPlayListPos(int &iPos); // return the list's length virtual int getListLength(); // return the Eq(number) value virtual int getEqData(int &i_val); // set the Eq(iPos) to Eq(iVal) value virtual bool setEqData(int &iPos, int &iVal); // get the Repeat bool value virtual bool getRepeat(); // get the shuffle bool value virtual bool getShuffle(); // set the Repeat bool value virtual bool setRepeat(bool &bVal); // set the shuffle bool value virtual bool setShuffle(bool &bVal); void setLastError(const TQString &szLastError){ m_szLastError = szLastError; }; protected: void notImplemented(); TQString getLocalFile(); }; class KviMediaPlayerInterfaceDescriptor { public: KviMediaPlayerInterfaceDescriptor(){}; virtual ~KviMediaPlayerInterfaceDescriptor(){}; public: virtual const TQString & name() = 0; virtual const TQString & description() = 0; virtual KviMediaPlayerInterface * instance() = 0; }; #define MP_DECLARE_DESCRIPTOR(_interfaceclass) \ class _interfaceclass ## Descriptor : public KviMediaPlayerInterfaceDescriptor \ { \ public: \ _interfaceclass ## Descriptor(); \ virtual ~_interfaceclass ## Descriptor(); \ protected: \ _interfaceclass * m_pInstance; \ TQString m_szName; \ TQString m_szDescription; \ public: \ virtual const TQString & name(); \ virtual const TQString & description(); \ virtual KviMediaPlayerInterface * instance(); \ }; #define MP_IMPLEMENT_DESCRIPTOR(_interfaceclass,_name,_description) \ _interfaceclass ## Descriptor::_interfaceclass ## Descriptor() \ : KviMediaPlayerInterfaceDescriptor() \ { \ m_pInstance = 0; \ m_szName = _name; \ m_szDescription = _description; \ } \ _interfaceclass ## Descriptor::~_interfaceclass ## Descriptor() \ { \ if(m_pInstance)delete m_pInstance; \ } \ const TQString & _interfaceclass ## Descriptor::name() \ { \ return m_szName; \ } \ const TQString & _interfaceclass ## Descriptor::description() \ { \ return m_szDescription; \ } \ KviMediaPlayerInterface * _interfaceclass ## Descriptor::instance() \ { \ if(!m_pInstance)m_pInstance = new _interfaceclass(); \ return m_pInstance; \ } #define MP_CREATE_DESCRIPTOR(_interfaceclass) \ new _interfaceclass ## Descriptor() #endif //!_MP_INTERFACE_H_