X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finput%2Fstream_demux.c;h=fe96fdf567fd5f7636a51fbf36df6dfeace4e7f3;hb=64da2d69863680f9298f1a1b32131ce2c51fb468;hp=f4020511bcc6e63906f405372879a8e60c0b1951;hpb=369e8d4f46a372514b899e9cd3182ad013fff9a0;p=vlc diff --git a/src/input/stream_demux.c b/src/input/stream_demux.c index f4020511bc..fe96fdf567 100644 --- a/src/input/stream_demux.c +++ b/src/input/stream_demux.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif +#include #include "demux.h" #include @@ -38,7 +39,7 @@ struct stream_sys_t block_fifo_t *p_fifo; block_t *p_block; - int64_t i_pos; + uint64_t i_pos; /* Demuxer */ char *psz_name; @@ -98,7 +99,6 @@ stream_t *stream_DemuxNew( demux_t *p_demux, const char *psz_demux, es_out_t *ou if( vlc_thread_create( s, "stream out", DStreamThread, VLC_THREAD_PRIORITY_INPUT ) ) { - vlc_object_detach( s ); stream_CommonDelete( s ); free( p_sys->psz_name ); free( p_sys ); @@ -135,7 +135,6 @@ static void DStreamDelete( stream_t *s ) block_FifoRelease( p_sys->p_fifo ); free( p_sys->psz_name ); free( p_sys ); - vlc_object_detach( s ); stream_CommonDelete( s ); } @@ -223,13 +222,13 @@ static int DStreamPeek( stream_t *s, const uint8_t **pp_peek, unsigned int i_pee static int DStreamControl( stream_t *s, int i_query, va_list args ) { stream_sys_t *p_sys = s->p_sys; - int64_t *p_i64; + uint64_t *p_i64; bool *p_b; switch( i_query ) { case STREAM_GET_SIZE: - p_i64 = (int64_t*) va_arg( args, int64_t * ); + p_i64 = va_arg( args, uint64_t * ); *p_i64 = 0; return VLC_SUCCESS; @@ -244,21 +243,22 @@ static int DStreamControl( stream_t *s, int i_query, va_list args ) return VLC_SUCCESS; case STREAM_GET_POSITION: - p_i64 = (int64_t*) va_arg( args, int64_t * ); + p_i64 = va_arg( args, uint64_t * ); *p_i64 = p_sys->i_pos; return VLC_SUCCESS; case STREAM_SET_POSITION: { - int64_t i64 = (int64_t)va_arg( args, int64_t ); - int i_skip; - if( i64 < p_sys->i_pos ) return VLC_EGENERIC; - i_skip = i64 - p_sys->i_pos; + uint64_t i64 = va_arg( args, uint64_t ); + if( i64 < p_sys->i_pos ) + return VLC_EGENERIC; + uint64_t i_skip = i64 - p_sys->i_pos; while( i_skip > 0 ) { - int i_read = DStreamRead( s, NULL, (long)i_skip ); - if( i_read <= 0 ) return VLC_EGENERIC; + int i_read = DStreamRead( s, NULL, __MIN(i_skip, INT_MAX) ); + if( i_read <= 0 ) + return VLC_EGENERIC; i_skip -= i_read; } return VLC_SUCCESS;