Changeset 6f3e4d56cb72a5f845bd28edea7104bdc6474b8a
- Timestamp:
- 12/07/06 20:48:21
(2 years ago)
- Author:
- Jean-Paul Saman <jpsaman@videolan.org>
- git-committer:
- Jean-Paul Saman <jpsaman@videolan.org> 1152730101 +0000
- git-parent:
[c69f698af16d3398873d5cbd8ee520dc794408b4]
- git-author:
- Jean-Paul Saman <jpsaman@videolan.org> 1152730101 +0000
- Message:
RTSP rewind and fastforward support (Scale option). Almost entirely rewritten a patch from K. Staring <Qdk _at_ quickdekay dot net>.
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r85a0c75 |
r6f3e4d5 |
|
| 86 | 86 | kty0ne - WinAmp 5 skin for VLC |
|---|
| 87 | 87 | Kevin H. Patterson <kevpatt at khptech dot com> - Theora framesize calculation patch by Kevin H. Patterson (kevpatt at khptech dot com |
|---|
| | 88 | K. Staring <qdk at quickdekay dot net> - RTSP rewind and fast-forward support |
|---|
| 88 | 89 | Laurent Jonqueres <laurent_jonqueres at yahoo.fr> - Occitan localization |
|---|
| 89 | 90 | Laurent Mutricy <laurent.mutricy at ecl2005 dot ec-lyon dot fr> - HTTP interface fixes |
|---|
| r2cb472d |
r6f3e4d5 |
|
| 64 | 64 | VOD_MEDIA_STOP, /* arg1= double res=can fail */ |
|---|
| 65 | 65 | VOD_MEDIA_SEEK, /* arg1= double * res= */ |
|---|
| | 66 | VOD_MEDIA_REWIND, /* arg1= double * res= */ |
|---|
| | 67 | VOD_MEDIA_FORWARD, /* arg1= double * res= */ |
|---|
| 66 | 68 | }; |
|---|
| 67 | 69 | |
|---|
| r05b21e9 |
r6f3e4d5 |
|
| 786 | 786 | case HTTPD_MSG_PLAY: |
|---|
| 787 | 787 | { |
|---|
| 788 | | char *psz_output, *psz_position, ip[NI_MAXNUMERICHOST]; |
|---|
| | 788 | char *psz_output, ip[NI_MAXNUMERICHOST]; |
|---|
| 789 | 789 | int i, i_port_audio = 0, i_port_video = 0; |
|---|
| 790 | 790 | |
|---|
| … | … | |
| 808 | 808 | { |
|---|
| 809 | 809 | char *psz_position = httpd_MsgGet( query, "Range" ); |
|---|
| | 810 | char *psz_scale = httpd_MsgGet( query, "Scale" ); |
|---|
| 810 | 811 | if( psz_position ) psz_position = strstr( psz_position, "npt=" ); |
|---|
| 811 | | if( psz_position ) |
|---|
| | 812 | if( psz_position && !psz_scale ) |
|---|
| 812 | 813 | { |
|---|
| 813 | 814 | double f_pos; |
|---|
| … | … | |
| 815 | 816 | |
|---|
| 816 | 817 | msg_Dbg( p_vod, "seeking request: %s", psz_position ); |
|---|
| 817 | | |
|---|
| 818 | 818 | psz_position += 4; |
|---|
| 819 | 819 | /* FIXME: npt= is not necessarily formatted as a float */ |
|---|
| … | … | |
| 824 | 824 | vod_MediaControl( p_vod, p_media, psz_session, |
|---|
| 825 | 825 | VOD_MEDIA_SEEK, f_pos ); |
|---|
| | 826 | } |
|---|
| | 827 | break; |
|---|
| | 828 | } |
|---|
| | 829 | if( psz_scale ) |
|---|
| | 830 | { |
|---|
| | 831 | double f_scale = 0.0; |
|---|
| | 832 | char *end; |
|---|
| | 833 | |
|---|
| | 834 | f_scale = us_strtod( psz_scale, &end ); |
|---|
| | 835 | if( end > psz_scale ) |
|---|
| | 836 | { |
|---|
| | 837 | f_scale = (f_scale * 30.0); |
|---|
| | 838 | if( psz_scale[0] == '-' ) /* rewind */ |
|---|
| | 839 | { |
|---|
| | 840 | msg_Dbg( p_vod, "rewind request: %s", psz_scale ); |
|---|
| | 841 | vod_MediaControl( p_vod, p_media, psz_session, |
|---|
| | 842 | VOD_MEDIA_REWIND, f_scale ); |
|---|
| | 843 | } |
|---|
| | 844 | else if(psz_scale[0] != '1' ) /* fast-forward */ |
|---|
| | 845 | { |
|---|
| | 846 | msg_Dbg( p_vod, "fastforward request: %s", psz_scale ); |
|---|
| | 847 | vod_MediaControl( p_vod, p_media, psz_session, |
|---|
| | 848 | VOD_MEDIA_FORWARD, f_scale ); |
|---|
| | 849 | } |
|---|
| | 850 | |
|---|
| | 851 | if( p_rtsp->b_paused == VLC_TRUE ) |
|---|
| | 852 | { |
|---|
| | 853 | p_rtsp->b_paused = VLC_FALSE; |
|---|
| | 854 | vod_MediaControl( p_vod, p_media, psz_session, |
|---|
| | 855 | VOD_MEDIA_PAUSE, psz_output ); |
|---|
| | 856 | } |
|---|
| 826 | 857 | } |
|---|
| 827 | 858 | break; |
|---|
| r8ab353b |
r6f3e4d5 |
|
| 1277 | 1277 | } |
|---|
| 1278 | 1278 | } |
|---|
| | 1279 | else if( !strcmp( psz_command, "rewind" ) ) |
|---|
| | 1280 | { |
|---|
| | 1281 | float f_pos; |
|---|
| | 1282 | float f_scale; |
|---|
| | 1283 | vlc_value_t val; |
|---|
| | 1284 | |
|---|
| | 1285 | if( psz_args ) |
|---|
| | 1286 | { |
|---|
| | 1287 | f_scale = i18n_atof( psz_args ); |
|---|
| | 1288 | f_pos = var_GetFloat( p_instance->p_input, "position" ); |
|---|
| | 1289 | val.f_float = f_pos - (f_scale / 1000.0); |
|---|
| | 1290 | if( val.f_float < 0.0 ) |
|---|
| | 1291 | val.f_float = 0.0; |
|---|
| | 1292 | var_Set( p_instance->p_input, "position", val ); |
|---|
| | 1293 | return VLC_SUCCESS; |
|---|
| | 1294 | } |
|---|
| | 1295 | } |
|---|
| | 1296 | else if( !strcmp( psz_command, "forward" ) ) |
|---|
| | 1297 | { |
|---|
| | 1298 | float f_pos; |
|---|
| | 1299 | float f_scale; |
|---|
| | 1300 | vlc_value_t val; |
|---|
| | 1301 | |
|---|
| | 1302 | if( psz_args ) |
|---|
| | 1303 | { |
|---|
| | 1304 | f_scale = i18n_atof( psz_args ); |
|---|
| | 1305 | f_pos = var_GetFloat( p_instance->p_input, "position" ); |
|---|
| | 1306 | val.f_float = f_pos + (f_scale / 1000.0); |
|---|
| | 1307 | if( val.f_float > 1.0 ) |
|---|
| | 1308 | val.f_float = 1.0; |
|---|
| | 1309 | var_Set( p_instance->p_input, "position", val ); |
|---|
| | 1310 | return VLC_SUCCESS; |
|---|
| | 1311 | } |
|---|
| | 1312 | } |
|---|
| 1279 | 1313 | else if( !strcmp( psz_command, "stop" ) ) |
|---|
| 1280 | 1314 | { |
|---|
| … | … | |
| 2354 | 2388 | } |
|---|
| 2355 | 2389 | |
|---|
| | 2390 | case VOD_MEDIA_REWIND: |
|---|
| | 2391 | { |
|---|
| | 2392 | double f_scale = (double)va_arg( args, double ); |
|---|
| | 2393 | char psz_scale[50]; |
|---|
| | 2394 | lldiv_t div = lldiv( f_scale * 10000000, 10000000 ); |
|---|
| | 2395 | sprintf( psz_scale, I64Fd".%07u", div.quot, (unsigned int) div.rem ); |
|---|
| | 2396 | i_ret = vlm_MediaControl( vlm, vlm->media[i], psz_id, "rewind", psz_scale ); |
|---|
| | 2397 | break; |
|---|
| | 2398 | } |
|---|
| | 2399 | |
|---|
| | 2400 | case VOD_MEDIA_FORWARD: |
|---|
| | 2401 | { |
|---|
| | 2402 | double f_scale = (double)va_arg( args, double ); |
|---|
| | 2403 | char psz_scale[50]; |
|---|
| | 2404 | lldiv_t div = lldiv( f_scale * 10000000, 10000000 ); |
|---|
| | 2405 | sprintf( psz_scale, I64Fd".%07u", div.quot, (unsigned int) div.rem ); |
|---|
| | 2406 | i_ret = vlm_MediaControl( vlm, vlm->media[i], psz_id, "forward", psz_scale ); |
|---|
| | 2407 | break; |
|---|
| | 2408 | } |
|---|
| | 2409 | |
|---|
| 2356 | 2410 | default: |
|---|
| 2357 | 2411 | break; |
|---|
| … | … | |
| 2362 | 2416 | return i_ret; |
|---|
| 2363 | 2417 | } |
|---|
| | 2418 | |
|---|
| 2364 | 2419 | |
|---|
| 2365 | 2420 | /***************************************************************************** |
|---|