3 from PyQt4
.QtCore
import SIGNAL
,SLOT
,Qt
5 from PyQt4
.QtCore
import QProcess
6 from PyQt4
.QtCore
import QStringList
10 class MProcess(QProcess
):
11 """ Mplayer process controller
15 STOPPED
, PAUSED
, PLAYING
= range(3)
16 INTERVAL
= 200 #For check timer
18 def __init__(self
, wid
= None, parent
= None):
19 super(MProcess
, self
).__init
__(parent
)
20 self
.playerState
= MProcess
.STOPPED
21 ##The current file's name.
24 ##Slider should be a QSlider or its subclass-object
25 ##self.slider will be update it isn't None
28 ##The Widget Id which used to play vedio.
31 ##Point A and Point B used to circle
35 self
.timerId
= self
.startTimer(MProcess
.INTERVAL
)
38 self
.timeLength
= None
40 self
.connect(self
, SIGNAL("readyReadStandardOutput()"),
42 self
.connect(self
, SIGNAL("readyReadStandardError()"),
45 #END def __init__(self, parent = None):
47 def setSlider(self
,slider
):
49 self
.connect(self
.slider
,SIGNAL("sliderPressed()"),self
.pause
)
50 self
.connect(self
.slider
,SIGNAL("sliderReleased()"),self
.seek
)
51 #END def setSlider(self,slider):
54 self
.timePos
= self
.slider
.value()
55 self
.write("seek "+ str(self
.slider
.value()) + " 2\n")
57 #END def seek(self,value):
59 def setFileName(self
,fileName
):
60 self
.fileName
= fileName
62 #END def setFileName(self,fileName):
65 if(self
.fileName
== None):
69 args
= QStringList(["-slave",
71 "-wid", str(self
.wid
), self
.fileName
])
73 if(self
.state() != QProcess
.NotRunning
):
74 print "self.terminate()"
76 if(not self
.waitForFinished()):
78 self
.timeLength
= None
81 self
.playerState
= MProcess
.PLAYING
87 self
.pa
= int(self
.timePos
)/10*10;
90 self
.pb
= int(self
.timePos
) + 1;
92 def cleanPoints(self
):
96 #END def setCirclePoint(self):
98 def setVolume(self
,value
):
99 if(self
.playerState
== MProcess
.PLAYING
):
100 self
.write("volume " + str(value
) + " 1\n")
103 #END def setVolume(self,value):
105 def setupTimer(self
):
106 if(self
.timerId
== None):
107 self
.timerId
= self
.startTimer(MProcess
.INTERVAL
)
110 #END def setupTimer(self):
112 def closeTimer(self
):
113 if(self
.timerId
!= None):
114 self
.killTimer(self
.timerId
)
118 #END def closeTimer(self):
121 if(self
.playerState
== MProcess
.PAUSED
):
122 self
.playerState
= MProcess
.PLAYING
124 elif(self
.playerState
== MProcess
.PLAYING
):
126 self
.playerState
= MProcess
.PAUSED
127 else: ## if STOPPED, then return directly
130 self
.write("pause \n")
131 #END def pause(self):
135 self
.playerState
== MProcess
.STOPPED
136 self
.timeLength
= None
137 self
.write("stop \n")
140 def analyseResult(self
):
141 resStr
= self
.readAll().data()
142 if(re
.search("POSITION",resStr
)):
143 self
.timePos
= float((re
.search("\d+\.?\d",resStr
).group(0)))
144 elif(re
.search("LENGTH",resStr
)):
145 self
.timeLength
= float(re
.search("\d+\.?\d",resStr
).group(0))
146 if(self
.slider
!= None):
147 self
.slider
.setRange(0,int(self
.timeLength
)+1)
148 print self
.timeLength
149 elif(re
.search("End of file",resStr
)):
151 self
.playerState
= MProcess
.STOPPED
152 self
.emit(SIGNAL("stopped()"))
158 if(self
.pa
== None or self
.pb
== None):
161 if( self
.pa
>= self
.pb
):
164 if(self
.timePos
> self
.pb
):
165 self
.timePos
= self
.pa
166 print "seek "+ str(self
.pa
) + " 0\n"
167 self
.write("seek "+ str(self
.pa
) + " 2\n")
169 #END def analyseResult(self):
171 def timerEvent(self
,event
):
172 if(event
.timerId() != self
.timerId
):
175 print self
.timePos
, " ", self
.pa
, " ", self
.pb
176 if(self
.slider
!= None and self
.timePos
!= None):
177 self
.slider
.setValue(int(self
.timePos
))
180 if(self
.playerState
== MProcess
.PAUSED
):
184 if(self
.state() == QProcess
.NotRunning
):
186 self
.playerState
= MProcess
.STOPPED
187 self
.emit(SIGNAL("stopped()"))
190 self
.write("get_time_pos\n")
191 if(self
.timeLength
== None):
192 self
.write("get_time_length\n")
194 #END def timerEvent(self,event):
196 #END class MProcess(QProcess):