Пример #1
0
    def mousePressEvent(self, event):
        GLView.mousePressEvent(self, event)

        p = self.camera.qt_to_opengl(event.pos())

        if event.buttons() & QtCore.Qt.LeftButton:
            for c in self.scene.clips:
                c._selected = c.inside(p.x(), p.y())

        #self.update()

        selectedClips = filter(lambda i: i._selected, self.scene.clips)

        for c in selectedClips:
            k, v = c.getData()
            self.parameters.setData(c, k, v)

        self.setUpdatesEnabled(False)
        self.setCursor(QtCore.Qt.ArrowCursor)
        for c in selectedClips:
            if c.inside(p.x(), p.y()):
                if p.x()-c.start_frame in range(0, 15):
                    self.extendLeft = c
                    self.setCursor(self.cursorLeft)
                elif c.end_frame-p.x() in range(0, 15):
                    self.extendRight = c
                    self.setCursor(self.cursorRight)
                else:
                    self.setCursor(QtCore.Qt.ArrowCursor)
        self.setUpdatesEnabled(True)
        self.update()
Пример #2
0
    def dropEvent(self, event):
        GLView.dropEvent(self, event)

        if event.mimeData().hasUrls():
            p = self.camera.qt_to_opengl(event.pos())
            current_x = p.x()
            for url in event.mimeData().urls():
                filename = str(url.toString(QtCore.QUrl.RemoveScheme))
                filename = os.path.normpath(filename)

                hue = random.random()

                color = QtGui.QColor.fromHsvF(hue, 0.5, 0.75)
                r, g, b = color.redF(), color.greenF(), color.blueF()

                clip = Clip()
                clip._color = (r, g, b, 1)
                clip.name = os.path.basename(filename)

                clip.producer = mlt.Producer(mlt_profile, filename)

                clip.start_frame = current_x

                cpgl = clip.producer.get_length()

                if cpgl == 15000: # some hardcoded value?
                    cpgl = 25

                clip.end_frame = clip.start_frame+cpgl

                current_x = clip.end_frame+1

                clip.producer.set("in", 0)
                clip.producer.set("out", cpgl)

                clip.track = self.scene.tracks
                clip.path = filename

                self.scene.clips.append(clip)

                self.scene.generate_mlt()
                self.updateImage()
Пример #3
0
    def resizeEvent(self, event):
        GLView.resizeEvent(self, event)
        self.parameters.setGeometry(self.geometry().left()+5, self.geometry().top()+25, self.parameters.width(), self.parameters.height())

        w = 1280/2
        h = 720/2

        x1 = self.width()-w
        y1 = 0

        x2 = x1+w
        y2 = y1+h

        self.pointVertices = numpy.array([ x1, y1, x1, y2, x2, y2, x2, y1 ], dtype=numpy.float32)

        x1 = 0
        y1 = 0

        x2 = w*2
        y2 = h*2

        self.textureCoordinates = numpy.array([ 0, 0, 0, y2, x2, y2, x2, 0 ], dtype=numpy.float32)
