Changeset e1b39c52c20b72dccc5dcb635f142b11d5bab318

Show
Ignore:
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
  • modules/misc/rtsp.c

    r00b9584 re1b39c5  
    4545 
    4646#include <errno.h> 
     47#ifndef WIN32 
     48# include <locale.h> 
     49#endif 
    4750 
    4851/***************************************************************************** 
     
    920923} 
    921924 
     925 
     926static 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 
    922948static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl, 
    923949                         httpd_message_t *answer, const httpd_message_t *query ) 
     
    10911117                if( psz_position && !psz_scale ) 
    10921118                { 
    1093                     double f_pos; 
    1094                     char *end; 
    1095  
     1119                    double f_pos = ParseNPT (psz_position + 4); 
    10961120                    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 ); 
    11061124                    break; 
    11071125                } 
     
    14241442            if( psz_position ) 
    14251443            { 
    1426                 double f_pos; 
    1427                 char *end; 
    1428  
     1444                double f_pos = ParseNPT (psz_position + 4); 
    14291445                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 ); 
    14401449            } 
    14411450