Esempio n. 1
0
def _fix_gst_leaks():
    """gst_element_add_pad and gst_bin_add are wrongly annotated and lead
    to PyGObject refing the passed element.

    Work around by adding a wrapper that unrefs afterwards.
    Can be called multiple times.

    https://bugzilla.gnome.org/show_bug.cgi?id=741390
    https://bugzilla.gnome.org/show_bug.cgi?id=702960
    """

    from gi.repository import Gst

    assert Gst.is_initialized()

    def do_wrap(func):
        def wrap(self, obj):
            result = func(self, obj)
            obj.unref()
            return result
        return wrap

    parent = Gst.Bin()
    elm = Gst.Bin()
    parent.add(elm)
    if elm.__grefcount__ == 3:
        elm.unref()
        Gst.Bin.add = do_wrap(Gst.Bin.add)

    pad = Gst.Pad.new("foo", Gst.PadDirection.SRC)
    parent.add_pad(pad)
    if pad.__grefcount__ == 3:
        pad.unref()
        Gst.Element.add_pad = do_wrap(Gst.Element.add_pad)
Esempio n. 2
0
def _fix_gst_leaks():
    """gst_element_add_pad and gst_bin_add are wrongly annotated and lead
    to PyGObject refing the passed element.

    Work around by adding a wrapper that unrefs afterwards.
    Can be called multiple times.

    https://bugzilla.gnome.org/show_bug.cgi?id=741390
    https://bugzilla.gnome.org/show_bug.cgi?id=702960
    """

    from gi.repository import Gst

    assert Gst.is_initialized()

    def do_wrap(func):
        def wrap(self, obj):
            result = func(self, obj)
            obj.unref()
            return result

        return wrap

    parent = Gst.Bin()
    elm = Gst.Bin()
    parent.add(elm)
    if elm.__grefcount__ == 3:
        elm.unref()
        Gst.Bin.add = do_wrap(Gst.Bin.add)

    pad = Gst.Pad.new("foo", Gst.PadDirection.SRC)
    parent.add_pad(pad)
    if pad.__grefcount__ == 3:
        pad.unref()
        Gst.Element.add_pad = do_wrap(Gst.Element.add_pad)
Esempio n. 3
0
def _init_gst():
    """Call once before importing GStreamer"""

    assert "gi.repository.Gst" not in sys.modules

    import gi

    # We don't want python-gst, it changes API..
    assert "gi.overrides.Gst" not in sys.modules
    sys.modules["gi.overrides.Gst"] = None

    # blacklist some modules, simply loading can cause segfaults
    sys.modules["gst"] = None

    # We don't depend on Gst overrides, so make sure it's initialized.
    try:
        gi.require_version("Gst", "1.0")
        from gi.repository import Gst
    except (ValueError, ImportError):
        return

    if Gst.is_initialized():
        return

    from gi.repository import GLib

    try:
        ok, argv[:] = Gst.init_check(argv)
    except GLib.GError:
        print_e("Failed to initialize GStreamer")
        # Uninited Gst segfaults: make sure no one can use it
        sys.modules["gi.repository.Gst"] = None
    else:
        # monkey patching ahead
        _fix_gst_leaks()
Esempio n. 4
0
def _init_gst():
    """Call once before importing GStreamer"""

    assert "gi.repository.Gst" not in sys.modules

    import gi

    # We don't want python-gst, it changes API..
    assert "gi.overrides.Gst" not in sys.modules
    sys.modules["gi.overrides.Gst"] = None

    # blacklist some modules, simply loading can cause segfaults
    sys.modules["gst"] = None

    # We don't depend on Gst overrides, so make sure it's initialized.
    try:
        gi.require_version("Gst", "1.0")
        from gi.repository import Gst
    except (ValueError, ImportError):
        return

    if Gst.is_initialized():
        return

    from gi.repository import GLib

    try:
        ok, argv[:] = Gst.init_check(argv)
    except GLib.GError:
        print_e("Failed to initialize GStreamer")
        # Uninited Gst segfaults: make sure no one can use it
        sys.modules["gi.repository.Gst"] = None
    else:
        # monkey patching ahead
        _fix_gst_leaks()
    def setup_gst(self, serial_number, fps):

        if not Gst.is_initialized():
            Gst.init()

        fps_index = np.where(
            [int(fps) == int(opt) for opt in TISCam.FRAME_RATE_OPTIONS])[0][0]
        fps_frac = TISCam.FRAME_RATE_FRACTIONS[fps_index]
        fmat = "BGRx" if self.color else "GRAY8"

        pipeline = ("tcambin name=cam "
                    "! videocrop name=crop "
                    "! videoflip name=rotate "
                    "! video/x-raw,format={},framerate={} ".format(
                        fmat, fps_frac))

        if self.display:
            pipe_sink = ("! tee name=t "
                         "t. ! queue ! videoconvert ! ximagesink "
                         "t. ! queue ! appsink name=sink")
        else:
            pipe_sink = "! appsink name=sink"

        pipeline += pipe_sink

        self.gst_pipeline = Gst.parse_launch(pipeline)

        self.cam = self.gst_pipeline.get_by_name("cam")
        self.cam.set_property("serial", serial_number)

        self.set_exposure(self.exposure)
        self.set_crop(self.crop)
        self.set_rotation(self.rotate)
        self.set_sink()
    def arg_restrictions():

        if not Gst.is_initialized():
            Gst.init()

        source = Gst.ElementFactory.make("tcambin")
        return {
            "serial_number": source.get_device_serials(),
            "fps": TISCam.FRAME_RATE_OPTIONS,
            "rotate": TISCam.ROTATE_OPTIONS,
            "color": [True, False],
            "display": [True, False],
        }