Пример #4
0
    def keyPressEvent(self, event):
        GLView.keyPressEvent(self, event)

        if event.key() == QtCore.Qt.Key_Space:
            self.play = not self.play

            if self.play:
                self.scene.consumer.purge()
                self.playbackTimer.start()
                self.scene.consumer.start()
            else:
                self.playbackTimer.stop()
                self.scene.consumer.stop()
                self.scene.consumer.purge()

        elif event.key() == QtCore.Qt.Key_Left:

            if event.modifiers() & QtCore.Qt.ShiftModifier:
                for clip in self.scene.clips:
                    if clip._selected:
                        clip.start_frame -= 1
                        clip.end_frame -= 1

                self.scene.generate_mlt()
                self.updateImage()

            else:
                self.playhead -= 1
                self.updateImage()
                self.update()

        elif event.key() == QtCore.Qt.Key_Right:
            if event.modifiers() & QtCore.Qt.ShiftModifier:
                for clip in self.scene.clips:
                    if clip._selected:
                        clip.start_frame += 1
                        clip.end_frame += 1

                self.scene.generate_mlt()
                self.updateImage()

            else:
                self.playhead += 1
                self.updateImage()
                self.update()

        elif event.key() == QtCore.Qt.Key_1: # view 1:1
            self.camera.identity()
            self.camera.translate(100, self.height()-50)
            self.update()

        elif event.key() == QtCore.Qt.Key_R: # render

            parameters = "f=avi acodec=pcm_s16le ac=2 vcodec=huffyuv"
            consumer = mlt.Consumer(mlt_profile, "avformat", "output.avi")
            consumer.set("rescale", "none")

            data = parameters.split(" ")
            for l in data:
                k, v = l.split("=")
                consumer.set(k, v)

            consumer.connect(self.scene.tractor)

            self.scene.tractor.set_speed(0)
            self.scene.tractor.seek(0)
            self.scene.tractor.set_speed(1)

            print "starting rendering"
            consumer.start()

            import time
            while consumer.is_stopped() == 0:
                progress = int(100.0*self.scene.tractor.frame()/self.scene.tractor.get_length())
                print "%3d" % progress,
                print "[%s%s]" % ( "#"*progress, " "*(100-progress) )
                time.sleep(1)

            progress = 100
            print "%3d" % progress,
            print "[%s%s]" % ( "#"*progress, " "*(100-progress) )
            print "finished"

        elif event.key() == QtCore.Qt.Key_A: # analyze
            for count, pl in enumerate(self.scene.playlists):
                print "---"*10
                print "Playlist #%d" % count
                for c in range(pl.count()):
                    info = pl.clip_info(c)
                    print info.start, info.frame_in, info.frame_out, info.length, info.frame_count, info.resource

        elif event.key() == QtCore.Qt.Key_C: # compact

            self.empty_frames = []

            max_frame = 0

            for c in self.scene.clips:
                max_frame = max(max_frame, int(c.end_frame))

            for f in range(max_frame+1):

                blanks = []
                for c, pl in enumerate(self.scene.playlists):
                    producer = pl.get_clip_at(f)
                    if producer is None:
                        blanks.append(True)
                    else:
                        blanks.append(producer.is_blank())

                if sum(blanks) == len(self.scene.playlists):
                    self.empty_frames.append(f)

            for clip in self.scene.clips:
                ef = filter(lambda i: i < clip.start_frame, self.empty_frames)

                clip.start_frame -= len(ef)
                clip.end_frame -= len(ef)

            self.scene.generate_mlt()

            self.updateImage()
            self.update()

        elif event.key() == QtCore.Qt.Key_Delete:
            for clip in self.scene.clips:
                if clip._selected:

                    self.scene.clips.remove(clip)

                    self.scene.generate_mlt()
                    self.updateImage()

        elif event.key() == QtCore.Qt.Key_B: # split
            selectedClips = filter(lambda i: i._selected, self.scene.clips)
            sc2 = []

            for c in selectedClips:
                if c.inside(self.playhead, -50*c.track+10):
                    sc2.append(c)

            if sc2:
                clip = sc2[0]

                del clip.producer

                import copy
                c1 = copy.deepcopy(clip)
                c2 = copy.deepcopy(clip)

                c1.end_frame = self.playhead
                c1.out_frame = c1.in_frame + (c1.end_frame-c1.start_frame)

                c2.in_frame = c2.in_frame + (self.playhead-c2.start_frame) + 1
                c2.start_frame = self.playhead+1

                self.scene.clips.remove(clip)

                self.scene.clips.append(c1)
                self.scene.clips.append(c2)

                self.scene.generate_mlt()
                self.updateImage()

        elif event.key() == QtCore.Qt.Key_I: # move in point
            selectedClips = filter(lambda i: i._selected, self.scene.clips)
            if selectedClips:
                c = selectedClips[0]

                dx = self.playhead-c.start_frame
                c.in_frame += dx
                c.start_frame += dx

                self.scene.generate_mlt()
                self.updateImage()

        elif event.key() == QtCore.Qt.Key_O: # move out point
            selectedClips = filter(lambda i: i._selected, self.scene.clips)
            if selectedClips:
                c = selectedClips[0]

                dx = self.playhead-c.end_frame
                c.out_frame -= dx
                c.end_frame -= dx

                self.scene.generate_mlt()
                self.updateImage()

        elif event.key() == QtCore.Qt.Key_F2: # rename
            selectedClips = filter(lambda i: i._selected, self.scene.clips)
            if selectedClips:
                c = selectedClips[0]
                new_name, ok = QtGui.QInputDialog.getText(self, "Rename clip", "Rename clip to", text = c.name)
                if ok:
                    c.name = str(new_name)
                    self.update()
