Diffstat (limited to 'noncore/multimedia/opieplayer2/lib.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/multimedia/opieplayer2/lib.cpp | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp index d04af08..11ad745 100644 --- a/noncore/multimedia/opieplayer2/lib.cpp +++ b/noncore/multimedia/opieplayer2/lib.cpp | |||
@@ -30,15 +30,11 @@ | |||
30 | Boston, MA 02111-1307, USA. | 30 | Boston, MA 02111-1307, USA. |
31 | 31 | ||
32 | */ | 32 | */ |
33 | 33 | ||
34 | #include <stdio.h> | 34 | |
35 | #include <stdlib.h> | ||
36 | #include <qimage.h> | ||
37 | #include <qtextstream.h> | 35 | #include <qtextstream.h> |
38 | #include <qpe/resource.h> | ||
39 | 36 | ||
40 | #include <qfile.h> | ||
41 | #include <qdir.h> | 37 | #include <qdir.h> |
42 | 38 | ||
43 | #include <qgfx_qws.h> | 39 | #include <qgfx_qws.h> |
44 | #include <qdirectpainter_qws.h> | 40 | #include <qdirectpainter_qws.h> |
@@ -71,9 +67,9 @@ extern "C" { | |||
71 | } | 67 | } |
72 | 68 | ||
73 | using namespace XINE; | 69 | using namespace XINE; |
74 | 70 | ||
75 | Lib::Lib( InitializationMode initMode, XineVideoWidget* widget ) | 71 | Lib::Lib( InitializationMode initMode, XineVideoWidget* widget ) |
76 | { | 72 | { |
77 | m_initialized = false; | 73 | m_initialized = false; |
78 | m_duringInitialization = false; | 74 | m_duringInitialization = false; |
79 | m_video = false; | 75 | m_video = false; |
@@ -87,8 +83,18 @@ Lib::Lib( InitializationMode initMode, XineVideoWidget* widget ) | |||
87 | QFile f(configPath); | 83 | QFile f(configPath); |
88 | f.open(IO_WriteOnly); | 84 | f.open(IO_WriteOnly); |
89 | QTextStream ts( &f ); | 85 | QTextStream ts( &f ); |
90 | ts << "misc.memcpy_method:glibc\n"; | 86 | ts << "misc.memcpy_method:glibc\n"; |
87 | ts << "# uncomment if you experience double speed audio \n #audio.oss_sync_method:softsync\n"; | ||
88 | ts << "codec.ffmpeg_pp_quality:3\n"; | ||
89 | ts << "audio.num_buffers:50\n"; | ||
90 | ts << "audio.size_buffers:4160\n"; | ||
91 | ts << "video.num_buffers:20\n"; | ||
92 | ts << "video.size_buffers:4096\n"; | ||
93 | ts << "audio.out_num_audio_buf:16\n"; | ||
94 | ts << "audio.out_size_audio_buf:8096\n"; | ||
95 | ts << "audio.out_size_zero_buf:1024\n"; | ||
96 | ts << "audio.passthrough_offset:0\n"; | ||
91 | f.close(); | 97 | f.close(); |
92 | } | 98 | } |
93 | 99 | ||
94 | if ( initMode == InitializeImmediately ) { | 100 | if ( initMode == InitializeImmediately ) { |
@@ -138,9 +144,9 @@ void Lib::initialize() | |||
138 | m_queue = xine_event_new_queue (m_stream); | 144 | m_queue = xine_event_new_queue (m_stream); |
139 | 145 | ||
140 | xine_event_create_listener_thread (m_queue, xine_event_handler, this); | 146 | xine_event_create_listener_thread (m_queue, xine_event_handler, this); |
141 | 147 | ||
142 | ::null_preload_decoders( m_stream ); | 148 | ::null_preload_decoders( m_stream ); |
143 | 149 | ||
144 | m_duringInitialization = false; | 150 | m_duringInitialization = false; |
145 | } | 151 | } |
146 | 152 | ||
@@ -190,10 +196,18 @@ int Lib::subVersion() { | |||
190 | } | 196 | } |
191 | 197 | ||
192 | int Lib::play( const QString& fileName, int startPos, int start_time ) { | 198 | int Lib::play( const QString& fileName, int startPos, int start_time ) { |
193 | assert( m_initialized ); | 199 | assert( m_initialized ); |
200 | // FIXME actually a hack imho. Should not be needed to dispose the whole stream | ||
201 | // but without we get wrong media length reads from libxine for the second media | ||
202 | //xine_dispose ( m_stream ); | ||
194 | 203 | ||
195 | QString str = fileName.stripWhiteSpace(); | 204 | QString str = fileName.stripWhiteSpace(); |
205 | |||
206 | //m_stream = xine_stream_new (m_xine, m_audioOutput, m_videoOutput ); | ||
207 | //m_queue = xine_event_new_queue (m_stream); | ||
208 | //xine_event_create_listener_thread (m_queue, xine_event_handler, this); | ||
209 | |||
196 | if ( !xine_open( m_stream, QFile::encodeName(str.utf8() ).data() ) ) { | 210 | if ( !xine_open( m_stream, QFile::encodeName(str.utf8() ).data() ) ) { |
197 | return 0; | 211 | return 0; |
198 | } | 212 | } |
199 | return xine_play( m_stream, startPos, start_time); | 213 | return xine_play( m_stream, startPos, start_time); |
@@ -242,17 +256,38 @@ int Lib::currentTime() const { | |||
242 | assert( m_initialized ); | 256 | assert( m_initialized ); |
243 | 257 | ||
244 | int pos, time, length; | 258 | int pos, time, length; |
245 | xine_get_pos_length( m_stream, &pos, &time, &length ); | 259 | xine_get_pos_length( m_stream, &pos, &time, &length ); |
246 | return time/1000; | 260 | if ( time > 0 ) { |
261 | return time/1000; | ||
262 | } else { | ||
263 | return 0; | ||
264 | } | ||
247 | } | 265 | } |
248 | 266 | ||
249 | int Lib::length() const { | 267 | int Lib::length() const { |
250 | assert( m_initialized ); | 268 | assert( m_initialized ); |
251 | 269 | ||
252 | int pos, time, length; | 270 | int pos, time, length; |
253 | xine_get_pos_length( m_stream, &pos, &time, &length ); | 271 | /* dilb: patch to solve the wrong stream length reported to the GUI*/ |
254 | return length/1000; | 272 | int iRetVal=0, iTestLoop=0; |
273 | |||
274 | do | ||
275 | { | ||
276 | iRetVal = xine_get_pos_length( m_stream, &pos, &time, &length ); | ||
277 | if (iRetVal) | ||
278 | {/* if the function didn't return 0, then pos, time and length are valid.*/ | ||
279 | return length/1000; | ||
280 | } | ||
281 | /*don't poll too much*/ | ||
282 | usleep(100000); | ||
283 | iTestLoop++; | ||
284 | } | ||
285 | while ( iTestLoop < 10 ); /* if after 1s, we still don't have any | ||
286 | valid stream, then return -1 (this value could be used to make the stream | ||
287 | unseekable, but it should never occur!! Mr. Murphy ? :) ) */ | ||
288 | |||
289 | return -1; | ||
255 | } | 290 | } |
256 | 291 | ||
257 | bool Lib::isSeekable() const { | 292 | bool Lib::isSeekable() const { |
258 | assert( m_initialized ); | 293 | assert( m_initialized ); |
@@ -365,11 +400,9 @@ void Lib::setScaling( bool scale ) { | |||
365 | 400 | ||
366 | void Lib::setGamma( int value ) { | 401 | void Lib::setGamma( int value ) { |
367 | assert( m_initialized ); | 402 | assert( m_initialized ); |
368 | 403 | ||
369 | //qDebug( QString( "%1").arg(value) ); | 404 | ::null_set_videoGamma( m_videoOutput, value ); |
370 | /* int gammaValue = ( 100 + value ); */ | ||
371 | ::null_set_videoGamma( m_videoOutput, value ); | ||
372 | } | 405 | } |
373 | 406 | ||
374 | bool Lib::isScaling() const { | 407 | bool Lib::isScaling() const { |
375 | assert( m_initialized ); | 408 | assert( m_initialized ); |