Thanks, that worked perfectly. On Tue, Jul 7, 2015 at 8:12 PM, Quentin Sculo <squen...@free.fr> wrote:
> Sorry, I was happy with fixing the error message, didn't notice that it > didn't work. > > This works : > $bus->add_signal_watch; > $bus->signal_connect('message::error' => sub {warn "error"; exit}); > > Other signals should work too, as I use them in my program. > Though, speaking of gstreamer errors, $msg->parse_error doesn't work > currently (last time I've checked) so I found this work around : > $bus->signal_connect('message::error' => \&error); > sub error > { my ($bus,$msg)=@_; > #warn $msg->parse_error; # doesn't work : FIXME - GI_TYPE_TAG_ERROR > my $s=$msg->get_structure; > warn $s->get_value('gerror')->message; > #more details > warn $s->get_string('debug'); > exit > } > > On Wed, Jul 8, 2015 at 1:42 AM, Timm Murray <tmur...@wumpus-cave.net> > wrote: > >> Thanks for your help, Quentin. Doing add_signal_watch() does prevent the >> error from occurring, but it also seems that the callback is not actually >> set. Using GST_DEBUG reveals: >> >> $ GST_DEBUG=3 perl example.pl >> 0:00:00.046825784 2484 0x2702b50 ERROR GST_BUS >> gstbus.c:851:gst_bus_add_watch_full_unlocked:<bus1> Tried to add new watch >> while one was already there >> >> This is not a fatal error, but it seems that add_signal_watch() sets a >> generic handler, and add_watch() is not allowed to set a new one after that. >> >> I happened across a Python example that suggests that using connect() is >> the answer: >> >> >> https://github.com/Elleo/gst-opencv/blob/master/examples/python/facedetect.py >> >> But when I added that instead of add_watch(): >> >> $bus->connect( 'message::element', \&bus_callback, $loop ); >> >> It resulted in: >> >> Can't locate object method "connect" via package "GStreamer1::Bus" >> >> Going by the inheritance from the C API docs, I would expect connect() to >> be there for Bus, but perhaps not for the Perl bindings. >> >> On Mon, Jun 22, 2015 at 7:34 PM, Quentin Sculo <squen...@free.fr> wrote: >> >>> Hi, >>> In case you still haven't found the solution, adding this line before >>> the add_watch fixes the error : >>> $bus->add_signal_watch; >>> >>> On Sat, Jun 20, 2015 at 5:31 PM, Timm Murray <tmur...@wumpus-cave.net> >>> wrote: >>> >>>> I'm trying to pass along a code reference to add_watch() (from of >>>> GstBus). My attempt, which is based on the examples in the old GStreamer >>>> module, is below. It fails with the message: >>>> >>>> Not a CODE reference at hello_callback.pl line 17. >>>> >>>> Which is the "$loop->run" line. Is there some incantation that needs >>>> to run on GStreamer1 for the callback reference to be accepted? >>>> >>>> Thanks, >>>> Timm Murray >>>> >>>> #!perl >>>> use v5.12; >>>> use warnings; >>>> use GStreamer1; >>>> use Glib qw( TRUE FALSE ); >>>> >>>> my $URI = shift || die "Need URI to play\n"; >>>> >>>> my $loop = Glib::MainLoop->new( undef, FALSE ); >>>> GStreamer1::init([ $0, @ARGV ]); >>>> my $pipeline = GStreamer1::parse_launch( "playbin uri=$URI" ); >>>> >>>> my $bus = $pipeline->get_bus; >>>> $bus->add_watch( \&bus_callback, $loop ); >>>> >>>> $pipeline->set_state( "playing" ); >>>> $loop->run; >>>> $pipeline->set_state( "null" ); >>>> >>>> >>>> sub bus_callback >>>> { >>>> my ($bus, $message, $loop) = @_; >>>> >>>> if( $message->type & "error" ) { >>>> warn $message->error; >>>> $loop->quit; >>>> } >>>> elsif( $message->type & "eos" ) { >>>> $loop->quit; >>>> } >>>> >>>> return TRUE; >>>> } >>>> >>>> _______________________________________________ >>>> 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 >> >> >
_______________________________________________ gtk-perl-list mailing list gtk-perl-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-perl-list