summaryrefslogtreecommitdiff
path: root/noncore/multimedia/opieplayer2/lib.cpp
authorkergoth <kergoth>2003-08-09 16:24:58 (UTC)
committer kergoth <kergoth>2003-08-09 16:24:58 (UTC)
commite16d333ec2e8509fc665921ca106c25325bae9e0 (patch) (unidiff)
tree9e9068190a15bc9b2a52ab33b40881128f732c0e /noncore/multimedia/opieplayer2/lib.cpp
parent1c58d1407f9584fedcdae390a04e2b37e5853361 (diff)
downloadopie-e16d333ec2e8509fc665921ca106c25325bae9e0.zip
opie-e16d333ec2e8509fc665921ca106c25325bae9e0.tar.gz
opie-e16d333ec2e8509fc665921ca106c25325bae9e0.tar.bz2
Merge from BRANCH_1_0
Diffstat (limited to 'noncore/multimedia/opieplayer2/lib.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/lib.cpp59
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
@@ -28,19 +28,15 @@
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
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>
45 41
46#include <assert.h> 42#include <assert.h>
@@ -69,13 +65,13 @@ extern "C" {
69 65
70 void null_preload_decoders( xine_stream_t *stream ); 66 void null_preload_decoders( xine_stream_t *stream );
71} 67}
72 68
73using namespace XINE; 69using namespace XINE;
74 70
75Lib::Lib( InitializationMode initMode, XineVideoWidget* widget ) 71Lib::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;
80 m_wid = widget; 76 m_wid = widget;
81 printf("Lib"); 77 printf("Lib");
@@ -85,12 +81,22 @@ Lib::Lib( InitializationMode initMode, XineVideoWidget* widget )
85 // not really OO, should be an extra class, later 81 // not really OO, should be an extra class, later
86 if ( !QFile::exists(configPath) ) { 82 if ( !QFile::exists(configPath) ) {
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 ) {
95 initialize(); 101 initialize();
96 m_initialized = true; 102 m_initialized = true;
@@ -136,13 +142,13 @@ void Lib::initialize()
136 } 142 }
137 143
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
147Lib::~Lib() { 153Lib::~Lib() {
148 assert( isRunning() == false ); 154 assert( isRunning() == false );
@@ -188,14 +194,22 @@ int Lib::subVersion() {
188 xine_get_version ( &major, &minor, &sub ); 194 xine_get_version ( &major, &minor, &sub );
189 return sub; 195 return sub;
190} 196}
191 197
192int Lib::play( const QString& fileName, int startPos, int start_time ) { 198int 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);
200} 214}
201 215
@@ -240,21 +254,42 @@ int Lib::currentPosition() const {
240 254
241int Lib::currentTime() const { 255int 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
249int Lib::length() const { 267int 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
286valid stream, then return -1 (this value could be used to make the stream
287unseekable, but it should never occur!! Mr. Murphy ? :) ) */
288
289 return -1;
255} 290}
256 291
257bool Lib::isSeekable() const { 292bool Lib::isSeekable() const {
258 assert( m_initialized ); 293 assert( m_initialized );
259 294
260 return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE ); 295 return xine_get_stream_info( m_stream, XINE_STREAM_INFO_SEEKABLE );
@@ -363,15 +398,13 @@ void Lib::setScaling( bool scale ) {
363 ::null_set_scaling( m_videoOutput, scale ); 398 ::null_set_scaling( m_videoOutput, scale );
364} 399}
365 400
366void Lib::setGamma( int value ) { 401void 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
374bool Lib::isScaling() const { 407bool Lib::isScaling() const {
375 assert( m_initialized ); 408 assert( m_initialized );
376 409
377 return ::null_is_scaling( m_videoOutput ); 410 return ::null_is_scaling( m_videoOutput );