[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