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

多媒体

开发平台:

MultiPlatform

  1. /*****************************************************************************
  2.  * input_internal.h:
  3.  *****************************************************************************
  4.  * Copyright (C) 1998-2004 VideoLAN
  5.  * $Id: input.c 7955 2004-06-07 22:21:33Z fenrir $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  22.  *****************************************************************************/
  23. #ifndef _INPUT_INTERNAL_H
  24. #define _INPUT_INTERNAL_H 1
  25. enum input_control_e
  26. {
  27.     INPUT_CONTROL_SET_DIE,
  28.     INPUT_CONTROL_SET_STATE,
  29.     INPUT_CONTROL_SET_RATE,
  30.     INPUT_CONTROL_SET_RATE_SLOWER,
  31.     INPUT_CONTROL_SET_RATE_FASTER,
  32.     INPUT_CONTROL_SET_POSITION,
  33.     INPUT_CONTROL_SET_POSITION_OFFSET,
  34.     INPUT_CONTROL_SET_TIME,
  35.     INPUT_CONTROL_SET_TIME_OFFSET,
  36.     INPUT_CONTROL_SET_PROGRAM,
  37.     INPUT_CONTROL_SET_TITLE,
  38.     INPUT_CONTROL_SET_TITLE_NEXT,
  39.     INPUT_CONTROL_SET_TITLE_PREV,
  40.     INPUT_CONTROL_SET_SEEKPOINT,
  41.     INPUT_CONTROL_SET_SEEKPOINT_NEXT,
  42.     INPUT_CONTROL_SET_SEEKPOINT_PREV,
  43.     INPUT_CONTROL_SET_BOOKMARK,
  44.     INPUT_CONTROL_SET_ES,
  45.     INPUT_CONTROL_SET_AUDIO_DELAY,
  46.     INPUT_CONTROL_SET_SPU_DELAY,
  47. };
  48. /* Internal helpers */
  49. static inline void input_ControlPush( input_thread_t *p_input,
  50.                                       int i_type, vlc_value_t *p_val )
  51. {
  52.     vlc_mutex_lock( &p_input->lock_control );
  53.     if( i_type == INPUT_CONTROL_SET_DIE )
  54.     {
  55.         /* Special case, empty the control */
  56.         p_input->i_control = 1;
  57.         p_input->control[0].i_type = i_type;
  58.         memset( &p_input->control[0].val, 0, sizeof( vlc_value_t ) );
  59.     }
  60.     else
  61.     {
  62.         if( p_input->i_control >= INPUT_CONTROL_FIFO_SIZE )
  63.         {
  64.             msg_Err( p_input, "input control fifo overflow, trashing type=%d",
  65.                      i_type );
  66.             vlc_mutex_unlock( &p_input->lock_control );
  67.             return;
  68.         }
  69.         p_input->control[p_input->i_control].i_type = i_type;
  70.         if( p_val )
  71.             p_input->control[p_input->i_control].val = *p_val;
  72.         else
  73.             memset( &p_input->control[p_input->i_control].val, 0,
  74.                     sizeof( vlc_value_t ) );
  75.         p_input->i_control++;
  76.     }
  77.     vlc_mutex_unlock( &p_input->lock_control );
  78. }
  79. /* var.c */
  80. void input_ControlVarInit ( input_thread_t * );
  81. void input_ControlVarClean( input_thread_t * );
  82. void input_ControlVarNavigation( input_thread_t * );
  83. void input_ControlVarTitle( input_thread_t *, int i_title );
  84. void input_ConfigVarInit ( input_thread_t * );
  85. /* stream.c */
  86. stream_t *stream_AccessNew( access_t *p_access );
  87. void stream_AccessDelete( stream_t *s );
  88. void stream_AccessReset( stream_t *s );
  89. void stream_AccessUpdate( stream_t *s );
  90. /* decoder.c FIXME make it public ?*/
  91. void       input_DecoderDiscontinuity( decoder_t * p_dec );
  92. vlc_bool_t input_DecoderEmpty( decoder_t * p_dec );
  93. /* es_out.c */
  94. es_out_t  *input_EsOutNew( input_thread_t * );
  95. void       input_EsOutDelete( es_out_t * );
  96. es_out_id_t *input_EsOutGetFromID( es_out_t *, int i_id );
  97. void       input_EsOutDiscontinuity( es_out_t *, vlc_bool_t b_audio );
  98. void       input_EsOutSetDelay( es_out_t *, int i_cat, int64_t );
  99. vlc_bool_t input_EsOutDecodersEmpty( es_out_t * );
  100. /* clock.c */
  101. enum /* Synchro states */
  102. {
  103.     SYNCHRO_OK     = 0,
  104.     SYNCHRO_START  = 1,
  105.     SYNCHRO_REINIT = 2,
  106. };
  107. typedef struct
  108. {
  109.     /* Synchronization information */
  110.     mtime_t                 delta_cr;
  111.     mtime_t                 cr_ref, sysdate_ref;
  112.     mtime_t                 last_cr; /* reference to detect unexpected stream
  113.                                       * discontinuities                      */
  114.     mtime_t                 last_pts;
  115.     count_t                 c_average_count;
  116.                            /* counter used to compute dynamic average values */
  117.     int                     i_synchro_state;
  118.     vlc_bool_t              b_master;
  119.     /* Config */
  120.     int                     i_cr_average;
  121. } input_clock_t;
  122. void input_ClockInit( input_clock_t *, vlc_bool_t b_master, int i_cr_average );
  123. void    input_ClockSetPCR( input_thread_t *, input_clock_t *, mtime_t );
  124. mtime_t input_ClockGetTS( input_thread_t *, input_clock_t *, mtime_t );
  125. /* Subtitles */
  126. char **subtitles_Detect( input_thread_t *, char* path, char *fname );
  127. #endif