Esempio n. 7
0
def _get_gst() -> "Gst":  # type: ignore  # noqa F821
    global CACHED_GST

    if CACHED_GST is None:
        try:
            import gi

            gi.require_version("Gst", "1.0")
            from gi.repository import Gst

            CACHED_GST = Gst
            if not Gst.is_initialized():
                raise GstNotInitializedError()
        except Exception as e:
            raise GstNotInitializedError() from e

    return CACHED_GST
Esempio n. 8
0
    def __init__(self, builder=None):
        log.debug("Init KFSW %r %r", self, builder)
        if issubclass(self.__class__, object):
            super(KeyFprScanWidget, self).__init__()
        else:
            Gtk.VBox.__init__(self)
        log.debug("Inited parent KFSW %r", self)

        widget_name = 'scanner_widget'
        if not builder:
            thisdir = os.path.dirname(os.path.abspath(__file__))
            builder = Gtk.Builder()
            builder.add_objects_from_file(os.path.join(thisdir, 'receive.ui'),
                [widget_name])
        widget = builder.get_object(widget_name)
        parent = widget.get_parent()
        if parent:
            parent.remove(widget)
        self.add(widget)
        

        self.scanner = builder.get_object("scanner")

        if not Gst.is_initialized():
            log.error("Gst does not seem to be initialised. Call Gst.init()!")
            # This needs to be called before creating a BarcodeReaderGTK
            Gst.init(None)
        reader = BarcodeReaderGTK()
        reader.set_size_request(150,150)
        reader.connect('barcode', self.on_barcode)
        self.scanner.add(reader)
        # We keep a referece here to not "lose" the object.
        # If we don't, Gtk crashes. With a segfault. Probably
        # because the object is freed but still used.
        # Somebody should look at that...
        self.reader = reader

        self.fpr_entry = builder.get_object("fingerprint_entry")
        self.fpr_entry.connect('changed', self.on_text_changed)
        
        self.set_hexpand(True)
        self.set_vexpand(True)

        # Temporary measure...
        self.barcode_scanner = self
Esempio n. 9
0
def init():
    if not Gst.is_initialized():
        raise RuntimeError(
            "Gst.init() needs to be called before importing GstPbutils")

    real_init()

    @override
    class EncodingVideoProfile(GstPbutils.EncodingVideoProfile):
        def __init__(self, format, preset=None, restriction=None, presence=0):
            GstPbutils.EncodingVideoProfile.__init__(self)
            self.set_format(format)
            if preset is not None:
                self.set_preset(preset)
            if restriction is None:
                restriction = Gst.Caps('ANY')
            self.set_restriction(restriction)
            self.set_presence(presence)

    @override
    class EncodingAudioProfile(GstPbutils.EncodingAudioProfile):
        def __init__(self, format, preset=None, restriction=None, presence=0):
            GstPbutils.EncodingAudioProfile.__init__(self)
            self.set_format(format)
            if preset is not None:
                self.set_preset(preset)
            if restriction is None:
                restriction = Gst.Caps('ANY')
            self.set_restriction(restriction)
            self.set_presence(presence)

    @override
    class EncodingContainerProfile(GstPbutils.EncodingContainerProfile):
        def __init__(self, name, description, format, preset=None):
            GstPbutils.EncodingContainerProfile.__init__(self)
            self.set_format(format)
            if name is not None:
                self.set_name(name)
            if description is not None:
                self.set_description(description)
            if preset is not None:
                self.set_preset(preset)
