MaxPerl has asked for the wisdom of the Perl Monks concerning the following question:
2) Simple.xssub set_wakeup_callback { my ($self, $callback, $userdata) = @_; $self->set_my_callback($callback); #$self->set_callback_data($userdata); #use Devel::Peek; #Dump $callback; $self->_xs_set_wakeup_callback(); #use Devel::Peek; #Dump $callback; }
and the perl call in the C-section:void set_my_callback(ctx, fn) MPV::Simple ctx SV * fn PREINIT: dMY_CXT; CODE: /* Remember the Perl sub */ if (MY_CXT.callback == (SV*)NULL) MY_CXT.callback = newSVsv(fn); else SvSetSV(MY_CXT.callback, fn); void _xs_set_wakeup_callback(MPV::Simple ctx) PREINIT: dMY_CXT; CODE: { SV* data; void (*rechne)(void*); callp_ptr = callp; mpv_set_wakeup_callback(ctx,callp_ptr,MY_CXT.callback); }
I tested everything with the following nonsense code (einladung2.mp4 is a video file):void callp( SV* string) { dTHX; dMY_CXT; dSP; ENTER; SAVETMPS; PUSHMARK(SP); PUTBACK; perl_call_sv(MY_CXT.callback,G_DISCARD|G_NOARGS); SPAGAIN; PUTBACK;FREETMPS;LEAVE; }
Thanks in advance for any help. I hope this is not far away beyond my capabilities.. Maxuse MPV::Simple; my $ctx = MPV::Simple->new(); $ctx->set_wakeup_callback(\&func); $ctx->initialize(); $ctx->command(); exit 0; sub func {print "callback called \n"}
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: XS callback to mpv_set_wakeup_callback
by dave_the_m (Monsignor) on Jan 04, 2019 at 16:59 UTC | |
|
Re: XS callback to mpv_set_wakeup_callback
by bliako (Abbot) on Jan 04, 2019 at 13:53 UTC | |
|
Re: XS callback to mpv_set_wakeup_callback
by MaxPerl (Acolyte) on Jan 04, 2019 at 20:20 UTC | |
by dave_the_m (Monsignor) on Jan 04, 2019 at 20:35 UTC | |
by MaxPerl (Acolyte) on Jan 04, 2019 at 22:45 UTC | |
by MaxPerl (Acolyte) on Jan 05, 2019 at 06:49 UTC | |
by MaxPerl (Acolyte) on Jan 08, 2019 at 22:12 UTC | |
by dave_the_m (Monsignor) on Jan 09, 2019 at 14:30 UTC | |
by MaxPerl (Acolyte) on Jan 18, 2019 at 12:05 UTC | |
by MaxPerl (Acolyte) on Jan 09, 2019 at 19:15 UTC |