summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/mediaplayerstate.cpp
Unidiff
Diffstat (limited to 'core/multimedia/opieplayer/mediaplayerstate.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/mediaplayerstate.cpp185
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
41MediaPlayerState::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
49MediaPlayerState::~MediaPlayerState() {
50 Config cfg( "MediaPlayer" );
51 writeConfig( cfg );
52}
53
54
55void 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
70void 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
80struct MediaPlayerPlugin {
81#ifndef QT_NO_COMPONENT
82 QLibrary *library;
83#endif
84 MediaPlayerPluginInterface *iface;
85 MediaPlayerDecoder *decoder;
86 MediaPlayerEncoder *encoder;
87};
88
89
90static QValueList<MediaPlayerPlugin> pluginList;
91
92
93// Find the first decoder which supports this type of file
94MediaPlayerDecoder *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
107MediaPlayerDecoder *MediaPlayerState::curDecoder() {
108 return decoder;
109}
110
111
112// ### hack to get true sample count
113MediaPlayerDecoder *MediaPlayerState::libMpeg3Decoder() {
114 return libmpeg3decoder;
115}
116
117
118void 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