-/****************************************************************************
- * Method 3:
- ****************************************************************************/
-
-static int AStreamReadImmediate( stream_t *s, void *p_read, unsigned int i_read )
-{
- stream_sys_t *p_sys = s->p_sys;
-
-#ifdef STREAM_DEBUG
- msg_Dbg( s, "AStreamReadImmediate p_read=%p i_read=%d",
- p_read, i_read );
-#endif
-
- /* First, check if we already have some data in the buffer,
- * that we could copy directly */
- int i_copy = __MIN( stream_buffered_size( s ), i_read );
- if( i_copy )
- {
-#ifdef STREAM_DEBUG
- msg_Dbg( s, "AStreamReadImmediate: copy %d from %p", i_copy, stream_buffer( s ) );
-#endif
-
- assert( i_copy <= STREAM_CACHE_SIZE );
-
- if( p_read )
- {
- memcpy( p_read, stream_buffer( s ), i_copy );
- p_read = (uint8_t *)p_read + i_copy;
- }
- }
-
- /* Now that we've read our buffer we don't need its i_copy bytes */
- stream_buffer_empty( s, i_copy );
-
- /* Now check if we have still to really read some data */
- int i_to_read = i_read - i_copy;
- if( i_to_read )
- {
- if( p_read )
- i_to_read = AReadStream( s, p_read, i_to_read );
- else
- {
- void * dummy = malloc(i_to_read);
- i_to_read = AReadStream( s, dummy, i_to_read );
- free(dummy);
- }
- }
-
- if( p_sys->record.b_active && i_copy > 0 )
- ARecordWrite( s, p_read, i_copy );
-
- p_sys->i_pos += i_to_read;
-
- return i_to_read + i_copy;
-}
-
-static int AStreamPeekImmediate( stream_t *s, const uint8_t **pp_peek, unsigned int i_read )
-{
-#ifdef STREAM_DEBUG
- msg_Dbg( s, "AStreamPeekImmediate: %d size=%"PRId64,
- i_read, size_buffered_size( s ) );
-#endif
-
- /* Avoid problem, but that shouldn't happen */
- if( i_read > STREAM_CACHE_SIZE / 2 )
- i_read = STREAM_CACHE_SIZE / 2;
-
- int i_to_read = i_read - stream_buffered_size( s );
- if( i_to_read > 0 )
- {
-#ifdef STREAM_DEBUG
- msg_Dbg( s, "AStreamPeekImmediate: Reading %d",
- i_to_read );
-#endif
- i_to_read = AReadStream( s, stream_buffer( s ) + stream_buffered_size( s ),
- i_to_read );
-
- if( i_to_read > 0 )
- stream_buffer_fill( s, i_to_read );
- }
-
- *pp_peek = stream_buffer( s );
-
- return __MIN(stream_buffered_size( s ), i_read);
-}
-
-static int AStreamSeekImmediate( stream_t *s, int64_t i_pos )
-{
- stream_sys_t *p_sys = s->p_sys;
- access_t *p_access = p_sys->p_access;
- bool b_aseek;
-
-#ifdef STREAM_DEBUG
- msg_Dbg( s, "AStreamSeekImmediate to %"PRId64" pos=%"PRId64
- i_pos, p_sys->i_pos );
-#endif
-
- access_Control( p_access, ACCESS_CAN_SEEK, &b_aseek );
- if( !b_aseek )
- {
- /* We can't do nothing */
- msg_Dbg( s, "AStreamSeekImmediate: can't seek" );
- return VLC_EGENERIC;
- }
-
- /* Just reset our buffer */
- stream_buffer_empty( s, stream_buffered_size( s ) );
-
- if( ASeek( s, i_pos ) ) return VLC_EGENERIC;
-
- return VLC_SUCCESS;
-}
-