* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#include "libvlc_internal.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <assert.h>
#include <vlc/libvlc.h>
+#include <vlc/libvlc_media.h>
+#include <vlc/libvlc_events.h>
+
#include <vlc_demux.h>
#include <vlc_input.h>
#include <vlc_vout.h>
+
#include "libvlc.h"
-#include <assert.h>
+
+#include "libvlc_internal.h"
+#include "media_internal.h" // libvlc_media_set_state()
+#include "media_player_internal.h"
static int
input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd,
static int SnapshotTakenCallback( vlc_object_t *p_this, char const *psz_cmd,
vlc_value_t oldval, vlc_value_t newval, void *p_data );
-static const libvlc_state_t vlc_to_libvlc_state_array[] =
-{
- [INIT_S] = libvlc_NothingSpecial,
- [OPENING_S] = libvlc_Opening,
- [PLAYING_S] = libvlc_Playing,
- [PAUSE_S] = libvlc_Paused,
- [END_S] = libvlc_Ended,
- [ERROR_S] = libvlc_Error,
-};
-
-static inline libvlc_state_t vlc_to_libvlc_state( int vlc_state )
-{
- if( vlc_state < 0 || vlc_state > 6 )
- return libvlc_Ended;
-
- return vlc_to_libvlc_state_array[vlc_state];
-}
+static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi );
/*
* Release the associated input thread.
libvlc_media_set_state( p_mi->p_md, libvlc_state, NULL );
libvlc_event_send( p_mi->p_event_manager, &event );
}
+ else if( newval.i_int == INPUT_EVENT_ABORT )
+ {
+ libvlc_state_t libvlc_state = libvlc_Stopped;
+ event.type = libvlc_MediaPlayerStopped;
+
+ libvlc_media_set_state( p_mi->p_md, libvlc_state, NULL );
+ libvlc_event_send( p_mi->p_event_manager, &event );
+ }
else if( newval.i_int == INPUT_EVENT_POSITION )
{
if( var_GetInteger( p_input, "state" ) != PLAYING_S )
p_mi = malloc( sizeof(libvlc_media_player_t) );
if( !p_mi )
{
- libvlc_exception_raise( p_e, "Not enough memory" );
+ libvlc_exception_raise( p_e, "not enough memory" );
return NULL;
}
p_mi->p_md = NULL;
**************************************************************************/
static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi )
{
- input_thread_t *p_input_thread;
- libvlc_exception_t p_e;
-
assert( p_mi );
/* Detach Callback from the main libvlc object */
var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int,
"vout-snapshottaken", SnapshotTakenCallback, p_mi );
- libvlc_exception_init( &p_e );
- p_input_thread = libvlc_get_input_thread( p_mi, &p_e );
-
- if( libvlc_exception_raised( &p_e ) )
- /* no need to worry about no input thread */
- libvlc_exception_clear( &p_e );
- else
- release_input_thread( p_mi, true );
+ /* Realease the input thread */
+ release_input_thread( p_mi, true );
libvlc_event_manager_release( p_mi->p_event_manager );
libvlc_media_release( p_mi->p_md );
libvlc_media_player_t *p_mi,
libvlc_exception_t *p_e )
{
+ libvlc_media_t *p_m;
VLC_UNUSED(p_e);
- if( !p_mi->p_md )
- return NULL;
-
- libvlc_media_retain( p_mi->p_md );
+ vlc_mutex_lock( &p_mi->object_lock );
+ p_m = p_mi->p_md;
+ if( p_m )
+ libvlc_media_retain( p_mi->p_md );
+ vlc_mutex_unlock( &p_mi->object_lock );
return p_mi->p_md;
}
var_Create( p_input_thread, "drawable-hwnd", VLC_VAR_ADDRESS );
if( p_mi->drawable.hwnd != NULL )
- {
- vlc_value_t val = { .p_address = p_mi->drawable.hwnd };
- var_Set( p_input_thread, "drawable-hwnd", val );
- }
+ var_SetAddress( p_input_thread, "drawable-hwnd", p_mi->drawable.hwnd );
- var_Create( p_input_thread, "drawable-nsobject", VLC_VAR_ADDRESS );
+ var_Create( p_input_thread, "drawable-nsobject", VLC_VAR_ADDRESS );
if( p_mi->drawable.nsobject != NULL )
- {
- vlc_value_t val = { .p_address = p_mi->drawable.nsobject };
- var_Set( p_input_thread, "drawable-nsobject", val );
- }
-
+ var_SetAddress( p_input_thread, "drawable-nsobject", p_mi->drawable.nsobject );
+
var_AddCallback( p_input_thread, "can-seek", input_seekable_changed, p_mi );
var_AddCallback( p_input_thread, "can-pause", input_pausable_changed, p_mi );
var_AddCallback( p_input_thread, "intf-event", input_event_changed, p_mi );
{
/* Send a stop notification event only if we are in playing,
* buffering or paused states */
- libvlc_media_set_state( p_mi->p_md, libvlc_Ended, p_e );
+ libvlc_media_set_state( p_mi->p_md, libvlc_Stopped, p_e );
/* Construct and send the event */
libvlc_event_t event;
/**************************************************************************
* get_nsobject
**************************************************************************/
-uint32_t libvlc_media_player_get_nsobject( libvlc_media_player_t *p_mi )
+void * libvlc_media_player_get_nsobject( libvlc_media_player_t *p_mi )
{
return p_mi->drawable.nsobject;
}
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ libvlc_time_t i_time;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e);
if( !p_input_thread )
return -1;
- var_Get( p_input_thread, "length", &val );
+ i_time = var_GetTime( p_input_thread, "length" );
vlc_object_release( p_input_thread );
- return (val.i_time+500LL)/1000LL;
+ return (i_time+500LL)/1000LL;
}
libvlc_time_t libvlc_media_player_get_time(
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
- vlc_value_t val;
+ libvlc_time_t i_time;
p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
if( !p_input_thread )
return -1;
- var_Get( p_input_thread , "time", &val );
+ i_time = var_GetTime( p_input_thread , "time" );
vlc_object_release( p_input_thread );
- return (val.i_time+500LL)/1000LL;
+ return (i_time+500LL)/1000LL;
}
void libvlc_media_player_set_time(
libvlc_media_player_t *p_mi,
- libvlc_time_t time,
+ libvlc_time_t i_time,
libvlc_exception_t *p_e )
{
input_thread_t *p_input_thread;
if( !p_input_thread )
return;
- var_SetTime( p_input_thread, "time", time*1000LL );
+ var_SetTime( p_input_thread, "time", i_time*1000LL );
vlc_object_release( p_input_thread );
}
return state;
}
- var_Get( p_input_thread, "state", &val );
- state = vlc_to_libvlc_state(val.i_int);
-
+ state = libvlc_media_get_state( p_mi->p_md, NULL );
if( state == libvlc_Playing )
{
float caching;
malloc( sizeof( libvlc_track_description_t ) );
if ( !p_track_description )
{
- libvlc_exception_raise( p_e, "no enough memory" );
+ libvlc_exception_raise( p_e, "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, "no enough memory" );
+ libvlc_exception_raise( p_e, "not enough memory" );
goto end;
}
}