diff options
Diffstat (limited to 'kaffeine/terminate.patch')
-rw-r--r-- | kaffeine/terminate.patch | 269 |
1 files changed, 0 insertions, 269 deletions
diff --git a/kaffeine/terminate.patch b/kaffeine/terminate.patch deleted file mode 100644 index 24a632a..0000000 --- a/kaffeine/terminate.patch +++ /dev/null @@ -1,269 +0,0 @@ -diff -ru kaffeine-0.8.4.cvs.orig/kaffeine/src/input/dvb/dvbout.cpp kaffeine-0.8.4.cvs/kaffeine/src/input/dvb/dvbout.cpp ---- kaffeine-0.8.4.cvs.orig/kaffeine/src/input/dvb/dvbout.cpp 2007-11-25 12:57:46.000000000 +0200 -+++ kaffeine-0.8.4.cvs/kaffeine/src/input/dvb/dvbout.cpp 2007-11-26 00:35:52.000000000 +0200 -@@ -19,6 +19,7 @@ - */ - - #include <fcntl.h> -+#include <errno.h> - - #include <kstandarddirs.h> - -@@ -47,7 +48,6 @@ - plugHandle = plug->init( chan.sid, anum, tnum, chan.fta ); - } - -- fdPipe=0; - channel = chan; - thWrite = 0; - rtp = 0; -@@ -58,7 +58,7 @@ - for ( i=0; i<channel.nsubpid && i<MAX_DVBSUB; i++ ) - pids.append( channel.subpid[i].pid ); - wBuf = NULL; -- timeShifting = beginLive = false; -+ timeShifting = false; - haveRec = haveLive = instantRec = haveBroadcast = false; - patpmt = wpatpmt = false; - connect( &stopRecTimer, SIGNAL(timeout()), this, SLOT(stopRec()) ); -@@ -232,7 +232,7 @@ - - bool DVBout::hasLive() const - { -- if ( haveLive || fdPipe || timeShifting ) -+ if ( haveLive || timeShifting ) - return true; - return false; - } -@@ -248,6 +248,7 @@ - - bool DVBout::doPause( const TQString &name ) // called from dvbstream::run() - { -+ fprintf(stderr,"DVBout::doPause\n"); - if ( !haveLive ) - return false; - -@@ -255,23 +256,13 @@ - liveFile.setName( name ); - liveFile.open( IO_WriteOnly|IO_Truncate ); - liveFile.writeBlock( (char*)tspat, TS_SIZE ); -- liveFile.writeBlock( (char*)tspmt, TS_SIZE ); -+ liveFile.writeBlock( (char*)tspmt, TS_SIZE ); - mutex.lock(); - haveLive = false; -- mutex.unlock(); -- if ( !wait(100) ) { -- terminate(); -- wait(); -- } -- mutex.lock(); -- haveLive = true; -- if ( close( fdPipe )<0 ) -- perror("close out pipe: "); -- else -- fprintf(stderr,"out pipe closed\n"); -- fdPipe = 0; -- mutex.unlock(); - timeShifting = true; -+ mutex.unlock(); -+ fprintf(stderr,"doPause: starting timeshift, waiting live thread to finish\n"); -+ wait(); - //emit shifting( timeShifting ); - } - return true; -@@ -288,11 +279,10 @@ - - bool DVBout::goLive( const TQString &name ) - { -- if ( fdPipe ) return false; -- -+ fprintf(stderr,"goLive\n"); -+ if (haveLive) return false; - haveLive = true; - pipeName = name; -- beginLive = true; - //activeApid = napid; - - writePat(); -@@ -310,31 +300,26 @@ - - void DVBout::preStopLive() - { -- mutex.lock(); -- haveLive = false; -- mutex.unlock(); -+ // FIXME: maybe some way to tell the thread that it can stop? -+ // or maybe not. It won't make things much faster. - } - - -- - void DVBout::stopLive() - { -+ fprintf(stderr,"stopLive\n"); - mutex.lock(); - if ( timeShifting ) { - liveFile.close(); - timeShifting = false; - emit shifting( timeShifting ); - } -- mutex.unlock(); -- if ( !wait(500) ) { -- terminate(); -- wait(); -- } -- if ( fdPipe ) { -- close( fdPipe ); -- fprintf( stderr, "pipe closed\n" ); -- fdPipe = 0; -- } -+ if (haveLive) { -+ haveLive=false; -+ mutex.unlock(); -+ fprintf(stderr,"stopLive: Waiting live thread to finish\n"); -+ wait(); -+ } else mutex.unlock(); - delete [] wBuf; - wBuf = NULL; - } -@@ -464,11 +449,7 @@ - if ( plug && plugHandle ) - plug->process( plugHandle, thBuf, TS_SIZE*NTS ); - mutex.lock(); -- if ( haveLive && fdPipe ) { -- if ( beginLive ) { -- beginLive = !beginLive; -- start(); -- } -+ if ( haveLive ) { - if ( wDist<95 ) { - memcpy( wBuf+(wWrite*TS_SIZE*NTS), thBuf, TS_SIZE*NTS ); - wpatpmt = patpmt; -@@ -525,40 +506,67 @@ - } - } - -- -+bool DVBout::writeBytes(int fd, const unsigned char *buf, int bytes) { -+ int w=0; -+ mutex.lock(); -+ while (haveLive && w<bytes) { -+ mutex.unlock(); -+ int r=write(fd, buf+w, bytes-w); -+ if (r>=0) w+=r; -+ else { -+ if ( errno != EAGAIN ) { -+ perror("DVBout: pipe writeBytes"); -+ return false; -+ } -+ usleep( 100 ); -+ } -+ mutex.lock(); -+ } -+ mutex.unlock(); -+ return haveLive; -+} - - void DVBout::run() - { -- if ( haveLive && fdPipe ) { -- while ( haveLive && fdPipe ) { -- if ( wDist>0 ) { -- if ( wpatpmt ) { -- write( fdPipe, tspat, TS_SIZE ); -- write( fdPipe, tspmt, TS_SIZE ); -- wpatpmt = false; -- } -- write( fdPipe, wBuf+(wRead*TS_SIZE*NTS), TS_SIZE*NTS ); -- --wDist; -- ++wRead; -- if ( wRead>99 ) -- wRead = 0; -- } -- else -- usleep( 100 ); -+ int fd=-1; -+ fprintf(stderr,"DVBout::run started\n"); -+ -+ while (haveLive && (fd=open( pipeName.ascii(), O_WRONLY | O_NONBLOCK )) == -1 ) { -+ if (errno!=ENXIO) { -+ perror("DVBout::run open pipe"); -+ return; - } -- return; -+ usleep ( 100 ); - } -+ fprintf(stderr,"DVBout::run write pipe %s opened\n",pipeName.ascii()); -+ emit playDvb(); -+ fprintf(stderr,"DVBout::run signal emitted\n"); - -- if ( (fdPipe=open( pipeName.ascii(), O_WRONLY))<0 ) { -- perror("PIPE FILE: "); -- return; -+ mutex.lock(); -+ while (haveLive) { -+ mutex.unlock(); -+ if (wpatpmt) { -+ if (writeBytes(fd, tspat, TS_SIZE) && writeBytes(fd, tspmt, TS_SIZE) ) { -+ wpatpmt = false; -+ } else goto fail; -+ } -+ if (wDist>0) { -+ if ( writeBytes (fd, wBuf+(wRead*TS_SIZE*NTS), TS_SIZE*NTS ) ) { -+ mutex.lock(); -+ --wDist; -+ ++wRead; -+ if (wRead>99) wRead=0; -+ mutex.unlock(); -+ } else goto fail; -+ } else usleep ( 100 ); -+ mutex.lock(); - } -- fprintf(stderr,"pipe opened\n"); -- emit playDvb(); -+ mutex.unlock(); -+fail: -+ if(fd>=0) close(fd); -+ fprintf(stderr,"DVBout::run finished\n"); - } - -- -- - DVBout::~DVBout() - { - if ( plug ) -diff -ru kaffeine-0.8.4.cvs.orig/kaffeine/src/input/dvb/dvbout.h kaffeine-0.8.4.cvs/kaffeine/src/input/dvb/dvbout.h ---- kaffeine-0.8.4.cvs.orig/kaffeine/src/input/dvb/dvbout.h 2007-11-25 12:57:46.000000000 +0200 -+++ kaffeine-0.8.4.cvs/kaffeine/src/input/dvb/dvbout.h 2007-11-25 23:09:58.000000000 +0200 -@@ -35,7 +35,7 @@ - - class KaffeineDvbPlugin; - --class DVBout : public TQObject, public QThread -+class DVBout : public TQObject, private QThread - { - TQ_OBJECT - -@@ -77,13 +77,13 @@ - void writePat(); - void calculateCRC( unsigned char *p_begin, unsigned char *p_end ); - void renameFile( TQString &name, const TQString &ext ); -+ bool writeBytes(int fd, const unsigned char *buf, int bytes); - - int pmtpid; - bool patpmt, wpatpmt; - bool timeShifting; - TQString pipeName; - QFile outFile, liveFile; -- int fdPipe; - Ts2Rtp *rtp; - unsigned char thBuf[188*100]; - unsigned char *wBuf; -@@ -92,7 +92,6 @@ - unsigned char tspmt[188]; - unsigned int CRC32[256]; - int thWrite; -- bool beginLive; - bool haveRec, haveLive, instantRec, haveBroadcast; - QTimer stopRecTimer, timerPatPmt; - QMutex mutex; |