sub 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;
}
####
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);
}
####
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;
}
####
use MPV::Simple;
my $ctx = MPV::Simple->new();
$ctx->set_wakeup_callback(\&func);
$ctx->initialize();
$ctx->command();
exit 0;
sub func {print "callback called \n"}