[vlc-devel] [PATCH 2/4] old http: Replace ICY metadata stream parsing

Rémi Denis-Courmont remi at remlab.net
Wed Nov 1 13:21:16 CET 2017


Le 1 novembre 2017 06:16:34 GMT+02:00, Marvin Scholz <epirat07 at gmail.com> a écrit :
>Remove the ICY metadata stream parsing and instead set the metaint
>for the ICY stream_filter to handle the ICY parsing/filtering.
>---
>modules/access/http.c | 112
>++------------------------------------------------
> 1 file changed, 4 insertions(+), 108 deletions(-)
>
>diff --git a/modules/access/http.c b/modules/access/http.c
>index 1ace2db902..2471521da8 100644
>--- a/modules/access/http.c
>+++ b/modules/access/http.c
>@@ -119,11 +119,8 @@ struct access_sys_t
>     char       *psz_location;
>     bool b_icecast;
> 
>-    int        i_icy_meta;
>-    uint64_t   i_icy_offset;
>     char       *psz_icy_name;
>     char       *psz_icy_genre;
>-    char       *psz_icy_title;
> 
>     uint64_t offset;
>     uint64_t size;
>@@ -170,11 +167,8 @@ static int Open( vlc_object_t *p_this )
>     p_sys->psz_referrer = NULL;
>     p_sys->psz_username = NULL;
>     p_sys->psz_password = NULL;
>-    p_sys->i_icy_meta = 0;
>-    p_sys->i_icy_offset = 0;
>     p_sys->psz_icy_name = NULL;
>     p_sys->psz_icy_genre = NULL;
>-    p_sys->psz_icy_title = NULL;
>     p_sys->b_has_size = false;
>     p_sys->offset = 0;
>     p_sys->size = 0;
>@@ -391,7 +385,6 @@ static void Close( vlc_object_t *p_this )
> 
>     free( p_sys->psz_icy_name );
>     free( p_sys->psz_icy_genre );
>-    free( p_sys->psz_icy_title );
> 
>     free( p_sys->psz_user_agent );
>     free( p_sys->psz_referrer );
>@@ -417,7 +410,6 @@ static int ReadData( stream_t *p_access, int
>*pi_read,
>  * Read: Read up to i_len bytes from the http connection and place in
>  * p_buffer. Return the actual number of bytes read
>*****************************************************************************/
>-static int ReadICYMeta( stream_t *p_access );
>static ssize_t Read( stream_t *p_access, void *p_buffer, size_t i_len )
> {
>     access_sys_t *p_sys = p_access->p_sys;
>@@ -429,20 +421,6 @@ static ssize_t Read( stream_t *p_access, void
>*p_buffer, size_t i_len )
>     if( i_len == 0 )
>         return 0;
> 
>-    if( p_sys->i_icy_meta > 0 && p_sys->offset - p_sys->i_icy_offset >
>0 )
>-    {
>-        int i_next = p_sys->i_icy_meta -
>-                   (p_sys->offset - p_sys->i_icy_offset) %
>p_sys->i_icy_meta;
>-
>-        if( i_next == p_sys->i_icy_meta )
>-        {
>-            if( ReadICYMeta( p_access ) )
>-                return 0;
>-        }
>-        if( i_len > (size_t)i_next )
>-            i_len = i_next;
>-    }
>-
>     if( ReadData( p_access, &i_read, p_buffer, i_len ) )
>         return 0;
> 
>@@ -469,82 +447,6 @@ static ssize_t Read( stream_t *p_access, void
>*p_buffer, size_t i_len )
>     return i_read;
> }
> 
>-static int ReadICYMeta( stream_t *p_access )
>-{
>-    access_sys_t *p_sys = p_access->p_sys;
>-
>-    uint8_t buffer;
>-    char *p, *psz_meta;
>-    int i_read;
>-
>-    /* Read meta data length */
>-    if( ReadData( p_access, &i_read, &buffer, 1 ) )
>-        return VLC_EGENERIC;
>-    if( i_read != 1 )
>-        return VLC_EGENERIC;
>-    const int i_size = buffer << 4;
>-    /* msg_Dbg( p_access, "ICY meta size=%u", i_size); */
>-
>-    psz_meta = malloc( i_size + 1 );
>-    for( i_read = 0; i_read < i_size; )
>-    {
>-        int i_tmp;
>-        if( ReadData( p_access, &i_tmp, (uint8_t *)&psz_meta[i_read],
>i_size - i_read ) || i_tmp <= 0 )
>-        {
>-            free( psz_meta );
>-            return VLC_EGENERIC;
>-        }
>-        i_read += i_tmp;
>-    }
>-    psz_meta[i_read] = '\0'; /* Just in case */
>-
>-    /* msg_Dbg( p_access, "icy-meta=%s", psz_meta ); */
>-
>-    /* Now parse the meta */
>-    /* Look for StreamTitle= */
>-    p = strcasestr( (char *)psz_meta, "StreamTitle=" );
>-    if( p )
>-    {
>-        p += strlen( "StreamTitle=" );
>-        if( *p == '\'' || *p == '"' )
>-        {
>-            char closing[] = { p[0], ';', '\0' };
>-            char *psz = strstr( &p[1], closing );
>-            if( !psz )
>-                psz = strchr( &p[1], ';' );
>-
>-            if( psz ) *psz = '\0';
>-        }
>-        else
>-        {
>-            char *psz = strchr( &p[1], ';' );
>-            if( psz ) *psz = '\0';
>-        }
>-
>-        if( !p_sys->psz_icy_title ||
>-            strcmp( p_sys->psz_icy_title, &p[1] ) )
>-        {
>-            free( p_sys->psz_icy_title );
>-            char *psz_tmp = strdup( &p[1] );
>-            p_sys->psz_icy_title = EnsureUTF8( psz_tmp );
>-            if( !p_sys->psz_icy_title )
>-                free( psz_tmp );
>-
>-            msg_Dbg( p_access, "New Icy-Title=%s",
>p_sys->psz_icy_title );
>-            input_thread_t *p_input = p_access->p_input;
>-            if( p_input )
>-            {
>-                input_item_t *p_input_item = input_GetItem(
>p_access->p_input );
>-                if( p_input_item )
>-                    input_item_SetMeta( p_input_item,
>vlc_meta_NowPlaying, p_sys->psz_icy_title );
>-            }
>-        }
>-    }
>-    free( psz_meta );
>-
>-    return VLC_SUCCESS;
>-}
>-
>/*****************************************************************************
>  * Seek: close and re-open a connection at the right place
>*****************************************************************************/
>@@ -636,17 +538,13 @@ static int Connect( stream_t *p_access )
> 
>     free( p_sys->psz_icy_genre );
>     free( p_sys->psz_icy_name );
>-    free( p_sys->psz_icy_title );
> 
>     vlc_http_auth_Init( &p_sys->auth );
>     vlc_http_auth_Init( &p_sys->proxy_auth );
>     p_sys->psz_location = NULL;
>     p_sys->psz_mime = NULL;
>-    p_sys->i_icy_meta = 0;
>-    p_sys->i_icy_offset = 0;
>     p_sys->psz_icy_name = NULL;
>     p_sys->psz_icy_genre = NULL;
>-    p_sys->psz_icy_title = NULL;
>     p_sys->b_has_size = false;
>     p_sys->offset = 0;
>     p_sys->size = 0;
>@@ -883,13 +781,11 @@ static int Connect( stream_t *p_access )
>         else if( !strcasecmp( psz, "Icy-MetaInt" ) )
>         {
>             msg_Dbg( p_access, "Icy-MetaInt: %s", p );
>-            p_sys->i_icy_meta = atoi( p );
>-            if( p_sys->i_icy_meta < 0 )
>-                p_sys->i_icy_meta = 0;
>-            if( p_sys->i_icy_meta > 0 )
>+            int icy_meta = atoi( p );
>+            if( icy_meta > 0 ) {
>                 p_sys->b_icecast = true;
>-
>-            msg_Warn( p_access, "ICY metaint=%d", p_sys->i_icy_meta );
>+                config_PutInt( p_access, "icy-metaint", icy_meta );
>+            }
>         }
>         else if( !strcasecmp( psz, "Icy-Name" ) )
>         {
>-- 
>2.13.5 (Apple Git-94)
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

Configuration usage is very obviously wrong here.
-- 
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.


More information about the vlc-devel mailing list