summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/lib.cpp58
-rw-r--r--noncore/multimedia/opieplayer2/lib.h1
2 files changed, 58 insertions, 1 deletions
diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp
index 6431de7..9d4b1be 100644
--- a/noncore/multimedia/opieplayer2/lib.cpp
+++ b/noncore/multimedia/opieplayer2/lib.cpp
@@ -27,289 +27,345 @@
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#include <stdio.h> 34#include <stdio.h>
35#include <stdlib.h> 35#include <stdlib.h>
36#include <qimage.h> 36#include <qimage.h>
37#include <qtextstream.h> 37#include <qtextstream.h>
38#include <qpe/resource.h> 38#include <qpe/resource.h>
39 39
40#include <qfile.h> 40#include <qfile.h>
41#include <qdir.h> 41#include <qdir.h>
42 42
43#include <qgfx_qws.h> 43#include <qgfx_qws.h>
44#include <qdirectpainter_qws.h> 44#include <qdirectpainter_qws.h>
45 45
46#include <assert.h> 46#include <assert.h>
47 47
48#include "xinevideowidget.h" 48#include "xinevideowidget.h"
49#include "frame.h" 49#include "frame.h"
50#include "lib.h" 50#include "lib.h"
51 51
52 52
53typedef void (*display_xine_frame_t) (void *user_data, uint8_t* frame, 53typedef void (*display_xine_frame_t) (void *user_data, uint8_t* frame,
54 int width, int height,int bytes ); 54 int width, int height,int bytes );
55 55
56extern "C" { 56extern "C" {
57 xine_vo_driver_t* init_video_out_plugin( xine_t *xine, void* video, display_xine_frame_t, void * ); 57 xine_vo_driver_t* init_video_out_plugin( xine_t *xine, void* video, display_xine_frame_t, void * );
58 int null_is_showing_video( const xine_vo_driver_t* self ); 58 int null_is_showing_video( const xine_vo_driver_t* self );
59 void null_set_show_video( const xine_vo_driver_t* self, int show ); 59 void null_set_show_video( const xine_vo_driver_t* self, int show );
60 int null_is_fullscreen( const xine_vo_driver_t* self ); 60 int null_is_fullscreen( const xine_vo_driver_t* self );
61 void null_set_fullscreen( const xine_vo_driver_t* self, int screen ); 61 void null_set_fullscreen( const xine_vo_driver_t* self, int screen );
62 int null_is_scaling( const xine_vo_driver_t* self ); 62 int null_is_scaling( const xine_vo_driver_t* self );
63 void null_set_scaling( const xine_vo_driver_t* self, int scale ); 63 void null_set_scaling( const xine_vo_driver_t* self, int scale );
64 void null_set_gui_width( const xine_vo_driver_t* self, int width ); 64 void null_set_gui_width( const xine_vo_driver_t* self, int width );
65 void null_set_gui_height( const xine_vo_driver_t* self, int height ); 65 void null_set_gui_height( const xine_vo_driver_t* self, int height );
66 void null_set_mode( const xine_vo_driver_t* self, int depth, int rgb ); 66 void null_set_mode( const xine_vo_driver_t* self, int depth, int rgb );
67 void null_set_videoGamma( const xine_vo_driver_t* self , int value ); 67 void null_set_videoGamma( const xine_vo_driver_t* self , int value );
68 void null_display_handler( const xine_vo_driver_t* self, display_xine_frame_t t, void* user_data ); 68 void null_display_handler( const xine_vo_driver_t* self, display_xine_frame_t t, void* user_data );
69} 69}
70 70
71using namespace XINE; 71using namespace XINE;
72 72
73Lib::Lib( InitializationMode initMode, XineVideoWidget* widget ) 73Lib::Lib( InitializationMode initMode, XineVideoWidget* widget )
74{ 74{
75 m_initialized = false;
75 m_video = false; 76 m_video = false;
76 m_wid = widget; 77 m_wid = widget;
77 printf("Lib"); 78 printf("Lib");
78 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf"; 79 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf";
79 // get the configuration 80 // get the configuration
80 81
81 // not really OO, should be an extra class, later 82 // not really OO, should be an extra class, later
82 if ( !QFile::exists(configPath) ) { 83 if ( !QFile::exists(configPath) ) {
83 QFile f(configPath); 84 QFile f(configPath);
84 f.open(IO_WriteOnly); 85 f.open(IO_WriteOnly);
85 QTextStream ts( &f ); 86 QTextStream ts( &f );
86 ts << "misc.memcpy_method:glibc\n"; 87 ts << "misc.memcpy_method:glibc\n";
87 f.close(); 88 f.close();
88 } 89 }
89 90
90 if ( initMode == InitializeImmediately ) 91 if ( initMode == InitializeImmediately ) {
91 initialize(); 92 initialize();
93 m_initialized = true;
94 }
92 else 95 else
93 assert( false ); 96 assert( false );
94} 97}
95 98
96void Lib::run() 99void Lib::run()
97{ 100{
98 assert( false ); 101 assert( false );
99} 102}
100 103
101void Lib::initialize() 104void Lib::initialize()
102{ 105{
103 m_xine = xine_new( ); 106 m_xine = xine_new( );
104 107
105 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf"; 108 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf";
106 xine_config_load( m_xine, QFile::encodeName( configPath ) ); 109 xine_config_load( m_xine, QFile::encodeName( configPath ) );
107 110
108 xine_init( m_xine ); 111 xine_init( m_xine );
109 112
110 // allocate oss for sound 113 // allocate oss for sound
111 // and fb for framebuffer 114 // and fb for framebuffer
112 m_audioOutput = xine_open_audio_driver( m_xine, "oss", NULL ); 115 m_audioOutput = xine_open_audio_driver( m_xine, "oss", NULL );
113 m_videoOutput = ::init_video_out_plugin( m_xine, NULL, xine_display_frame, this ); 116 m_videoOutput = ::init_video_out_plugin( m_xine, NULL, xine_display_frame, this );
114 117
115 118
116//xine_open_video_driver( m_xine, NULL, XINE_VISUAL_TYPE_FB, NULL); 119//xine_open_video_driver( m_xine, NULL, XINE_VISUAL_TYPE_FB, NULL);
117 120
118 121
119// null_display_handler( m_videoOutput, xine_display_frame, this ); 122// null_display_handler( m_videoOutput, xine_display_frame, this );
120 123
121 m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput ); 124 m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput );
122 125
123 if (m_wid != 0 ) { 126 if (m_wid != 0 ) {
124 printf( "!0\n" ); 127 printf( "!0\n" );
125 resize ( m_wid-> size ( ) ); 128 resize ( m_wid-> size ( ) );
126 ::null_set_mode( m_videoOutput, qt_screen->depth(), qt_screen->pixelType() ); 129 ::null_set_mode( m_videoOutput, qt_screen->depth(), qt_screen->pixelType() );
127 130
128// m_wid->repaint(); 131// m_wid->repaint();
129 } 132 }
130 133
131 m_queue = xine_event_new_queue (m_stream); 134 m_queue = xine_event_new_queue (m_stream);
132 135
133 xine_event_create_listener_thread (m_queue, xine_event_handler, this); 136 xine_event_create_listener_thread (m_queue, xine_event_handler, this);
134} 137}
135 138
136Lib::~Lib() { 139Lib::~Lib() {
140 assert( isRunning() == false )
141 assert( m_initialized );
142
137// free( m_config ); 143// free( m_config );
138 144
139 xine_close( m_stream ); 145 xine_close( m_stream );
140 146
141 xine_event_dispose_queue( m_queue ); 147 xine_event_dispose_queue( m_queue );
142 148
143 xine_dispose( m_stream ); 149 xine_dispose( m_stream );
144 150
145 xine_exit( m_xine ); 151 xine_exit( m_xine );
146 /* FIXME either free or delete but valgrind bitches against both */ 152 /* FIXME either free or delete but valgrind bitches against both */
147 //free( m_videoOutput ); 153 //free( m_videoOutput );
148 //delete m_audioOutput; 154 //delete m_audioOutput;
149} 155}
150 156
151void Lib::resize ( const QSize &s ) { 157void Lib::resize ( const QSize &s ) {
158 assert( m_initialized );
159
152 if ( s. width ( ) && s. height ( ) ) { 160 if ( s. width ( ) && s. height ( ) ) {
153 ::null_set_gui_width( m_videoOutput, s. width() ); 161 ::null_set_gui_width( m_videoOutput, s. width() );
154 ::null_set_gui_height( m_videoOutput, s. height() ); 162 ::null_set_gui_height( m_videoOutput, s. height() );
155 } 163 }
156} 164}
157 165
158int Lib::majorVersion() { 166int Lib::majorVersion() {
159 int major, minor, sub; 167 int major, minor, sub;
160 xine_get_version ( &major, &minor, &sub ); 168 xine_get_version ( &major, &minor, &sub );
161 return major; 169 return major;
162} 170}
163 171
164int Lib::minorVersion() { 172int Lib::minorVersion() {
165 int major, minor, sub; 173 int major, minor, sub;
166 xine_get_version ( &major, &minor, &sub ); 174 xine_get_version ( &major, &minor, &sub );
167 return minor; 175 return minor;
168} 176}
169 177
170int Lib::subVersion() { 178int Lib::subVersion() {
171 int major, minor, sub; 179 int major, minor, sub;
172 xine_get_version ( &major, &minor, &sub ); 180 xine_get_version ( &major, &minor, &sub );
173 return sub; 181 return sub;
174} 182}
175 183
176int Lib::play( const QString& fileName, int startPos, int start_time ) { 184int Lib::play( const QString& fileName, int startPos, int start_time ) {
185 assert( m_initialized );
186
177 QString str = fileName.stripWhiteSpace(); 187 QString str = fileName.stripWhiteSpace();
178 if ( !xine_open( m_stream, QFile::encodeName(str.utf8() ).data() ) ) { 188 if ( !xine_open( m_stream, QFile::encodeName(str.utf8() ).data() ) ) {
179 return 0; 189 return 0;
180 } 190 }
181 return xine_play( m_stream, startPos, start_time); 191 return xine_play( m_stream, startPos, start_time);
182} 192}
183 193
184void Lib::stop() { 194void Lib::stop() {
195 assert( m_initialized );
196
185 qDebug("<<<<<<<< STOP IN LIB TRIGGERED >>>>>>>"); 197 qDebug("<<<<<<<< STOP IN LIB TRIGGERED >>>>>>>");
186 xine_stop( m_stream ); 198 xine_stop( m_stream );
187} 199}
188 200
189void Lib::pause( bool toggle ) { 201void Lib::pause( bool toggle ) {
202 assert( m_initialized );
203
190 xine_set_param( m_stream, XINE_PARAM_SPEED, toggle ? XINE_SPEED_PAUSE : XINE_SPEED_NORMAL ); 204 xine_set_param( m_stream, XINE_PARAM_SPEED, toggle ? XINE_SPEED_PAUSE : XINE_SPEED_NORMAL );
191} 205}
192 206
193int Lib::speed() const { 207int Lib::speed() const {
208 assert( m_initialized );
209
194 return xine_get_param ( m_stream, XINE_PARAM_SPEED ); 210 return xine_get_param ( m_stream, XINE_PARAM_SPEED );
195} 211}
196 212
197void Lib::setSpeed( int speed ) { 213void Lib::setSpeed( int speed ) {
214 assert( m_initialized );
215
198 xine_set_param ( m_stream, XINE_PARAM_SPEED, speed ); 216 xine_set_param ( m_stream, XINE_PARAM_SPEED, speed );
199} 217}
200 218
201int Lib::status() const { 219int Lib::status() const {
220 assert( m_initialized );
221
202 return xine_get_status( m_stream ); 222 return xine_get_status( m_stream );
203} 223}
204 224
205int Lib::currentPosition() const { 225int Lib::currentPosition() const {
226 assert( m_initialized );
227
206 int pos, time, length; 228 int pos, time, length;
207 xine_get_pos_length( m_stream, &pos, &time, &length ); 229 xine_get_pos_length( m_stream, &pos, &time, &length );
208 return pos; 230 return pos;
209} 231}
210 232
211int Lib::currentTime() const { 233int Lib::currentTime() const {
234 assert( m_initialized );
235
212 int pos, time, length; 236 int pos, time, length;
213 xine_get_pos_length( m_stream, &pos, &time, &length ); 237 xine_get_pos_length( m_stream, &pos, &time, &length );
214 return time/1000; 238 return time/1000;
215} 239}
216 240
217int Lib::length() const { 241int Lib::length() const {
242 assert( m_initialized );
243
218 int pos, time, length; 244 int pos, time, length;
219 xine_get_pos_length( m_stream, &pos, &time, &length ); 245 xine_get_pos_length( m_stream, &pos, &time, &length );
220 return length/1000; 246 return length/1000;
221} 247}
222 248
223bool Lib::isSeekable() const { 249bool Lib::isSeekable() const {
250 assert( m_initialized );
251
224 return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE ); 252 return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE );
225} 253}
226 254
227void Lib::seekTo( int time ) { 255void Lib::seekTo( int time ) {
256 assert( m_initialized );
257
228 //xine_trick_mode ( m_stream, XINE_TRICK_MODE_SEEK_TO_TIME, time ); NOT IMPLEMENTED YET IN XINE :_( 258 //xine_trick_mode ( m_stream, XINE_TRICK_MODE_SEEK_TO_TIME, time ); NOT IMPLEMENTED YET IN XINE :_(
229 // since its now milliseconds we need *1000 259 // since its now milliseconds we need *1000
230 xine_play( m_stream, 0, time*1000 ); 260 xine_play( m_stream, 0, time*1000 );
231} 261}
232 262
233 263
234Frame Lib::currentFrame() const { 264Frame Lib::currentFrame() const {
265 assert( m_initialized );
266
235 Frame frame; 267 Frame frame;
236 return frame; 268 return frame;
237}; 269};
238 270
239QString Lib::metaInfo( int number) const { 271QString Lib::metaInfo( int number) const {
272 assert( m_initialized );
273
240 return xine_get_meta_info( m_stream, number ); 274 return xine_get_meta_info( m_stream, number );
241} 275}
242 276
243int Lib::error() const { 277int Lib::error() const {
278 assert( m_initialized );
279
244 return xine_get_error( m_stream ); 280 return xine_get_error( m_stream );
245}; 281};
246 282
247void Lib::receiveMessage( ThreadUtil::ChannelMessage *msg, SendType sendType ) 283void Lib::receiveMessage( ThreadUtil::ChannelMessage *msg, SendType sendType )
248{ 284{
249 assert( sendType == ThreadUtil::Channel::OneWay ); 285 assert( sendType == ThreadUtil::Channel::OneWay );
250 handleXineEvent( msg->type() ); 286 handleXineEvent( msg->type() );
251 delete msg; 287 delete msg;
252} 288}
253 289
254void Lib::handleXineEvent( const xine_event_t* t ) { 290void Lib::handleXineEvent( const xine_event_t* t ) {
255 send( new ThreadUtil::ChannelMessage( t->type ), OneWay ); 291 send( new ThreadUtil::ChannelMessage( t->type ), OneWay );
256} 292}
257 293
258void Lib::handleXineEvent( int type ) { 294void Lib::handleXineEvent( int type ) {
295 assert( m_initialized );
296
259 if ( type == XINE_EVENT_UI_PLAYBACK_FINISHED ) { 297 if ( type == XINE_EVENT_UI_PLAYBACK_FINISHED ) {
260 emit stopped(); 298 emit stopped();
261 } 299 }
262} 300}
263 301
264 302
265void Lib::setShowVideo( bool video ) { 303void Lib::setShowVideo( bool video ) {
304 assert( m_initialized );
305
266 m_video = video; 306 m_video = video;
267 ::null_set_show_video( m_videoOutput, video ); 307 ::null_set_show_video( m_videoOutput, video );
268} 308}
269 309
270bool Lib::isShowingVideo() const { 310bool Lib::isShowingVideo() const {
311 assert( m_initialized );
312
271 return ::null_is_showing_video( m_videoOutput ); 313 return ::null_is_showing_video( m_videoOutput );
272} 314}
273 315
274bool Lib::hasVideo() const { 316bool Lib::hasVideo() const {
317 assert( m_initialized );
318
275 return xine_get_stream_info( m_stream, 18 ); 319 return xine_get_stream_info( m_stream, 18 );
276} 320}
277 321
278void Lib::showVideoFullScreen( bool fullScreen ) { 322void Lib::showVideoFullScreen( bool fullScreen ) {
323 assert( m_initialized );
324
279 ::null_set_fullscreen( m_videoOutput, fullScreen ); 325 ::null_set_fullscreen( m_videoOutput, fullScreen );
280} 326}
281 327
282bool Lib::isVideoFullScreen() const { 328bool Lib::isVideoFullScreen() const {
329 assert( m_initialized );
330
283 return ::null_is_fullscreen( m_videoOutput ); 331 return ::null_is_fullscreen( m_videoOutput );
284} 332}
285 333
286void Lib::setScaling( bool scale ) { 334void Lib::setScaling( bool scale ) {
335 assert( m_initialized );
336
287 ::null_set_scaling( m_videoOutput, scale ); 337 ::null_set_scaling( m_videoOutput, scale );
288} 338}
289 339
290void Lib::setGamma( int value ) { 340void Lib::setGamma( int value ) {
341 assert( m_initialized );
342
291 //qDebug( QString( "%1").arg(value) ); 343 //qDebug( QString( "%1").arg(value) );
292 /* int gammaValue = ( 100 + value ); */ 344 /* int gammaValue = ( 100 + value ); */
293 ::null_set_videoGamma( m_videoOutput, value ); 345 ::null_set_videoGamma( m_videoOutput, value );
294} 346}
295 347
296bool Lib::isScaling() const { 348bool Lib::isScaling() const {
349 assert( m_initialized );
350
297 return ::null_is_scaling( m_videoOutput ); 351 return ::null_is_scaling( m_videoOutput );
298} 352}
299 353
300void Lib::xine_event_handler( void* user_data, const xine_event_t* t ) { 354void Lib::xine_event_handler( void* user_data, const xine_event_t* t ) {
301 ( (Lib*)user_data)->handleXineEvent( t ); 355 ( (Lib*)user_data)->handleXineEvent( t );
302} 356}
303 357
304void Lib::xine_display_frame( void* user_data, uint8_t *frame, 358void Lib::xine_display_frame( void* user_data, uint8_t *frame,
305 int width, int height, int bytes ) { 359 int width, int height, int bytes ) {
306 ( (Lib*)user_data)->drawFrame( frame, width, height, bytes ); 360 ( (Lib*)user_data)->drawFrame( frame, width, height, bytes );
307} 361}
308 362
309void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) { 363void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) {
364 assert( m_initialized );
365
310 if ( !m_video ) { 366 if ( !m_video ) {
311 qWarning("not showing video now"); 367 qWarning("not showing video now");
312 return; 368 return;
313 } 369 }
314 m_wid-> setVideoFrame ( frame, width, height, bytes ); 370 m_wid-> setVideoFrame ( frame, width, height, bytes );
315} 371}
diff --git a/noncore/multimedia/opieplayer2/lib.h b/noncore/multimedia/opieplayer2/lib.h
index 6363918..7e3a912 100644
--- a/noncore/multimedia/opieplayer2/lib.h
+++ b/noncore/multimedia/opieplayer2/lib.h
@@ -147,69 +147,70 @@ namespace XINE {
147 void seekTo( int time ); 147 void seekTo( int time );
148 148
149 /** 149 /**
150 * 150 *
151 * @return is media stream has video 151 * @return is media stream has video
152 */ 152 */
153 bool hasVideo() const; 153 bool hasVideo() const;
154 154
155 /** 155 /**
156 * 156 *
157 */ 157 */
158 void setScaling( bool ); 158 void setScaling( bool );
159 159
160 /** 160 /**
161 * Set the Gamma value for video output 161 * Set the Gamma value for video output
162 * @param int the value between -100 and 100, 0 is original 162 * @param int the value between -100 and 100, 0 is original
163 */ 163 */
164 void setGamma( int ); 164 void setGamma( int );
165 165
166 /** 166 /**
167 * test 167 * test
168 */ 168 */
169 Frame currentFrame() const; 169 Frame currentFrame() const;
170 170
171 /** 171 /**
172 * Returns the error code 172 * Returns the error code
173 * XINE_ERROR_NONE 0 173 * XINE_ERROR_NONE 0
174 * XINE_ERROR_NO_INPUT_PLUGIN 1 174 * XINE_ERROR_NO_INPUT_PLUGIN 1
175 * XINE_ERROR_NO_DEMUXER_PLUGIN 2 175 * XINE_ERROR_NO_DEMUXER_PLUGIN 2
176 * XINE_ERROR_DEMUXER_FAILED 3 176 * XINE_ERROR_DEMUXER_FAILED 3
177 */ 177 */
178 int error() const; 178 int error() const;
179 179
180 signals: 180 signals:
181 181
182 void stopped(); 182 void stopped();
183 183
184 void initialized(); 184 void initialized();
185 185
186 protected: 186 protected:
187 virtual void receiveMessage( ThreadUtil::ChannelMessage *msg, SendType sendType ); 187 virtual void receiveMessage( ThreadUtil::ChannelMessage *msg, SendType sendType );
188 188
189 virtual void run(); 189 virtual void run();
190 190
191 private: 191 private:
192 void initialize(); 192 void initialize();
193 193
194 int m_bytes_per_pixel; 194 int m_bytes_per_pixel;
195 bool m_initialized:1;
195 bool m_video:1; 196 bool m_video:1;
196 XineVideoWidget *m_wid; 197 XineVideoWidget *m_wid;
197 xine_t *m_xine; 198 xine_t *m_xine;
198 xine_stream_t *m_stream; 199 xine_stream_t *m_stream;
199 xine_cfg_entry_t *m_config; 200 xine_cfg_entry_t *m_config;
200 xine_vo_driver_t *m_videoOutput; 201 xine_vo_driver_t *m_videoOutput;
201 xine_ao_driver_t* m_audioOutput; 202 xine_ao_driver_t* m_audioOutput;
202 xine_event_queue_t *m_queue; 203 xine_event_queue_t *m_queue;
203 204
204 void handleXineEvent( const xine_event_t* t ); 205 void handleXineEvent( const xine_event_t* t );
205 void handleXineEvent( int type ); 206 void handleXineEvent( int type );
206 void drawFrame( uint8_t* frame, int width, int height, int bytes ); 207 void drawFrame( uint8_t* frame, int width, int height, int bytes );
207 // C -> C++ bridge for the event system 208 // C -> C++ bridge for the event system
208 static void xine_event_handler( void* user_data, const xine_event_t* t); 209 static void xine_event_handler( void* user_data, const xine_event_t* t);
209 static void xine_display_frame( void* user_data, uint8_t* frame , 210 static void xine_display_frame( void* user_data, uint8_t* frame ,
210 int width, int height, int bytes ); 211 int width, int height, int bytes );
211 }; 212 };
212}; 213};
213 214
214 215
215#endif 216#endif