def removeImageOverlay(self) : """Removes the image overlay from the running pipeline. PROBLEM : This method should visually remove the image overlay PROBLEM : from the video, but while there's NO error and the logs PROBLEM : tell that the unlinking was successful, the image still PROBLEM : appear onto the video. """ if (self.pipeline is not None) and (self.imageoverlaybin is not None) : srcpad = self.imageoverlaybin.get_pad("src") peer = srcpad.get_peer() if peer : srcpad.unlink(peer) self.pipeline.remove(self.imageoverlaybin) self.imageoverlaybin.set_state(gst.STATE_NULL) del self.imageoverlaybin self.imageoverlaybin = None self.logDebug("Cleared image layer") def addImageOverlay(self) : """Adds the image overlay to the running pipeline. This method works fine. """ if (self.pipeline is not None) and (self.imagefile is not None) : if self.imageoverlaybin is not None : self.removeImageOverlay() self.imageoverlaybin = gst.Bin("ImageOverlay") filesrc = gst.element_factory_make("filesrc") filesrc.set_property("location", self.imagefile) pngdec = gst.element_factory_make("pngdec") alphacolor = gst.element_factory_make("alphacolor") videoscale = gst.element_factory_make("videoscale") queue = gst.element_factory_make("queue") self.imageoverlaybin.add(filesrc, pngdec, alphacolor, videoscale, queue) gst.element_link_many(filesrc, pngdec, alphacolor, videoscale) structure = gst.Structure("video/x-raw-yuv") (width, height) = [int(dim) for dim in self.resolution.split("x")] # e.g. '640x480' structure["width"] = width structure["height"] = height caps = gst.Caps(structure) videoscale.link(queue, caps) ghostpad = gst.GhostPad("src", queue.get_pad("src")) self.imageoverlaybin.add_pad(ghostpad) self.pipeline.add(self.imageoverlaybin) mixer = self.pipeline.get_by_name("VideoMixer") gst.element_link_many(self.imageoverlaybin, mixer) self.imageoverlaybin.set_state(gst.STATE_PLAYING) self.logDebug("Loaded image layer") def setImageOverlay(self, imagedatas) : """Defines an image to overlay onto the video. This method works fine. """ if image : self.imagefile = "/tmp/image.png" # TODO : change this outfile = open(self.imagefile, "w+b") outfile.write(imagedatas) outfile.close() self.addImageOverlay() else : self.removeImageOverlay() self.imagefile = None return False