/*****************************************************************************
* Preamble
*****************************************************************************/
+#include <vlc/vlc.h>
+
+#include <stdio.h>
#include <stdlib.h> /* malloc(), free() */
#include <ctype.h> /* tolower() */
-#include <vlc/vlc.h>
-
#ifdef ENABLE_VLM
#include <vlc/intf.h>
#include <vlc_vod.h>
#include <charset.h>
-#define FREE( p ) \
- if( p ) { free( p ); (p) = NULL; }
-
/*****************************************************************************
* Local prototypes.
*****************************************************************************/
char *psz_vlmconf;
/* to be sure to avoid multiple creation */
- var_Create( p_this->p_libvlc, "vlm_mutex", VLC_VAR_MUTEX );
- var_Get( p_this->p_libvlc, "vlm_mutex", &lockval );
+ var_Create( p_this->p_libvlc_global, "vlm_mutex", VLC_VAR_MUTEX );
+ var_Get( p_this->p_libvlc_global, "vlm_mutex", &lockval );
vlc_mutex_lock( lockval.p_address );
if( !(p_vlm = vlc_object_find( p_this, VLC_OBJECT_VLM, FIND_ANYWHERE )) )
return NULL;
}
- vlc_mutex_init( p_this->p_vlc, &p_vlm->lock );
+ vlc_mutex_init( p_this->p_libvlc, &p_vlm->lock );
p_vlm->i_media = 0;
p_vlm->media = NULL;
p_vlm->i_vod = 0;
p_vlm->schedule = NULL;
vlc_object_yield( p_vlm );
- vlc_object_attach( p_vlm, p_this->p_vlc );
+ vlc_object_attach( p_vlm, p_this->p_libvlc );
}
vlc_mutex_unlock( lockval.p_address );
{
vlc_value_t lockval;
- var_Get( p_vlm->p_libvlc, "vlm_mutex", &lockval );
+ var_Get( p_vlm->p_libvlc_global, "vlm_mutex", &lockval );
vlc_mutex_lock( lockval.p_address );
vlc_object_release( p_vlm );
vlc_mutex_destroy( &p_vlm->lock );
while( p_vlm->i_media ) vlm_MediaDelete( p_vlm, p_vlm->media[0], NULL );
- FREE( p_vlm->media );
+ FREENULL( p_vlm->media );
while( p_vlm->i_schedule ) vlm_ScheduleDelete( p_vlm,
p_vlm->schedule[0], NULL );
- FREE( p_vlm->schedule );
+ FREENULL( p_vlm->schedule );
vlc_object_detach( p_vlm );
vlc_object_destroy( p_vlm );
}
success:
- for( i = 0 ; i < i_command ; i++ ) FREE( ppsz_command[i] );
- FREE( ppsz_command );
+ for( i = 0 ; i < i_command ; i++ ) FREENULL( ppsz_command[i] );
+ FREENULL( ppsz_command );
*pp_message = p_message;
return VLC_SUCCESS;
p_message = vlm_MessageNew( ppsz_command[0], "Wrong command syntax" );
error:
- for( i = 0 ; i < i_command ; i++ ) FREE( ppsz_command[i] );
- FREE( ppsz_command );
+ for( i = 0 ; i < i_command ; i++ ) FREENULL( ppsz_command[i] );
+ FREENULL( ppsz_command );
*pp_message = p_message;
return VLC_EGENERIC;
}
}
}
+ else if( !strcmp( psz_command, "rewind" ) )
+ {
+ float f_pos;
+ float f_scale;
+ vlc_value_t val;
+
+ if( psz_args )
+ {
+ f_scale = i18n_atof( psz_args );
+ f_pos = var_GetFloat( p_instance->p_input, "position" );
+ val.f_float = f_pos - (f_scale / 1000.0);
+ if( val.f_float < 0.0 )
+ val.f_float = 0.0;
+ var_Set( p_instance->p_input, "position", val );
+ return VLC_SUCCESS;
+ }
+ }
+ else if( !strcmp( psz_command, "forward" ) )
+ {
+ float f_pos;
+ float f_scale;
+ vlc_value_t val;
+
+ if( psz_args )
+ {
+ f_scale = i18n_atof( psz_args );
+ f_pos = var_GetFloat( p_instance->p_input, "position" );
+ val.f_float = f_pos + (f_scale / 1000.0);
+ if( val.f_float > 1.0 )
+ val.f_float = 1.0;
+ var_Set( p_instance->p_input, "position", val );
+ return VLC_SUCCESS;
+ }
+ }
else if( !strcmp( psz_command, "stop" ) )
{
TAB_REMOVE( media->i_instance, media->instance, p_instance );
break;
}
+ case VOD_MEDIA_REWIND:
+ {
+ double f_scale = (double)va_arg( args, double );
+ char psz_scale[50];
+ lldiv_t div = lldiv( f_scale * 10000000, 10000000 );
+ sprintf( psz_scale, I64Fd".%07u", div.quot, (unsigned int) div.rem );
+ i_ret = vlm_MediaControl( vlm, vlm->media[i], psz_id, "rewind", psz_scale );
+ break;
+ }
+
+ case VOD_MEDIA_FORWARD:
+ {
+ double f_scale = (double)va_arg( args, double );
+ char psz_scale[50];
+ lldiv_t div = lldiv( f_scale * 10000000, 10000000 );
+ sprintf( psz_scale, I64Fd".%07u", div.quot, (unsigned int) div.rem );
+ i_ret = vlm_MediaControl( vlm, vlm->media[i], psz_id, "forward", psz_scale );
+ break;
+ }
+
default:
break;
}
return i_ret;
}
+
/*****************************************************************************
* Manage:
*****************************************************************************/