home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_stream.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  6KB  |  206 lines

  1. /*****************************************************************************
  2.  * vlc_stream.h: Stream (between access and demux) descriptor and methods
  3.  *****************************************************************************
  4.  * Copyright (C) 1999-2004 VLC authors and VideoLAN
  5.  * $Id: c9298367b3249ea233e62262695d09bc450a28e4 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify it
  10.  * under the terms of the GNU Lesser General Public License as published by
  11.  * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU Lesser General Public License
  20.  * along with this program; if not, write to the Free Software Foundation,
  21.  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23.  
  24. #ifndef VLC_STREAM_H
  25. #define VLC_STREAM_H 1
  26.  
  27. #include <vlc_block.h>
  28.  
  29. /**
  30.  * \file
  31.  * This file defines structures and functions for stream (between access and demux) descriptor in vlc
  32.  */
  33.  
  34. # ifdef __cplusplus
  35. extern "C" {
  36. # endif
  37.  
  38. /**
  39.  * \defgroup stream Stream
  40.  *
  41.  *  This will allow you to easily handle read/seek in demuxer modules.
  42.  * @{
  43.  */
  44.  
  45. /* Opaque definition for text reader context */
  46. typedef struct stream_text_t stream_text_t;
  47.  
  48. /**
  49.  * stream_t definition
  50.  */
  51.  
  52. struct stream_t
  53. {
  54.     VLC_COMMON_MEMBERS
  55.     bool        b_error;
  56.  
  57.     /* Module properties for stream filter */
  58.     module_t    *p_module;
  59.  
  60.     char        *psz_access;
  61.     /* Real or virtual path (it can only be changed during stream_t opening) */
  62.     char        *psz_path;
  63.  
  64.     /* Stream source for stream filter */
  65.     stream_t *p_source;
  66.  
  67.     /* */
  68.     int      (*pf_read)   ( stream_t *, void *p_read, unsigned int i_read );
  69.     int      (*pf_peek)   ( stream_t *, const uint8_t **pp_peek, unsigned int i_peek );
  70.     int      (*pf_control)( stream_t *, int i_query, va_list );
  71.  
  72.     /* */
  73.     void     (*pf_destroy)( stream_t *);
  74.  
  75.     /* Private data for module */
  76.     stream_sys_t *p_sys;
  77.  
  78.     /* Text reader state */
  79.     stream_text_t *p_text;
  80.  
  81.     /* Weak link to parent input */
  82.     input_thread_t *p_input;
  83. };
  84.  
  85. /**
  86.  * Possible commands to send to stream_Control() and stream_vaControl()
  87.  */
  88. enum stream_query_e
  89. {
  90.     /* capabilities */
  91.     STREAM_CAN_SEEK,            /**< arg1= bool *   res=cannot fail*/
  92.     STREAM_CAN_FASTSEEK,        /**< arg1= bool *   res=cannot fail*/
  93.  
  94.     /* */
  95.     STREAM_SET_POSITION,        /**< arg1= uint64_t       res=can fail  */
  96.     STREAM_GET_POSITION,        /**< arg1= uint64_t *     res=cannot fail*/
  97.  
  98.     STREAM_GET_SIZE,            /**< arg1= uint64_t *     res=cannot fail (0 if no sense)*/
  99.  
  100.     /* Special for direct access control from demuxer.
  101.      * XXX: avoid using it by all means */
  102.     STREAM_CONTROL_ACCESS,  /* arg1= int i_access_query, args   res: can fail
  103.                              if access unreachable or access control answer */
  104.  
  105.     /* You should update size of source if any and then update size 
  106.      * FIXME find a way to avoid it */
  107.     STREAM_UPDATE_SIZE,
  108.  
  109.     /* */
  110.     STREAM_GET_CONTENT_TYPE,    /**< arg1= char **         res=can fail */
  111.  
  112.     /* XXX only data read through stream_Read/Block will be recorded */
  113.     STREAM_SET_RECORD_STATE,     /**< arg1=bool, arg2=const char *psz_ext (if arg1 is true)  res=can fail */
  114. };
  115.  
  116. VLC_API int stream_Read( stream_t *s, void *p_read, int i_read );
  117. VLC_API int stream_Peek( stream_t *s, const uint8_t **pp_peek, int i_peek );
  118. VLC_API int stream_vaControl( stream_t *s, int i_query, va_list args );
  119. VLC_API void stream_Delete( stream_t *s );
  120. VLC_API int stream_Control( stream_t *s, int i_query, ... );
  121. VLC_API block_t * stream_Block( stream_t *s, int i_size );
  122. VLC_API block_t * stream_BlockRemaining( stream_t *s, int i_max_size );
  123. VLC_API char * stream_ReadLine( stream_t * );
  124.  
  125. /**
  126.  * Get the current position in a stream
  127.  */
  128. static inline int64_t stream_Tell( stream_t *s )
  129. {
  130.     uint64_t i_pos;
  131.     stream_Control( s, STREAM_GET_POSITION, &i_pos );
  132.     if( i_pos >> 62 )
  133.         return (int64_t)1 << 62;
  134.     return i_pos;
  135. }
  136.  
  137. /**
  138.  * Get the size of the stream.
  139.  */
  140. static inline int64_t stream_Size( stream_t *s )
  141. {
  142.     uint64_t i_pos;
  143.     stream_Control( s, STREAM_GET_SIZE, &i_pos );
  144.     if( i_pos >> 62 )
  145.         return (int64_t)1 << 62;
  146.     return i_pos;
  147. }
  148.  
  149. static inline int stream_Seek( stream_t *s, uint64_t i_pos )
  150. {
  151.     return stream_Control( s, STREAM_SET_POSITION, i_pos );
  152. }
  153.  
  154. /**
  155.  * Get the Content-Type of a stream, or NULL if unknown.
  156.  * Result must be free()'d.
  157.  */
  158. static inline char *stream_ContentType( stream_t *s )
  159. {
  160.     char *res;
  161.     if( stream_Control( s, STREAM_GET_CONTENT_TYPE, &res ) )
  162.         return NULL;
  163.     return res;
  164. }
  165.  
  166. /**
  167.  * Create a special stream and a demuxer, this allows chaining demuxers
  168.  * You must delete it using stream_Delete.
  169.  */
  170. VLC_API stream_t * stream_DemuxNew( demux_t *p_demux, const char *psz_demux, es_out_t *out );
  171.  
  172. /**
  173.  * Send data to a stream_t handle created by stream_DemuxNew.
  174.  */
  175. VLC_API void stream_DemuxSend( stream_t *s, block_t *p_block );
  176.  
  177. /**
  178.  * Create a stream_t reading from memory.
  179.  * You must delete it using stream_Delete.
  180.  */
  181. VLC_API stream_t * stream_MemoryNew(vlc_object_t *p_obj, uint8_t *p_buffer, uint64_t i_size, bool b_preserve_memory );
  182. #define stream_MemoryNew( a, b, c, d ) stream_MemoryNew( VLC_OBJECT(a), b, c, d )
  183.  
  184. /**
  185.  * Create a stream_t reading from a URL.
  186.  * You must delete it using stream_Delete.
  187.  */
  188. VLC_API stream_t * stream_UrlNew(vlc_object_t *p_this, const char *psz_url );
  189. #define stream_UrlNew( a, b ) stream_UrlNew( VLC_OBJECT(a), b )
  190.  
  191.  
  192. /**
  193.  * Try to add a stream filter to an open stream.
  194.  * @return New stream to use, or NULL if the filter could not be added.
  195.  **/
  196. VLC_API stream_t* stream_FilterNew( stream_t *p_source, const char *psz_stream_filter );
  197. /**
  198.  * @}
  199.  */
  200.  
  201. # ifdef __cplusplus
  202. }
  203. # endif
  204.  
  205. #endif
  206.