/* We owned this one */
input_Stop( p_input_thread, b_input_abort );
+
vlc_thread_join( p_input_thread );
+ assert( p_mi->p_input_resource == NULL );
+ assert( p_input_thread->b_dead );
+ /* Store the input resource for future use. */
+ p_mi->p_input_resource = input_DetachResource( p_input_thread );
+
var_Destroy( p_input_thread, "drawable-hwnd" );
var_Destroy( p_input_thread, "drawable-xid" );
var_Destroy( p_input_thread, "drawable-agl" );
p_mi->drawable.nsobject = NULL;
p_mi->p_libvlc_instance = p_libvlc_instance;
p_mi->p_input_thread = NULL;
+ p_mi->p_input_resource = NULL;
p_mi->i_refcount = 1;
vlc_mutex_init( &p_mi->object_lock );
p_mi->p_event_manager = libvlc_event_manager_new( p_mi,
var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int,
"vout-snapshottaken", SnapshotTakenCallback, p_mi );
- /* Realease the input thread */
+ /* Release the input thread */
release_input_thread( p_mi, true );
+ if( p_mi->p_input_resource )
+ {
+ input_resource_Delete( p_mi->p_input_resource );
+ p_mi->p_input_resource = NULL;
+ }
+
libvlc_event_manager_release( p_mi->p_event_manager );
libvlc_media_release( p_mi->p_md );
vlc_mutex_destroy( &p_mi->object_lock );
}
p_mi->p_input_thread = input_Create( p_mi->p_libvlc_instance->p_libvlc_int,
- p_mi->p_md->p_input_item, NULL, NULL );
+ p_mi->p_md->p_input_item, NULL, p_mi->p_input_resource );
if( !p_mi->p_input_thread )
{
return;
}
+ p_mi->p_input_resource = NULL;
p_input_thread = p_mi->p_input_thread;
var_Create( p_input_thread, "drawable-agl", VLC_VAR_INTEGER );
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ float f_position;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if( !p_input_thread )
return -1.0;
- var_Get( p_input_thread, "position", &val );
+ f_position = var_GetFloat( p_input_thread, "position" );
vlc_object_release( p_input_thread );
- return val.f_float;
+ return f_position;
}
void libvlc_media_player_set_chapter(
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ int i_chapter;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if( !p_input_thread )
return -1;
- var_Get( p_input_thread, "chapter", &val );
+ i_chapter = var_GetInteger( p_input_thread, "chapter" );
vlc_object_release( p_input_thread );
- return val.i_int;
+ return i_chapter;
}
int libvlc_media_player_get_chapter_count(
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ int i_title;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if( !p_input_thread )
return -1;
- var_Get( p_input_thread, "title", &val );
+ i_title = var_GetInteger( p_input_thread, "title" );
vlc_object_release( p_input_thread );
- return val.i_int;
+ return i_title;
}
int libvlc_media_player_get_title_count(
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ int i_rate;
bool b_can_rewind;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if( !p_input_thread )
return 0.0; /* rate < 0 indicates rewind */
- var_Get( p_input_thread, "rate", &val );
+ i_rate = var_GetInteger( p_input_thread, "rate" );
b_can_rewind = var_GetBool( p_input_thread, "can-rewind" );
- if( (val.i_int < 0) && !b_can_rewind )
+ if( i_rate < 0 && !b_can_rewind )
{
vlc_object_release( p_input_thread );
libvlc_exception_raise( p_e, "invalid rate" );
}
vlc_object_release( p_input_thread );
- return (float)1000.0f/val.i_int;
+ return (float)1000.0f/i_rate;
}
libvlc_state_t libvlc_media_player_get_state(
{
input_thread_t *p_input_thread;
libvlc_state_t state = libvlc_Ended;
- vlc_value_t val;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if( !p_input_thread )
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ bool b_seekable;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if ( !p_input_thread )
libvlc_exception_clear( p_e );
return false;
}
- var_Get( p_input_thread, "can-seek", &val );
+ b_seekable = var_GetBool( p_input_thread, "can-seek" );
vlc_object_release( p_input_thread );
- return val.b_bool;
+ return b_seekable;
}
/* internal function, used by audio, video */
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ bool b_can_pause;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if ( !p_input_thread )
libvlc_exception_clear( p_e );
return false;
}
- var_Get( p_input_thread, "can-pause", &val );
+ b_can_pause = var_GetBool( p_input_thread, "can-pause" );
vlc_object_release( p_input_thread );
- return val.b_bool;
+ return b_can_pause;
}
void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e )