time.cpp
上传用户:riyaled888
上传日期:2009-03-27
资源大小:7338k
文件大小:3k
源码类别:

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * time.cpp
  3.  *****************************************************************************
  4.  * Copyright (C) 2003 VideoLAN
  5.  * $Id: time.cpp 8071 2004-06-26 16:15:27Z gbazin $
  6.  *
  7.  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
  8.  *          Olivier Teuli鑢e <ipkiss@via.ecp.fr>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  23.  *****************************************************************************/
  24. #include <stdio.h>  // snprintf
  25. #include "time.hpp"
  26. #include <vlc/input.h>
  27. void StreamTime::set( float percentage, bool updateVLC )
  28. {
  29.     VarPercent::set( percentage );
  30.     // Avoid looping forever...
  31.     if( updateVLC && getIntf()->p_sys->p_input )
  32.     {
  33.         vlc_value_t pos;
  34.         pos.f_float = percentage;
  35.         var_Set( getIntf()->p_sys->p_input, "position", pos );
  36.     }
  37. }
  38. const string StreamTime::getAsStringPercent() const
  39. {
  40.     int value = (int)(100. * get());
  41.     // 0 <= value <= 100, so we need 4 chars
  42.     char *str = new char[4];
  43.     snprintf( str, 4, "%d", value );
  44.     string ret = str;
  45.     delete[] str;
  46.     return ret;
  47. }
  48. const string StreamTime::getAsStringCurrTime() const
  49. {
  50.     if( getIntf()->p_sys->p_input == NULL )
  51.     {
  52.         return "-:--:--";
  53.     }
  54.     vlc_value_t pos;
  55.     var_Get( getIntf()->p_sys->p_input, "position", &pos );
  56.     if( pos.f_float == 0.0 )
  57.     {
  58.         return "-:--:--";
  59.     }
  60.     vlc_value_t time;
  61.     var_Get( getIntf()->p_sys->p_input, "time", &time );
  62.     return formatTime( time.i_time / 1000000 );
  63. }
  64. const string StreamTime::getAsStringTimeLeft() const
  65. {
  66.     if( getIntf()->p_sys->p_input == NULL )
  67.     {
  68.         return "-:--:--";
  69.     }
  70.     vlc_value_t pos;
  71.     var_Get( getIntf()->p_sys->p_input, "position", &pos );
  72.     if( pos.f_float == 0.0 )
  73.     {
  74.         return "-:--:--";
  75.     }
  76.     vlc_value_t time, duration;
  77.     var_Get( getIntf()->p_sys->p_input, "time", &time );
  78.     var_Get( getIntf()->p_sys->p_input, "length", &duration );
  79.     return formatTime( (duration.i_time - time.i_time) / 1000000 );
  80. }
  81. const string StreamTime::getAsStringDuration() const
  82. {
  83.     if( getIntf()->p_sys->p_input == NULL )
  84.     {
  85.         return "-:--:--";
  86.     }
  87.     vlc_value_t pos;
  88.     var_Get( getIntf()->p_sys->p_input, "position", &pos );
  89.     if( pos.f_float == 0.0 )
  90.     {
  91.         return "-:--:--";
  92.     }
  93.     vlc_value_t time;
  94.     var_Get( getIntf()->p_sys->p_input, "length", &time );
  95.     return formatTime( time.i_time / 1000000 );
  96. }
  97. const string StreamTime::formatTime( int seconds ) const
  98. {
  99.     char *psz_time = new char[MSTRTIME_MAX_SIZE];
  100.     snprintf( psz_time, MSTRTIME_MAX_SIZE, "%d:%02d:%02d",
  101.               (int) (seconds / (60 * 60)),
  102.               (int) (seconds / 60 % 60),
  103.               (int) (seconds % 60) );
  104.     string ret = psz_time;
  105.     delete[] psz_time;
  106.     return ret;
  107. }