[vlc-devel] [PATCH 05/11] demux: wav: parse ds64 in a new function
Thomas Guillem
thomas at gllm.fr
Thu Mar 12 15:05:46 CET 2020
---
modules/demux/wav.c | 41 +++++++++++++++++++++++++++--------------
1 file changed, 27 insertions(+), 14 deletions(-)
diff --git a/modules/demux/wav.c b/modules/demux/wav.c
index 45d475c1f00..c8829648730 100644
--- a/modules/demux/wav.c
+++ b/modules/demux/wav.c
@@ -248,6 +248,32 @@ static void Close ( vlc_object_t * p_this )
free( p_sys );
}
+static int ChunkParseDS64( demux_t *p_demux, uint32_t i_size )
+{
+ demux_sys_t *p_sys = p_demux->p_sys;
+ const uint8_t *p_peek;
+
+ if( i_size < 24 )
+ {
+ msg_Err( p_demux, "invalid 'ds64' chunk" );
+ return VLC_EGENERIC;
+ }
+
+ if( vlc_stream_Peek( p_demux->s, &p_peek, 24 ) < 24 )
+ return VLC_EGENERIC;
+
+ uint64_t i_data_size = GetQWLE( &p_peek[8] );
+ if( i_data_size >> 62 )
+ p_sys->i_data_size = (int64_t)1 << 62;
+ else
+ p_sys->i_data_size = i_data_size;
+
+ if( ChunkSkip( p_demux, i_size ) != VLC_SUCCESS )
+ return VLC_EGENERIC;
+
+ return VLC_SUCCESS;
+}
+
static int ChunkParseFmt( demux_t *p_demux, uint32_t i_size )
{
demux_sys_t *p_sys = p_demux->p_sys;
@@ -508,7 +534,6 @@ static int Open( vlc_object_t * p_this )
const uint8_t *p_peek;
bool b_is_rf64;
unsigned int i_size;
- uint64_t i_data_size;
/* Is it a wav file ? */
if( vlc_stream_Peek( p_demux->s, &p_peek, 12 ) < 12 )
@@ -545,19 +570,7 @@ static int Open( vlc_object_t * p_this )
msg_Err( p_demux, "cannot find 'ds64' chunk" );
goto error;
}
- if( i_size < 24 )
- {
- msg_Err( p_demux, "invalid 'ds64' chunk" );
- goto error;
- }
- if( vlc_stream_Peek( p_demux->s, &p_peek, 24 ) < 24 )
- goto error;
- i_data_size = GetQWLE( &p_peek[8] );
- if( i_data_size >> 62 )
- p_sys->i_data_size = (int64_t)1 << 62;
- else
- p_sys->i_data_size = i_data_size;
- if( ChunkSkip( p_demux, i_size ) != VLC_SUCCESS )
+ if( ChunkParseDS64( p_demux, i_size ) != VLC_SUCCESS )
goto error;
}
--
2.20.1
More information about the vlc-devel
mailing list