# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_sout.h>
#include <vlc_block.h>
*****************************************************************************/
static ssize_t Write( sout_access_out_t *, block_t * );
static int Seek ( sout_access_out_t *, off_t );
+static int Control( sout_access_out_t *, int, va_list );
struct sout_access_out_sys_t
{
config_ChainParse( p_access, SOUT_CFG_PREFIX, ppsz_sout_options, p_access->p_cfg );
- psz_accessname = psz_parser = strdup( p_access->psz_path );
-
if( !p_access->psz_path )
{
msg_Err( p_access,
return VLC_EGENERIC;
}
+ psz_accessname = psz_parser = strdup( p_access->psz_path );
+ if( !psz_parser )
+ return VLC_ENOMEM;
+
/* Parse connection data user:pwd@host:port/mountpoint */
psz_user = psz_parser;
while( psz_parser[0] && psz_parser[0] != ':' ) psz_parser++;
p_sys = p_access->p_sys = malloc( sizeof( sout_access_out_sys_t ) );
if( !p_sys )
{
- msg_Err( p_access, "out of memory" );
free( psz_accessname );
return VLC_ENOMEM;
}
psz_host, i_port, psz_mount );
free( p_access->p_sys );
free( psz_accessname );
+ free( psz_name );
+ free( psz_description );
+ free( psz_genre );
+ free( psz_url );
return VLC_EGENERIC;
}
if( i_ret != SHOUTERR_SUCCESS )
{
msg_Err( p_access, "failed to set the information about the bitrate" );
+ free( val.psz_string );
free( p_access->p_sys );
free( psz_accessname );
return VLC_EGENERIC;
if( i_ret != SHOUTERR_SUCCESS )
{
msg_Err( p_access, "failed to set the information about the samplerate" );
+ free( val.psz_string );
free( p_access->p_sys );
free( psz_accessname );
return VLC_EGENERIC;
if( i_ret != SHOUTERR_SUCCESS )
{
msg_Err( p_access, "failed to set the information about the number of channels" );
+ free( val.psz_string );
free( p_access->p_sys );
free( psz_accessname );
return VLC_EGENERIC;
if( i_ret != SHOUTERR_SUCCESS )
{
msg_Err( p_access, "failed to set the information about Ogg Vorbis quality" );
+ free( val.psz_string );
free( p_access->p_sys );
free( psz_accessname );
return VLC_EGENERIC;
p_access->pf_write = Write;
p_access->pf_seek = Seek;
+ p_access->pf_control = Control;
msg_Dbg( p_access, "shout access output opened (%s@%s:%i/%s)",
psz_user, psz_host, i_port, psz_mount );
-
- /* Update pace control flag */
- if( p_access->psz_access && !strcmp( p_access->psz_access, "stream" ) )
- {
- p_access->p_sout->i_out_pace_nocontrol++;
- }
-
free( psz_accessname );
return VLC_SUCCESS;
shout_shutdown();
}
free( p_access->p_sys );
+ msg_Dbg( p_access, "shout access output closed" );
+}
- /* Update pace control flag */
- if( p_access->psz_access && !strcmp( p_access->psz_access, "stream" ) )
+static int Control( sout_access_out_t *p_access, int i_query, va_list args )
+{
+ switch( i_query )
{
- p_access->p_sout->i_out_pace_nocontrol--;
- }
+ case ACCESS_OUT_CONTROLS_PACE:
+ {
+ bool *pb = va_arg( args, bool * );
+ *pb = strcmp( p_access->psz_access, "stream" );
+ break;
+ }
- msg_Dbg( p_access, "shout access output closed" );
+ default:
+ return VLC_EGENERIC;
+ }
+ return VLC_SUCCESS;
}
/*****************************************************************************
else
{
msg_Err( p_access, "failed to reconnect to server" );
+ block_ChainRelease (p_buffer);
+ return VLC_EGENERIC;
}
}