File indexing completed on 2024-05-12 04:51:10

0001 /*
0002     SPDX-FileCopyrightText: 2003-2004 Christian Kvasny <chris@k3b.org>
0003     SPDX-FileCopyrightText: 2010 Michal Malek <michalm@jabster.pl>
0004     SPDX-FileCopyrightText: 1998-2010 Sebastian Trueg <trueg@k3b.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #ifndef K3BVCDTRACK_H
0010 #define K3BVCDTRACK_H
0011 
0012 #include "mpeginfo/k3bmpeginfo.h"
0013 #include "k3b_export.h"
0014 
0015 #include <KIO/Global>
0016 
0017 #include <QString>
0018 #include <QFileInfo>
0019 #include <QFile>
0020 
0021 namespace K3b {
0022     class LIBK3B_EXPORT VcdTrack
0023     {
0024     public:
0025         VcdTrack( QList<VcdTrack*>* parent, const QString& filename );
0026         ~VcdTrack();
0027 
0028         QString fileName() const
0029         {
0030             return QFileInfo( m_file ).fileName();
0031         }
0032         QString absolutePath() const
0033         {
0034             return QFileInfo( m_file ).absoluteFilePath();
0035         }
0036         KIO::filesize_t size() const;
0037         int index() const;
0038 
0039         const QString& title() const
0040         {
0041             return m_title;
0042         }
0043         void setTitle( const QString& t )
0044         {
0045             m_title = t;
0046         }
0047         bool isSegment()
0048         {
0049             return mpegType() == 1;
0050         };
0051 
0052         // PBC
0053         enum PbcTracks { PREVIOUS, NEXT, RETURN, DEFAULT, AFTERTIMEOUT };
0054         enum PbcTypes { DISABLED, VIDEOEND };
0055         static QList<PbcTracks> trackPlaybackValues();
0056 
0057         void addToRevRefList( VcdTrack* revreftrack );
0058         void delFromRevRefList( VcdTrack* revreftrack );
0059         bool hasRevRef();
0060         void delRefToUs();
0061         void delRefFromUs();
0062 
0063         void setPbcTrack( PbcTracks which, VcdTrack* pbctrack = 0L );
0064         void setPbcNonTrack( PbcTracks which, PbcTypes type );
0065         void setUserDefined( PbcTracks, bool );
0066         void setPlayTime( int t )
0067         {
0068             m_pbcplaytime = t;
0069         }
0070         void setWaitTime( int t )
0071         {
0072             m_pbcwaittime = t;
0073         }
0074         void setReactivity( bool b )
0075         {
0076             m_reactivity = b;
0077         }
0078         void setPbcNumKeys( const bool& b )
0079         {
0080             m_pbcnumkeys = b;
0081         }
0082         bool PbcNumKeys() const
0083         {
0084             return m_pbcnumkeys;
0085         };
0086         void setPbcNumKeysUserdefined( const bool& b )
0087         {
0088             m_pbcnumkeysuserdefined = b;
0089         };
0090         bool PbcNumKeysUserdefined() const
0091         {
0092             return m_pbcnumkeysuserdefined;
0093         };
0094 
0095         VcdTrack* getPbcTrack( PbcTracks which );
0096         int getNonPbcTrack( PbcTracks which );
0097         bool isPbcUserDefined( PbcTracks which );
0098         int getPlayTime()
0099         {
0100             return m_pbcplaytime;
0101         }
0102         int getWaitTime()
0103         {
0104             return m_pbcwaittime;
0105         }
0106         bool Reactivity()
0107         {
0108             return m_reactivity;
0109         }
0110 
0111         // Numeric keys
0112         void setDefinedNumKey( int key, VcdTrack* track )
0113         {
0114             m_definedkeysmap.insert( key, track );
0115         }
0116         void delDefinedNumKey( int key )
0117         {
0118             m_definedkeysmap.remove( key );
0119         }
0120         void delDefinedNumKey()
0121         {
0122             m_definedkeysmap.clear();
0123         }
0124         QMap<int, VcdTrack*> DefinedNumKey()
0125         {
0126             return m_definedkeysmap;
0127         }
0128 
0129         // Mpeg Infos
0130         QString resolution();
0131         QString highresolution();
0132         QString video_frate();
0133         QString video_bitrate();
0134         QString audio_layer();
0135         QString audio_bitrate();
0136         QString audio_sampfreq();
0137 
0138         QString duration()
0139         {
0140             return SecsToHMS( mpeg_info->playing_time );
0141         };
0142         int version()
0143         {
0144             return mpeg_info->version;
0145         };
0146         unsigned long muxrate()
0147         {
0148             return mpeg_info->muxrate;
0149         };
0150         QString video_format( );
0151         QString video_chroma( );
0152         QString audio_mode( );
0153         QString audio_copyright( );
0154         QString mpegTypeS( bool audio = false );
0155         int mpegType();
0156 
0157         void PrintInfo();
0158 
0159         Mpeginfo* mpeg_info;
0160 
0161     protected:
0162 
0163         QString audio_type2str( unsigned int , unsigned int, unsigned int );
0164         QString SecsToHMS( double );
0165 
0166         QList<VcdTrack*>* m_parent;
0167 
0168         // PBC
0169         QList<VcdTrack*> m_revreflist;          // List of Tracks which points to us
0170         QMap<PbcTracks, VcdTrack*> m_pbctrackmap;        // Pbc Tracks (Previous, Next, ...)
0171         QMap<PbcTracks, PbcTypes> m_pbcnontrackmap;              // Pbc NON Track types (Previous, Next, ...)
0172         QMap<PbcTracks, bool> m_pbcusrdefmap;               // Pbc is userdefined or defaults (Previous, Next, ...)
0173         QMap<int, VcdTrack*> m_definedkeysmap;
0174 
0175         bool m_pbcnumkeys;
0176         bool m_pbcnumkeysuserdefined;
0177 
0178         int m_pbcplaytime;
0179         int m_pbcwaittime;
0180         /********************************************************************************/
0181 
0182         bool m_reactivity;
0183         int m_filetype;
0184         QFile m_file;
0185         QString m_title;
0186     };
0187 }
0188 
0189 #endif