Changeset 175 for smplayer/vendor/current/src/mplayerprocess.cpp
- Timestamp:
- May 3, 2016, 2:14:41 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
smplayer/vendor/current/src/mplayerprocess.cpp
r163 r175 1 1 /* smplayer, GUI front-end for mplayer. 2 Copyright (C) 2006-201 4Ricardo Villalba <rvm@users.sourceforge.net>2 Copyright (C) 2006-2016 Ricardo Villalba <rvm@users.sourceforge.net> 3 3 4 4 This program is free software; you can redistribute it and/or modify … … 31 31 #define TOO_CHAPTERS_WORKAROUND 32 32 33 MplayerProcess::MplayerProcess(QObject * parent) : MyProcess(parent) 33 MplayerProcess::MplayerProcess(QObject * parent) 34 : PlayerProcess(parent) 35 , notified_mplayer_is_running(false) 36 , received_end_of_file(false) 37 , last_sub_id(-1) 38 , mplayer_svn(-1) // Not found yet 39 #if NOTIFY_SUB_CHANGES 40 , subtitle_info_received(false) 41 , subtitle_info_changed(false) 42 #endif 43 #if NOTIFY_AUDIO_CHANGES 44 , audio_info_changed(false) 45 #endif 46 , dvd_current_title(-1) 47 , br_current_title(-1) 34 48 { 35 #if NOTIFY_SUB_CHANGES 36 qRegisterMetaType<SubTracks>("SubTracks"); 37 #endif 38 39 #if NOTIFY_AUDIO_CHANGES 40 qRegisterMetaType<Tracks>("Tracks"); 41 #endif 49 player_id = PlayerID::MPLAYER; 42 50 43 51 connect( this, SIGNAL(lineAvailable(QByteArray)), … … 49 57 connect( this, SIGNAL(error(QProcess::ProcessError)), 50 58 this, SLOT(gotError(QProcess::ProcessError)) ); 51 52 notified_mplayer_is_running = false;53 last_sub_id = -1;54 mplayer_svn = -1; // Not found yet55 59 } 56 60 … … 81 85 MyProcess::start(); 82 86 83 #if !defined(Q_OS_OS2)84 87 return waitForStarted(); 85 #else86 bool r = waitForStarted();87 if (r) {88 pidMP = QProcess::pid();89 qDebug("MPlayer PID %i", pidMP);90 MPpipeOpen();91 }92 return r;93 #endif94 88 } 95 89 96 void MplayerProcess::writeToStdin(QString text) {97 if (isRunning()) {98 //qDebug("MplayerProcess::writeToStdin");99 #if !defined(Q_OS_OS2)100 #ifdef Q_OS_WIN101 write( text.toUtf8() + "\n");102 #else103 write( text.toLocal8Bit() + "\n");104 #endif105 #else106 MPpipeWrite( text.toLocal8Bit() + "\n");107 #endif108 } else {109 qWarning("MplayerProcess::writeToStdin: process not running");110 }111 #ifdef Q_OS_OS2112 if (text == "quit" || text == "quit\n") {113 MPpipeClose();114 }115 #endif116 }117 118 #ifdef Q_OS_OS2119 void MplayerProcess::MPpipeOpen() {120 char szPipeName[ 100 ];121 sprintf( szPipeName, "\\PIPE\\MPLAYER\\%x", pidMP );122 DosCreateNPipe( szPipeName, &hpipe, NP_ACCESS_DUPLEX, 1, 1024, 1024, 0 );123 }124 125 void MplayerProcess::MPpipeClose( void ) {126 DosClose( hpipe );127 }128 129 void MplayerProcess::MPpipeWrite( const QByteArray text ) {130 // MPlayer quitted ?131 if ( !isRunning() )132 return;133 134 // as things could hang when pipe communication is done direct here, i do a seperate thread for it135 pipeThread = new PipeThread(text, hpipe);136 137 pipeThread->start();138 while (!pipeThread->isRunning() && !pipeThread->isFinished()) {139 qDebug("we sleep");140 DosSleep(10);141 }142 // we wait for max 2 seconds for the thread to be ended (we to this with max 20 loops)143 int count = 0;144 while (!pipeThread->wait(100) && count < 20) {145 count ++;146 }147 if (count >= 20) {148 pipeThread->terminate();149 qDebug("pipe communication terminated");150 }151 delete pipeThread;152 }153 #endif154 90 155 91 static QRegExp rx_av("^[AV]: *([0-9,:.-]+)"); … … 314 250 //if (line.startsWith("MPlayer2")) line = "mplayer2 d0305da (C) 2000-2012 MPlayer & mplayer2 teams"; 315 251 //if (line.startsWith("MPlayer SVN")) line = "MPlayer svn r34540 (Ubuntu), built with gcc-4.6 (C) 2000-2012 MPlayer Team"; 252 //if (line.startsWith("MPlayer SVN")) line = "MPlayer 1.2-4.8 (C) 2000-2015 MPlayer Team"; 316 253 317 254 // Emulates unknown version … … 437 374 audios.addLang(ID, lang); 438 375 } else { 439 qDebug("MplayerProcess::parseLine: audio %d exists, modif ing it", ID);376 qDebug("MplayerProcess::parseLine: audio %d exists, modifying it", ID); 440 377 441 378 if (t == "NAME") { … … 927 864 } 928 865 929 #ifdef Q_OS_OS2 930 PipeThread::PipeThread(const QByteArray t, const HPIPE pipe) { 931 text = t; 932 hpipe = pipe; 933 } 934 935 PipeThread::~PipeThread() { 936 } 937 938 void PipeThread::run() { 939 ULONG cbActual; 940 APIRET rc = NO_ERROR; 941 942 rc = DosConnectNPipe( hpipe ); 943 if (rc != NO_ERROR) 944 return; 945 946 // qDebug("pipe connected"); 947 DosWrite( hpipe, text.data(), strlen( text.data() ), &cbActual ); 948 949 // Wait for ACK 950 DosRead( hpipe, &cbActual, sizeof( ULONG ), &cbActual ); 951 DosDisConnectNPipe( hpipe ); 952 return; 953 } 954 #endif 955 866 #include "mplayeroptions.cpp" 956 867 #include "moc_mplayerprocess.cpp"
Note:
See TracChangeset
for help on using the changeset viewer.