[vlc-commits] commit: Revert "Revert "input: Fill in the input_item es"" ( =?UTF-8?Q?Rafa=C3=ABl=20Carr=C3=A9=20?=)

git at videolan.org git at videolan.org
Thu Dec 2 22:19:05 CET 2010


vlc | branch: master | Rafaël Carré <rafael.carre at gmail.com> | Thu Dec  2 09:42:41 2010 +0100| [aa102fee3df0f1d3474ccf3250ebc1e3a297ac5f] | committer: Rafaël Carré 

Revert "Revert "input: Fill in the input_item es""

This reverts commit 2ca4cf27ef0d6dc906f5523babb35633d3b6bcd1.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=aa102fee3df0f1d3474ccf3250ebc1e3a297ac5f
---

 src/input/es_out.c |    3 +++
 src/input/item.c   |   32 ++++++++++++++++++++++++++++++++
 src/input/item.h   |    1 +
 3 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/src/input/es_out.c b/src/input/es_out.c
index 635b2e9..788f338 100644
--- a/src/input/es_out.c
+++ b/src/input/es_out.c
@@ -45,6 +45,7 @@
 #include "es_out.h"
 #include "event.h"
 #include "info.h"
+#include "item.h"
 
 #include "../stream_output/stream_output.h"
 
@@ -2855,6 +2856,8 @@ static void EsOutUpdateInfo( es_out_t *out, es_out_id_t *es, const es_format_t *
     const es_format_t *p_fmt_es = &es->fmt;
     lldiv_t         div;
 
+    input_item_UpdateTracksInfo(input_GetItem(p_input), fmt);
+
     /* Create category */
     char psz_cat[128];
     snprintf( psz_cat, sizeof(psz_cat),_("Stream %d"), es->i_meta_id );
diff --git a/src/input/item.c b/src/input/item.c
index 0d374af..e47a1e1 100644
--- a/src/input/item.c
+++ b/src/input/item.c
@@ -1050,3 +1050,35 @@ void input_item_node_PostAndDelete( input_item_node_t *p_root )
 
   input_item_node_Delete( p_root );
 }
+
+/* Called by es_out when a new Elementary Stream is added or updated. */
+void input_item_UpdateTracksInfo(input_item_t *item, const es_format_t *fmt)
+{
+    int i;
+    es_format_t *fmt_copy = malloc(sizeof *fmt_copy);
+    if (!fmt_copy)
+        return;
+
+    es_format_Copy(fmt_copy, fmt);
+    /* XXX: we could free p_extra to save memory, we will likely not need
+     * the decoder specific data */
+
+    vlc_mutex_lock( &item->lock );
+
+    for( i = 0; i < item->i_es; i++ )
+    {
+        if (item->es[i]->i_id != fmt->i_id)
+            continue;
+
+        /* We've found the right ES, replace it */
+        es_format_Clean(item->es[i]);
+        free(item->es[i]);
+        item->es[i] = fmt_copy;
+        vlc_mutex_unlock( &item->lock );
+        return;
+    }
+
+    /* ES not found, insert it */
+    TAB_APPEND(item->i_es, item->es, fmt_copy);
+    vlc_mutex_unlock( &item->lock );
+}
diff --git a/src/input/item.h b/src/input/item.h
index cd231f8..9b02136 100644
--- a/src/input/item.h
+++ b/src/input/item.h
@@ -27,5 +27,6 @@
 #include "input_interface.h"
 
 void input_item_SetErrorWhenReading( input_item_t *p_i, bool b_error );
+void input_item_UpdateTracksInfo( input_item_t *item, const es_format_t *fmt );
 
 #endif



More information about the vlc-commits mailing list