summaryrefslogtreecommitdiff
path: root/noncore/multimedia/opieplayer2/lib.cpp
Unidiff
Diffstat (limited to 'noncore/multimedia/opieplayer2/lib.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/lib.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp
index 99d5de6..20fd1e2 100644
--- a/noncore/multimedia/opieplayer2/lib.cpp
+++ b/noncore/multimedia/opieplayer2/lib.cpp
@@ -49,103 +49,113 @@
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( XineVideoWidget* widget ) { 73Lib::Lib( XineVideoWidget* widget )
74{
75 ThreadUtil::AutoLock lock( m_initGuard );
74 m_initialized = false; 76 m_initialized = false;
75 m_video = false; 77 m_video = false;
76 m_wid = widget; 78 m_wid = widget;
77 printf("Lib"); 79 printf("Lib");
78 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf"; 80 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf";
79 // get the configuration 81 // get the configuration
80 82
81 // not really OO, should be an extra class, later 83 // not really OO, should be an extra class, later
82 if ( !QFile::exists(configPath) ) { 84 if ( !QFile::exists(configPath) ) {
83 QFile f(configPath); 85 QFile f(configPath);
84 f.open(IO_WriteOnly); 86 f.open(IO_WriteOnly);
85 QTextStream ts( &f ); 87 QTextStream ts( &f );
86 ts << "misc.memcpy_method:glibc\n"; 88 ts << "misc.memcpy_method:glibc\n";
87 f.close(); 89 f.close();
88 } 90 }
89 91
92 start();
93}
94
95void Lib::run()
96{
90 initialize(); 97 initialize();
91} 98}
92 99
93void Lib::initialize() 100void Lib::initialize()
94{ 101{
95 m_xine = xine_new( ); 102 m_xine = xine_new( );
96 103
97 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf"; 104 QString configPath = QDir::homeDirPath() + "/Settings/opiexine.cf";
98 xine_config_load( m_xine, QFile::encodeName( configPath ) ); 105 xine_config_load( m_xine, QFile::encodeName( configPath ) );
99 106
100 xine_init( m_xine ); 107 xine_init( m_xine );
101 108
102 // allocate oss for sound 109 // allocate oss for sound
103 // and fb for framebuffer 110 // and fb for framebuffer
104 m_audioOutput = xine_open_audio_driver( m_xine, "oss", NULL ); 111 m_audioOutput = xine_open_audio_driver( m_xine, "oss", NULL );
105 m_videoOutput = ::init_video_out_plugin( m_xine, NULL, xine_display_frame, this ); 112 m_videoOutput = ::init_video_out_plugin( m_xine, NULL, xine_display_frame, this );
106 113
107 114
108//xine_open_video_driver( m_xine, NULL, XINE_VISUAL_TYPE_FB, NULL); 115//xine_open_video_driver( m_xine, NULL, XINE_VISUAL_TYPE_FB, NULL);
109 116
110 117
111// null_display_handler( m_videoOutput, xine_display_frame, this ); 118// null_display_handler( m_videoOutput, xine_display_frame, this );
112 119
113 m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput ); 120 m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput );
114 121
115 if (m_wid != 0 ) { 122 if (m_wid != 0 ) {
116 printf( "!0\n" ); 123 printf( "!0\n" );
117 resize ( m_wid-> size ( ) ); 124 resize ( m_wid-> size ( ) );
118 ::null_set_mode( m_videoOutput, qt_screen->depth(), qt_screen->pixelType() ); 125 ::null_set_mode( m_videoOutput, qt_screen->depth(), qt_screen->pixelType() );
119 126
120// m_wid->repaint(); 127// m_wid->repaint();
121 } 128 }
122 129
123 m_queue = xine_event_new_queue (m_stream); 130 m_queue = xine_event_new_queue (m_stream);
124 131
125 xine_event_create_listener_thread (m_queue, xine_event_handler, this); 132 xine_event_create_listener_thread (m_queue, xine_event_handler, this);
126 133
134 ThreadUtil::AutoLock lock( m_initGuard );
127 m_initialized = true; 135 m_initialized = true;
136
137 send( new ThreadUtil::ChannelMessage( InitializationMessageType ), OneWay );
128} 138}
129 139
130Lib::~Lib() { 140Lib::~Lib() {
131 ThreadUtil::AutoLock lock( m_initGuard ); 141 ThreadUtil::AutoLock lock( m_initGuard );
132 142
133 assert( m_initialized ); 143 assert( m_initialized );
134 144
135// free( m_config ); 145// free( m_config );
136 146
137 xine_close( m_stream ); 147 xine_close( m_stream );
138 148
139 xine_event_dispose_queue( m_queue ); 149 xine_event_dispose_queue( m_queue );
140 150
141 xine_dispose( m_stream ); 151 xine_dispose( m_stream );
142 152
143 xine_exit( m_xine ); 153 xine_exit( m_xine );
144 /* FIXME either free or delete but valgrind bitches against both */ 154 /* FIXME either free or delete but valgrind bitches against both */
145 //free( m_videoOutput ); 155 //free( m_videoOutput );
146 //delete m_audioOutput; 156 //delete m_audioOutput;
147} 157}
148 158
149void Lib::assertInitialized() const 159void Lib::assertInitialized() const
150{ 160{
151 ThreadUtil::AutoLock lock( m_initGuard ); 161 ThreadUtil::AutoLock lock( m_initGuard );
@@ -263,54 +273,61 @@ void Lib::seekTo( int time ) {
263 273
264 274
265Frame Lib::currentFrame() const { 275Frame Lib::currentFrame() const {
266 assertInitialized(); 276 assertInitialized();
267 277
268 Frame frame; 278 Frame frame;
269 return frame; 279 return frame;
270}; 280};
271 281
272QString Lib::metaInfo( int number) const { 282QString Lib::metaInfo( int number) const {
273 assertInitialized(); 283 assertInitialized();
274 284
275 return xine_get_meta_info( m_stream, number ); 285 return xine_get_meta_info( m_stream, number );
276} 286}
277 287
278int Lib::error() const { 288int Lib::error() const {
279 assertInitialized(); 289 assertInitialized();
280 290
281 return xine_get_error( m_stream ); 291 return xine_get_error( m_stream );
282}; 292};
283 293
284void Lib::receiveMessage( ThreadUtil::ChannelMessage *msg, SendType sendType ) 294void Lib::receiveMessage( ThreadUtil::ChannelMessage *msg, SendType sendType )
285{ 295{
286 assert( sendType == ThreadUtil::Channel::OneWay ); 296 assert( sendType == ThreadUtil::Channel::OneWay );
287 handleXineEvent( msg->type() ); 297 switch ( msg->type() ) {
298 case XineMessageType:
299 handleXineEvent( static_cast<XineMessage *>( msg )->xineEvent );
300 break;
301 case InitializationMessageType:
302 emit initialized();
303 break;
304 }
288 delete msg; 305 delete msg;
289} 306}
290 307
291void Lib::handleXineEvent( const xine_event_t* t ) { 308void Lib::handleXineEvent( const xine_event_t* t ) {
292 send( new ThreadUtil::ChannelMessage( t->type ), OneWay ); 309 send( new XineMessage( t->type ), OneWay );
293} 310}
294 311
295void Lib::handleXineEvent( int type ) { 312void Lib::handleXineEvent( int type ) {
296 assertInitialized(); 313 assertInitialized();
297 314
298 if ( type == XINE_EVENT_UI_PLAYBACK_FINISHED ) { 315 if ( type == XINE_EVENT_UI_PLAYBACK_FINISHED ) {
299 emit stopped(); 316 emit stopped();
300 } 317 }
301} 318}
302 319
303 320
304void Lib::setShowVideo( bool video ) { 321void Lib::setShowVideo( bool video ) {
305 assertInitialized(); 322 assertInitialized();
306 323
307 m_video = video; 324 m_video = video;
308 ::null_set_show_video( m_videoOutput, video ); 325 ::null_set_show_video( m_videoOutput, video );
309} 326}
310 327
311bool Lib::isShowingVideo() const { 328bool Lib::isShowingVideo() const {
312 assertInitialized(); 329 assertInitialized();
313 330
314 return ::null_is_showing_video( m_videoOutput ); 331 return ::null_is_showing_video( m_videoOutput );
315} 332}
316 333