Diffstat (limited to 'core/multimedia/opieplayer/mediaplayerstate.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/multimedia/opieplayer/mediaplayerstate.cpp | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/core/multimedia/opieplayer/mediaplayerstate.cpp b/core/multimedia/opieplayer/mediaplayerstate.cpp new file mode 100644 index 0000000..9b9d133 --- a/dev/null +++ b/core/multimedia/opieplayer/mediaplayerstate.cpp | |||
@@ -0,0 +1,185 @@ | |||
1 | /********************************************************************** | ||
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | ||
3 | ** | ||
4 | ** This file is part of Qtopia Environment. | ||
5 | ** | ||
6 | ** This file may be distributed and/or modified under the terms of the | ||
7 | ** GNU General Public License version 2 as published by the Free Software | ||
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
9 | ** packaging of this file. | ||
10 | ** | ||
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | ||
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | ||
13 | ** | ||
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | ||
15 | ** | ||
16 | ** Contact info@trolltech.com if any conditions of this licensing are | ||
17 | ** not clear to you. | ||
18 | ** | ||
19 | **********************************************************************/ | ||
20 | #include <qpe/qpeapplication.h> | ||
21 | #include <qpe/qlibrary.h> | ||
22 | #include <qpe/config.h> | ||
23 | #include <qvaluelist.h> | ||
24 | #include <qobject.h> | ||
25 | #include <qdir.h> | ||
26 | #include "mediaplayerplugininterface.h" | ||
27 | #include "mediaplayerstate.h" | ||
28 | |||
29 | #ifdef QT_NO_COMPONENT | ||
30 | // Plugins which are compiled in when no plugin architecture available | ||
31 | #include "libmad/libmadpluginimpl.h" | ||
32 | #include "libmpeg3/libmpeg3pluginimpl.h" | ||
33 | #include "wavplugin/wavpluginimpl.h" | ||
34 | #endif | ||
35 | |||
36 | |||
37 | //#define MediaPlayerDebug(x)qDebug x | ||
38 | #define MediaPlayerDebug(x) | ||
39 | |||
40 | |||
41 | MediaPlayerState::MediaPlayerState( QObject *parent, const char *name ) | ||
42 | : QObject( parent, name ), decoder( NULL ), libmpeg3decoder( NULL ) { | ||
43 | Config cfg( "MediaPlayer" ); | ||
44 | readConfig( cfg ); | ||
45 | loadPlugins(); | ||
46 | } | ||
47 | |||
48 | |||
49 | MediaPlayerState::~MediaPlayerState() { | ||
50 | Config cfg( "MediaPlayer" ); | ||
51 | writeConfig( cfg ); | ||
52 | } | ||
53 | |||
54 | |||
55 | void MediaPlayerState::readConfig( Config& cfg ) { | ||
56 | cfg.setGroup("Options"); | ||
57 | isFullscreen = cfg.readBoolEntry( "FullScreen" ); | ||
58 | isScaled = cfg.readBoolEntry( "Scaling" ); | ||
59 | isLooping = cfg.readBoolEntry( "Looping" ); | ||
60 | isShuffled = cfg.readBoolEntry( "Shuffle" ); | ||
61 | usePlaylist = cfg.readBoolEntry( "UsePlayList" ); | ||
62 | isPlaying = FALSE; | ||
63 | isPaused = FALSE; | ||
64 | curPosition = 0; | ||
65 | curLength = 0; | ||
66 | curView = 'l'; | ||
67 | } | ||
68 | |||
69 | |||
70 | void MediaPlayerState::writeConfig( Config& cfg ) const { | ||
71 | cfg.setGroup("Options"); | ||
72 | cfg.writeEntry("FullScreen", isFullscreen ); | ||
73 | cfg.writeEntry("Scaling", isScaled ); | ||
74 | cfg.writeEntry("Looping", isLooping ); | ||
75 | cfg.writeEntry("Shuffle", isShuffled ); | ||
76 | cfg.writeEntry("UsePlayList", usePlaylist ); | ||
77 | } | ||
78 | |||
79 | |||
80 | struct MediaPlayerPlugin { | ||
81 | #ifndef QT_NO_COMPONENT | ||
82 | QLibrary *library; | ||
83 | #endif | ||
84 | MediaPlayerPluginInterface *iface; | ||
85 | MediaPlayerDecoder *decoder; | ||
86 | MediaPlayerEncoder *encoder; | ||
87 | }; | ||
88 | |||
89 | |||
90 | static QValueList<MediaPlayerPlugin> pluginList; | ||
91 | |||
92 | |||
93 | // Find the first decoder which supports this type of file | ||
94 | MediaPlayerDecoder *MediaPlayerState::newDecoder( const QString& file ) { | ||
95 | MediaPlayerDecoder *tmpDecoder = NULL; | ||
96 | QValueList<MediaPlayerPlugin>::Iterator it; | ||
97 | for ( it = pluginList.begin(); it != pluginList.end(); ++it ) { | ||
98 | if ( (*it).decoder->isFileSupported( file ) ) { | ||
99 | tmpDecoder = (*it).decoder; | ||
100 | break; | ||
101 | } | ||
102 | } | ||
103 | return decoder = tmpDecoder; | ||
104 | } | ||
105 | |||
106 | |||
107 | MediaPlayerDecoder *MediaPlayerState::curDecoder() { | ||
108 | return decoder; | ||
109 | } | ||
110 | |||
111 | |||
112 | // ### hack to get true sample count | ||
113 | MediaPlayerDecoder *MediaPlayerState::libMpeg3Decoder() { | ||
114 | return libmpeg3decoder; | ||
115 | } | ||
116 | |||
117 | |||
118 | void MediaPlayerState::loadPlugins() { | ||
119 | |||
120 | #ifndef QT_NO_COMPONENT | ||
121 | QValueList<MediaPlayerPlugin>::Iterator mit; | ||
122 | for ( mit = pluginList.begin(); mit != pluginList.end(); ++mit ) { | ||
123 | (*mit).iface->release(); | ||
124 | (*mit).library->unload(); | ||
125 | delete (*mit).library; | ||
126 | } | ||
127 | pluginList.clear(); | ||
128 | |||
129 | QString path = QPEApplication::qpeDir() + "/plugins/codecs"; | ||
130 | QDir dir( path, "lib*.so" ); | ||
131 | QStringList list = dir.entryList(); | ||
132 | QStringList::Iterator it; | ||
133 | for ( it = list.begin(); it != list.end(); ++it ) { | ||
134 | MediaPlayerPluginInterface *iface = 0; | ||
135 | QLibrary *lib = new QLibrary( path + "/" + *it ); | ||
136 | |||
137 | MediaPlayerDebug(( "querying: %s", QString( path + "/" + *it ).latin1() )); | ||
138 | |||
139 | if ( lib->queryInterface( IID_MediaPlayerPlugin, (QUnknownInterface**)&iface ) == QS_OK ) { | ||
140 | |||
141 | MediaPlayerDebug(( "loading: %s", QString( path + "/" + *it ).latin1() )); | ||
142 | |||
143 | MediaPlayerPlugin plugin; | ||
144 | plugin.library = lib; | ||
145 | plugin.iface = iface; | ||
146 | plugin.decoder = plugin.iface->decoder(); | ||
147 | plugin.encoder = plugin.iface->encoder(); | ||
148 | pluginList.append( plugin ); | ||
149 | |||
150 | // ### hack to get true sample count | ||
151 | if ( plugin.decoder->pluginName() == QString("LibMpeg3Plugin") ) | ||
152 | libmpeg3decoder = plugin.decoder; | ||
153 | |||
154 | } else { | ||
155 | delete lib; | ||
156 | } | ||
157 | } | ||
158 | #else | ||
159 | pluginList.clear(); | ||
160 | |||
161 | MediaPlayerPlugin plugin0; | ||
162 | plugin0.iface = new LibMpeg3PluginImpl; | ||
163 | plugin0.decoder = plugin0.iface->decoder(); | ||
164 | plugin0.encoder = plugin0.iface->encoder(); | ||
165 | pluginList.append( plugin0 ); | ||
166 | |||
167 | MediaPlayerPlugin plugin1; | ||
168 | plugin1.iface = new LibMadPluginImpl; | ||
169 | plugin1.decoder = plugin1.iface->decoder(); | ||
170 | plugin1.encoder = plugin1.iface->encoder(); | ||
171 | pluginList.append( plugin1 ); | ||
172 | |||
173 | MediaPlayerPlugin plugin2; | ||
174 | plugin2.iface = new WavPluginImpl; | ||
175 | plugin2.decoder = plugin2.iface->decoder(); | ||
176 | plugin2.encoder = plugin2.iface->encoder(); | ||
177 | pluginList.append( plugin2 ); | ||
178 | #endif | ||
179 | |||
180 | if ( pluginList.count() ) | ||
181 | MediaPlayerDebug(( "%i decoders found", pluginList.count() )); | ||
182 | else | ||
183 | MediaPlayerDebug(( "No decoders found" )); | ||
184 | } | ||
185 | |||