/************************************************************************** * Copyright (C) 2005 by Jean-Michel Petit * * jm_petit@laposte.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 option) 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. * ***************************************************************************/ #ifndef K9DVD_H #define K9DVD_H #include "k9common.h" #include "k9dvdread.h" #include <tqstringlist.h> #include <tqdatetime.h> #include <tqvaluelist.h> struct streamSize { unsigned char id; float size_mb; float percent; }; struct stream_counter { unsigned char id; int count; float size_mb; float percent; }; class k9DVDProgress; class k9DVDChapter; class k9DVDTitle; class k9DVDTitleset; /** get the DVD structure with titles lengths and streams lengths. *@author */ class k9DVD : public TQObject { Q_OBJECT private: TQObjectList m_titles; TQPtrList<k9DVDTitleset> m_titlesets; TQString m_title; int m_titleCount; k9DVDTitle *m_longestTitle; TQStringList m_lvideoFormat; TQStringList m_laspectRatio; TQStringList m_lquantization; TQStringList m_lmpegVersion; TQStringList m_lvideoHeight; TQStringList m_lvideoWidth; TQStringList m_lpermittedDf; TQStringList m_laudioFormat; TQStringList m_lsampleFreq; TQStringList m_laudioType; TQStringList m_lsubpType; TQStringList m_langCode; TQStringList m_langName; double m_frames_per_s[4]; uint m_menuSize; k9DVDProgress *m_progressDlg; TQString m_Device; bool m_error; TQString m_errMsg; bool m_opened; TQString m_format; k9DVDTitle* m_start; int m_titlesetCount; public: k9DVD(TQObject *parent=0,const char *name=0,const TQStringList args=0) ; ~k9DVD(); /** * Opens and estimates the size of each stream * @param device input device * @return return code (0=ok) */ virtual int scandvd (const TQString & device,bool _quickScan); /** * gets the title of the DVD * @return DVD title */ virtual const TQString& getDVDTitle(); /** * set the title of the DVD * @param _newVal the new DVD title */ virtual void setDVDTitle(const TQString &_newVal); /** * * @return returns the number of titles */ virtual const int& gettitleCount(); /** * * @return returns the number of titlesets */ virtual const int& gettitlesetCount(); /** * returns a title of the DVD * @param num the title number * @return the title */ virtual k9DVDTitle* gettitle(int num); /** * returns a title (which is in tt_srpt) * @param num the title number * @return the title */ virtual k9DVDTitle* gettitleByNum(int num); virtual k9DVDTitle *getlongestTitle(); virtual float getfactor(bool withMenus,bool _streams,bool _useDvdAuthor); virtual const TQString& getDevice(); virtual const bool& geterror(); virtual const TQString& geterrMsg(); virtual const bool& getopened(); virtual uint64_t getsizeSelected(bool _streams); virtual TQString &getFormat(); virtual k9DVDTitle* getstart(); virtual void setstart(k9DVDTitle* title); virtual int getnewTitleNum(k9DVDTitle *title); virtual int getmenuSize(); virtual void close(); virtual k9DVDTitleset *gettitleset(int num); virtual k9DVDRead * getdvd() {return &m_dvd;} static TQString lang_name(const TQString & code,const TQString & name); private: // Private methods k9DVDRead m_dvd; k9DVDTitle* addTitle(k9DVDTitleset *titleset,int id,int num,int _VTS,int _pgc,uint32_t _startSector, bool _indexed); float calcVobuSize(ifo_handle_t *_ifo,k9DVDChapter *_chapter); long stream_vob( int title, unsigned long startblock, unsigned long lastblock, struct stream_counter *sc); int identify_stream( unsigned char *buffer ) ; int dvdtime2msec(dvd_time_t *dt); int get_title_name(const char* dvd_device, char* title); void calcStreamSize(k9DVDTitle & title); void setError(const TQString &err); int getVampsID(int type); int calcNumTitle(ifo_handle_t *ifo,int _vts,int _ttn); public slots: // Public slots void slotVobProgress(unsigned int position,unsigned int total); void slotTitleProgress(unsigned int position,unsigned int total); void slotTitleText(TQString &text); void slotTotalText(TQString &text); signals: // Signals void sigVobProgress(unsigned int position,unsigned int total); void sigTitleProgress(unsigned int position,unsigned int total); void sigTitleText(TQString &text); void sigTotalText(TQString &text); }; typedef struct lng { char code[3]; TQString name;}; #endif