[vlc-devel] [PATCH 7/8] input: source: add input_source_GetStrId()
Thomas Guillem
thomas at gllm.fr
Fri Feb 28 08:36:29 CET 2020
---
src/input/input.c | 33 +++++++++++++++++++++++++++++----
src/input/input_internal.h | 8 ++++++++
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/src/input/input.c b/src/input/input.c
index ff83b6caec0..f467ceb2a3d 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -54,6 +54,7 @@
#include <vlc_stream.h>
#include <vlc_stream_extractor.h>
#include <vlc_renderer_discovery.h>
+#include <vlc_md5.h>
/*****************************************************************************
* Local prototypes
@@ -87,7 +88,7 @@ static void UpdateTitleListfromDemux( input_thread_t * );
static void MRLSections( const char *, int *, int *, int *, int *);
-static input_source_t *InputSourceNew( void );
+static input_source_t *InputSourceNew( const char *psz_mrl );
static int InputSourceInit( input_source_t *in, input_thread_t *p_input,
const char *psz_mrl,
const char *psz_forced_demux, bool b_in_can_fail );
@@ -270,7 +271,7 @@ static input_thread_t *Create( vlc_object_t *p_parent,
if( unlikely(priv == NULL) )
return NULL;
- priv->master = InputSourceNew();
+ priv->master = InputSourceNew( NULL );
if( !priv->master )
{
free( priv );
@@ -2479,13 +2480,29 @@ error:
static void input_SplitMRL( const char **, const char **, const char **,
const char **, char * );
-static input_source_t *InputSourceNew( void )
+static input_source_t *InputSourceNew( const char *psz_mrl )
{
input_source_t *in = calloc(1, sizeof(*in) );
if( unlikely(in == NULL) )
return NULL;
vlc_atomic_rc_init( &in->rc );
+
+ if( psz_mrl )
+ {
+ /* Use the MD5 sum of the complete source URL as an identifier. */
+ struct md5_s md5;
+ InitMD5( &md5 );
+ AddMD5( &md5, psz_mrl, strlen( psz_mrl ) );
+ EndMD5( &md5 );
+ in->str_id = psz_md5_hash( &md5 );
+ if( !in->str_id )
+ {
+ free( in );
+ return NULL;
+ }
+ }
+
return in;
}
@@ -2719,7 +2736,15 @@ input_source_t *input_source_Hold( input_source_t *in )
void input_source_Release( input_source_t *in )
{
if( vlc_atomic_rc_dec( &in->rc ) )
+ {
+ free( in->str_id );
free( in );
+ }
+}
+
+const char *input_source_GetStrId( input_source_t *in )
+{
+ return in->str_id;
}
/*****************************************************************************
@@ -3274,7 +3299,7 @@ static int input_SlaveSourceAdd( input_thread_t *p_input,
priv->i_last_es_cat = UNKNOWN_ES;
- input_source_t *p_source = InputSourceNew();
+ input_source_t *p_source = InputSourceNew( psz_uri );
if( !p_source )
return VLC_EGENERIC;
diff --git a/src/input/input_internal.h b/src/input/input_internal.h
index 3b46771a3d5..0590d5bfe7d 100644
--- a/src/input/input_internal.h
+++ b/src/input/input_internal.h
@@ -370,6 +370,7 @@ struct input_source_t
vlc_atomic_rc_t rc;
demux_t *p_demux; /**< Demux object (most downstream) */
+ char *str_id;
/* Title infos for that input */
bool b_title_demux; /* Titles/Seekpoints provided by demux */
@@ -648,6 +649,13 @@ input_source_t *input_source_Hold( input_source_t *in );
*/
void input_source_Release( input_source_t *in );
+/**
+ * Returns the string identifying this input source
+ *
+ * @return a string id or NULL if the source is the master
+ */
+const char *input_source_GetStrId( input_source_t *in );
+
/* Bound pts_delay */
#define INPUT_PTS_DELAY_MAX VLC_TICK_FROM_SEC(60)
--
2.20.1
More information about the vlc-devel
mailing list