[vlc-devel] [PATCH 3/3] lua: report status of main ES-es on current input.

jpsaman at videolan.org jpsaman at videolan.org
Sat Feb 15 23:24:06 CET 2014


From: Jean-Paul Saman <jean-paul.saman at m2x.nl>

---
 modules/lua/libs/input.c           | 51 ++++++++++++++++++++++++++++++++++++++
 share/lua/http/requests/status.xml | 11 ++++++++
 2 files changed, 62 insertions(+)

diff --git a/modules/lua/libs/input.c b/modules/lua/libs/input.c
index bdffbc9..3629b14 100644
--- a/modules/lua/libs/input.c
+++ b/modules/lua/libs/input.c
@@ -175,6 +175,56 @@ static int vlclua_input_metas_internal( lua_State *L, input_item_t *p_item )
     return 1;
 }
 
+static int vlclua_input_item_es_state( lua_State *L )
+{
+    /* HACK to add ES state */
+    input_thread_t *p_input = vlclua_get_input_internal( L );
+    lua_newtable( L );
+    if( p_input )
+    {
+#define ES_STATUS_UNKNOWN  "Unknown"
+#define ES_STATUS_DISABLED "Disabled"
+#define ES_STATUS_ENABLED  "Enabled"
+#define ES_STATUS_ERROR    "Error"
+
+#define PUSH_ES_STATE( n, m ) \
+        lua_pushstring( L, n ); \
+        lua_setfield( L, -2, m )
+
+        const char* ppsz_es_cat[] = { "unknown-es", "video-es", "audio-es", "spu-es", "nav-es" };
+        const int cat[] = { UNKNOWN_ES, VIDEO_ES, AUDIO_ES, SPU_ES, NAV_ES };
+
+        for( unsigned int i = 0; i < ARRAY_SIZE(cat); i++ )
+        {
+             input_es_state_e es_state = input_GetEsState( p_input, cat[i] );
+             switch( es_state )
+             {
+                case INPUT_ES_STATE_DISABLED:
+                     PUSH_ES_STATE( ES_STATUS_DISABLED, ppsz_es_cat[i] );
+                     break;
+                case INPUT_ES_STATE_ENABLED:
+                     PUSH_ES_STATE( ES_STATUS_ENABLED, ppsz_es_cat[i] );
+                     break;
+                case INPUT_ES_STATE_ERROR:
+                     PUSH_ES_STATE( ES_STATUS_ERROR, ppsz_es_cat[i] );
+                     break;
+                default:
+                     PUSH_ES_STATE( ES_STATUS_UNKNOWN, ppsz_es_cat[i] );
+                     break;
+            }
+        }
+
+#undef PUSH_ES_STATE
+#undef ES_STATUS_UNKNOWN
+#undef ES_STATUS_DISABLED
+#undef ES_STATUS_ENABLED
+#undef ES_STATUS_ERROR
+
+        vlc_object_release( p_input );
+    }
+    return 1;
+}
+
 static int vlclua_input_item_stats( lua_State *L )
 {
     input_item_t *p_item = vlclua_input_item_get_internal( L );
@@ -406,6 +456,7 @@ static const luaL_Reg vlclua_input_item_reg[] = {
     { "duration", vlclua_input_item_duration },
     { "stats", vlclua_input_item_stats },
     { "info", vlclua_input_item_info },
+    { "es_state", vlclua_input_item_es_state },
     { NULL, NULL }
 };
 
diff --git a/share/lua/http/requests/status.xml b/share/lua/http/requests/status.xml
index ef400ed..5cea584 100644
--- a/share/lua/http/requests/status.xml
+++ b/share/lua/http/requests/status.xml
@@ -78,4 +78,15 @@ local item = vlc.input.item()
     end
   ?>
   </stats>
+  <es_state>
+  <?vlc
+    if item then
+      local stats = item:es_state()
+      for k,v in pairs(stats) do
+        local tag = string.gsub(k,"_","")
+        print("<"..httprequests.xmlString(tag)..">"..httprequests.xmlString(v).."</"..httprequests.xmlString(tag)..">\n")
+      end
+    end
+  ?>
+  </es_state>
 </root>
-- 
1.8.3.1




More information about the vlc-devel mailing list