[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