Hmm, well picking up off of:

my $bus = $play->get_bus;

# It appears the next steps would be:

# Create Gtk3 windows, widgets, drawable, etc..

$bus->enable_sync_message_emission();
$bus->signal_connect("sync-message", \&sync_message,$drawable);

sub sync_message
{
    my ($bus,$message,$drawable) = @_;

    my $structure = $message->get_structure;
    if(!defined($structure)) { return; }

    my $name = $structure->get_name;
    if($name ne 'prepare-window-handle') { return; }

    my $src = $message->src;
    print "Source: $src\n";

    # Do stuff...
}

It looks like it hands off a: Source:
Glib::Object::_Unregistered::GstPlaySink=HASH(0x8af8a40) as the $src.
You'll then need to set that to the window id of the drawable, somehow. Let
me know if you have any luck. Otherwise, I can look into this a little
further tonight or tomorrow.

Also, you'll get this warning: *** GPerl asked to invoke callback from a
foreign thread; handing it over to the main loop
I googled it. As long as nothing crashes, I'd say it's doing it job (of
handing the signal from the other thread over to the main thread).



*Terence J. Ferraro*


On Mon, Apr 28, 2014 at 1:06 PM, Steve Cookson <i...@sca-uk.com> wrote:

>  Hi Terrence,
>
> Do you have any idea how to do a video-overlay using this mechanism?
>
> I suspect that I have to wrap a different package, but I have no idea
> which one.
>
> I guess this is why Torsten wrapped the original packages.  It doesn't
> seem that you can have 2 lots of
>
>     Glib::Object::Introspection->invoke ($_GST_BASENAME, undef, 'init',
> undef);
>
> in one module, so that'2 why we have GStreamer.pm and GStreamer::GConf.pm
> and so on.
>
> And at that point you might as well put them on CPAN.
>
> So I'm a bit lost with the videooverlay, because I don't know what package
> to wrap.
>
> What do you think?
>
> Regards
>
> Steve
>
>
>
> On 27/04/14 07:42, Terence Ferraro wrote:
>
>  I did a little more playing around with this...
>
>  Here's my working example:
>
> #!/usr/bin/perl -w
>
> use strict;
>
> use Glib;
> use Gtk3 -init;
>
> Gst::init();
>
> my $play = Gst::ElementFactory->new("playbin","play");
> my $fn = "http://www.csoft.co.uk/video/original/earth.avi";;
> $play->set_uri($fn);
> $play->set_state('playing');
> my $bus = $play->get_bus;
> my $int = $bus->add_watch(\&my_callback);
>
> Gtk3::main;
>
> sub my_callback
> {
>     my ($bus, $message) = @_;
>
>     if ($message->type =~ /error/)
>     {
>         warn "error\n";
>         Gtk3->main_quit;
>         exit;
>     }
>     elsif ($message->type =~ /eos/)
>     {
>         warn "end\n";
>         Gtk3->main_quit;
>         exit;
>     }
>
>     return 1;
> }
>
> Accomplished by placing the following in my Gtk3.pm file (in their
> respective portions of the file, left to the reader):
>
> my $_GST_BASENAME = 'Gst';
> my $_GST_VERSION = '1.0';
> my $_GST_PACKAGE = 'Gst';
>
>
>   Glib::Object::Introspection->setup (
>     basename => $_GST_BASENAME,
>     version => $_GST_VERSION,
>     package => $_GST_PACKAGE);
>
>
> sub Gst::init {
>     Glib::Object::Introspection->invoke ($_GST_BASENAME, undef, 'init',
> undef);
> }
>
> sub Gst::ElementFactory::new
> {
>     my ($self,$factory_name,$name) = @_;
>
>     my $e = Gst::ElementFactory::make($factory_name,$name);
>     my $package = 'Gst::Element';
>     return bless $e, $package;
> }
> sub Gst::Element::set_uri
> {
>     my ($self,$uri) = @_;
>
>     Glib::Object::set($self,'uri' => $uri);
> }
> sub Gst::Bus::add_watch
> {
>     my ($self,$callback,$data) = @_;
>
>     my $int = Glib::Object::Introspection->invoke ('Gst', 'Bus',
> 'add_watch',$self,0,$callback,$data);
>
>     return($int);
> }
>
>  Not sure if that's of use to anyone, but, hey, it works :)
>
>
> *Terence J. Ferraro *
>
>
> On Sat, Apr 26, 2014 at 9:05 PM, Terence Ferraro <
> terencejferr...@gmail.com> wrote:
>
>>  I knew nothing about GStreamer a couple hours ago, but, since I have
>> had a lot of dealings with perl/introspection of late, I went ahead and did
>> some digging. Compiled with gstreamer-1.2.4.
>>
>> So, first off, instead of: my $play = GStreamer::ElementFactory ->
>> make("playbin", "play");
>>  It should be: my $play = GStreamer::ElementFactory::make("playbin",
>> "play");
>>
>>  Due to the class-static stuff.
>>
>>  I was, however, running into the same issue. I first verified that this
>> works:
>>
>> my $fake_factory = Glib::Object::Introspection->invoke ('Gst',
>> 'ElementFactory', 'find', 'fakesrc');
>> my $fake_element =
>> GStreamer::ElementFactory::create($fake_factory,"source");
>>
>>  After attempting a find on playbin, it would seem that the plugin
>> simply isn't installed as the fakesrc is working. Looking at:
>> plugins/elements/, I only see a handful of source files; playbin not being
>> one of them.
>>
>>  That's when I remembered seeing a number of plugin subdirectories in
>> http://gstreamer.freedesktop.org/src/.
>>
>>  It looks like gst-plugins-base provides playbin. After installing, now
>> the aforementioned playbin call returns correctly.
>>
>>
>>
>> *Terence J. Ferraro *
>>
>>
>> On Sat, Apr 26, 2014 at 6:13 PM, Steve Cookson <i...@sca-uk.com> wrote:
>>
>>> Hi Guys,
>>>
>>>
>>> On 26/04/14 09:30, Steve Cookson wrote:
>>> >
>>> > > I'd suggest basing them on Glib::Object::Introspection.
>>>
>>>  Well actually, it's amazing.  I've just been trying it.
>>>
>>> It's not so easy to install you have to install libgirepository1.0-dev
>>> first (apt-get install libgirepository1.0-dev).
>>>
>>> This code:
>>>
>>> #!/usr/bin/perl -w
>>>     use strict;
>>>
>>>     use Glib::Object::Introspection;
>>>     Glib::Object::Introspection->setup (basename => 'Gst', version =>
>>> '1.0', package => 'GStreamer');
>>>     my @version=();
>>>     @version = GStreamer::version();
>>>     print "This program is linked against GStreamer @version\n";
>>>     my $i = GStreamer::init ([$0, @ARGV]);
>>>
>>> Gave me "This program is linked against GStreamer 1 2 3 0".
>>>
>>> However, when I tried:
>>>
>>>     my $play = GStreamer::ElementFactory -> make("playbin", "play");
>>>
>>> I get:
>>>
>>> *** GStreamer::ElementFactory::make: passed too many parameters
>>> (expected 2, got 3); ignoring excess at ~/test_code/GStreamer_test_4.pl
>>> line 129.
>>>
>>> When I drop the final parameter, I get an empty string passed in $play.
>>>
>>> Any ideas?
>>>
>>> Regards
>>>
>>> Steve.
>>>
>>>
>>> _______________________________________________
>>> gtk-perl-list mailing list
>>> gtk-perl-list@gnome.org
>>> https://mail.gnome.org/mailman/listinfo/gtk-perl-list
>>>
>>
>>
>
>
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to