[vlc-commits] stream_filter: smooth: fix signedness
Francois Cartegnie
git at videolan.org
Tue Oct 28 13:48:42 CET 2014
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon Oct 27 22:48:30 2014 +0100| [5a9b7726e58f493b345401dff3dee37dc9d1b4fd] | committer: Francois Cartegnie
stream_filter: smooth: fix signedness
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5a9b7726e58f493b345401dff3dee37dc9d1b4fd
---
modules/stream_filter/smooth/downloader.c | 27 ++++++++++++++++-----------
modules/stream_filter/smooth/smooth.c | 15 ++++++++-------
modules/stream_filter/smooth/smooth.h | 14 +++++++-------
modules/stream_filter/smooth/utils.c | 6 +++---
4 files changed, 34 insertions(+), 28 deletions(-)
diff --git a/modules/stream_filter/smooth/downloader.c b/modules/stream_filter/smooth/downloader.c
index 2bfb536..d68851c 100644
--- a/modules/stream_filter/smooth/downloader.c
+++ b/modules/stream_filter/smooth/downloader.c
@@ -56,7 +56,7 @@ static char *ConstructUrl( const char *template, const char *base_url,
return url;
}
-static chunk_t * chunk_Get( sms_stream_t *sms, const int64_t start_time )
+static chunk_t * chunk_Get( sms_stream_t *sms, const uint64_t start_time )
{
int len = vlc_array_count( sms->chunks );
for( int i = 0; i < len; i++ )
@@ -116,8 +116,10 @@ static int sms_Download( stream_t *s, chunk_t *chunk, char *url )
return VLC_EGENERIC;
int64_t size = stream_Size( p_ts );
+ if ( size < 0 )
+ return VLC_EGENERIC;
- chunk->size = size;
+ chunk->size = (uint64_t) size;
chunk->offset = p_sys->download.next_chunk_offset;
p_sys->download.next_chunk_offset += chunk->size;
@@ -255,8 +257,8 @@ static int get_new_chunks( stream_t *s, chunk_t *ck )
for( uint8_t i = 0; i < fragment_count; i++ )
{
- int64_t dur = tfrf_df[i].i_fragment_duration;
- int64_t stime = tfrf_df[i].i_fragment_abs_time;
+ uint64_t dur = tfrf_df[i].i_fragment_duration;
+ uint64_t stime = tfrf_df[i].i_fragment_abs_time;
msg_Dbg( s, "\"tfrf\" fragment duration %"PRIu64", "\
"fragment abs time %"PRIu64, dur, stime);
@@ -388,7 +390,7 @@ static int Download( stream_t *s, sms_stream_t *sms )
msg_Err( s, "invalid stream type" );
return VLC_EGENERIC;
}
- int64_t start_time = p_sys->download.lead[index];
+ uint64_t start_time = p_sys->download.lead[index];
quality_level_t *qlevel = get_qlevel( sms, sms->download_qlvl );
if( unlikely( !qlevel ) )
@@ -529,12 +531,12 @@ static int Download( stream_t *s, sms_stream_t *sms )
return VLC_SUCCESS;
}
-static inline int64_t get_lead( stream_t *s )
+static inline uint64_t get_lead( stream_t *s )
{
stream_sys_t *p_sys = s->p_sys;
- int64_t lead = 0;
- int64_t alead = p_sys->download.lead[es_cat_to_index( AUDIO_ES )];
- int64_t vlead = p_sys->download.lead[es_cat_to_index( VIDEO_ES )];
+ uint64_t lead = 0;
+ uint64_t alead = p_sys->download.lead[es_cat_to_index( AUDIO_ES )];
+ uint64_t vlead = p_sys->download.lead[es_cat_to_index( VIDEO_ES )];
bool video = SMS_GET_SELECTED_ST( VIDEO_ES ) ? true : false;
bool audio = SMS_GET_SELECTED_ST( AUDIO_ES ) ? true : false;
@@ -545,7 +547,10 @@ static inline int64_t get_lead( stream_t *s )
else
lead = alead;
- lead -= p_sys->playback.toffset;
+ if( p_sys->playback.toffset > lead )
+ lead -= p_sys->playback.toffset;
+ else
+ lead = 0;
return lead;
}
@@ -598,7 +603,7 @@ void* sms_Thread( void *p_this )
* and for some reason the n^th advertised video fragment is related to
* the n+1^th advertised audio chunk or vice versa */
- int64_t start_time = 0, lead = 0;
+ uint64_t start_time = 0, lead = 0;
for( int i = 0; i < 3; i++ )
{
diff --git a/modules/stream_filter/smooth/smooth.c b/modules/stream_filter/smooth/smooth.c
index e3be190..2c42e60 100644
--- a/modules/stream_filter/smooth/smooth.c
+++ b/modules/stream_filter/smooth/smooth.c
@@ -589,10 +589,10 @@ static chunk_t *get_chunk( stream_t *s, const bool wait )
return chunk;
}
-static int sms_Read( stream_t *s, uint8_t *p_read, int i_read )
+static unsigned int sms_Read( stream_t *s, uint8_t *p_read, unsigned int i_read )
{
stream_sys_t *p_sys = s->p_sys;
- int copied = 0;
+ unsigned int copied = 0;
chunk_t *chunk = NULL;
do
@@ -601,7 +601,7 @@ static int sms_Read( stream_t *s, uint8_t *p_read, int i_read )
if( !chunk )
return copied;
- if( chunk->read_pos >= (int)chunk->size )
+ if( chunk->read_pos >= chunk->size )
{
if( chunk->type == VIDEO_ES ||
( !SMS_GET_SELECTED_ST( VIDEO_ES ) && chunk->type == AUDIO_ES ) )
@@ -638,7 +638,7 @@ static int sms_Read( stream_t *s, uint8_t *p_read, int i_read )
assert( type == ATOM_moof || type == ATOM_uuid );
}
- int len = -1;
+ uint64_t len = 0;
uint8_t *src = chunk->data + chunk->read_pos;
if( i_read <= chunk->size - chunk->read_pos )
len = i_read;
@@ -664,12 +664,13 @@ static int Read( stream_t *s, void *buffer, unsigned i_read )
{
stream_sys_t *p_sys = s->p_sys;
int length = 0;
+ i_read = __MIN(INT_MAX, i_read);
if( p_sys->b_error )
return 0;
length = sms_Read( s, (uint8_t*) buffer, i_read );
- if( length < 0 )
+ if( length == 0 )
return 0;
/* This call to sms_Read will increment p_sys->playback.index
@@ -677,8 +678,8 @@ static int Read( stream_t *s, void *buffer, unsigned i_read )
sms_Read( s, NULL, 0 );
p_sys->playback.boffset += length;
- if( (unsigned)length < i_read )
- msg_Warn( s, "could not read %i bytes, only %i!", i_read, length );
+ if( length < (int)i_read )
+ msg_Warn( s, "could not read %u bytes, only %u !", i_read, length );
return length;
}
diff --git a/modules/stream_filter/smooth/smooth.h b/modules/stream_filter/smooth/smooth.h
index 34340d1..5a546d8 100644
--- a/modules/stream_filter/smooth/smooth.h
+++ b/modules/stream_filter/smooth/smooth.h
@@ -35,18 +35,18 @@ typedef struct item_s
typedef struct sms_queue_s
{
- int length;
+ unsigned length;
item_t *first;
} sms_queue_t;
typedef struct chunk_s
{
- int64_t duration; /* chunk duration (seconds / TimeScale) */
- int64_t start_time; /* PTS (seconds / TimeScale) */
- int size; /* chunk size in bytes */
+ uint64_t duration; /* chunk duration (seconds / TimeScale) */
+ uint64_t start_time; /* PTS (seconds / TimeScale) */
+ uint64_t size; /* chunk size in bytes */
unsigned sequence; /* unique sequence number */
uint64_t offset; /* offset in the media */
- int read_pos; /* position in the chunk */
+ uint64_t read_pos; /* position in the chunk */
int type; /* video, audio, or subtitles */
uint8_t *data;
@@ -96,7 +96,7 @@ struct stream_sys_t
unsigned i_tracks; /* Total number of tracks in the Manifest */
sms_queue_t *bws; /* Measured bandwidths of the N last chunks */
uint64_t vod_duration; /* total duration of the VOD media */
- int64_t time_pos;
+ uint64_t time_pos;
unsigned timescale;
/* Download */
@@ -167,7 +167,7 @@ struct stream_sys_t
no_more_chunks( p_sys->download.ck_index, p_sys->selected_st ) )
void sms_queue_free( sms_queue_t* );
-sms_queue_t *sms_queue_init( const int );
+sms_queue_t *sms_queue_init( const unsigned int );
int sms_queue_put( sms_queue_t *, const uint64_t );
uint64_t sms_queue_avg( sms_queue_t *);
quality_level_t *get_qlevel( sms_stream_t *, const unsigned );
diff --git a/modules/stream_filter/smooth/utils.c b/modules/stream_filter/smooth/utils.c
index 7189d1a..3b17138 100644
--- a/modules/stream_filter/smooth/utils.c
+++ b/modules/stream_filter/smooth/utils.c
@@ -158,7 +158,7 @@ quality_level_t *get_qlevel( sms_stream_t *sms, const unsigned qid )
return NULL;
}
-sms_queue_t *sms_queue_init( const int length )
+sms_queue_t *sms_queue_init( const unsigned length )
{
sms_queue_t *ret = malloc( sizeof( sms_queue_t ) );
if( unlikely( !ret ) )
@@ -184,7 +184,7 @@ int sms_queue_put( sms_queue_t *queue, const uint64_t value )
{
/* Remove the last (and oldest) item */
item_t *item, *prev = NULL;
- int count = 0;
+ unsigned int count = 0;
for( item = queue->first; item != NULL; item = item->next )
{
count++;
@@ -216,7 +216,7 @@ uint64_t sms_queue_avg( sms_queue_t *queue )
if( last == NULL )
return 0;
uint64_t sum = queue->first->value;
- for( int i = 0; i < queue->length - 1; i++ )
+ for( unsigned int i = 0; queue->length && i < queue->length - 1; i++ )
{
if( last )
{
More information about the vlc-commits
mailing list