269 lines
7.9 KiB
Python
269 lines
7.9 KiB
Python
from Carbon import Qt
|
|
from Carbon import QuickTime
|
|
import macfs
|
|
from Carbon import Qd
|
|
from Carbon.QuickDraw import srcCopy
|
|
from ExtPixMapWrapper import ExtPixMapWrapper
|
|
from Carbon.Qdoffs import *
|
|
import ImageMac
|
|
import W
|
|
|
|
|
|
|
|
|
|
def GetFrames(m):
|
|
frameCount=0
|
|
theTime=0
|
|
type=QuickTime.VideoMediaType
|
|
#type='MPEG'
|
|
flags=QuickTime.nextTimeMediaSample
|
|
flags=flags+QuickTime.nextTimeEdgeOK
|
|
|
|
while theTime>=0:
|
|
(theTime,duration)=m.GetMovieNextInterestingTime(flags,1,type,theTime,0)
|
|
#print "theTime ",theTime," duration ",duration
|
|
frameCount=frameCount+1
|
|
flags = QuickTime.nextTimeMediaSample
|
|
|
|
|
|
return frameCount-1
|
|
|
|
def GetMovieFromOpenFile():
|
|
fss, ok = macfs.StandardGetFile(QuickTime.MovieFileType)
|
|
mov = None
|
|
if ok:
|
|
movieResRef = Qt.OpenMovieFile(fss, 1)
|
|
mov, d1, d2 = Qt.NewMovieFromFile(movieResRef, 0, QuickTime.newMovieActive)
|
|
|
|
return mov
|
|
|
|
|
|
class ExtMovie:
|
|
def __init__(self,mov):
|
|
|
|
self.frames=0
|
|
self.frameArray=[]
|
|
self.movie=mov
|
|
self._countFrames()
|
|
r=self.movie.GetMovieBox()
|
|
self.myRect=(0,0,r[2]-r[0],r[3]-r[1])
|
|
self.movie.SetMovieBox(self.myRect)
|
|
self.pm=ExtPixMapWrapper()
|
|
self.pm.left=0
|
|
self.pm.top=0
|
|
self.pm.right=r[2]-r[0]
|
|
self.pm.bottom=r[3]-r[1]
|
|
self.gw=NewGWorld(32,self.myRect,None,None,0)
|
|
self.movie.SetMovieGWorld(self.gw.as_GrafPtr(), self.gw.GetGWorldDevice())
|
|
self.GotoFrame(0)
|
|
|
|
def _countFrames(self):
|
|
#deve contare il numero di frame, creare un array con i tempi per ogni frame
|
|
theTime=0
|
|
#type=QuickTime.VIDEO_TYPE
|
|
type=QuickTime.VideoMediaType
|
|
flags=QuickTime.nextTimeMediaSample+QuickTime.nextTimeEdgeOK
|
|
|
|
while theTime>=0:
|
|
(theTime,duration)=self.movie.GetMovieNextInterestingTime(flags,1,type,theTime,0)
|
|
self.frameArray.append((theTime,duration))
|
|
flags = QuickTime.nextTimeMediaSample
|
|
self.frames=self.frames+1
|
|
|
|
|
|
|
|
def GotoFrame(self,n):
|
|
if n<=self.frames:
|
|
self.curFrame=n
|
|
(port,device)=GetGWorld()
|
|
SetGWorld(self.gw.as_GrafPtr(),None)
|
|
(self.now,self.duration)=self.frameArray[n]
|
|
self.movie.SetMovieTimeValue(self.now)
|
|
pixmap=self.gw.GetGWorldPixMap()
|
|
|
|
if not LockPixels(pixmap):
|
|
print "not locked"
|
|
else:
|
|
|
|
#Qd.EraseRect(self.myRect)
|
|
#this draws the frame inside the current gworld
|
|
self.movie.MoviesTask(0)
|
|
#this puts it in the buffer pixmap
|
|
self.pm.grab(0,0,self.myRect[2],self.myRect[3])
|
|
UnlockPixels(pixmap)
|
|
#self.im=self.pm.toImage()
|
|
SetGWorld(port,device)
|
|
|
|
def NextFrame(self):
|
|
self.curFrame=self.curFrame+1
|
|
if self.curFrame>self.frames:
|
|
self.curFrame=0
|
|
self.GotoFrame(self.curFrame)
|
|
|
|
def isLastFrame():
|
|
return self.curFrame==self.frames
|
|
|
|
|
|
def GetImage(self):
|
|
return self.pm.toImage()
|
|
|
|
def GetImageN(self,n):
|
|
self.GotoFrame(n)
|
|
return self.pm.toImage()
|
|
|
|
def GetNumeric(self):
|
|
return self.pm.toNumeric()
|
|
|
|
def GetNumericN(self,n):
|
|
self.GotoFrame(n)
|
|
return self.pm.toNumeric()
|
|
|
|
def Blit(self,destRect):
|
|
Qd.RGBForeColor( (0,0,0) )
|
|
Qd.RGBBackColor((65535, 65535, 65535))
|
|
|
|
#Qd.MoveTo(10,10)
|
|
#Qd.LineTo(200,150)
|
|
Qd.CopyBits(self.gw.GetPortBitMapForCopyBits(),Qd.GetPort().GetPortBitMapForCopyBits(),self.myRect,destRect,srcCopy,None)
|
|
|
|
class MovieWin(W.Window):
|
|
|
|
def __init__(self,eMovie,title="MovieWin"):
|
|
self.ExtMovie=eMovie
|
|
|
|
def test():
|
|
import ImageFilter
|
|
from MLab import max
|
|
from MLab import min
|
|
from Numeric import *
|
|
Qt.EnterMovies()
|
|
m=GetMovieFromOpenFile()
|
|
em=ExtMovie(m)
|
|
print "Total frames:",em.frames," Current frame:",em.curFrame
|
|
#ImageMac.showImage(em.GetImage(),"frame 0",1)
|
|
#em.GotoFrame(500)
|
|
#ImageMac.showImage(em.GetImage().filter(ImageFilter.SMOOTH),"frame 500",2)
|
|
#ImageMac.showImage(em.GetImageN(1000),"frame 1000",2)
|
|
#r=array(((1,0,0,0),(0,0,0,0),(0,0,0,0),(0,0,0,0)))
|
|
#g=array(((0,0,0,0),(0,1,0,0),(0,0,0,0),(0,0,0,0)))
|
|
#b=array(((0,0,0,0),(0,0,0,0),(0,0,1,0),(0,0,0,0)))
|
|
#bw=array(((0.3086,0.6094,0.0820,0)))
|
|
#r2=array(((1,0,0,0)))
|
|
#ImageMac.showNumeric(em.GetNumericN(0),"frame 0",1)
|
|
#print em.GetNumericN(500).shape
|
|
#print "original (1,1)",em.GetNumericN(0)[100,100]
|
|
#print "product shape ",innerproduct(em.GetNumericN(0),r).shape
|
|
#print "product (1,1) ",innerproduct(em.GetNumericN(0),r)[100,100]
|
|
|
|
#ImageMac.showNumeric(ImageMac.BWImage(em.GetNumericN(50)))
|
|
#ImageMac.showNumeric(innerproduct(em.GetNumericN(500),r),"frame 500r",2)
|
|
#ImageMac.showNumeric(innerproduct(em.GetNumericN(500),g),"frame 500g",2)
|
|
#ImageMac.showNumeric(innerproduct(em.GetNumericN(500),b),"frame 500b",2)
|
|
|
|
#ImageMac.showNumeric(innerproduct(em.GetNumericN(500),r2),"frame 500r2",2)
|
|
#ImageMac.showNumeric(innerproduct(em.GetNumericN(10),bw),"frame 0bw",1)
|
|
#ImageMac.showNumeric(innerproduct(em.GetNumericN(400),bw),"frame 10bw",1)
|
|
#colordif=(em.GetNumericN(100)-em.GetNumericN(10))+(255,255,255,255)
|
|
#colordif=colordif/2
|
|
#ImageMac.showNumeric(colordif,"colordif",1)
|
|
#ImageMac.showNumeric(ImageMac.BWImage(colordif),"bwcolordif",1)
|
|
ilut=arange(0,256)
|
|
#ilut[118]=255
|
|
#ilut[119]=255
|
|
#ilut[120]=255
|
|
ilut[121]=255
|
|
ilut[122]=255
|
|
ilut[123]=255
|
|
ilut[124]=255
|
|
ilut[125]=255
|
|
ilut[126]=255
|
|
ilut[127]=255
|
|
ilut[128]=255
|
|
ilut[129]=255
|
|
#ilut[130]=255
|
|
#ilut[131]=255
|
|
#ilut[132]=255
|
|
mlut=ones(256)
|
|
mlut[118]=0
|
|
mlut[119]=0
|
|
mlut[120]=0
|
|
mlut[121]=0
|
|
mlut[122]=0
|
|
mlut[123]=0
|
|
mlut[124]=0
|
|
mlut[125]=0
|
|
mlut[126]=0
|
|
mlut[127]=0
|
|
mlut[128]=0
|
|
mlut[129]=0
|
|
mlut[130]=0
|
|
mlut[131]=0
|
|
mlut[132]=0
|
|
|
|
ImageMac.showImage(em.GetImageN(100),"provaImg",2)
|
|
ImageMac.showNumeric(em.GetNumericN(100),"provaNum",2)
|
|
ImageMac.showImage(em.GetImageN(100).filter(ImageFilter.SMOOTH),"frame 500",2)
|
|
#image=ImageMac.BWImage(em.GetNumericN(100))
|
|
#ImageMac.showNumeric(image)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#difimage=abs(image-ImageMac.BWImage(em.GetNumericN(10)))
|
|
#ImageMac.PlotHisto(difimage,32)
|
|
#ImageMac.showNumeric(difimage)
|
|
#difimage=127+(image-ImageMac.BWImage(em.GetNumericN(10)))/2
|
|
#ImageMac.PlotHisto(difimage,32)
|
|
#ImageMac.showNumeric(difimage)
|
|
#fimage=ImageMac.Filter3x3(16.0,(1,1,1,1,8,1,1,1,1),difimage)
|
|
#ImageMac.showNumeric(fimage)
|
|
#difimage2=choose(fimage.astype(UnsignedInt8),ilut)
|
|
#ImageMac.showNumeric(difimage2)
|
|
|
|
#(r,g,b,a)=ImageMac.SplitBands(em.GetNumericN(10))
|
|
#ImageMac.showNumeric(r,"r")
|
|
#ImageMac.showNumeric(g,"g")
|
|
#ImageMac.showNumeric(b,"b")
|
|
#ImageMac.showNumeric(a,"a")
|
|
#bwdif=abs(((innerproduct(em.GetNumericN(400),bw)-innerproduct(em.GetNumericN(10),bw))+255)/2)
|
|
#ImageMac.showNumeric(bwdif,"frame diff/bw",1)
|
|
#ImageMac.PlotHisto(bwdif)
|
|
#ImageMac.showNumeric(choose(bwdif.astype(UnsignedInt8),ilut),"frame diff/bw",1)
|
|
#ImageMac.PlotHisto(choose(bwdif.astype(UnsignedInt8),ilut))
|
|
#bwimage=ImageMac.BWImage(em.GetNumericN(100))
|
|
#ImageMac.showNumeric((ImageMac.BWImage(em.GetNumericN(90))+ImageMac.BWImage(em.GetNumericN(110))+ImageMac.BWImage(em.GetNumericN(130))+ImageMac.BWImage(em.GetNumericN(150))+ImageMac.BWImage(em.GetNumericN(170)))/5)
|
|
#bwdif=abs(((bwimage-ImageMac.BWImage(em.GetNumericN(10)))+255)/2)
|
|
#ImageMac.showNumeric(bwimage,"original frame",1)
|
|
#ImageMac.showNumeric(bwdif,"frame diff/bw",1)
|
|
#ImageMac.PlotHisto(bwdif)
|
|
#ImageMac.showNumeric(choose(bwdif.astype(UnsignedInt8),ilut),"frame diff/bw",1)
|
|
#mmask=choose(bwdif.astype(UnsignedInt8),mlut)
|
|
#ImageMac.showNumeric(255-255*mmask,"frame diff/bw",1)
|
|
#mmask.shape=bwimage.shape
|
|
#ImageMac.showNumeric(mmask*bwimage,"frame diff/bw",1)
|
|
|
|
#ImageMac.showNumeric((innerproduct(em.GetNumericN(300),bw)-innerproduct(em.GetNumericN(0),bw)),"frame diff/bw",1)
|
|
#ImageMac.showNumeric((innerproduct(em.GetNumericN(400)-em.GetNumericN(10),bw)),"frame diff2/bw",1)
|
|
#cdif=em.GetNumericN(400)-em.GetNumericN(10)
|
|
#ImageMac.showNumeric(,"frame diff2/bw",1)
|
|
|
|
#ImageMac.showNumeric(innerproduct(cdif,r),"frame 500r",1)
|
|
#ImageMac.showNumeric(innerproduct(cdif,g),"frame 500g",1)
|
|
#ImageMac.showNumeric(innerproduct(cdif,b),"frame 500b",1)
|
|
def test2():
|
|
Qt.EnterMovies()
|
|
m=GetMovieFromOpenFile()
|
|
if m==None:
|
|
print "no movie opened"
|
|
else:
|
|
em=ExtMovie(m)
|
|
print "Total frames: ",em.frames," Current frame:",em.curFrame
|
|
ImageMac.showImage(em.GetImage(),"frame 0",1)
|
|
|
|
if __name__ == '__main__':
|
|
test2()
|
|
|