[vlc-devel] [PATCH] lua: Expose media tracks through lua bindings
Rémi Denis-Courmont
remi at remlab.net
Mon Jan 2 18:01:58 CET 2017
Le lundi 2 janvier 2017, 16:31:21 Hugo Beauzée-Luyssen a écrit :
> ---
> modules/lua/libs/input.c | 123
> ++++++++++++++++++++++++++++++++++++++++++++++- share/lua/README.txt |
> 28 +++++++++++
> 2 files changed, 150 insertions(+), 1 deletion(-)
>
> diff --git a/modules/lua/libs/input.c b/modules/lua/libs/input.c
> index 6d14ebce78..9fd49dbc36 100644
> --- a/modules/lua/libs/input.c
> +++ b/modules/lua/libs/input.c
> @@ -382,6 +382,127 @@ static int vlclua_input_item_set_meta( lua_State *L )
> return 1;
> }
>
> +#define PUSH_INT( val, name ) \
> + lua_pushinteger( L, val ); \
> + lua_setfield( L, -2, name );
> +
> +#define PUSH_STR( val, name ) \
> + lua_pushstring( L, val ); \
> + lua_setfield( L, -2, name );
> +
> +#define PUSH_NUM( val, name ) \
> + lua_pushnumber( L, val ); \
> + lua_setfield( L, -2, name );
> +
> +static const char* orientation_to_str(video_orientation_t orient)
> +{
> + switch (orient)
> + {
> + case ORIENT_TOP_LEFT:
> + return "topleft";
> + case ORIENT_TOP_RIGHT:
> + return "topright";
> + case ORIENT_BOTTOM_LEFT:
> + return "bottomleft";
> + case ORIENT_BOTTOM_RIGHT:
> + return "bottomright";
> + case ORIENT_LEFT_TOP:
> + return "lefttop";
> + case ORIENT_LEFT_BOTTOM:
> + return "leftbottom";
> + case ORIENT_RIGHT_TOP:
> + return "righttop";
> + case ORIENT_RIGHT_BOTTOM:
> + return "rightbottom";
> + default:
> + vlc_assert_unreachable();
> + }
> +}
> +
> +static const char* projection_to_str(video_projection_mode_t proj)
> +{
> + switch (proj)
> + {
> + case PROJECTION_MODE_RECTANGULAR:
> + return "rectangular";
> + case PROJECTION_MODE_EQUIRECTANGULAR:
> + return "equirectangular";
> + case PROJECTION_MODE_CUBEMAP_LAYOUT_STANDARD:
> + return "cubemap";
> + default:
> + vlc_assert_unreachable();
> + }
> +}
> +
> +static int vlclua_input_item_tracks( lua_State *L )
> +{
> + input_item_t *p_item = vlclua_input_item_get_internal( L );
> + lua_newtable( L );
> +
> + vlc_mutex_lock( &p_item->lock );
> + for ( int i = 0; i < p_item->i_es; ++i )
> + {
> + const es_format_t* p_es = p_item->es[i];
> +
> + lua_newtable( L );
> +
> + lua_pushlstring( L, (const char*)&p_es->i_codec, 4 );
> + lua_setfield( L, -2, "codec" );
> + lua_pushlstring( L, (const char*)&p_es->i_original_fourcc, 4 );
> + lua_setfield( L, -2, "original_fourcc" );
> + PUSH_INT( p_es->i_id, "id" );
In general I consider ES signed integer IDs as broken by design, and I am not
very keen on exposing them any further than backward compatibility requires.
Can't we have proper a Lua object per ES, not expose the ID to Lua code and
limit the use of IDs to the back-end? Then we can fix the implementation later
without breaking Lua scripts.
(On top of my head, the ID is really only useful to select a track as of now.)
> + PUSH_INT( p_es->i_profile, "profile" );
> + PUSH_INT( p_es->i_level, "level" );
> + PUSH_INT( p_es->i_bitrate, "bitrate" );
> + PUSH_STR( p_es->psz_language, "language" );
> + PUSH_STR( p_es->psz_description, "description" );
--
Rémi Denis-Courmont
http://www.remlab.net/
More information about the vlc-devel
mailing list