/* 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" );
{
libvlc_media_player_t * p_mi;
- if( !p_libvlc_instance )
- {
- libvlc_exception_raise( p_e, "invalid libvlc instance" );
- return NULL;
- }
+ assert( p_libvlc_instance );
p_mi = malloc( sizeof(libvlc_media_player_t) );
if( !p_mi )
{
- libvlc_exception_raise( p_e, "not enough memory" );
+ libvlc_exception_raise( p_e );
+ libvlc_printerr( "Not enough memory" );
return NULL;
}
p_mi->p_md = NULL;
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,
vout_thread that generates the event and media_player that re-emits it
with its own event manager
*/
- var_Create( p_libvlc_instance->p_libvlc_int, "vout-snapshottaken",
- VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
- var_AddCallback( p_libvlc_instance->p_libvlc_int, "vout-snapshottaken",
+ var_AddCallback( p_libvlc_instance->p_libvlc_int, "snapshot-file",
SnapshotTakenCallback, p_mi );
return p_mi;
/* Detach Callback from the main libvlc object */
var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int,
- "vout-snapshottaken", SnapshotTakenCallback, p_mi );
+ "snapshot-file", 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 );
if( !p_mi->p_md )
{
- libvlc_exception_raise( p_e, "no associated media descriptor" );
vlc_mutex_unlock( &p_mi->object_lock );
+ libvlc_exception_raise( p_e );
+ libvlc_printerr( "No associated media descriptor" );
return;
}
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 );
return p_mi->drawable.hwnd;
}
-/**************************************************************************
- * Set Drawable
- **************************************************************************/
-void libvlc_media_player_set_drawable( libvlc_media_player_t *p_mi,
- libvlc_drawable_t drawable,
- libvlc_exception_t *p_e )
-{
-#ifdef WIN32
- if (sizeof (HWND) <= sizeof (libvlc_drawable_t))
- p_mi->drawable.hwnd = (HWND)drawable;
- else
- libvlc_exception_raise(p_e, "Operation not supported");
-#elif defined(__APPLE__)
- p_mi->drawable.agl = drawable;
- (void) p_e;
-#else
- p_mi->drawable.xid = drawable;
- (void) p_e;
-#endif
-}
-
-/**************************************************************************
- * Get Drawable
- **************************************************************************/
-libvlc_drawable_t
-libvlc_media_player_get_drawable ( libvlc_media_player_t *p_mi,
- libvlc_exception_t *p_e )
-{
- VLC_UNUSED(p_e);
-
-#ifdef WIN32
- if (sizeof (HWND) <= sizeof (libvlc_drawable_t))
- return (libvlc_drawable_t)p_mi->drawable.hwnd;
- else
- return 0;
-#elif defined(__APPLE__)
- return p_mi->drawable.agl;
-#else
- return p_mi->drawable.xid;
-#endif
-}
-
/**************************************************************************
* Getters for stream information
**************************************************************************/
if( (rate < 0.0) && !b_can_rewind )
{
vlc_object_release( p_input_thread );
- libvlc_exception_raise( p_e, "Rate value is invalid" );
+ libvlc_exception_raise( p_e );
+ libvlc_printerr( "Invalid playback rate" );
return;
}
if( i_rate < 0 && !b_can_rewind )
{
vlc_object_release( p_input_thread );
- libvlc_exception_raise( p_e, "invalid rate" );
return 0.0;
}
vlc_object_release( p_input_thread );
malloc( sizeof( libvlc_track_description_t ) );
if ( !p_track_description )
{
- libvlc_exception_raise( p_e, "not enough memory" );
+ libvlc_exception_raise( p_e );
+ libvlc_printerr( "Not enough memory" );
goto end;
}
p_actual = p_track_description;
if ( !p_actual )
{
libvlc_track_description_release( p_track_description );
- libvlc_exception_raise( p_e, "not enough memory" );
+ libvlc_exception_raise( p_e );
+ libvlc_printerr( "Not enough memory" );
goto end;
}
}
vlc_object_release( p_input_thread );
}
else
- libvlc_exception_raise( p_e, "Input thread is NULL" );
+ {
+ libvlc_exception_raise( p_e );
+ libvlc_printerr( "No active input" );
+ }
}