Esempio n. 10
0
def _gst_init():
    """Call once before importing GStreamer"""

    assert "gi.repository.Gst" not in sys.modules

    import gi

    # We don't want python-gst, it changes API..
    assert "gi.overrides.Gst" not in sys.modules
    sys.modules["gi.overrides.Gst"] = None

    # blacklist some modules, simply loading can cause segfaults
    sys.modules["gst"] = None

    # We don't depend on Gst overrides, so make sure it's initialized.
    try:
        gi.require_version("Gst", "1.0")
        from gi.repository import Gst
    except (ValueError, ImportError):
        return

    if Gst.is_initialized():
        return

    from gi.repository import GLib

    try:
        ok, argv = Gst.init_check(sys.argv)
    except GLib.GError:
        print_e("Failed to initialize GStreamer")
        # Uninited Gst segfaults: make sure no one can use it
        sys.modules["gi.repository.Gst"] = None
    else:
        sys.argv = argv

        # monkey patching ahead
        _fix_gst_leaks()

        # https://bugzilla.gnome.org/show_bug.cgi?id=710447
        import threading
        threading.Thread(target=lambda: None).start()
Esempio n. 11
0
def _init_gst():
    """Call once before importing GStreamer"""

    arch_key = "64" if sys.maxsize > 2**32 else "32"
    registry_name = "gst-registry-%s-%s.bin" % (sys.platform, arch_key)
    environ["GST_REGISTRY"] = os.path.join(get_cache_dir(), registry_name)

    assert "gi.repository.Gst" not in sys.modules

    import gi

    # We don't want python-gst, it changes API..
    assert "gi.overrides.Gst" not in sys.modules
    sys.modules["gi.overrides.Gst"] = None

    # blacklist some modules, simply loading can cause segfaults
    sys.modules["gst"] = None

    # We don't depend on Gst overrides, so make sure it's initialized.
    try:
        gi.require_version("Gst", "1.0")
        from gi.repository import Gst
    except (ValueError, ImportError):
        return

    if Gst.is_initialized():
        return

    from gi.repository import GLib

    try:
        ok, argv[:] = Gst.init_check(argv)
    except GLib.GError:
        print_e("Failed to initialize GStreamer")
        # Uninited Gst segfaults: make sure no one can use it
        sys.modules["gi.repository.Gst"] = None
    else:
        # monkey patching ahead
        _fix_gst_leaks()
Esempio n. 12
0
    def start(self, params = None, last_return = None):
        """
Starts the GStreamer process und underlying library if applicable.

:param params: Parameter specified
:param last_return: The return value from the last hook called.

:since: v0.2.00
        """

        with self._instance_lock:
            if (self._glib_mainloop is None): self._glib_mainloop = GLib.get_mainloop_instance()
        #

        with Gstreamer._lock:
            if (not Gst.is_initialized()):
                Gst.segtrap_set_enabled(False)
                Gst.Registry.fork_set_enabled(False)

                if (not Gst.init_check(sys.argv)): raise IOException("GStreamer initialization failed")

                gst_version = Gst.version_string()
                if (self.log_handler is not None): self.log_handler.debug("#echo(__FILEPATH__)# -{0!r}.__init__()- reporting: {1} ready", self, gst_version, context = "pas_gapi_gstreamer")
