]> git.sesse.net Git - vlc/blobdiff - src/input/stream.c
Uuinline functions and hide stream_t (it's not used in any module anyway)
[vlc] / src / input / stream.c
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;
+    }
+}