]> git.sesse.net Git - vlc/commitdiff
Uuinline functions and hide stream_t (it's not used in any module anyway)
authorRémi Denis-Courmont <rem@videolan.org>
Wed, 18 Apr 2007 18:55:19 +0000 (18:55 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Wed, 18 Apr 2007 18:55:19 +0000 (18:55 +0000)
include/vlc_stream.h
src/input/demux.c
src/input/input_internal.h
src/input/mem_stream.c
src/input/stream.c
src/misc/objects.c

index 901ed84d7ec42fab69c2fc160b4b6fc24b8b914f..b89ec0c527aa1a0ee2925674ad535a7905ec807e 100644 (file)
@@ -64,84 +64,13 @@ enum stream_query_e
                              if access unreachable or access control answer */
 };
 
-/**
- * stream_t definition
- */
-struct stream_t
-{
-    VLC_COMMON_MEMBERS
-
-    block_t *(*pf_block)  ( stream_t *, int i_size );
-    int      (*pf_read)   ( stream_t *, void *p_read, int i_read );
-    int      (*pf_peek)   ( stream_t *, uint8_t **pp_peek, int i_peek );
-    int      (*pf_control)( stream_t *, int i_query, va_list );
-    void     (*pf_destroy)( stream_t *);
-
-    stream_sys_t *p_sys;
-
-    /* UTF-16 and UTF-32 file reading */
-    vlc_iconv_t     conv;
-    int             i_char_width;
-    vlc_bool_t      b_little_endian;
-};
-
-/**
- * Try to read "i_read" bytes into a buffer pointed by "p_read".  If
- * "p_read" is NULL then data are skipped instead of read.  The return
- * value is the real numbers of bytes read/skip. If this value is less
- * than i_read that means that it's the end of the stream.
- */
-static inline int stream_Read( stream_t *s, void *p_read, int i_read )
-{
-    return s->pf_read( s, p_read, i_read );
-}
-
-/**
- * Store in pp_peek a pointer to the next "i_peek" bytes in the stream
- * \return The real numbers of valid bytes, if it's less
- * or equal to 0, *pp_peek is invalid.
- * \note pp_peek is a pointer to internal buffer and it will be invalid as
- * soons as other stream_* functions are called.
- * \note Due to input limitation, it could be less than i_peek without meaning
- * the end of the stream (but only when you have i_peek >=
- * p_input->i_bufsize)
- */
-static inline int stream_Peek( stream_t *s, uint8_t **pp_peek, int i_peek )
-{
-    return s->pf_peek( s, pp_peek, i_peek );
-}
-
-/**
- * Use to control the "stream_t *". Look at #stream_query_e for
- * possible "i_query" value and format arguments.  Return VLC_SUCCESS
- * if ... succeed ;) and VLC_EGENERIC if failed or unimplemented
- */
-static inline int stream_vaControl( stream_t *s, int i_query, va_list args )
-{
-    return s->pf_control( s, i_query, args );
-}
-
-/**
- * Destroy a stream
- */
-static inline void stream_Delete( stream_t *s )
-{
-    s->pf_destroy( s );
-}
-
-static inline int stream_Control( stream_t *s, int i_query, ... )
-{
-    va_list args;
-    int     i_result;
-
-    if ( s == NULL )
-        return VLC_EGENERIC;
-
-    va_start( args, i_query );
-    i_result = s->pf_control( s, i_query, args );
-    va_end( args );
-    return i_result;
-}
+VLC_EXPORT( int, stream_Read, ( stream_t *s, void *p_read, int i_read ) );
+VLC_EXPORT( int, stream_Peek, ( stream_t *s, uint8_t **pp_peek, int i_peek ) );
+VLC_EXPORT( int, stream_vaControl, ( stream_t *s, int i_query, va_list args ) );
+VLC_EXPORT( void, stream_Delete, ( stream_t *s ) );
+VLC_EXPORT( int, stream_Control, ( stream_t *s, int i_query, ... ) );
+VLC_EXPORT( block_t *, stream_Block, ( stream_t *s, int i_size ) );
+VLC_EXPORT( char *, stream_ReadLine, ( stream_t * ) );
 
 /**
  * Get the current position in a stream
@@ -173,36 +102,6 @@ static inline int stream_Seek( stream_t *s, int64_t i_pos )
     return stream_Control( s, STREAM_SET_POSITION, i_pos );
 }
 
-/**
- * Read "i_size" bytes and store them in a block_t. If less than "i_size"
- * bytes are available then return what is left and if nothing is available,
- * return NULL.
- */
-static inline block_t *stream_Block( stream_t *s, int i_size )
-{
-    if( i_size <= 0 ) return NULL;
-
-    if( s->pf_block )
-    {
-        return s->pf_block( s, i_size );
-    }
-    else
-    {
-        /* emulate block read */
-        block_t *p_bk = block_New( s, i_size );
-        if( p_bk )
-        {
-            p_bk->i_buffer = stream_Read( s, p_bk->p_buffer, i_size );
-            if( p_bk->i_buffer > 0 )
-            {
-                return p_bk;
-            }
-        }
-        if( p_bk ) block_Release( p_bk );
-        return NULL;
-    }
-}
-
 VLC_EXPORT( char *, stream_ReadLine, ( stream_t * ) );
 
 /**
@@ -227,4 +126,13 @@ VLC_EXPORT( stream_t *,__stream_UrlNew, (vlc_object_t *p_this, const char *psz_u
 }
 # endif
 
+# if defined (__PLUGIN__) || defined (__BUILTIN__)
+   /* FIXME UGLY HACK to keep VLC_OBJECT working */
+   /* Maybe we should make VLC_OBJECT a simple cast noawadays... */
+struct stream_t
+{
+       VLC_COMMON_MEMBERS
+};
+# endif
+
 #endif
index fefca84fe38ae03c858e80328981e518b30314b7..8a3173411ed73fe95e4e4f2f737d5046ecd27db8 100644 (file)
@@ -310,7 +310,7 @@ stream_t *__stream_DemuxNew( vlc_object_t *p_obj, const char *psz_demux,
 
     if( psz_demux == NULL || *psz_demux == '\0' ) return NULL;
 
-    s = vlc_object_create( p_obj, VLC_OBJECT_STREAM );
+    s = vlc_stream_create( p_obj );
     s->pf_block  = NULL;
     s->pf_read   = DStreamRead;
     s->pf_peek   = DStreamPeek;
index 06bd80371ba205240bb26300de927485aa3ae3b2..22a7b4e316b0bb418d5012dead4c781f9b36b838 100644 (file)
@@ -339,4 +339,33 @@ static inline int demux2_Control( demux_t *p_demux, int i_query, ... )
     return i_result;
 }
 
+/* Stream */
+/**
+ * stream_t definition
+ */
+struct stream_t
+{
+    VLC_COMMON_MEMBERS
+
+    block_t *(*pf_block)  ( stream_t *, int i_size );
+    int      (*pf_read)   ( stream_t *, void *p_read, int i_read );
+    int      (*pf_peek)   ( stream_t *, uint8_t **pp_peek, int i_peek );
+    int      (*pf_control)( stream_t *, int i_query, va_list );
+    void     (*pf_destroy)( stream_t *);
+
+    stream_sys_t *p_sys;
+
+    /* UTF-16 and UTF-32 file reading */
+    vlc_iconv_t     conv;
+    int             i_char_width;
+    vlc_bool_t      b_little_endian;
+};
+
+#include <libvlc.h>
+
+static inline stream_t *vlc_stream_create( vlc_object_t *obj )
+{
+    return (stream_t *)vlc_custom_create( obj, sizeof(stream_t),
+                                          VLC_OBJECT_STREAM, "stream" );
+}
 #endif
index 5ed06ff09d5e510962a967b49aec30738e333908..950ff3b29b0f910af9c89f9ce27d6745407aecfd 100644 (file)
@@ -52,7 +52,7 @@ static void Delete ( stream_t * );
 stream_t *__stream_MemoryNew( vlc_object_t *p_this, uint8_t *p_buffer,
                               int64_t i_size, vlc_bool_t i_preserve_memory )
 {
-    stream_t *s = vlc_object_create( p_this, VLC_OBJECT_STREAM );
+    stream_t *s = vlc_stream_create( p_this );
     stream_sys_t *p_sys;
 
     if( !s ) return NULL;
index 223b6f16867e0c5bc61ab115faf52f77157d03bf..11b5c6c66fbe58ff95ef74d0df55e3e26135c662 100644 (file)
@@ -223,7 +223,7 @@ stream_t *__stream_UrlNew( vlc_object_t *p_parent, const char *psz_url )
 
 stream_t *stream_AccessNew( access_t *p_access, vlc_bool_t b_quick )
 {
-    stream_t *s = vlc_object_create( p_access, VLC_OBJECT_STREAM );
+    stream_t *s = vlc_stream_create( p_access );
     stream_sys_t *p_sys;
     char *psz_list;
 
@@ -1814,3 +1814,92 @@ static int ASeek( stream_t *s, int64_t i_pos )
 
     return p_access->pf_seek( p_access, i_pos );
 }
+
+
+/**
+ * Try to read "i_read" bytes into a buffer pointed by "p_read".  If
+ * "p_read" is NULL then data are skipped instead of read.  The return
+ * value is the real numbers of bytes read/skip. If this value is less
+ * than i_read that means that it's the end of the stream.
+ */
+int stream_Read( stream_t *s, void *p_read, int i_read )
+{
+    return s->pf_read( s, p_read, i_read );
+}
+
+/**
+ * Store in pp_peek a pointer to the next "i_peek" bytes in the stream
+ * \return The real numbers of valid bytes, if it's less
+ * or equal to 0, *pp_peek is invalid.
+ * \note pp_peek is a pointer to internal buffer and it will be invalid as
+ * soons as other stream_* functions are called.
+ * \note Due to input limitation, it could be less than i_peek without meaning
+ * the end of the stream (but only when you have i_peek >=
+ * p_input->i_bufsize)
+ */
+int stream_Peek( stream_t *s, uint8_t **pp_peek, int i_peek )
+{
+    return s->pf_peek( s, pp_peek, i_peek );
+}
+
+/**
+ * Use to control the "stream_t *". Look at #stream_query_e for
+ * possible "i_query" value and format arguments.  Return VLC_SUCCESS
+ * if ... succeed ;) and VLC_EGENERIC if failed or unimplemented
+ */
+int stream_vaControl( stream_t *s, int i_query, va_list args )
+{
+    return s->pf_control( s, i_query, args );
+}
+
+/**
+ * Destroy a stream
+ */
+void stream_Delete( stream_t *s )
+{
+    s->pf_destroy( s );
+}
+
+int stream_Control( stream_t *s, int i_query, ... )
+{
+    va_list args;
+    int     i_result;
+
+    if ( s == NULL )
+        return VLC_EGENERIC;
+
+    va_start( args, i_query );
+    i_result = s->pf_control( s, i_query, args );
+    va_end( args );
+    return i_result;
+}
+
+/**
+ * Read "i_size" bytes and store them in a block_t. If less than "i_size"
+ * bytes are available then return what is left and if nothing is available,
+ * return NULL.
+ */
+block_t *stream_Block( stream_t *s, int i_size )
+{
+    if( i_size <= 0 ) return NULL;
+
+    if( s->pf_block )
+    {
+        return s->pf_block( s, i_size );
+    }
+    else
+    {
+        /* emulate block read */
+        block_t *p_bk = block_New( s, i_size );
+        if( p_bk )
+        {
+            p_bk->i_buffer = stream_Read( s, p_bk->p_buffer, i_size );
+            if( p_bk->i_buffer > 0 )
+            {
+                return p_bk;
+            }
+        }
+        if( p_bk ) block_Release( p_bk );
+        return NULL;
+    }
+}
index 97a4b362174d6b46891b4e3d139f7c92e315d211..4e2ef8812819a97fca61f3db5d4277b60f6e3643 100644 (file)
@@ -245,10 +245,6 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type )
             i_size = sizeof(demux_t);
             psz_type = "demux";
             break;
-        case VLC_OBJECT_STREAM:
-            i_size = sizeof(stream_t);
-            psz_type = "stream";
-            break;
         case VLC_OBJECT_ACCESS:
             i_size = sizeof(access_t);
             psz_type = "access";