Ejemplo n.º 1
0
static aout_instance_t *AllocateAout( input_resource_t *p_resource )
{
    aout_instance_t *p_aout;

    if( unlikely(p_resource->b_aout_busy) )
    {
        msg_Dbg( p_resource->p_parent, "creating audio output" );
        return aout_New( p_resource->p_parent );
    }

    p_aout = p_resource->p_aout;
    if( p_aout == NULL )
    {
        msg_Dbg( p_resource->p_parent, "creating audio output" );
        p_aout = aout_New( p_resource->p_parent );
        if( unlikely(p_aout == NULL) )
            return NULL;

        vlc_mutex_lock( &p_resource->lock_hold );
        p_resource->p_aout = p_aout;
        vlc_mutex_unlock( &p_resource->lock_hold );
    }
    else
        msg_Dbg( p_resource->p_parent, "recycling audio output" );

    p_resource->b_aout_busy = true;
    vlc_object_hold( p_aout );
    return p_aout;
}
Ejemplo n.º 2
0
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 )
    {
        msg_Dbg( p_resource->p_parent, "releasing aout" );
        vlc_object_release( p_aout );
        return NULL;
    }
    else
    {
        p_aout = p_resource->p_aout;
        if( !p_aout )
        {
            msg_Dbg( p_resource->p_parent, "creating aout" );
            p_aout = aout_New( p_resource->p_parent );

            vlc_mutex_lock( &p_resource->lock_hold );
            p_resource->p_aout = p_aout;
            vlc_mutex_unlock( &p_resource->lock_hold );
        }
        else
        {
            msg_Dbg( p_resource->p_parent, "reusing aout" );
        }

        if( !p_aout )
            return NULL;
        vlc_object_hold( p_aout );
        return p_aout;
    }
}
Ejemplo n.º 3
0
/* Audio output */
audio_output_t *input_resource_GetAout( input_resource_t *p_resource )
{
    audio_output_t *p_aout;

    vlc_mutex_lock( &p_resource->lock_hold );
    p_aout = p_resource->p_aout;

    if( p_aout == NULL || p_resource->b_aout_busy )
    {
        msg_Dbg( p_resource->p_parent, "creating audio output" );
        vlc_mutex_unlock( &p_resource->lock_hold );

        p_aout = aout_New( p_resource->p_parent );
        if( p_aout == NULL )
            return NULL; /* failed */

        vlc_mutex_lock( &p_resource->lock_hold );
        if( p_resource->p_aout == NULL )
            p_resource->p_aout = p_aout;
    }
    else
        msg_Dbg( p_resource->p_parent, "reusing audio output" );

    if( p_resource->p_aout == p_aout )
    {
        assert( !p_resource->b_aout_busy );
        p_resource->b_aout_busy = true;
    }
    vlc_mutex_unlock( &p_resource->lock_hold );
    return p_aout;
}
Ejemplo n.º 4
0
Archivo: dec.c Proyecto: forthyen/SDesk
aout_input_t * __aout_DecNew( vlc_object_t * p_this,
                              aout_instance_t ** pp_aout,
                              audio_sample_format_t * p_format )
{
    if ( *pp_aout == NULL )
    {
        /* Create an audio output if there is none. */
        *pp_aout = vlc_object_find( p_this, VLC_OBJECT_AOUT, FIND_ANYWHERE );

        if( *pp_aout == NULL )
        {
            msg_Dbg( p_this, "no aout present, spawning one" );

            *pp_aout = aout_New( p_this );
            /* Everything failed, I'm a loser, I just wanna die */
            if( *pp_aout == NULL )
            {
                return NULL;
            }
            vlc_object_attach( *pp_aout, p_this->p_vlc );
        }
        else
        {
            vlc_object_release( *pp_aout );
        }
    }

    return DecNew( p_this, *pp_aout, p_format );
}