vlc | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Mon Apr 16 17:49:01 2018 +0300| [169c6aee1c0930dc2290549b5a9856ae7ce4e318] | committer: Rémi Denis-Courmont
demux: merge access and location parameters as URL (like is being done for access for a while) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=169c6aee1c0930dc2290549b5a9856ae7ce4e318 --- src/input/demux.c | 21 +++++++++------------ src/input/demux.h | 4 ++-- src/input/input.c | 37 +++++++++++++++++-------------------- 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/input/demux.c b/src/input/demux.c index 8700f729a7..8d3d33c02e 100644 --- a/src/input/demux.c +++ b/src/input/demux.c @@ -142,7 +142,7 @@ demux_t *demux_New( vlc_object_t *p_obj, const char *psz_name, stream_t *s, es_out_t *out ) { assert(s != NULL ); - return demux_NewAdvanced( p_obj, NULL, "", psz_name, "", s, out, false ); + return demux_NewAdvanced( p_obj, NULL, psz_name, "", s, out, false ); } struct vlc_demux_private @@ -179,8 +179,7 @@ static int demux_Probe(void *func, va_list ap) } demux_t *demux_NewAdvanced( vlc_object_t *p_obj, input_thread_t *p_parent_input, - const char *psz_access, const char *psz_demux, - const char *psz_location, + const char *psz_demux, const char *url, stream_t *s, es_out_t *out, bool b_preparsing ) { struct vlc_demux_private *priv; @@ -203,24 +202,22 @@ demux_t *demux_NewAdvanced( vlc_object_t *p_obj, input_thread_t *p_parent_input, } } - size_t schemelen = strlen(psz_access); - p_demux->p_input = p_parent_input; p_demux->psz_name = strdup( psz_demux ); if (unlikely(p_demux->psz_name == NULL)) goto error; - if (unlikely(asprintf(&p_demux->psz_url, "%s://%s", psz_access, - psz_location) == -1)) + p_demux->psz_url = strdup(url); + if (unlikely(p_demux->psz_url == NULL)) goto error; - p_demux->psz_location = p_demux->psz_url + schemelen + 3; - p_demux->psz_filepath = get_path( psz_location ); /* parse URL */ + const char *p = strstr(p_demux->psz_url, "://"); + p_demux->psz_location = (p != NULL) ? (p + 3) : ""; + p_demux->psz_filepath = get_path(p_demux->psz_location); /* parse URL */ if( !b_preparsing ) - msg_Dbg( p_obj, "creating demux: access='%s' demux='%s' " - "location='%s' file='%s'", psz_access, psz_demux, - p_demux->psz_location, p_demux->psz_filepath ); + msg_Dbg( p_obj, "creating demux \"%s\", URL: %s, path: %s", + psz_demux, url, p_demux->psz_filepath ); p_demux->s = s; p_demux->out = out; diff --git a/src/input/demux.h b/src/input/demux.h index a972482592..ca4da6efc5 100644 --- a/src/input/demux.h +++ b/src/input/demux.h @@ -32,8 +32,8 @@ /* stream_t *s could be null and then it mean a access+demux in one */ demux_t *demux_NewAdvanced( vlc_object_t *p_obj, input_thread_t *p_parent_input, - const char *psz_access, const char *psz_demux, - const char *psz_path, stream_t *s, es_out_t *out, bool ); + const char *psz_demux, const char *url, + stream_t *s, es_out_t *out, bool ); unsigned demux_TestAndClearFlags( demux_t *, unsigned ); int demux_GetTitle( demux_t * ); diff --git a/src/input/input.c b/src/input/input.c index e597c10113..c9e19504d2 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -2403,24 +2403,16 @@ InputStreamHandleAnchor( input_source_t *source, stream_t **stream, return VLC_SUCCESS; } -static demux_t *InputDemuxNew( input_thread_t *p_input, input_source_t *p_source, - const char *psz_access, const char *psz_demux, - const char *psz_path, const char *psz_anchor ) +static demux_t *InputDemuxNew( input_thread_t *p_input, + input_source_t *p_source, const char *url, + const char *psz_demux, const char *psz_anchor ) { input_thread_private_t *priv = input_priv(p_input ); vlc_object_t *obj = VLC_OBJECT(p_source); - demux_t *p_demux = NULL; - - /* not an access-demux: create the underlying access stream */ - char *psz_base_mrl; - - if( asprintf( &psz_base_mrl, "%s://%s", psz_access, psz_path ) < 0 ) - return NULL; + /* create the underlying access stream */ stream_t *p_stream = stream_AccessNew( obj, p_input, priv->p_es_out, - priv->b_preparsing, psz_base_mrl ); - free( psz_base_mrl ); - + priv->b_preparsing, url ); if( p_stream == NULL ) return NULL; @@ -2450,11 +2442,10 @@ static demux_t *InputDemuxNew( input_thread_t *p_input, input_source_t *p_source p_stream = stream_FilterChainNew( p_stream, "record" ); /* create a regular demux with the access stream created */ - p_demux = demux_NewAdvanced( obj, p_input, psz_access, psz_demux, psz_path, - p_stream, priv->p_es_out, - priv->b_preparsing ); - if( p_demux ) - return p_demux; + demux_t *demux = demux_NewAdvanced( obj, p_input, psz_demux, url, p_stream, + priv->p_es_out, priv->b_preparsing ); + if( demux != NULL ) + return demux; error: vlc_stream_Delete( p_stream ); @@ -2557,8 +2548,14 @@ static input_source_t *InputSourceNew( input_thread_t *p_input, TAB_CLEAN( count, tab ); } - in->p_demux = InputDemuxNew( p_input, in, psz_access, psz_demux, - psz_path, psz_anchor ); + char *url; + if( likely(asprintf( &url, "%s://%s", psz_access, psz_path ) >= 0) ) + { + in->p_demux = InputDemuxNew( p_input, in, url, psz_demux, psz_anchor ); + free( url ); + } + else + in->p_demux = NULL; free( psz_demux_var ); free( psz_dup ); _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits