Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
80ca7c70
Commit
80ca7c70
authored
Sep 12, 2010
by
Rémi Duraffort
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lua: implement timers in vlc.misc
parent
86ac0d4e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
88 additions
and
0 deletions
+88
-0
modules/misc/lua/libs/misc.c
modules/misc/lua/libs/misc.c
+88
-0
No files found.
modules/misc/lua/libs/misc.c
View file @
80ca7c70
...
...
@@ -6,6 +6,7 @@
*
* Authors: Antoine Cellerier <dionoea at videolan tod org>
* Pierre d'Herbemont <pdherbemont # videolan.org>
* Rémi Duraffort <ivoire # videolan tod org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
...
...
@@ -243,6 +244,91 @@ static int vlclua_action_id( lua_State *L )
return
1
;
}
/*****************************************************************************
* Timer functions
*****************************************************************************/
static
int
vlclua_timer_schedule
(
lua_State
*
L
);
static
const
luaL_Reg
vlclua_timer_reg
[]
=
{
{
"schedule"
,
vlclua_timer_schedule
},
{
NULL
,
NULL
}
};
typedef
struct
{
lua_State
*
L
;
vlc_timer_t
timer
;
char
*
psz_callback
;
}
vlclua_timer_t
;
static
int
vlclua_timer_schedule
(
lua_State
*
L
)
{
vlclua_timer_t
**
pp_timer
=
(
vlclua_timer_t
**
)
luaL_checkudata
(
L
,
1
,
"timer"
);
if
(
!
pp_timer
||
!*
pp_timer
)
luaL_error
(
L
,
"Can't get pointer to timer"
);
bool
b_relative
=
luaL_checkboolean
(
L
,
2
);
mtime_t
i_value
=
luaL_checkinteger
(
L
,
3
);
mtime_t
i_interval
=
luaL_checkinteger
(
L
,
4
);
vlc_timer_schedule
(
(
*
pp_timer
)
->
timer
,
b_relative
,
i_value
,
i_interval
);
return
0
;
}
static
void
vlclua_timer_callback
(
void
*
data
)
{
vlclua_timer_t
*
p_timer
=
(
vlclua_timer_t
*
)
data
;
lua_State
*
L
=
p_timer
->
L
;
lua_getglobal
(
L
,
p_timer
->
psz_callback
);
if
(
lua_pcall
(
L
,
0
,
0
,
0
)
)
{
const
char
*
psz_err
=
lua_tostring
(
L
,
-
1
);
fprintf
(
stderr
,
"Error while running the timer callback: %s
\n
"
,
psz_err
);
lua_settop
(
L
,
0
);
}
}
static
int
vlclua_timer_delete
(
lua_State
*
L
)
{
vlclua_timer_t
**
pp_timer
=
(
vlclua_timer_t
**
)
luaL_checkudata
(
L
,
1
,
"timer"
);
if
(
!
pp_timer
||
!*
pp_timer
)
luaL_error
(
L
,
"Can't get pointer to timer"
);
vlc_timer_destroy
(
(
*
pp_timer
)
->
timer
);
free
(
(
*
pp_timer
)
->
psz_callback
);
return
0
;
}
static
int
vlclua_timer_create
(
lua_State
*
L
)
{
vlclua_timer_t
*
p_timer
=
malloc
(
sizeof
(
vlclua_timer_t
)
);
if
(
!
lua_isstring
(
L
,
1
)
)
return
luaL_error
(
L
,
"timer(function_name)"
);
if
(
vlc_timer_create
(
&
p_timer
->
timer
,
vlclua_timer_callback
,
p_timer
)
)
return
luaL_error
(
L
,
"Cannot initialize the timer"
);
p_timer
->
L
=
L
;
p_timer
->
psz_callback
=
strdup
(
luaL_checkstring
(
L
,
1
)
);
vlclua_timer_t
**
pp_timer
=
lua_newuserdata
(
L
,
sizeof
(
vlclua_timer_t
*
)
);
*
pp_timer
=
p_timer
;
/* Create the object */
if
(
luaL_newmetatable
(
L
,
"timer"
)
)
{
lua_newtable
(
L
);
luaL_register
(
L
,
NULL
,
vlclua_timer_reg
);
lua_setfield
(
L
,
-
2
,
"__index"
);
lua_pushcfunction
(
L
,
vlclua_timer_delete
);
lua_setfield
(
L
,
-
2
,
"__gc"
);
}
lua_setmetatable
(
L
,
-
2
);
return
1
;
}
/*****************************************************************************
*
*****************************************************************************/
...
...
@@ -268,6 +354,8 @@ static const luaL_Reg vlclua_misc_reg[] = {
{
"should_die"
,
vlclua_intf_should_die
},
{
"quit"
,
vlclua_quit
},
{
"timer"
,
vlclua_timer_create
},
{
NULL
,
NULL
}
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment