clock.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * clock.h: clocks synchronisation
  3.  *****************************************************************************
  4.  * Copyright (C) 2008 the VideoLAN team
  5.  * Copyright (C) 2008 Laurent Aimar
  6.  * $Id: ff50c8233d223db6f1a201d60f266c74ba8b38c4 $
  7.  *
  8.  * Authors: Laurent Aimar < fenrir _AT_ videolan _DOT_ org >
  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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. #if defined(__PLUGIN__) || defined(__BUILTIN__) || !defined(__LIBVLC__)
  25. # error This header file can only be included from LibVLC.
  26. #endif
  27. #ifndef _INPUT_CLOCK_H
  28. #define _INPUT_CLOCK_H 1
  29. #include <vlc_common.h>
  30. #include <vlc_input.h> /* FIXME Needed for input_clock_t */
  31. /** @struct input_clock_t
  32.  * This structure is used to manage clock drift and reception jitters
  33.  *
  34.  * XXX input_clock_GetTS can be called from any threads. All others functions
  35.  * MUST be called from one and only one thread.
  36.  */
  37. /**
  38.  * This function creates a new input_clock_t.
  39.  * You must use input_clock_Delete to delete it once unused.
  40.  */
  41. input_clock_t *input_clock_New( int i_rate );
  42. /**
  43.  * This function destroys a input_clock_t created by input_clock_New.
  44.  */
  45. void           input_clock_Delete( input_clock_t * );
  46. /**
  47.  * This function will update a input_clock_t with a new clock reference point.
  48.  * It will also tell if the clock point is late regarding our buffering.
  49.  *
  50.  * param b_buffering_allowed tells if we are allowed to bufferize more data in
  51.  * advanced (if possible).
  52.  */
  53. void    input_clock_Update( input_clock_t *, vlc_object_t *p_log,
  54.                             bool *pb_late,
  55.                             bool b_can_pace_control, bool b_buffering_allowed,
  56.                             mtime_t i_clock, mtime_t i_system );
  57. /**
  58.  * This function will reset the drift of a input_clock_t.
  59.  *
  60.  * The actual jitter estimation will not be reseted by it.
  61.  */
  62. void    input_clock_Reset( input_clock_t * );
  63. /**
  64.  * This functions will return a deadline used to control the reading speed.
  65.  */
  66. mtime_t input_clock_GetWakeup( input_clock_t * );
  67. /**
  68.  * This functions allows to change the actual reading speed.
  69.  */
  70. void    input_clock_ChangeRate( input_clock_t *, int i_rate );
  71. /**
  72.  * This function allows to change the pause status.
  73.  */
  74. void    input_clock_ChangePause( input_clock_t *, bool b_paused, mtime_t i_date );
  75. /**
  76.  * This function allows to rebase the original system value date.
  77.  * It can be called only imediatly after a input_clock_Update call.
  78.  * FIXME ugly
  79.  */
  80. void    input_clock_ChangeSystemOrigin( input_clock_t *, mtime_t i_system );
  81. /**
  82.  * This function converts a pair of timestamp from stream clock to system clock.
  83.  *
  84.  * If pi_rate is provided it will be filled with the rate value used for
  85.  * the conversion.
  86.  * p_ts0 is a pointer to a timestamp to be converted (in place) and must be non NULL.
  87.  * p_ts1 is a pointer to a timestamp to be converted (in place) and can be NULL.
  88.  *
  89.  * It will return VLC_EGENERIC if i_ts_bound is not INT64_MAX and if the value *p_ts0
  90.  * after conversion is not before the deadline mdate() + i_pts_delay + i_ts_bound.
  91.  * It will also return VLC_EGENERIC if the conversion cannot be done successfully. In
  92.  * this case, *p_ts0 and *p_ts1 will hold an invalid timestamp.
  93.  * Otherwise it will return VLC_SUCCESS.
  94.  */
  95. int input_clock_ConvertTS( input_clock_t *, int *pi_rate, mtime_t *pi_ts0, mtime_t *pi_ts1, mtime_t i_ts_bound );
  96. /**
  97.  * This function returns the current rate.
  98.  */
  99. int input_clock_GetRate( input_clock_t * );
  100. /**
  101.  * This function returns current clock state or VLC_EGENERIC if there is not a
  102.  * reference point.
  103.  */
  104. int input_clock_GetState( input_clock_t *,
  105.                           mtime_t *pi_stream_start, mtime_t *pi_system_start,
  106.                           mtime_t *pi_stream_duration, mtime_t *pi_system_duration );
  107. /**
  108.  * This function allows the set the minimal configuration for the jitter estimation algo.
  109.  */
  110. void input_clock_SetJitter( input_clock_t *,
  111.                             mtime_t i_pts_delay, int i_cr_average );
  112. /**
  113.  * This function returns an estimation of the pts_delay needed to avoid rebufferization.
  114.  * XXX in the current implementation, the pts_delay will never be decreased.
  115.  */
  116. mtime_t input_clock_GetJitter( input_clock_t * );
  117. #endif