Esempio n. 13
0
def _gtk_init(icon=None):
    import gi

    try:
        # not sure if this is available under Windows
        gi.require_version("GdkX11", "3.0")
        from gi.repository import GdkX11
    except (ValueError, ImportError):
        pass

    gi.require_version("GLib", "2.0")
    gi.require_version("Gtk", "3.0")
    gi.require_version("Gdk", "3.0")
    gi.require_version("GObject", "2.0")
    gi.require_version("Pango", "1.0")
    gi.require_version("GdkPixbuf", "2.0")
    gi.require_version("Gio", "2.0")

    from gi.repository import Gtk, GObject, GLib, Gdk

    # add Gtk.TreePath.__getitem__/__len__ for PyGObject 3.2
    try:
        Gtk.TreePath()[0]
    except TypeError:
        Gtk.TreePath.__getitem__ = lambda self, index: list(self)[index]
        Gtk.TreePath.__len__ = lambda self: self.get_depth()

    # GTK+ 3.4+ constants
    if not hasattr(Gdk, "BUTTON_PRIMARY"):
        Gdk.BUTTON_PRIMARY = 1
        Gdk.BUTTON_MIDDLE = 2
        Gdk.BUTTON_SECONDARY = 3

    # Force menu/button image related settings. We might show too many atm
    # but this makes sure we don't miss cases where we forgot to force them
    # per widget.
    settings = Gtk.Settings.get_default()
    settings.set_property("gtk-button-images", True)
    settings.set_property("gtk-menu-images", True)

    # Make sure PyGObject includes support for foreign cairo structs
    some_window = Gtk.OffscreenWindow()
    some_window.show()
    try:
        some_window.get_surface()
    except TypeError:
        print_e("PyGObject is missing cairo support")
        exit(1)

    # CSS overrides
    style_provider = Gtk.CssProvider()
    style_provider.load_from_data("""
        /* Make GtkPaned look like in <=3.12, we depend on the spacing */
        GtkPaned {
            -GtkPaned-handle-size: 6;
            background-image: none;
            margin: 0;
        }
    """)
    Gtk.StyleContext.add_provider_for_screen(
        Gdk.Screen.get_default(), style_provider,
        Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

    # https://bugzilla.gnome.org/show_bug.cgi?id=708676
    warnings.filterwarnings('ignore', '.*g_value_get_int.*', Warning)

    # We don't want python-gst, it changes API..
    assert "gi.overrides.Gst" not in sys.modules
    sys.modules["gi.overrides.Gst"] = None

    # We don't depend on Gst overrides, so make sure it's initialized.
    try:
        gi.require_version("Gst", "1.0")
        from gi.repository import Gst
    except (ValueError, ImportError):
        pass
    else:
        if not Gst.is_initialized():
            try:
                ok, argv = Gst.init_check(sys.argv)
            except GLib.GError:
                print_e("Failed to initialize GStreamer")
                # Uninited Gst segfaults: make sure no one can use it
                sys.modules["gi.repository.Gst"] = None
            else:
                sys.argv = argv

                # https://bugzilla.gnome.org/show_bug.cgi?id=710447
                import threading
                threading.Thread(target=lambda: None).start()

    # some code depends on utf-8 default encoding (pygtk used to set it)
    reload(sys)
    sys.setdefaultencoding("utf-8")

    # blacklist some modules, simply loading can cause segfaults
    sys.modules["gtk"] = None
    sys.modules["gpod"] = None
    sys.modules["glib"] = None
    sys.modules["gobject"] = None
    sys.modules["gnome"] = None

    from quodlibet.qltk import pygobject_version
    if pygobject_version < (3, 9):
        GObject.threads_init()

    theme = Gtk.IconTheme.get_default()
    theme.append_search_path(quodlibet.const.IMAGEDIR)

    if icon:
        Gtk.Window.set_default_icon_name(icon)
Esempio n. 14
0
#!/usr/bin/env python

import logging
import sys

import gi
gi.require_version('Gst', '1.0')

from gi.repository import Gst

if not Gst.is_initialized():
    Gst.init(sys.argv)


## FIXME: tamano real mas luego.
## VIDEO_CAPS = Gst.Caps.from_string ('image/jpeg,width=800,heigth=448,rate=30,framerate=30/1')

## 16:9 , alcanza para tres camaras en un usb 2.0.
VIDEO_WIDTH = 1024
VIDEO_HEIGHT = 576

VIDEO_WIDTH = 640
VIDEO_HEIGHT = 480

VIDEO_RATE = "24/1"
VIDEO_CAPS = Gst.Caps.from_string ('image/jpeg,width=%d,height=%d,framerate=%s,format=I420' % (VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_RATE))
VIDEO_CAPS_SIZE = Gst.Caps.from_string ('video/x-raw,width=%d,height=%d,framerate=%s,format=I420' % (VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_RATE))

AUDIO_CAPS = Gst.Caps.from_string ('audio/x-raw,rate=48000,channels=2,format=S16LE')

Esempio n. 15
0
            self.set_presence(presence)

    @override
    class EncodingAudioProfile(GstPbutils.EncodingAudioProfile):
        def __init__(self, format, preset=None, restriction=None, presence=0):
            GstPbutils.EncodingAudioProfile.__init__(self)
            self.set_format(format)
            if preset is not None:
                self.set_preset(preset)
            if restriction is None:
                restriction = Gst.Caps('ANY')
            self.set_restriction(restriction)
            self.set_presence(presence)

    @override
    class EncodingContainerProfile(GstPbutils.EncodingContainerProfile):
        def __init__(self, name, description, format, preset=None):
            GstPbutils.EncodingContainerProfile.__init__(self)
            self.set_format(format)
            if name is not None:
                self.set_name(name)
            if description is not None:
                self.set_description(description)
            if preset is not None:
                self.set_preset(preset)


GstPbutils.pb_utils_init = init
GstPbutils.init = init
if Gst.is_initialized():
    init()
Esempio n. 16
0
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with gusic.  If not, see <http://www.gnu.org/licenses/>.
#
# Copyright 2012-2013, Stijn Van Campenhout <*****@*****.**>
# import pygst
# pygst.require("0.10")
import gi

gi.require_version("Gst", "1.0")
from gi.repository import Gst as gst

gst.is_initialized() or gst.init(None)
import logging

log = logging.getLogger("gusic")


class GStreamer(object):
    def __init__(self):
        self.status = "NULL"
        self.player = None
        self.nowplaying = None
        self.PLAYING = "PLAYING"
        self.STOPPED = "STOPPED"
        self.STOP = "STOP"
        self.PAUSED = "PAUSED"
        self.NULL = "NULL"