X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fjack.c;h=ba8804f732a3eeea612ae0ba30239b543f7ca8d5;hb=f04d366c93b97c8e910380f106f17b0a58741975;hp=cf31d5f101eed927a6989e1b829ff2a3ae35c2e5;hpb=6ee1e193fd896ab9a4729fde14f009d9ce629815;p=vlc diff --git a/modules/access/jack.c b/modules/access/jack.c index cf31d5f101..ba8804f732 100644 --- a/modules/access/jack.c +++ b/modules/access/jack.c @@ -33,7 +33,12 @@ * Preamble *****************************************************************************/ -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include #include #include #include @@ -66,18 +71,18 @@ static void Close( vlc_object_t * ); "Automatically connect VLC input ports to available output ports." ) vlc_module_begin(); - set_description( _("JACK audio input") ); + set_description( N_("JACK audio input") ); set_capability( "access_demux", 0 ); - set_shortname( _( "JACK Input" ) ); + set_shortname( N_( "JACK Input" ) ); set_category( CAT_INPUT ); set_subcategory( SUBCAT_INPUT_ACCESS ); add_integer( "jack-input-caching", DEFAULT_PTS_DELAY / 1000, NULL, - CACHING_TEXT, CACHING_LONGTEXT, VLC_TRUE ); - add_bool( "jack-input-use-vlc-pace", VLC_FALSE, NULL, - PACE_TEXT, PACE_LONGTEXT, VLC_TRUE ); - add_bool( "jack-input-auto-connect", VLC_FALSE, NULL, - PACE_TEXT, PACE_LONGTEXT, VLC_TRUE ); + CACHING_TEXT, CACHING_LONGTEXT, true ); + add_bool( "jack-input-use-vlc-pace", false, NULL, + PACE_TEXT, PACE_LONGTEXT, true ); + add_bool( "jack-input-auto-connect", false, NULL, + PACE_TEXT, PACE_LONGTEXT, true ); add_shortcut( "jack" ); set_callbacks( Open, Close ); @@ -138,10 +143,7 @@ static int Open( vlc_object_t *p_this ) /* Allocate structure */ p_demux->p_sys = p_sys = calloc( 1, sizeof( demux_sys_t ) ); if( p_sys == NULL ) - { - msg_Err( p_demux, "out of memory, cannot allocate structure" ); return VLC_ENOMEM; - } memset( p_sys, 0, sizeof( demux_sys_t ) ); /* Parse MRL */ @@ -183,7 +185,8 @@ static int Open( vlc_object_t *p_this ) p_sys->i_channels * sizeof( jack_port_t* ) ); if( p_sys->pp_jack_port_input == NULL ) { - msg_Err( p_demux, "out of memory, cannot allocate input ports" ); + jack_client_close( p_sys->p_jack_client ); + free( p_sys ); return VLC_ENOMEM; } @@ -195,7 +198,9 @@ static int Open( vlc_object_t *p_this ) * sizeof( jack_default_audio_sample_t ) ); if( p_sys->p_jack_ringbuffer == NULL ) { - msg_Err( p_demux, "out of memory, cannot allocate ringbuffer" ); + free( p_sys->pp_jack_port_input ); + jack_client_close( p_sys->p_jack_client ); + free( p_sys ); return VLC_ENOMEM; } @@ -210,10 +215,9 @@ static int Open( vlc_object_t *p_this ) if( p_sys->pp_jack_port_input[i] == NULL ) { msg_Err( p_demux, "failed to register a JACK port" ); - if( p_sys->p_jack_client) jack_client_close( p_sys->p_jack_client ); - if( p_sys->pp_jack_port_input ) free( p_sys->pp_jack_port_input ); - if( p_sys->p_jack_ringbuffer ) jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); - if( p_sys->pp_jack_buffer ) free( p_sys->pp_jack_buffer ); + jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); + free( p_sys->pp_jack_port_input ); + jack_client_close( p_sys->p_jack_client ); free( p_sys ); return VLC_EGENERIC; } @@ -224,7 +228,12 @@ static int Open( vlc_object_t *p_this ) * sizeof( jack_default_audio_sample_t * ) ); if( p_sys->pp_jack_buffer == NULL ) { - msg_Err( p_demux, "out of memory, cannot allocate input buffer" ); + for( i = 0; i < p_sys->i_channels; i++ ) + jack_port_unregister( p_sys->p_jack_client, p_sys->pp_jack_port_input[i] ); + jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); + free( p_sys->pp_jack_port_input ); + jack_client_close( p_sys->p_jack_client ); + free( p_sys ); return VLC_ENOMEM; } @@ -235,10 +244,12 @@ static int Open( vlc_object_t *p_this ) if ( jack_activate( p_sys->p_jack_client ) ) { msg_Err( p_demux, "failed to activate JACK client" ); - if( p_sys->p_jack_client) jack_client_close( p_sys->p_jack_client ); - if( p_sys->pp_jack_port_input ) free( p_sys->pp_jack_port_input ); - if( p_sys->p_jack_ringbuffer ) jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); - if( p_sys->pp_jack_buffer ) free( p_sys->pp_jack_buffer ); + free( p_sys->pp_jack_buffer ); + for( i = 0; i < p_sys->i_channels; i++ ) + jack_port_unregister( p_sys->p_jack_client, p_sys->pp_jack_port_input[i] ); + jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); + free( p_sys->pp_jack_port_input ); + jack_client_close( p_sys->p_jack_client ); free( p_sys ); return VLC_EGENERIC; } @@ -283,7 +294,7 @@ static int Open( vlc_object_t *p_this ) jack_port_name( p_sys->pp_jack_port_input[i_input_ports] ) ); } } - if( pp_jack_port_output ) free( pp_jack_port_output ); + free( pp_jack_port_output ); } /* info about jack server */ @@ -323,9 +334,9 @@ static void Close( vlc_object_t *p_this ) if( p_sys->p_block_audio ) block_Release( p_sys->p_block_audio ); if( p_sys->p_jack_client ) jack_client_close( p_sys->p_jack_client ); if( p_sys->p_jack_ringbuffer ) jack_ringbuffer_free( p_sys->p_jack_ringbuffer ); - if( p_sys->pp_jack_port_input ) free( p_sys->pp_jack_port_input ); - if( p_sys->pp_jack_buffer ) free( p_sys->pp_jack_buffer ); - if( p_sys->pp_jack_port_table ) free( p_sys->pp_jack_port_table ); + free( p_sys->pp_jack_port_input ); + free( p_sys->pp_jack_buffer ); + free( p_sys->pp_jack_port_table ); free( p_sys ); } @@ -335,7 +346,7 @@ static void Close( vlc_object_t *p_this ) *****************************************************************************/ static int Control( demux_t *p_demux, int i_query, va_list args ) { - vlc_bool_t *pb; + bool *pb; int64_t *pi64; demux_sys_t *p_sys = p_demux->p_sys; @@ -343,10 +354,15 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) { /* Special for access_demux */ case DEMUX_CAN_PAUSE: + case DEMUX_CAN_SEEK: + pb = (bool *)va_arg( args, bool * ); + *pb = true; + return VLC_SUCCESS; + case DEMUX_SET_PAUSE_STATE: return VLC_SUCCESS; case DEMUX_CAN_CONTROL_PACE: - pb = ( vlc_bool_t* )va_arg( args, vlc_bool_t * ); + pb = ( bool* )va_arg( args, bool * ); *pb = var_GetBool( p_demux, "jack-input-use-vlc-pace" ); return VLC_SUCCESS; @@ -537,7 +553,7 @@ static void Port_finder( demux_t *p_demux ) } } - if( pp_jack_port_output ) free( pp_jack_port_output ); + free( pp_jack_port_output ); p_sys->i_match_ports = i_total_out_ports; }