Browse Source

gather: use vlc_list

pull/116/head
Rémi Denis-Courmont 6 years ago
parent
commit
9b39e78da6
  1. 33
      modules/stream_out/gather.c

33
modules/stream_out/gather.c

@ -32,6 +32,7 @@
#include <vlc_plugin.h>
#include <vlc_sout.h>
#include <vlc_block.h>
#include <vlc_list.h>
/*****************************************************************************
* Module descriptor
@ -60,12 +61,12 @@ typedef struct
es_format_t fmt;
void *id;
struct vlc_list node;
} sout_stream_id_sys_t;
typedef struct
{
int i_id;
sout_stream_id_sys_t **id;
struct vlc_list ids;
} sout_stream_sys_t;
static const struct sout_stream_operations ops = {
@ -84,10 +85,8 @@ static int Open( vlc_object_t *p_this )
if( p_sys == NULL )
return VLC_EGENERIC;
vlc_list_init(&p_sys->ids);
p_stream->ops = &ops;
TAB_INIT( p_sys->i_id, p_sys->id );
return VLC_SUCCESS;
}
@ -98,17 +97,14 @@ static void Close( vlc_object_t * p_this )
{
sout_stream_t *p_stream = (sout_stream_t*)p_this;
sout_stream_sys_t *p_sys = p_stream->p_sys;
int i;
sout_stream_id_sys_t *id;
for( i = 0; i < p_sys->i_id; i++ )
vlc_list_foreach (id, &p_sys->ids, node)
{
sout_stream_id_sys_t *id = p_sys->id[i];
sout_StreamIdDel( p_stream->p_next, id->id );
es_format_Clean( &id->fmt );
free( id );
}
TAB_CLEAN( p_sys->i_id, p_sys->id );
free( p_sys );
}
@ -119,13 +115,11 @@ static void Close( vlc_object_t * p_this )
static void *Add( sout_stream_t *p_stream, const es_format_t *p_fmt )
{
sout_stream_sys_t *p_sys = p_stream->p_sys;
sout_stream_id_sys_t *id;
int i;
sout_stream_id_sys_t *id;
/* search a compatible output */
for( i = 0; i < p_sys->i_id; i++ )
vlc_list_foreach (id, &p_sys->ids, node)
{
id = p_sys->id[i];
if( id->b_used )
continue;
@ -156,20 +150,13 @@ static void *Add( sout_stream_t *p_stream, const es_format_t *p_fmt )
}
/* destroy all outputs from the same category */
for( i = 0; i < p_sys->i_id; i++ )
{
id = p_sys->id[i];
vlc_list_foreach (id, &p_sys->ids, node)
if( !id->b_used && id->fmt.i_cat == p_fmt->i_cat )
{
TAB_REMOVE( p_sys->i_id, p_sys->id, id );
sout_StreamIdDel( p_stream->p_next, id->id );
es_format_Clean( &id->fmt );
free( id );
i = 0;
continue;
}
}
msg_Dbg( p_stream, "creating new output" );
id = malloc( sizeof( sout_stream_id_sys_t ) );
@ -184,8 +171,8 @@ static void *Add( sout_stream_t *p_stream, const es_format_t *p_fmt )
free( id );
return NULL;
}
TAB_APPEND( p_sys->i_id, p_sys->id, id );
vlc_list_append(&id->node, &p_sys->ids);
return id;
}

Loading…
Cancel
Save