Changeset e1b39c52c20b72dccc5dcb635f142b11d5bab318
- Timestamp:
- 09/07/08 21:55:08
(5 months ago)
- Author:
- Rémi Denis-Courmont <rdenis@simphalempin.com>
- git-committer:
- Rémi Denis-Courmont <rdenis@simphalempin.com> 1215633308 +0300
- git-parent:
[7c14959cf119c24660ced3c4cb5af51f15f8c3cb]
- git-author:
- Rémi Denis-Courmont <rdenis@simphalempin.com> 1215625974 +0300
- Message:
Partially fix parsing of npt=
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r00b9584 |
re1b39c5 |
|
| 45 | 45 | |
|---|
| 46 | 46 | #include <errno.h> |
|---|
| | 47 | #ifndef WIN32 |
|---|
| | 48 | # include <locale.h> |
|---|
| | 49 | #endif |
|---|
| 47 | 50 | |
|---|
| 48 | 51 | /***************************************************************************** |
|---|
| … | … | |
| 920 | 923 | } |
|---|
| 921 | 924 | |
|---|
| | 925 | |
|---|
| | 926 | static float ParseNPT (const char *str) |
|---|
| | 927 | { |
|---|
| | 928 | locale_t loc = newlocale (LC_NUMERIC_MASK, "C", NULL); |
|---|
| | 929 | locale_t oldloc = uselocale (loc); |
|---|
| | 930 | unsigned hour, min; |
|---|
| | 931 | float sec; |
|---|
| | 932 | |
|---|
| | 933 | if (sscanf (str, "%u:%u:%f", &hour, &min, &sec) == 3) |
|---|
| | 934 | sec += ((hour * 60) + min) * 60; |
|---|
| | 935 | else |
|---|
| | 936 | if (sscanf (str, "%f", &sec) != 1) |
|---|
| | 937 | sec = 0.; |
|---|
| | 938 | |
|---|
| | 939 | if (loc != (locale_t)0) |
|---|
| | 940 | { |
|---|
| | 941 | uselocale (oldloc); |
|---|
| | 942 | freelocale (loc); |
|---|
| | 943 | } |
|---|
| | 944 | return sec; |
|---|
| | 945 | } |
|---|
| | 946 | |
|---|
| | 947 | |
|---|
| 922 | 948 | static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, |
|---|
| 923 | 949 | httpd_message_t *answer, const httpd_message_t *query ) |
|---|
| … | … | |
| 1091 | 1117 | if( psz_position && !psz_scale ) |
|---|
| 1092 | 1118 | { |
|---|
| 1093 | | double f_pos; |
|---|
| 1094 | | char *end; |
|---|
| 1095 | | |
|---|
| | 1119 | double f_pos = ParseNPT (psz_position + 4); |
|---|
| 1096 | 1120 | msg_Dbg( p_vod, "seeking request: %s", psz_position ); |
|---|
| 1097 | | psz_position += 4; |
|---|
| 1098 | | /* FIXME: npt= is not necessarily formatted as a float */ |
|---|
| 1099 | | f_pos = us_strtod( psz_position, &end ); |
|---|
| 1100 | | if( end > psz_position ) |
|---|
| 1101 | | { |
|---|
| 1102 | | f_pos /= ((double)(p_media->i_length))/1000 /1000 / 100; |
|---|
| 1103 | | CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media, |
|---|
| 1104 | | psz_session, f_pos, NULL ); |
|---|
| 1105 | | } |
|---|
| | 1121 | f_pos /= ((double)(p_media->i_length))/1000 /1000 / 100; |
|---|
| | 1122 | CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media, |
|---|
| | 1123 | psz_session, f_pos, NULL ); |
|---|
| 1106 | 1124 | break; |
|---|
| 1107 | 1125 | } |
|---|
| … | … | |
| 1424 | 1442 | if( psz_position ) |
|---|
| 1425 | 1443 | { |
|---|
| 1426 | | double f_pos; |
|---|
| 1427 | | char *end; |
|---|
| 1428 | | |
|---|
| | 1444 | double f_pos = ParseNPT (psz_position + 4); |
|---|
| 1429 | 1445 | msg_Dbg( p_vod, "seeking request: %s", psz_position ); |
|---|
| 1430 | | |
|---|
| 1431 | | psz_position += 4; |
|---|
| 1432 | | /* FIXME: npt= is not necessarily formatted as a float */ |
|---|
| 1433 | | f_pos = us_strtod( psz_position, &end ); |
|---|
| 1434 | | if( end > psz_position ) |
|---|
| 1435 | | { |
|---|
| 1436 | | f_pos /= ((double)(p_media->i_length))/1000 /1000 / 100; |
|---|
| 1437 | | CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media, |
|---|
| 1438 | | psz_session, f_pos, NULL ); |
|---|
| 1439 | | } |
|---|
| | 1446 | f_pos /= ((double)(p_media->i_length))/1000 /1000 / 100; |
|---|
| | 1447 | CommandPush( p_vod, RTSP_CMD_TYPE_SEEK, p_media, |
|---|
| | 1448 | psz_session, f_pos, NULL ); |
|---|
| 1440 | 1449 | } |
|---|
| 1441 | 1450 | |
|---|