[vlc-devel] [PATCH] stats module

Rémi Denis-Courmont remi at remlab.net
Sat Feb 8 18:06:28 CET 2014


Le samedi 8 février 2014, 18:53:01 Ilkka Ollakka a écrit :
> +/**************************************************************************
> *** + * Open:
> +
> ***************************************************************************
> **/ +static int Open( vlc_object_t *p_this )
> +{
> +    sout_stream_t     *p_stream = (sout_stream_t*)p_this;
> +    sout_stream_sys_t *p_sys;
> +    char              *outputFile;
> +
> +    p_sys = calloc( 1, sizeof( sout_stream_sys_t ) );

malloc?

> +    if( !p_sys )

unlikely?

> +        return VLC_ENOMEM;
> +
> +
> +    config_ChainParse( p_stream, SOUT_CFG_PREFIX, ppsz_sout_options,
> +                   p_stream->p_cfg );
> +
> +
> +    outputFile = var_GetNonEmptyString( p_stream, SOUT_CFG_PREFIX "output"
> ); +
> +    if( outputFile )
> +    {
> +        p_sys->output = vlc_fopen( outputFile, "wt" );
> +        if( !p_sys->output )
> +        {
> +            msg_Err( p_stream, "Unable to open file '%s' for writing",
> outputFile );
> +            free( p_sys );
> +            free( outputFile );
> +            return VLC_EGENERIC;
> +        }
> +    }
> +    free( outputFile );

Swapped } and free().

> +    p_sys->prefix = var_GetString( p_stream, SOUT_CFG_PREFIX "prefix" );
> +
> +    p_stream->p_sys     = p_sys;
> +
> +    p_stream->pf_add    = Add;
> +    p_stream->pf_del    = Del;
> +    p_stream->pf_send   = Send;
> +
> +
> +    return VLC_SUCCESS;
> +}
> +
> +/**************************************************************************
> *** + * Close:
> +
> ***************************************************************************
> **/ +static void Close( vlc_object_t * p_this )
> +{
> +    sout_stream_t     *p_stream = (sout_stream_t*)p_this;
> +    sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys;
> +
> +    if( p_sys->output )
> +        fclose( p_sys->output );
> +
> +    free( p_sys->prefix );
> +    free( p_sys );
> +}
> +
> +static sout_stream_id_t * Add( sout_stream_t *p_stream, es_format_t *p_fmt
> ) +{
> +    sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys;
> +    sout_stream_id_t *id;
> +
> +    id = calloc( 1, sizeof( sout_stream_id_t ) );
> +    if( !id )
> +        return NULL;
> +
> +    id->id = p_fmt->i_id;
> +    switch( p_fmt->i_cat)
> +    {
> +    case VIDEO_ES:
> +        id->type = strdup("Video");
> +        break;
> +    case AUDIO_ES:
> +        id->type = strdup("Audio");
> +        break;
> +    case SPU_ES:
> +        id->type = strdup("Spu");

Capitalization

> +        break;
> +    default:
> +        id->type = strdup("Data");
> +        break;
> +    }

No need for strdup().

> +
> +    msg_Dbg( p_stream, "%s: Adding track type:%s id:%d", p_sys->prefix,
> id->type, id->id); +
> +    if( p_stream->p_next )
> +        id->next_id = sout_StreamIdAdd( p_stream->p_next, p_fmt );
> +
> +    return id;
> +}
> +
> +static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
> +{
> +    sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys;
> +
> +    msg_Dbg( p_stream, "%s: Removing track type:%s id:%d", p_sys->prefix,
> id->type, id->id );
> +    if( id->next_id ) sout_StreamIdDel( p_stream->p_next, id->next_id );
> +    free( id->type );
> +    free( id );
> +
> +    return VLC_SUCCESS;
> +}
> +
> +static int Send( sout_stream_t *p_stream, sout_stream_id_t *id,
> +                 block_t *p_buffer )
> +{
> +    sout_stream_sys_t *p_sys = (sout_stream_sys_t *)p_stream->p_sys;
> +    struct md5_s hash;
> +
> +    block_t *p_block = p_buffer;
> +    while ( p_block != NULL )
> +    {
> +        InitMD5( &hash );
> +        AddMD5( &hash, p_block->p_buffer, p_block->i_buffer );
> +        EndMD5( &hash );
> +        char *outputhash = psz_md5_hash( &hash );
> +        if( p_sys->output )
> +        {
> +            fprintf( p_sys->output, "%s: track:%d type:%s
> segment_number:%"PRIu64" dts_difference:%"PRId64" length:%"PRId64"
> md5:%16s\n",
> +                  p_sys->prefix, id->id, id->type,
> ++id->segment_number, p_block->i_dts - id->previous_dts,
> +                 p_block->i_length, outputhash );
> +
> +        } else {
> +            msg_Dbg( p_stream, "%s: track:%d type:%s
> segment_number:%"PRIu64" dts_difference:%"PRId64" length:%"PRId64"
> md5:%16s",
> +                  p_sys->prefix, id->id, id->type,
> ++id->segment_number, p_block->i_dts - id->previous_dts,
> +                 > p_block->i_length, outputhash );

It would perhaps be simpler to assign ->output to stdout and use the same code 
paths.

> +        }
> +        free( outputhash );
> +        id->previous_dts = p_block->i_dts;
> +        p_block = p_block->p_next;
> +    }
> +
> +    if( p_stream->p_next )
> +        return sout_StreamIdSend( p_stream->p_next, id->next_id, p_buffer
> ); +    else
> +        block_Release( p_buffer );
> +    return VLC_SUCCESS;
> +}

-- 
Rémi Denis-Courmont
http://www.remlab.net/




More information about the vlc-devel mailing list