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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * vlc_stream.h: Stream (between access and demux) descriptor and methods
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2004 the VideoLAN team
  5.  * $Id: e5cd0e0130b1702455042323b449b69204023763 $
  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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifndef VLC_STREAM_H
  24. #define VLC_STREAM_H 1
  25. #include <vlc_block.h>
  26. /**
  27.  * file
  28.  * This file defines structures and functions for stream (between access and demux) descriptor in vlc
  29.  */
  30. # ifdef __cplusplus
  31. extern "C" {
  32. # endif
  33. /**
  34.  * defgroup stream Stream
  35.  *
  36.  *  This will allow you to easily handle read/seek in demuxer modules.
  37.  * @{
  38.  */
  39. /* Opaque definition for text reader context */
  40. typedef struct stream_text_t stream_text_t;
  41. /**
  42.  * stream_t definition
  43.  */
  44. struct stream_t
  45. {
  46.     VLC_COMMON_MEMBERS
  47.     /* Module properties for stream filter */
  48.     module_t    *p_module;
  49.     /* Real or virtual path (it can only be changed during stream_t opening) */
  50.     char        *psz_path;
  51.     /* Stream source for stream filter */
  52.     stream_t *p_source;
  53.     /* */
  54.     int      (*pf_read)   ( stream_t *, void *p_read, unsigned int i_read );
  55.     int      (*pf_peek)   ( stream_t *, const uint8_t **pp_peek, unsigned int i_peek );
  56.     int      (*pf_control)( stream_t *, int i_query, va_list );
  57.     /* */
  58.     void     (*pf_destroy)( stream_t *);
  59.     /* Private data for module */
  60.     stream_sys_t *p_sys;
  61.     /* Text reader state */
  62.     stream_text_t *p_text;
  63. };
  64. /**
  65.  * Possible commands to send to stream_Control() and stream_vaControl()
  66.  */
  67. enum stream_query_e
  68. {
  69.     /* capabilities */
  70.     STREAM_CAN_SEEK,            /**< arg1= bool *   res=cannot fail*/
  71.     STREAM_CAN_FASTSEEK,        /**< arg1= bool *   res=cannot fail*/
  72.     /* */
  73.     STREAM_SET_POSITION,        /**< arg1= int64_t        res=can fail  */
  74.     STREAM_GET_POSITION,        /**< arg1= int64_t *      res=cannot fail*/
  75.     STREAM_GET_SIZE,            /**< arg1= int64_t *      res=cannot fail (0 if no sense)*/
  76.     /* Special for direct access control from demuxer.
  77.      * XXX: avoid using it by all means */
  78.     STREAM_CONTROL_ACCESS,  /* arg1= int i_access_query, args   res: can fail
  79.                              if access unreachable or access control answer */
  80.     /* You should update size of source if any and then update size 
  81.      * FIXME find a way to avoid it */
  82.     STREAM_UPDATE_SIZE,
  83.     /* */
  84.     STREAM_GET_CONTENT_TYPE,    /**< arg1= char **         res=can fail */
  85.     /* XXX only data read through stream_Read/Block will be recorded */
  86.     STREAM_SET_RECORD_STATE,     /**< arg1=bool, arg2=const char *psz_ext (if arg1 is true)  res=can fail */
  87. };
  88. VLC_EXPORT( int, stream_Read, ( stream_t *s, void *p_read, int i_read ) );
  89. VLC_EXPORT( int, stream_Peek, ( stream_t *s, const uint8_t **pp_peek, int i_peek ) );
  90. VLC_EXPORT( int, stream_vaControl, ( stream_t *s, int i_query, va_list args ) );
  91. VLC_EXPORT( void, stream_Delete, ( stream_t *s ) );
  92. VLC_EXPORT( int, stream_Control, ( stream_t *s, int i_query, ... ) );
  93. VLC_EXPORT( block_t *, stream_Block, ( stream_t *s, int i_size ) );
  94. VLC_EXPORT( char *, stream_ReadLine, ( stream_t * ) );
  95. /**
  96.  * Get the current position in a stream
  97.  */
  98. static inline int64_t stream_Tell( stream_t *s )
  99. {
  100.     int64_t i_pos;
  101.     stream_Control( s, STREAM_GET_POSITION, &i_pos );
  102.     return i_pos;
  103. }
  104. /**
  105.  * Get the size of the stream.
  106.  */
  107. static inline int64_t stream_Size( stream_t *s )
  108. {
  109.     int64_t i_pos;
  110.     stream_Control( s, STREAM_GET_SIZE, &i_pos );
  111.     return i_pos;
  112. }
  113. static inline int stream_Seek( stream_t *s, int64_t i_pos )
  114. {
  115.     return stream_Control( s, STREAM_SET_POSITION, i_pos );
  116. }
  117. /**
  118.  * Get the Content-Type of a stream, or NULL if unknown.
  119.  * Result must be free()'d.
  120.  */
  121. static inline char *stream_ContentType( stream_t *s )
  122. {
  123.     char *res;
  124.     if( stream_Control( s, STREAM_GET_CONTENT_TYPE, &res ) )
  125.         return NULL;
  126.     return res;
  127. }
  128. /**
  129.  * Create a special stream and a demuxer, this allows chaining demuxers
  130.  * You must delete it using stream_Delete.
  131.  */
  132. #define stream_DemuxNew( a, b, c ) __stream_DemuxNew( VLC_OBJECT(a), b, c)
  133. VLC_EXPORT( stream_t *,__stream_DemuxNew, ( vlc_object_t *p_obj, const char *psz_demux, es_out_t *out ) );
  134. /**
  135.  * Send data to a stream_t handle created by stream_DemuxNew.
  136.  */
  137. VLC_EXPORT( void,      stream_DemuxSend,  ( stream_t *s, block_t *p_block ) );
  138. /**
  139.  * Create a stream_t reading from memory.
  140.  * You must delete it using stream_Delete.
  141.  */
  142. #define stream_MemoryNew( a, b, c, d ) __stream_MemoryNew( VLC_OBJECT(a), b, c, d )
  143. VLC_EXPORT( stream_t *,__stream_MemoryNew, (vlc_object_t *p_obj, uint8_t *p_buffer, int64_t i_size, bool b_preserve_memory ) );
  144. /**
  145.  * Create a stream_t reading from an URL.
  146.  * You must delete it using stream_Delete.
  147.  */
  148. #define stream_UrlNew( a, b ) __stream_UrlNew( VLC_OBJECT(a), b )
  149. VLC_EXPORT( stream_t *,__stream_UrlNew, (vlc_object_t *p_this, const char *psz_url ) );
  150. /**
  151.  * @}
  152.  */
  153. # ifdef __cplusplus
  154. }
  155. # endif
  156. #endif