1 /*
2     SPDX-FileCopyrightText: 2003-2004 Christian Kvasny <chris@k3b.org>
3     SPDX-FileCopyrightText: 2010 Michal Malek <michalm@jabster.pl>
4     SPDX-FileCopyrightText: 1998-2010 Sebastian Trueg <trueg@k3b.org>
5 
6     SPDX-License-Identifier: GPL-2.0-or-later
7 */
8 
9 #ifndef K3BVCDTRACK_H
10 #define K3BVCDTRACK_H
11 
12 #include "mpeginfo/k3bmpeginfo.h"
13 #include "k3b_export.h"
14 
15 #include <KIO/Global>
16 
17 #include <QString>
18 #include <QFileInfo>
19 #include <QFile>
20 
21 namespace K3b {
22     class LIBK3B_EXPORT VcdTrack
23     {
24     public:
25         VcdTrack( QList<VcdTrack*>* parent, const QString& filename );
26         ~VcdTrack();
27 
fileName()28         QString fileName() const
29         {
30             return QFileInfo( m_file ).fileName();
31         }
absolutePath()32         QString absolutePath() const
33         {
34             return QFileInfo( m_file ).absoluteFilePath();
35         }
36         KIO::filesize_t size() const;
37         int index() const;
38 
title()39         const QString& title() const
40         {
41             return m_title;
42         }
setTitle(const QString & t)43         void setTitle( const QString& t )
44         {
45             m_title = t;
46         }
isSegment()47         bool isSegment()
48         {
49             return mpegType() == 1;
50         };
51 
52         // PBC
53         enum PbcTracks { PREVIOUS, NEXT, RETURN, DEFAULT, AFTERTIMEOUT };
54         enum PbcTypes { DISABLED, VIDEOEND };
55         static QList<PbcTracks> trackPlaybackValues();
56 
57         void addToRevRefList( VcdTrack* revreftrack );
58         void delFromRevRefList( VcdTrack* revreftrack );
59         bool hasRevRef();
60         void delRefToUs();
61         void delRefFromUs();
62 
63         void setPbcTrack( PbcTracks which, VcdTrack* pbctrack = 0L );
64         void setPbcNonTrack( PbcTracks which, PbcTypes type );
65         void setUserDefined( PbcTracks, bool );
setPlayTime(int t)66         void setPlayTime( int t )
67         {
68             m_pbcplaytime = t;
69         }
setWaitTime(int t)70         void setWaitTime( int t )
71         {
72             m_pbcwaittime = t;
73         }
setReactivity(bool b)74         void setReactivity( bool b )
75         {
76             m_reactivity = b;
77         }
setPbcNumKeys(const bool & b)78         void setPbcNumKeys( const bool& b )
79         {
80             m_pbcnumkeys = b;
81         }
PbcNumKeys()82         bool PbcNumKeys() const
83         {
84             return m_pbcnumkeys;
85         };
setPbcNumKeysUserdefined(const bool & b)86         void setPbcNumKeysUserdefined( const bool& b )
87         {
88             m_pbcnumkeysuserdefined = b;
89         };
PbcNumKeysUserdefined()90         bool PbcNumKeysUserdefined() const
91         {
92             return m_pbcnumkeysuserdefined;
93         };
94 
95         VcdTrack* getPbcTrack( PbcTracks which );
96         int getNonPbcTrack( PbcTracks which );
97         bool isPbcUserDefined( PbcTracks which );
getPlayTime()98         int getPlayTime()
99         {
100             return m_pbcplaytime;
101         }
getWaitTime()102         int getWaitTime()
103         {
104             return m_pbcwaittime;
105         }
Reactivity()106         bool Reactivity()
107         {
108             return m_reactivity;
109         }
110 
111         // Numeric keys
setDefinedNumKey(int key,VcdTrack * track)112         void setDefinedNumKey( int key, VcdTrack* track )
113         {
114             m_definedkeysmap.insert( key, track );
115         }
delDefinedNumKey(int key)116         void delDefinedNumKey( int key )
117         {
118             m_definedkeysmap.remove( key );
119         }
delDefinedNumKey()120         void delDefinedNumKey()
121         {
122             m_definedkeysmap.clear();
123         }
DefinedNumKey()124         QMap<int, VcdTrack*> DefinedNumKey()
125         {
126             return m_definedkeysmap;
127         }
128 
129         // Mpeg Infos
130         QString resolution();
131         QString highresolution();
132         QString video_frate();
133         QString video_bitrate();
134         QString audio_layer();
135         QString audio_bitrate();
136         QString audio_sampfreq();
137 
duration()138         QString duration()
139         {
140             return SecsToHMS( mpeg_info->playing_time );
141         };
version()142         int version()
143         {
144             return mpeg_info->version;
145         };
muxrate()146         unsigned long muxrate()
147         {
148             return mpeg_info->muxrate;
149         };
150         QString video_format( );
151         QString video_chroma( );
152         QString audio_mode( );
153         QString audio_copyright( );
154         QString mpegTypeS( bool audio = false );
155         int mpegType();
156 
157         void PrintInfo();
158 
159         Mpeginfo* mpeg_info;
160 
161     protected:
162 
163         QString audio_type2str( unsigned int , unsigned int, unsigned int );
164         QString SecsToHMS( double );
165 
166         QList<VcdTrack*>* m_parent;
167 
168         // PBC
169         QList<VcdTrack*> m_revreflist;          // List of Tracks which points to us
170         QMap<PbcTracks, VcdTrack*> m_pbctrackmap;        // Pbc Tracks (Previous, Next, ...)
171         QMap<PbcTracks, PbcTypes> m_pbcnontrackmap;              // Pbc NON Track types (Previous, Next, ...)
172         QMap<PbcTracks, bool> m_pbcusrdefmap;               // Pbc is userdefined or defaults (Previous, Next, ...)
173         QMap<int, VcdTrack*> m_definedkeysmap;
174 
175         bool m_pbcnumkeys;
176         bool m_pbcnumkeysuserdefined;
177 
178         int m_pbcplaytime;
179         int m_pbcwaittime;
180         /********************************************************************************/
181 
182         bool m_reactivity;
183         int m_filetype;
184         QFile m_file;
185         QString m_title;
186     };
187 }
188 
189 #endif
190