def __init__(self, path): fd = Qt.OpenMovieFile(path, 0) self.movie, d1, d2 = Qt.NewMovieFromFile(fd, 0, 0) self.movietimescale = self.movie.GetMovieTimeScale() try: self.audiotrack = self.movie.GetMovieIndTrackType(1, QuickTime.AudioMediaCharacteristic, QuickTime.movieTrackCharacteristic) self.audiomedia = self.audiotrack.GetTrackMedia() except Qt.Error: self.audiotrack = self.audiomedia = None self.audiodescr = {} else: handle = Res.Handle('') n = self.audiomedia.GetMediaSampleDescriptionCount() self.audiomedia.GetMediaSampleDescription(1, handle) self.audiodescr = _audiodescr(handle.data) self.audiotimescale = self.audiomedia.GetMediaTimeScale() del handle try: self.videotrack = self.movie.GetMovieIndTrackType(1, QuickTime.VisualMediaCharacteristic, QuickTime.movieTrackCharacteristic) self.videomedia = self.videotrack.GetTrackMedia() except Qt.Error: self.videotrack = self.videomedia = self.videotimescale = None if self.videotrack: self.videotimescale = self.videomedia.GetMediaTimeScale() x0, y0, x1, y1 = self.movie.GetMovieBox() self.videodescr = {'width': x1 - x0, 'height': y1 - y0} self._initgworld() self.videocurtime = None self.audiocurtime = None return
def set(self, path_or_fss, start=0): self.SetPort() if self.movie: #self.GetWindow().InvalWindowRect(self.movie.GetMovieBox()) Qd.PaintRect(self.movie.GetMovieBox()) path = File.pathname(path) self.movietitle = os.path.basename(path) movieResRef = Qt.OpenMovieFile(path_or_fss, 1) self.movie, dummy, dummy = Qt.NewMovieFromFile( movieResRef, 0, QuickTime.newMovieActive) self.moviebox = self.movie.GetMovieBox() self.calcmoviebox() Qd.ObscureCursor() # XXX does this work at all? self.movie.GoToBeginningOfMovie() if start: self.movie.StartMovie() self.running = 1 else: self.running = 0 self.movie.MoviesTask(0)
def __init__(self, url): path = MMurl.urlretrieve(url)[0] fsspec = macfs.FSSpec(path) fd = Qt.OpenMovieFile(fsspec, 0) self.movie, d1, d2 = Qt.NewMovieFromFile(fd, 0, 0) self.movietimescale = self.movie.GetMovieTimeScale() try: self.audiotrack = self.movie.GetMovieIndTrackType( 1, QuickTime.AudioMediaCharacteristic, QuickTime.movieTrackCharacteristic) self.audiomedia = self.audiotrack.GetTrackMedia() except Qt.Error: self.audiotrack = self.audiomedia = None self.audiodescr = {} else: handle = Res.Handle('') n = self.audiomedia.GetMediaSampleDescriptionCount() self.audiomedia.GetMediaSampleDescription(1, handle) self.audiodescr = MediaDescr.SoundDescription.decode(handle.data) self.audiotimescale = self.audiomedia.GetMediaTimeScale() del handle try: self.videotrack = self.movie.GetMovieIndTrackType( 1, QuickTime.VisualMediaCharacteristic, QuickTime.movieTrackCharacteristic) self.videomedia = self.videotrack.GetTrackMedia() except Qt.Error: self.videotrack = self.videomedia = self.videotimescale = None if self.videotrack: self.videotimescale = self.videomedia.GetMediaTimeScale() x0, y0, x1, y1 = self.movie.GetMovieBox() self.videodescr = {'width': (x1 - x0), 'height': (y1 - y0)} self._initgworld() self.videocurtime = None self.audiocurtime = None
def loadMovie(theFile): """Load a movie given an fsspec. Return the movie object""" movieResRef = Qt.OpenMovieFile(theFile, 1) movie, d1, d2 = Qt.NewMovieFromFile(movieResRef, 0, QuickTime.newMovieActive) return movie
from Carbon import Qt
fn = MMurl.urlretrieve(fn)[0] except IOError, arg: if type(arg) == type(()): arg = arg[-1] self.errormsg(node, 'Cannot open: %s\n\n%s.' % (fn, arg)) self.window._mac_setwin() try: movieResRef = Qt.OpenMovieFile(fn, 1) except (ValueError, Qt.Error), arg: if type(arg) == type(()): arg = arg[-1] self.errormsg(node, 'QuickTime cannot open: %s\n\n%s.' % (fn, arg)) return 1 try: self.arm_movie, d1, d2 = Qt.NewMovieFromFile(movieResRef, 0, 0) ## QuickTime.newMovieActive) except (ValueError, Qt.Error), arg: Qt.CloseMovieFile(movieResRef) if type(arg) == type(()): arg = arg[-1] self.errormsg(node, 'QuickTime cannot parse: %s\n\n%s.' % (fn, arg)) return 1 self.place_movie(node, self.arm_movie) ## self.make_ready(self.arm_movie) self.__ready = 1 return 1 def make_ready(self, movie, node): # First convert begin/end to movie times
def readFrame(inputMovieName, outputImageName, frameNumber): try: os.unlink(outputImageName) # delete the existing outputImageName, if it exists except: pass try: Qt.EnterMovies() fd = Qt.OpenMovieFile(inputMovieName, 0) movie, junk1, junk2 = Qt.NewMovieFromFile(fd, 0, 0) try: videotrack = movie.GetMovieIndTrackType(1, QuickTime.VisualMediaCharacteristic, QuickTime.movieTrackCharacteristic) videomedia = videotrack.GetTrackMedia() except Qt.Error: videotrack = videomedia = None if videotrack: x0, y0, x1, y1 = movie.GetMovieBox() width, height = x1-x0, y1-y0 old_port, old_dev = Qdoffs.GetGWorld() try: movie_rect = (0, 0, width, height) gworld = Qdoffs.NewGWorld(32, movie_rect, None, None, QDOffscreen.keepLocal) pixmap = gworld.GetGWorldPixMap() Qdoffs.LockPixels(pixmap) Qdoffs.SetGWorld(gworld.as_GrafPtr(), None) Qd.EraseRect(movie_rect) movie.SetMovieGWorld(gworld.as_GrafPtr(), None) movie.SetMovieBox(movie_rect) movie.SetMovieActive(1) movie.MoviesTask(0) movie.SetMoviePlayHints(QuickTime.hintsHighQuality, QuickTime.hintsHighQuality) finally: Qdoffs.SetGWorld(old_port, old_dev) # finished with Quicktime initialization QTSearchFlags = QuickTime.nextTimeMediaSample|QuickTime.nextTimeEdgeOK startTime, frameDuration = videomedia.GetMediaNextInterestingTime(QTSearchFlags, 0, 1.0) # startTime is time at start of movie (start offset) # frameDuration is the number of video time units that pass each frame (in videotimescale units) if debug: print "frameDuration", frameDuration movieDuration = videotrack.GetTrackDuration() # in movietimescale units if debug: print "movieDuration", movieDuration movietimescale = movie.GetMovieTimeScale() if debug: print "movietimescale", movietimescale videotimescale = videomedia.GetMediaTimeScale() if debug: print "videotimescale", videotimescale movieDurationSeconds = float(movieDuration) / movietimescale if debug: print "movieDurationSeconds", movieDurationSeconds frameLengthSeconds = float(frameDuration) / videotimescale if debug: print "frameLengthSeconds", frameLengthSeconds, "(inverse)", 1.0/frameLengthSeconds totalFrames = movieDurationSeconds / frameLengthSeconds if debug: print "totalFrames", totalFrames, "(rounded)", int(round(totalFrames)) frames = int(round(totalFrames)) if debug: print "reading frame", frameNumber, "at videotime", startTime+frameNumber*frameDuration timestamp = videomedia.GetMediaNextInterestingTimeOnly(QTSearchFlags, startTime+frameNumber*frameDuration, 1) if timestamp < 0: raise "Quicktime error", "error %s, frame search failed at videotime %s" % (timestamp,startTime+frameNumber*frameDuration) moviecurtime, junk1, junk2 = Qt.ConvertTimeScale((timestamp, videotimescale, None), movietimescale) # I don't know why this time adjustment is needed, but it sometimes seeks to the wrong frame without it movieframetime, junk1, junk2 = Qt.ConvertTimeScale((frameDuration, videotimescale, None), movietimescale) if debug: print "movieframetime", movieframetime if movieframetime > 1: moviecurtime += 1 movie.SetMovieTimeValue(moviecurtime) movie.MoviesTask(0) # shuffle the offscreen PixMap data, because it may have funny stride values and alpha channel rowbytes = Qdoffs.GetPixRowBytes(pixmap) start = 0 rv = [] for i in range(height): nextline = Qdoffs.GetPixMapBytes(pixmap, start, width*4) for j in range(width): rgb = nextline[4*j+1:4*j+4] # skip alpha plane data at nextline[4*j] rv.append(rgb) start = start + rowbytes data = string.join(rv, '') if debug: print "timestamp found", timestamp, "length of image data", len(data) videomedia = videotrack = movie = None # this is required to deallocate memory except Exception, err: writeError(outputImageName, err.__str__())
"""VerySimplePlayer converted to python
"""MovieInWindow converted to python
import windowinterface if not windowinterface._qtavailable(): Qt = None from Carbon import QuickTime def get(url): if not Qt: print 'QuickTime not available, cannot obtain movie duration' return 0 try: filename = MMurl.urlretrieve(url)[0] except IOError: return 0 Qt.EnterMovies() try: movieResRef = Qt.OpenMovieFile(filename, 1) except (ValueError, Qt.Error), arg: print 'Cannot open QT movie:', filename, arg return 0 try: movie, d1, d2 = Qt.NewMovieFromFile( movieResRef, 0, QuickTime.newMovieDontResolveDataRefs) duration = movie.GetMovieDuration() scale = movie.GetMovieTimeScale() duration = duration / float(scale) except Qt.Error: print 'Cannot obtain movie duration for', filename duration = 0 return duration
# Video file reader, using QuickTime