vlc | branch: master | Rafaël Carré <[email protected]> | 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 _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
