/************************************************************************** * Playback management **************************************************************************/ mediacontrol_Position* mediacontrol_get_media_position( mediacontrol_Instance *self, const mediacontrol_PositionOrigin an_origin, const mediacontrol_PositionKey a_key, mediacontrol_Exception *exception ) { mediacontrol_Position* retval = NULL; libvlc_exception_t ex; int64_t pos; mediacontrol_exception_init( exception ); libvlc_exception_init( &ex ); retval = ( mediacontrol_Position* )malloc( sizeof( mediacontrol_Position ) ); retval->origin = an_origin; retval->key = a_key; if( an_origin != mediacontrol_AbsolutePosition ) { free( retval ); /* Relative or ModuloPosition make no sense */ RAISE_NULL( mediacontrol_PositionOriginNotSupported, "Only absolute position is valid." ); } /* We are asked for an AbsolutePosition. */ pos = libvlc_media_player_get_time( self->p_media_player, &ex ); if( a_key == mediacontrol_MediaTime ) { retval->value = pos; } else { retval->value = private_mediacontrol_unit_convert( self->p_media_player, mediacontrol_MediaTime, a_key, pos ); } return retval; }
void mediacontrol_display_text( mediacontrol_Instance *self, const char * message, const mediacontrol_Position * begin, const mediacontrol_Position * end, mediacontrol_Exception *exception ) { vout_thread_t *p_vout = NULL; input_thread_t *p_input; libvlc_exception_t ex; libvlc_exception_init( &ex ); mediacontrol_exception_init( exception ); if( !message ) { RAISE_VOID( mediacontrol_InternalException, "Empty text" ); } p_input = libvlc_get_input_thread( self->p_media_player ); if( ! p_input ) { RAISE_VOID( mediacontrol_InternalException, "No input" ); } p_vout = input_GetVout( p_input ); /*FIXME: take care of the next fixme that can use p_input */ vlc_object_release( p_input ); if( ! p_vout ) { RAISE_VOID( mediacontrol_InternalException, "No video output" ); } if( begin->origin == mediacontrol_RelativePosition && begin->value == 0 && end->origin == mediacontrol_RelativePosition ) { mtime_t i_duration = 0; mtime_t i_now = mdate(); i_duration = 1000 * private_mediacontrol_unit_convert( self->p_media_player, end->key, mediacontrol_MediaTime, end->value ); mediacontrol_showtext( p_vout, DEFAULT_CHAN, message, NULL, OSD_ALIGN_BOTTOM | OSD_ALIGN_LEFT, 0, 0, i_now, i_now + i_duration ); } else { mtime_t i_debut, i_fin, i_now; /* FIXME */ /* i_now = input_ClockGetTS( p_input, NULL, 0 ); */ i_now = mdate(); i_debut = private_mediacontrol_position2microsecond( self->p_media_player, ( mediacontrol_Position* ) begin ); i_debut += i_now; i_fin = private_mediacontrol_position2microsecond( self->p_media_player, ( mediacontrol_Position * ) end ); i_fin += i_now; vout_ShowTextAbsolute( p_vout, DEFAULT_CHAN, message, NULL, OSD_ALIGN_BOTTOM | OSD_ALIGN_LEFT, 0, 0, i_debut, i_fin ); } vlc_object_release( p_vout ); }