# include "config.h"
#endif
+#include <assert.h>
+
#include <vlc_common.h>
#include <vlc_vout.h>
-#include <vlc_osd.h>
+#include <vlc_spu.h>
#include <vlc_aout.h>
#include <vlc_sout.h>
#include "../libvlc.h"
}
static vout_thread_t *DetachVout( input_resource_t *p_resource )
{
+ vlc_assert_locked( &p_resource->lock );
assert( p_resource->i_vout == 0 );
vout_thread_t *p_vout = p_resource->p_vout_free;
p_resource->p_vout_free = NULL;
vout_thread_t *p_vout, video_format_t *p_fmt,
bool b_recycle )
{
+ vlc_assert_locked( &p_resource->lock );
+
if( !p_vout && !p_fmt )
{
if( p_resource->p_vout_free )
}
/* */
- p_vout = vout_Request( p_resource->p_input, p_vout, p_fmt );
+ vout_configuration_t cfg = {
+ .vout = p_vout,
+ .input = VLC_OBJECT(p_resource->p_input),
+ .fmt = p_fmt,
+ };
+ p_vout = vout_Request( p_resource->p_input, &cfg );
if( !p_vout )
return NULL;
{
msg_Dbg( p_resource->p_input, "saving a free vout" );
vout_Flush( p_vout, 1 );
- spu_Control( vout_GetSpu( p_vout ), SPU_CHANNEL_CLEAR, -1 );
-
- p_resource->p_vout_free = p_vout;
+ vout_FlushSubpictureChannel( p_vout, -1 );
+
+ vout_configuration_t cfg = {
+ .vout = p_vout,
+ .input = NULL,
+ .fmt = p_fmt,
+ };
+ p_resource->p_vout_free = vout_Request( p_resource->p_input, &cfg );
}
return NULL;
}
return p_vout;
}
-static void HoldVouts( input_resource_t *p_resource, vout_thread_t ***ppp_vout, int *pi_vout )
+
+static void HoldVouts( input_resource_t *p_resource, vout_thread_t ***ppp_vout,
+ size_t *pi_vout )
{
vout_thread_t **pp_vout;
if( p_resource->i_vout <= 0 )
goto exit;
- pp_vout = calloc( p_resource->i_vout, sizeof(*pp_vout) );
+ pp_vout = malloc( p_resource->i_vout * sizeof(*pp_vout) );
if( !pp_vout )
goto exit;
}
static aout_instance_t *DetachAout( input_resource_t *p_resource )
{
+ vlc_assert_locked( &p_resource->lock );
vlc_mutex_lock( &p_resource->lock_hold );
aout_instance_t *p_aout = p_resource->p_aout;
static aout_instance_t *RequestAout( input_resource_t *p_resource, aout_instance_t *p_aout )
{
+ vlc_assert_locked( &p_resource->lock );
assert( p_resource->p_input );
if( p_aout )
{
return HoldVout( p_resource );
}
-void input_resource_HoldVouts( input_resource_t *p_resource, vout_thread_t ***ppp_vout, int *pi_vout )
+
+void input_resource_HoldVouts( input_resource_t *p_resource, vout_thread_t ***ppp_vout,
+ size_t *pi_vout )
{
HoldVouts( p_resource, ppp_vout, pi_vout );
}
+
void input_resource_TerminateVout( input_resource_t *p_resource )
{
input_resource_RequestVout( p_resource, NULL, NULL, false );