Commit cc3200cc authored by Pierre Ynard's avatar Pierre Ynard

vod: use time instead of position for seek requests

RTSP uses NPT in seconds, so don't convert for nothing...
parent 74d18c46
...@@ -214,6 +214,7 @@ typedef struct ...@@ -214,6 +214,7 @@ typedef struct
vod_media_t *p_media; vod_media_t *p_media;
char *psz_session; char *psz_session;
char *psz_arg; char *psz_arg;
int64_t i_arg;
double f_arg; double f_arg;
} rtsp_cmd_t; } rtsp_cmd_t;
...@@ -224,7 +225,8 @@ static int MediaAddES( vod_t *, vod_media_t *, es_format_t * ); ...@@ -224,7 +225,8 @@ static int MediaAddES( vod_t *, vod_media_t *, es_format_t * );
static void MediaDelES( vod_t *, vod_media_t *, es_format_t * ); static void MediaDelES( vod_t *, vod_media_t *, es_format_t * );
static void* CommandThread( vlc_object_t *p_this ); static void* CommandThread( vlc_object_t *p_this );
static void CommandPush( vod_t *, rtsp_cmd_type_t, vod_media_t *, const char *psz_session, static void CommandPush( vod_t *, rtsp_cmd_type_t, vod_media_t *,
const char *psz_session, int64_t i_arg,
double f_arg, const char *psz_arg ); double f_arg, const char *psz_arg );
static rtsp_client_t *RtspClientNew( vod_media_t *, char * ); static rtsp_client_t *RtspClientNew( vod_media_t *, char * );
...@@ -332,7 +334,7 @@ static void Close( vlc_object_t * p_this ) ...@@ -332,7 +334,7 @@ static void Close( vlc_object_t * p_this )
/* Stop command thread */ /* Stop command thread */
vlc_object_kill( p_vod ); vlc_object_kill( p_vod );
CommandPush( p_vod, RTSP_CMD_TYPE_NONE, NULL, NULL, 0.0, NULL ); CommandPush( p_vod, RTSP_CMD_TYPE_NONE, NULL, NULL, 0, 0.0, NULL );
vlc_thread_join( p_vod ); vlc_thread_join( p_vod );
while( block_FifoCount( p_sys->p_fifo_cmd ) > 0 ) while( block_FifoCount( p_sys->p_fifo_cmd ) > 0 )
...@@ -444,13 +446,13 @@ static vod_media_t *MediaNew( vod_t *p_vod, const char *psz_name, ...@@ -444,13 +446,13 @@ static vod_media_t *MediaNew( vod_t *p_vod, const char *psz_name,
} }
vlc_mutex_unlock( &p_item->lock ); vlc_mutex_unlock( &p_item->lock );
CommandPush( p_vod, RTSP_CMD_TYPE_ADD, p_media, NULL, 0.0, NULL ); CommandPush( p_vod, RTSP_CMD_TYPE_ADD, p_media, NULL, 0, 0.0, NULL );
return p_media; return p_media;
} }
static void MediaAskDel ( vod_t *p_vod, vod_media_t *p_media ) static void MediaAskDel ( vod_t *p_vod, vod_media_t *p_media )
{ {
CommandPush( p_vod, RTSP_CMD_TYPE_DEL, p_media, NULL, 0.0, NULL ); CommandPush( p_vod, RTSP_CMD_TYPE_DEL, p_media, NULL, 0, 0.0, NULL );
} }
static void MediaDel( vod_t *p_vod, vod_media_t *p_media ) static void MediaDel( vod_t *p_vod, vod_media_t *p_media )
...@@ -752,7 +754,7 @@ static void MediaDelES( vod_t *p_vod, vod_media_t *p_media, es_format_t *p_fmt) ...@@ -752,7 +754,7 @@ static void MediaDelES( vod_t *p_vod, vod_media_t *p_media, es_format_t *p_fmt)
free( p_es ); free( p_es );
} }
static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_media, const char *psz_session, static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_media, const char *psz_session, int64_t i_arg,
double f_arg, const char *psz_arg ) double f_arg, const char *psz_arg )
{ {
rtsp_cmd_t cmd; rtsp_cmd_t cmd;
...@@ -765,6 +767,7 @@ static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_me ...@@ -765,6 +767,7 @@ static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_me
cmd.i_media_id = p_media->id; cmd.i_media_id = p_media->id;
if( psz_session ) if( psz_session )
cmd.psz_session = strdup(psz_session); cmd.psz_session = strdup(psz_session);
cmd.i_arg = i_arg;
cmd.f_arg = f_arg; cmd.f_arg = f_arg;
if( psz_arg ) if( psz_arg )
cmd.psz_arg = strdup(psz_arg); cmd.psz_arg = strdup(psz_arg);
...@@ -838,7 +841,7 @@ static void* CommandThread( vlc_object_t *p_this ) ...@@ -838,7 +841,7 @@ static void* CommandThread( vlc_object_t *p_this )
case RTSP_CMD_TYPE_SEEK: case RTSP_CMD_TYPE_SEEK:
vod_MediaControl( p_vod, p_media, cmd.psz_session, vod_MediaControl( p_vod, p_media, cmd.psz_session,
VOD_MEDIA_SEEK, cmd.f_arg ); VOD_MEDIA_SEEK, cmd.i_arg );
break; break;
case RTSP_CMD_TYPE_REWIND: case RTSP_CMD_TYPE_REWIND:
...@@ -916,7 +919,7 @@ static void RtspClientDel( vod_media_t *p_media, rtsp_client_t *p_rtsp ) ...@@ -916,7 +919,7 @@ static void RtspClientDel( vod_media_t *p_media, rtsp_client_t *p_rtsp )
} }
static float ParseNPT (const char *str) static int64_t ParseNPT (const char *str)
{ {
locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL); locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL);
locale_t oldloc = uselocale (loc); locale_t oldloc = uselocale (loc);
...@@ -934,7 +937,7 @@ static float ParseNPT (const char *str) ...@@ -934,7 +937,7 @@ static float ParseNPT (const char *str)
uselocale (oldloc); uselocale (oldloc);
freelocale (loc); freelocale (loc);
} }
return sec; return sec * CLOCK_FREQ;
} }
...@@ -1108,11 +1111,10 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1108,11 +1111,10 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
psz_position = strstr( psz_position, "npt=" ); psz_position = strstr( psz_position, "npt=" );
if( psz_position && !psz_scale ) if( psz_position && !psz_scale )
{ {
double f_pos = ParseNPT (psz_position + 4); int64_t i_time = ParseNPT (psz_position + 4);
msg_Dbg( p_vod, "seeking request: %s", psz_position ); msg_Dbg( p_vod, "seeking request: %s", psz_position );
f_pos /= ((double)(p_media->i_length)) / CLOCK_FREQ / 100;
CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media, CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media,
psz_session, f_pos, NULL ); psz_session, i_time, 0.0, NULL );
} }
else if( psz_scale ) else if( psz_scale )
{ {
...@@ -1127,21 +1129,21 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1127,21 +1129,21 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
{ {
msg_Dbg( p_vod, "rewind request: %s", psz_scale ); msg_Dbg( p_vod, "rewind request: %s", psz_scale );
CommandPush( p_vod, RTSP_CMD_TYPE_REWIND, p_media, CommandPush( p_vod, RTSP_CMD_TYPE_REWIND, p_media,
psz_session, f_scale, NULL ); psz_session, 0, f_scale, NULL );
} }
else if(psz_scale[0] != '1' ) /* fast-forward */ else if(psz_scale[0] != '1' ) /* fast-forward */
{ {
msg_Dbg( p_vod, "fastforward request: %s", msg_Dbg( p_vod, "fastforward request: %s",
psz_scale ); psz_scale );
CommandPush( p_vod, RTSP_CMD_TYPE_FORWARD, p_media, CommandPush( p_vod, RTSP_CMD_TYPE_FORWARD, p_media,
psz_session, f_scale, NULL ); psz_session, 0, f_scale, NULL );
} }
if( p_rtsp->b_paused ) if( p_rtsp->b_paused )
{ {
p_rtsp->b_paused = false; p_rtsp->b_paused = false;
CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media, CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media,
psz_session, 0, NULL ); psz_session, 0, 0.0, NULL );
} }
} }
break; break;
...@@ -1151,7 +1153,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1151,7 +1153,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
if( p_rtsp->b_playing && p_rtsp->b_paused ) if( p_rtsp->b_playing && p_rtsp->b_paused )
{ {
CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media, CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media,
psz_session, 0, NULL ); psz_session, 0, 0.0, NULL );
p_rtsp->b_paused = false; p_rtsp->b_paused = false;
break; break;
} }
...@@ -1196,7 +1198,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1196,7 +1198,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
} }
CommandPush( p_vod, RTSP_CMD_TYPE_PLAY, p_media, psz_session, CommandPush( p_vod, RTSP_CMD_TYPE_PLAY, p_media, psz_session,
0, psz_output ); 0, 0.0, psz_output );
free( psz_output ); free( psz_output );
break; break;
} }
...@@ -1234,7 +1236,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1234,7 +1236,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
if( !p_rtsp->b_paused ) if( !p_rtsp->b_paused )
{ {
CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media, psz_session, CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media, psz_session,
0, NULL ); 0, 0.0, NULL );
p_rtsp->b_paused = true; p_rtsp->b_paused = true;
} }
...@@ -1256,7 +1258,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1256,7 +1258,7 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
if( !p_rtsp ) break; if( !p_rtsp ) break;
CommandPush( p_vod, RTSP_CMD_TYPE_STOP, p_media, psz_session, CommandPush( p_vod, RTSP_CMD_TYPE_STOP, p_media, psz_session,
0, NULL ); 0, 0.0, NULL );
RtspClientDel( p_media, p_rtsp ); RtspClientDel( p_media, p_rtsp );
break; break;
...@@ -1441,11 +1443,10 @@ static int RtspCallbackES( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1441,11 +1443,10 @@ static int RtspCallbackES( httpd_callback_sys_t *p_args, httpd_client_t *cl,
if( psz_position ) psz_position = strstr( psz_position, "npt=" ); if( psz_position ) psz_position = strstr( psz_position, "npt=" );
if( psz_position ) if( psz_position )
{ {
double f_pos = ParseNPT (psz_position + 4); int64_t i_time = ParseNPT (psz_position + 4);
msg_Dbg( p_vod, "seeking request: %s", psz_position ); msg_Dbg( p_vod, "seeking request: %s", psz_position );
f_pos /= ((double)(p_media->i_length)) / CLOCK_FREQ / 100;
CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media, CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media,
psz_session, f_pos, NULL ); psz_session, i_time, 0.0, NULL );
} }
if( !psz_playnow ) if( !psz_playnow )
...@@ -1479,7 +1480,7 @@ static int RtspCallbackES( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1479,7 +1480,7 @@ static int RtspCallbackES( httpd_callback_sys_t *p_args, httpd_client_t *cl,
if( !p_rtsp->i_es ) if( !p_rtsp->i_es )
{ {
CommandPush( p_vod, RTSP_CMD_TYPE_STOP, p_media, psz_session, CommandPush( p_vod, RTSP_CMD_TYPE_STOP, p_media, psz_session,
0, NULL ); 0, 0.0, NULL );
RtspClientDel( p_media, p_rtsp ); RtspClientDel( p_media, p_rtsp );
} }
break; break;
...@@ -1496,7 +1497,7 @@ static int RtspCallbackES( httpd_callback_sys_t *p_args, httpd_client_t *cl, ...@@ -1496,7 +1497,7 @@ static int RtspCallbackES( httpd_callback_sys_t *p_args, httpd_client_t *cl,
if( !p_rtsp->b_paused ) if( !p_rtsp->b_paused )
{ {
CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media, psz_session, CommandPush( p_vod, RTSP_CMD_TYPE_PAUSE, p_media, psz_session,
0, NULL ); 0, 0.0, NULL );
p_rtsp->b_paused = true; p_rtsp->b_paused = true;
} }
......
...@@ -93,7 +93,7 @@ void CloseVoD( vlc_object_t * ); ...@@ -93,7 +93,7 @@ void CloseVoD( vlc_object_t * );
void vod_start(vod_media_t *p_media, const char *psz_session); void vod_start(vod_media_t *p_media, const char *psz_session);
void vod_toggle_pause(vod_media_t *p_media, const char *psz_session); void vod_toggle_pause(vod_media_t *p_media, const char *psz_session);
void vod_stop(vod_media_t *p_media, const char *psz_session); void vod_stop(vod_media_t *p_media, const char *psz_session);
void vod_seek(vod_media_t *p_media, const char *psz_session, float time); void vod_seek(vod_media_t *p_media, const char *psz_session, int64_t time);
const char *vod_get_mux(const vod_media_t *p_media); const char *vod_get_mux(const vod_media_t *p_media);
int vod_init_id(vod_media_t *p_media, const char *psz_session, int es_id, int vod_init_id(vod_media_t *p_media, const char *psz_session, int es_id,
......
...@@ -478,7 +478,7 @@ static inline const char *parameter_next( const char *str ) ...@@ -478,7 +478,7 @@ static inline const char *parameter_next( const char *str )
} }
static float ParseNPT (const char *str) static int64_t ParseNPT (const char *str)
{ {
locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL); locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL);
locale_t oldloc = uselocale (loc); locale_t oldloc = uselocale (loc);
...@@ -496,7 +496,7 @@ static float ParseNPT (const char *str) ...@@ -496,7 +496,7 @@ static float ParseNPT (const char *str)
uselocale (oldloc); uselocale (oldloc);
freelocale (loc); freelocale (loc);
} }
return sec; return sec * CLOCK_FREQ;
} }
...@@ -897,7 +897,7 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id, ...@@ -897,7 +897,7 @@ static int RtspHandler( rtsp_stream_t *rtsp, rtsp_stream_id_t *id,
{ {
if (range != NULL) if (range != NULL)
{ {
float time = ParseNPT (range + 4); int64_t time = ParseNPT (range + 4);
vod_seek(rtsp->vod_media, psz_session, time); vod_seek(rtsp->vod_media, psz_session, time);
} }
if (ses->paused) if (ses->paused)
......
...@@ -116,7 +116,7 @@ typedef struct ...@@ -116,7 +116,7 @@ typedef struct
vod_media_t *p_media; vod_media_t *p_media;
char *psz_session; char *psz_session;
char *psz_arg; char *psz_arg;
double f_arg; int64_t i_arg;
} rtsp_cmd_t; } rtsp_cmd_t;
static vod_media_t *MediaNew( vod_t *, const char *, input_item_t * ); static vod_media_t *MediaNew( vod_t *, const char *, input_item_t * );
...@@ -125,7 +125,7 @@ static void MediaAskDel ( vod_t *, vod_media_t * ); ...@@ -125,7 +125,7 @@ static void MediaAskDel ( vod_t *, vod_media_t * );
static void* CommandThread( vlc_object_t *p_this ); static void* CommandThread( vlc_object_t *p_this );
static void CommandPush( vod_t *, rtsp_cmd_type_t, vod_media_t *, const char *psz_session, static void CommandPush( vod_t *, rtsp_cmd_type_t, vod_media_t *, const char *psz_session,
double f_arg, const char *psz_arg ); int64_t i_arg, const char *psz_arg );
/***************************************************************************** /*****************************************************************************
* Open: Starts the RTSP server module * Open: Starts the RTSP server module
...@@ -194,7 +194,7 @@ void CloseVoD( vlc_object_t * p_this ) ...@@ -194,7 +194,7 @@ void CloseVoD( vlc_object_t * p_this )
/* Stop command thread */ /* Stop command thread */
vlc_object_kill( p_vod ); vlc_object_kill( p_vod );
CommandPush( p_vod, RTSP_CMD_TYPE_NONE, NULL, NULL, 0.0, NULL ); CommandPush( p_vod, RTSP_CMD_TYPE_NONE, NULL, NULL, 0, NULL );
vlc_thread_join( p_vod ); vlc_thread_join( p_vod );
while( block_FifoCount( p_sys->p_fifo_cmd ) > 0 ) while( block_FifoCount( p_sys->p_fifo_cmd ) > 0 )
...@@ -310,7 +310,7 @@ static vod_media_t *MediaNew( vod_t *p_vod, const char *psz_name, ...@@ -310,7 +310,7 @@ static vod_media_t *MediaNew( vod_t *p_vod, const char *psz_name,
msg_Dbg(p_vod, "adding media '%s', id %i", psz_name, p_media->id); msg_Dbg(p_vod, "adding media '%s', id %i", psz_name, p_media->id);
CommandPush( p_vod, RTSP_CMD_TYPE_ADD, p_media, NULL, 0.0, NULL ); CommandPush( p_vod, RTSP_CMD_TYPE_ADD, p_media, NULL, 0, NULL );
return p_media; return p_media;
error: error:
...@@ -321,7 +321,7 @@ error: ...@@ -321,7 +321,7 @@ error:
static void MediaAskDel ( vod_t *p_vod, vod_media_t *p_media ) static void MediaAskDel ( vod_t *p_vod, vod_media_t *p_media )
{ {
msg_Dbg( p_vod, "deleting media id %i", p_media->id ); msg_Dbg( p_vod, "deleting media id %i", p_media->id );
CommandPush( p_vod, RTSP_CMD_TYPE_DEL, p_media, NULL, 0.0, NULL ); CommandPush( p_vod, RTSP_CMD_TYPE_DEL, p_media, NULL, 0, NULL );
} }
static void MediaDel( vod_t *p_vod, vod_media_t *p_media ) static void MediaDel( vod_t *p_vod, vod_media_t *p_media )
...@@ -354,7 +354,7 @@ static void MediaDel( vod_t *p_vod, vod_media_t *p_media ) ...@@ -354,7 +354,7 @@ static void MediaDel( vod_t *p_vod, vod_media_t *p_media )
} }
static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_media, const char *psz_session, static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_media, const char *psz_session,
double f_arg, const char *psz_arg ) int64_t i_arg, const char *psz_arg )
{ {
rtsp_cmd_t cmd; rtsp_cmd_t cmd;
block_t *p_cmd; block_t *p_cmd;
...@@ -366,7 +366,7 @@ static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_me ...@@ -366,7 +366,7 @@ static void CommandPush( vod_t *p_vod, rtsp_cmd_type_t i_type, vod_media_t *p_me
cmd.i_media_id = p_media->id; cmd.i_media_id = p_media->id;
if( psz_session ) if( psz_session )
cmd.psz_session = strdup(psz_session); cmd.psz_session = strdup(psz_session);
cmd.f_arg = f_arg; cmd.i_arg = i_arg;
if( psz_arg ) if( psz_arg )
cmd.psz_arg = strdup(psz_arg); cmd.psz_arg = strdup(psz_arg);
...@@ -439,7 +439,7 @@ static void* CommandThread( vlc_object_t *p_this ) ...@@ -439,7 +439,7 @@ static void* CommandThread( vlc_object_t *p_this )
case RTSP_CMD_TYPE_SEEK: case RTSP_CMD_TYPE_SEEK:
vod_MediaControl( p_vod, p_media, cmd.psz_session, vod_MediaControl( p_vod, p_media, cmd.psz_session,
VOD_MEDIA_SEEK, cmd.f_arg ); VOD_MEDIA_SEEK, cmd.i_arg );
break; break;
#if 0 #if 0
...@@ -545,7 +545,7 @@ void vod_start(vod_media_t *p_media, const char *psz_session) ...@@ -545,7 +545,7 @@ void vod_start(vod_media_t *p_media, const char *psz_session)
{ {
/* We're passing the #vod{} sout chain here */ /* We're passing the #vod{} sout chain here */
CommandPush(p_media->p_vod, RTSP_CMD_TYPE_PLAY, p_media, CommandPush(p_media->p_vod, RTSP_CMD_TYPE_PLAY, p_media,
psz_session, 0.0, "vod"); psz_session, 0, "vod");
} }
/* FIXME: this sucks, RTSP doesn't really toggle the pause state, it /* FIXME: this sucks, RTSP doesn't really toggle the pause state, it
...@@ -553,21 +553,19 @@ void vod_start(vod_media_t *p_media, const char *psz_session) ...@@ -553,21 +553,19 @@ void vod_start(vod_media_t *p_media, const char *psz_session)
void vod_toggle_pause(vod_media_t *p_media, const char *psz_session) void vod_toggle_pause(vod_media_t *p_media, const char *psz_session)
{ {
CommandPush(p_media->p_vod, RTSP_CMD_TYPE_PAUSE, p_media, CommandPush(p_media->p_vod, RTSP_CMD_TYPE_PAUSE, p_media,
psz_session, 0.0, NULL); psz_session, 0, NULL);
} }
void vod_stop(vod_media_t *p_media, const char *psz_session) void vod_stop(vod_media_t *p_media, const char *psz_session)
{ {
CommandPush(p_media->p_vod, RTSP_CMD_TYPE_STOP, p_media, CommandPush(p_media->p_vod, RTSP_CMD_TYPE_STOP, p_media,
psz_session, 0.0, NULL); psz_session, 0, NULL);
} }
void vod_seek(vod_media_t *p_media, const char *psz_session, float time) void vod_seek(vod_media_t *p_media, const char *psz_session, int64_t time)
{ {
/* FIXME: why do we even bother converting from time to position??? */
double position = time / (((double)(p_media->i_length)) / CLOCK_FREQ / 100);
CommandPush(p_media->p_vod, RTSP_CMD_TYPE_SEEK, p_media, CommandPush(p_media->p_vod, RTSP_CMD_TYPE_SEEK, p_media,
psz_session, position, NULL); psz_session, time, NULL);
} }
......
...@@ -325,8 +325,8 @@ static int vlm_MediaVodControl( void *p_private, vod_media_t *p_vod_media, ...@@ -325,8 +325,8 @@ static int vlm_MediaVodControl( void *p_private, vod_media_t *p_vod_media,
case VOD_MEDIA_SEEK: case VOD_MEDIA_SEEK:
{ {
double d_position = (double)va_arg( args, double ); int64_t i_time = (int64_t)va_arg( args, int64_t );
i_ret = vlm_ControlInternal( vlm, VLM_SET_MEDIA_INSTANCE_POSITION, id, psz_id, d_position/100.0 ); i_ret = vlm_ControlInternal( vlm, VLM_SET_MEDIA_INSTANCE_TIME, id, psz_id, i_time );
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment