Changeset 6f3e4d56cb72a5f845bd28edea7104bdc6474b8a

Show
Ignore:
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
  • THANKS

    r85a0c75 r6f3e4d5  
    8686kty0ne - WinAmp 5 skin for VLC 
    8787Kevin H. Patterson <kevpatt at khptech dot com> - Theora framesize calculation patch by Kevin H. Patterson (kevpatt at khptech dot com 
     88K. Staring <qdk at quickdekay dot net> - RTSP rewind and fast-forward support 
    8889Laurent Jonqueres <laurent_jonqueres at yahoo.fr> - Occitan localization 
    8990Laurent Mutricy <laurent.mutricy at ecl2005 dot ec-lyon dot fr> - HTTP interface fixes 
  • include/vlc_vod.h

    r2cb472d r6f3e4d5  
    6464    VOD_MEDIA_STOP,         /* arg1= double         res=can fail    */ 
    6565    VOD_MEDIA_SEEK,         /* arg1= double *       res=    */ 
     66    VOD_MEDIA_REWIND,       /* arg1= double *       res=    */ 
     67    VOD_MEDIA_FORWARD,      /* arg1= double *       res=    */ 
    6668}; 
    6769 
  • modules/misc/rtsp.c

    r05b21e9 r6f3e4d5  
    786786        case HTTPD_MSG_PLAY: 
    787787        { 
    788             char *psz_output, *psz_position, ip[NI_MAXNUMERICHOST]; 
     788            char *psz_output, ip[NI_MAXNUMERICHOST]; 
    789789            int i, i_port_audio = 0, i_port_video = 0; 
    790790 
     
    808808            { 
    809809                char *psz_position = httpd_MsgGet( query, "Range" ); 
     810                char *psz_scale = httpd_MsgGet( query, "Scale" ); 
    810811                if( psz_position ) psz_position = strstr( psz_position, "npt=" ); 
    811                 if( psz_position
     812                if( psz_position && !psz_scale
    812813                { 
    813814                    double f_pos; 
     
    815816 
    816817                    msg_Dbg( p_vod, "seeking request: %s", psz_position ); 
    817  
    818818                    psz_position += 4; 
    819819                    /* FIXME: npt= is not necessarily formatted as a float */ 
     
    824824                        vod_MediaControl( p_vod, p_media, psz_session, 
    825825                                      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                        } 
    826857                    } 
    827858                    break; 
  • src/misc/vlm.c

    r8ab353b r6f3e4d5  
    12771277        } 
    12781278    } 
     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    } 
    12791313    else if( !strcmp( psz_command, "stop" ) ) 
    12801314    { 
     
    23542388    } 
    23552389 
     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 
    23562410    default: 
    23572411        break; 
     
    23622416    return i_ret; 
    23632417} 
     2418 
    23642419 
    23652420/*****************************************************************************