Пример #5
0
    def mouseMoveEvent(self, event):

        dx = 1.0*(event.x() - self._mousePos.x())/self.camera.m[0]
        dy = 1.0*(event.y() - self._mousePos.y())/self.camera.m[0]

        GLView.mouseMoveEvent(self, event)

        if event.buttons() & QtCore.Qt.LeftButton:

            nodesMoved = False

            # move selected nodes...

            selectedClips = filter(lambda i: i._selected, self.scene.clips)
            nodesMoved = bool(selectedClips)

            if (self.extendLeft is None) and (self.extendRight is None):
                for n in selectedClips:
                    n.start_frame = int(n.start_frame+dx)
                    n.end_frame = int(n.end_frame+dx)
            else:
                if self.extendLeft:
                    sel = self.extendLeft

                    sel.start_frame += dx
                    sel.in_frame += dx

                    if sel.in_frame < 0:
                        ddx = sel.in_frame
                        sel.in_frame = 0
                        sel.end_frame += ddx

                    #elif self.start_frame > self.stop_frame:

                    self.playhead = int(sel.start_frame)

                elif self.extendRight:
                    sel = self.extendRight
                    sel.end_frame += dx
                    sel.out_frame += dx

                    if sel.out_frame > sel.producer.get_length()-sel.in_frame:
                        sel.end_frame -= dx
                        sel.out_frame -= dx

                    self.playhead = int(sel.end_frame)

            if nodesMoved:
                c = selectedClips[0]
                k, v = c.getData()

                self.parameters.setData(c, k, v)

                self.scene.generate_mlt()
                self.updateImage()

            if not nodesMoved:

                if (self.extendLeft is None) and (self.extendRight is None):
                    ph = self.camera.qt_to_opengl(event.pos())
                    self.playhead = ph.x()

                self.updateImage()

        else:
            self.setCursor(QtCore.Qt.ArrowCursor)
            p = self.camera.qt_to_opengl(event.pos())
            selectedClips = filter(lambda i: i._selected, self.scene.clips)
            for c in selectedClips:
                if c.inside(p.x(), p.y()):
                    if p.x()-c.start_frame in range(0, 15):
                        self.setCursor(self.cursorLeft)
                    elif c.end_frame-p.x() in range(0, 15):
                        self.setCursor(self.cursorRight)
                    else:
                        self.setCursor(QtCore.Qt.ArrowCursor)
Пример #6
0
 def closeEvent(self, event):
     self.parameters.close()
     GLView.closeEvent(self, event)
     self.scene.save()
Пример #7
0
 def moveEvent(self, event):
     GLView.moveEvent(self, event)
     self.parameters.setGeometry(self.geometry().left()+5, self.geometry().top()+25, self.parameters.width(), self.parameters.height())
Пример #8
0
    def __init__(self, parent=None):
        GLView.__init__(self, parent)

        self.setWindowTitle("very-simple-nle")
        self.setAcceptDrops(True)

        self.scene = Scene()

        self.parameters = ParameterWindow(main_window=self, parent=None)
        self.parameters.show()
        self.parameters.raise_()

        self.setAutoFillBackground(False)
        self.setAttribute(QtCore.Qt.WA_StaticContents, True)
        self.setAttribute(QtCore.Qt.WA_OpaquePaintEvent, True)
        self.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
        self.setAttribute(QtCore.Qt.WA_PaintOnScreen, True)

        self.playhead = 0
        self.texture = -1
        self.texture_data = None

        self.tc = tc(25)

        self.playbackTimer = QtCore.QTimer(self)
        self.playbackTimer.setInterval(1000/25)
        self.connect(self.playbackTimer, QtCore.SIGNAL("timeout()"), self.onPlaybackTimer)

        self.play = False

        if os.path.exists("test.scene"):
            self.scene.load("test.scene")

        else:
            for c in range(10):
                hue = random.random()

                color = QtGui.QColor.fromHsvF(hue, 0.5, 0.75)
                r, g, b = color.redF(), color.greenF(), color.blueF()

                clip = Clip()
                clip._color = (r, g, b, 1)
                clip.name = "clip%d" % c

                clip.start_frame = c*120
                clip.end_frame = c*120+119

                clip.track = random.randint(0, 1)
                clip.path = "../media/output%d.mov" % (clip.track+1)

                self.scene.clips.append(clip)

            self.scene.save_as("test.scene")

        self.scene.generate_mlt()

        self.camera.translate(100, self.height()-50)

        self.updateImage()

        self.extendLeft = None
        self.extendRight = None

        self.cursorLeft = QtGui.QCursor(QtGui.QPixmap("img/trim_left.png"))
        self.cursorRight = QtGui.QCursor(QtGui.QPixmap("img/trim_right.png"))

        self.gl_font = QtGui.QFont("Tahoma", 9)

        self.pointVertices = []
        self.textureCoordinates = []