vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Tue Jul 23 20:39:51 2019 +0300| [0fa1d4e11145b2e9e59766428f9f0e4339858365] | committer: Rémi Denis-Courmont
xiph: constify xiph_SplitHeaders() ... and fix invalid pointer conversion from const void ** to void ** in xiph_PacketHeaders(). > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0fa1d4e11145b2e9e59766428f9f0e4339858365 --- modules/codec/daala.c | 8 ++++---- modules/codec/kate.c | 6 +++--- modules/codec/opus.c | 4 ++-- modules/codec/speex.c | 6 +++--- modules/codec/theora.c | 8 ++++---- modules/codec/vorbis.c | 8 ++++---- modules/demux/avformat/mux.c | 2 +- modules/demux/ogg.c | 23 +++++++++++++++-------- modules/demux/xiph.h | 8 +++++--- modules/mux/ogg.c | 10 ++++++---- modules/stream_out/rtpfmt.c | 5 +++-- 11 files changed, 50 insertions(+), 38 deletions(-) diff --git a/modules/codec/daala.c b/modules/codec/daala.c index cb6e2d0c95..ad516e1cd3 100644 --- a/modules/codec/daala.c +++ b/modules/codec/daala.c @@ -278,7 +278,7 @@ static int ProcessHeaders( decoder_t *p_dec ) daala_setup_info *ds = NULL; /* daala setup information */ unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; if( xiph_SplitHeaders( pi_size, pp_data, &i_count, p_dec->fmt_in.i_extra, p_dec->fmt_in.p_extra) ) @@ -293,7 +293,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* Take care of the initial info header */ dpacket.b_o_s = 1; /* yes this actually is a b_o_s packet :) */ dpacket.bytes = pi_size[0]; - dpacket.packet = pp_data[0]; + dpacket.packet = (void *)pp_data[0]; if( daala_decode_header_in( &p_sys->di, &p_sys->dc, &ds, &dpacket ) < 0 ) { msg_Err( p_dec, "this bitstream does not contain Daala video data" ); @@ -354,7 +354,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* The next packet in order is the comments header */ dpacket.b_o_s = 0; dpacket.bytes = pi_size[1]; - dpacket.packet = pp_data[1]; + dpacket.packet = (void *)pp_data[1]; if( daala_decode_header_in( &p_sys->di, &p_sys->dc, &ds, &dpacket ) < 0 ) { @@ -370,7 +370,7 @@ static int ProcessHeaders( decoder_t *p_dec ) * missing or corrupted header is fatal. */ dpacket.b_o_s = 0; dpacket.bytes = pi_size[2]; - dpacket.packet = pp_data[2]; + dpacket.packet = (void *)pp_data[2]; if( daala_decode_header_in( &p_sys->di, &p_sys->dc, &ds, &dpacket ) < 0 ) { msg_Err( p_dec, "Daala setup header is corrupted" ); diff --git a/modules/codec/kate.c b/modules/codec/kate.c index 65c810295c..cb2e2672fb 100644 --- a/modules/codec/kate.c +++ b/modules/codec/kate.c @@ -532,7 +532,7 @@ static int ProcessHeaders( decoder_t *p_dec ) kate_packet kp; unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; if( xiph_SplitHeaders( pi_size, pp_data, &i_count, p_dec->fmt_in.i_extra, p_dec->fmt_in.p_extra) ) @@ -543,7 +543,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* Take care of the initial Kate header */ kp.nbytes = pi_size[0]; - kp.data = pp_data[0]; + kp.data = (void *)pp_data[0]; int i_ret = kate_decode_headerin( &p_sys->ki, &p_sys->kc, &kp ); if( i_ret < 0 ) { @@ -560,7 +560,7 @@ static int ProcessHeaders( decoder_t *p_dec ) for( unsigned i_headeridx = 1; i_headeridx < i_count; i_headeridx++ ) { kp.nbytes = pi_size[i_headeridx]; - kp.data = pp_data[i_headeridx]; + kp.data = (void *)pp_data[i_headeridx]; i_ret = kate_decode_headerin( &p_sys->ki, &p_sys->kc, &kp ); if( i_ret < 0 ) { diff --git a/modules/codec/opus.c b/modules/codec/opus.c index 5faa34c464..c6aaf407cb 100644 --- a/modules/codec/opus.c +++ b/modules/codec/opus.c @@ -242,7 +242,7 @@ static int ProcessHeaders( decoder_t *p_dec ) ogg_packet oggpacket; unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; int i_extra = p_dec->fmt_in.i_extra; @@ -284,7 +284,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* Take care of the initial Opus header */ oggpacket.b_o_s = 1; /* yes this actually is a b_o_s packet :) */ oggpacket.bytes = pi_size[0]; - oggpacket.packet = pp_data[0]; + oggpacket.packet = (void *)pp_data[0]; int ret = ProcessInitialHeader( p_dec, &oggpacket ); if (ret != VLC_SUCCESS) diff --git a/modules/codec/speex.c b/modules/codec/speex.c index 5f7c093245..38eb459dc6 100644 --- a/modules/codec/speex.c +++ b/modules/codec/speex.c @@ -410,7 +410,7 @@ static int ProcessHeaders( decoder_t *p_dec ) ogg_packet oggpacket; unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; if( xiph_SplitHeaders( pi_size, pp_data, &i_count, p_dec->fmt_in.i_extra, p_dec->fmt_in.p_extra) ) @@ -425,7 +425,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* Take care of the initial Vorbis header */ oggpacket.b_o_s = 1; /* yes this actually is a b_o_s packet :) */ oggpacket.bytes = pi_size[0]; - oggpacket.packet = pp_data[0]; + oggpacket.packet = (void *)pp_data[0]; if( ProcessInitialHeader( p_dec, &oggpacket ) != VLC_SUCCESS ) { msg_Err( p_dec, "initial Speex header is corrupted" ); @@ -435,7 +435,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* The next packet in order is the comments header */ oggpacket.b_o_s = 0; oggpacket.bytes = pi_size[1]; - oggpacket.packet = pp_data[1]; + oggpacket.packet = (void *)pp_data[1]; ParseSpeexComments( p_dec, &oggpacket ); if( p_sys->b_packetizer ) diff --git a/modules/codec/theora.c b/modules/codec/theora.c index a4874f1f47..b038502fd2 100644 --- a/modules/codec/theora.c +++ b/modules/codec/theora.c @@ -257,7 +257,7 @@ static int ProcessHeaders( decoder_t *p_dec ) int i_max_pp, i_pp; unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; if( xiph_SplitHeaders( pi_size, pp_data, &i_count, p_dec->fmt_in.i_extra, p_dec->fmt_in.p_extra) ) @@ -272,7 +272,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* Take care of the initial Vorbis header */ oggpacket.b_o_s = 1; /* yes this actually is a b_o_s packet :) */ oggpacket.bytes = pi_size[0]; - oggpacket.packet = pp_data[0]; + oggpacket.packet = (void *)pp_data[0]; if( th_decode_headerin( &p_sys->ti, &p_sys->tc, &ts, &oggpacket ) < 0 ) { msg_Err( p_dec, "this bitstream does not contain Theora video data" ); @@ -360,7 +360,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* The next packet in order is the comments header */ oggpacket.b_o_s = 0; oggpacket.bytes = pi_size[1]; - oggpacket.packet = pp_data[1]; + oggpacket.packet = (void *)pp_data[1]; if( th_decode_headerin( &p_sys->ti, &p_sys->tc, &ts, &oggpacket ) < 0 ) { @@ -375,7 +375,7 @@ static int ProcessHeaders( decoder_t *p_dec ) * missing or corrupted header is fatal. */ oggpacket.b_o_s = 0; oggpacket.bytes = pi_size[2]; - oggpacket.packet = pp_data[2]; + oggpacket.packet = (void *)pp_data[2]; if( th_decode_headerin( &p_sys->ti, &p_sys->tc, &ts, &oggpacket ) < 0 ) { msg_Err( p_dec, "3rd Theora header is corrupted" ); diff --git a/modules/codec/vorbis.c b/modules/codec/vorbis.c index a571e54c8f..39133e5ff2 100644 --- a/modules/codec/vorbis.c +++ b/modules/codec/vorbis.c @@ -351,7 +351,7 @@ static int ProcessHeaders( decoder_t *p_dec ) ogg_packet oggpacket; unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; if( xiph_SplitHeaders( pi_size, pp_data, &i_count, p_dec->fmt_in.i_extra, p_dec->fmt_in.p_extra) ) @@ -366,7 +366,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* Take care of the initial Vorbis header */ oggpacket.b_o_s = 1; /* yes this actually is a b_o_s packet :) */ oggpacket.bytes = pi_size[0]; - oggpacket.packet = pp_data[0]; + oggpacket.packet = (void *)pp_data[0]; if( vorbis_synthesis_headerin( &p_sys->vi, &p_sys->vc, &oggpacket ) < 0 ) { msg_Err( p_dec, "this bitstream does not contain Vorbis audio data"); @@ -397,7 +397,7 @@ static int ProcessHeaders( decoder_t *p_dec ) /* The next packet in order is the comments header */ oggpacket.b_o_s = 0; oggpacket.bytes = pi_size[1]; - oggpacket.packet = pp_data[1]; + oggpacket.packet = (void *)pp_data[1]; if( vorbis_synthesis_headerin( &p_sys->vi, &p_sys->vc, &oggpacket ) < 0 ) { msg_Err( p_dec, "2nd Vorbis header is corrupted" ); @@ -410,7 +410,7 @@ static int ProcessHeaders( decoder_t *p_dec ) * missing or corrupted header is fatal. */ oggpacket.b_o_s = 0; oggpacket.bytes = pi_size[2]; - oggpacket.packet = pp_data[2]; + oggpacket.packet = (void *)pp_data[2]; if( vorbis_synthesis_headerin( &p_sys->vi, &p_sys->vc, &oggpacket ) < 0 ) { msg_Err( p_dec, "3rd Vorbis header is corrupted" ); diff --git a/modules/demux/avformat/mux.c b/modules/demux/avformat/mux.c index 7244f51ffc..b9d9c378c8 100644 --- a/modules/demux/avformat/mux.c +++ b/modules/demux/avformat/mux.c @@ -202,7 +202,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) } unsigned opus_size[XIPH_MAX_HEADER_COUNT]; - void *opus_packet[XIPH_MAX_HEADER_COUNT]; + const void *opus_packet[XIPH_MAX_HEADER_COUNT]; if( fmt->i_codec == VLC_CODEC_OPUS ) { unsigned count; diff --git a/modules/demux/ogg.c b/modules/demux/ogg.c index ac349371c2..649e154a7e 100644 --- a/modules/demux/ogg.c +++ b/modules/demux/ogg.c @@ -2321,14 +2321,16 @@ static void Ogg_LogicalStreamDelete( demux_t *p_demux, logical_stream_t *p_strea static bool Ogg_IsVorbisFormatCompatible( const es_format_t *p_new, const es_format_t *p_old ) { unsigned pi_new_size[XIPH_MAX_HEADER_COUNT]; - void *pp_new_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_new_data[XIPH_MAX_HEADER_COUNT]; unsigned i_new_count; + if( xiph_SplitHeaders(pi_new_size, pp_new_data, &i_new_count, p_new->i_extra, p_new->p_extra ) ) i_new_count = 0; unsigned pi_old_size[XIPH_MAX_HEADER_COUNT]; - void *pp_old_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_old_data[XIPH_MAX_HEADER_COUNT]; unsigned i_old_count; + if( xiph_SplitHeaders(pi_old_size, pp_old_data, &i_old_count, p_old->i_extra, p_old->p_extra ) ) i_old_count = 0; @@ -2350,20 +2352,23 @@ static bool Ogg_IsOpusFormatCompatible( const es_format_t *p_new, const es_format_t *p_old ) { unsigned pi_new_size[XIPH_MAX_HEADER_COUNT]; - void *pp_new_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_new_data[XIPH_MAX_HEADER_COUNT]; unsigned i_new_count; + if( xiph_SplitHeaders(pi_new_size, pp_new_data, &i_new_count, p_new->i_extra, p_new->p_extra ) ) i_new_count = 0; + unsigned pi_old_size[XIPH_MAX_HEADER_COUNT]; - void *pp_old_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_old_data[XIPH_MAX_HEADER_COUNT]; unsigned i_old_count; + if( xiph_SplitHeaders(pi_old_size, pp_old_data, &i_old_count, p_old->i_extra, p_old->p_extra ) ) i_old_count = 0; bool b_match = false; if( i_new_count == i_old_count && i_new_count > 0 ) { static const unsigned char default_map[2] = { 0, 1 }; - unsigned char *p_old_head; + const unsigned char *p_old_head; unsigned char *p_new_head; const unsigned char *p_old_map; const unsigned char *p_new_map; @@ -2373,7 +2378,7 @@ static bool Ogg_IsOpusFormatCompatible( const es_format_t *p_new, int i_new_stream_count; int i_old_coupled_count; int i_new_coupled_count; - p_old_head = (unsigned char *)pp_old_data[0]; + p_old_head = pp_old_data[0]; i_old_channel_count = i_old_stream_count = i_old_coupled_count = 0; p_old_map = default_map; if( pi_old_size[0] >= 19 && p_old_head[8] <= 15 ) @@ -2523,7 +2528,7 @@ static void Ogg_ExtractXiphMeta( demux_t *p_demux, es_format_t *p_fmt, const void *p_headers, unsigned i_headers, unsigned i_skip ) { unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; if( xiph_SplitHeaders( pi_size, pp_data, &i_count, i_headers, p_headers ) ) @@ -2531,7 +2536,9 @@ static void Ogg_ExtractXiphMeta( demux_t *p_demux, es_format_t *p_fmt, /* TODO how to handle multiple comments properly ? */ if( i_count >= 2 && pi_size[1] > i_skip ) { - Ogg_ExtractComments( p_demux, p_fmt, (uint8_t*)pp_data[1] + i_skip, pi_size[1] - i_skip ); + Ogg_ExtractComments( p_demux, p_fmt, + (const uint8_t *)pp_data[1] + i_skip, + pi_size[1] - i_skip ); } } diff --git a/modules/demux/xiph.h b/modules/demux/xiph.h index 549e0ef276..eaa8158d7c 100644 --- a/modules/demux/xiph.h +++ b/modules/demux/xiph.h @@ -56,7 +56,8 @@ static inline unsigned int xiph_CountHeaders( const void *extra, unsigned int i_ } } -static inline int xiph_SplitHeaders(unsigned packet_size[], void * packet[], unsigned *packet_count, +static inline int xiph_SplitHeaders(unsigned packet_size[], + const void *packet[], unsigned *packet_count, unsigned extra_size, const void *extra) { const uint8_t *current = (const uint8_t *)extra; @@ -161,8 +162,9 @@ static inline int xiph_AppendHeaders(int *extra_size, void **extra, unsigned size, const void *data) { unsigned packet_size[XIPH_MAX_HEADER_COUNT]; - void *packet[XIPH_MAX_HEADER_COUNT]; + const void *packet[XIPH_MAX_HEADER_COUNT]; unsigned count; + if (*extra_size > 0 && *extra) { if (xiph_SplitHeaders(packet_size, packet, &count, *extra_size, *extra)) return VLC_EGENERIC; @@ -177,7 +179,7 @@ static inline int xiph_AppendHeaders(int *extra_size, void **extra, packet_size[count] = size; packet[count] = (void*)data; if (xiph_PackHeaders(extra_size, extra, packet_size, - (const void **)packet, count + 1)) { + packet, count + 1)) { *extra_size = 0; *extra = NULL; } diff --git a/modules/mux/ogg.c b/modules/mux/ogg.c index 3baff56e78..c41b940434 100644 --- a/modules/mux/ogg.c +++ b/modules/mux/ogg.c @@ -1021,8 +1021,9 @@ static bool OggCreateHeaders( sout_mux_t *p_mux ) { /* First packet in order: vorbis/speex/opus/theora/daala info */ unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; + if( xiph_SplitHeaders( pi_size, pp_data, &i_count, p_input->p_fmt->i_extra, p_input->p_fmt->p_extra ) ) { @@ -1032,7 +1033,7 @@ static bool OggCreateHeaders( sout_mux_t *p_mux ) } op.bytes = pi_size[0]; - op.packet = pp_data[0]; + op.packet = (void *)pp_data[0]; if( pi_size[0] <= 0 ) msg_Err( p_mux, "header data corrupted"); @@ -1187,8 +1188,9 @@ static bool OggCreateHeaders( sout_mux_t *p_mux ) p_stream->fmt.i_codec == VLC_CODEC_DAALA ) { unsigned pi_size[XIPH_MAX_HEADER_COUNT]; - void *pp_data[XIPH_MAX_HEADER_COUNT]; + const void *pp_data[XIPH_MAX_HEADER_COUNT]; unsigned i_count; + if( xiph_SplitHeaders( pi_size, pp_data, &i_count, p_input->p_fmt->i_extra, p_input->p_fmt->p_extra ) ) i_count = 0; @@ -1198,7 +1200,7 @@ static bool OggCreateHeaders( sout_mux_t *p_mux ) for( unsigned j = 1; j < i_count; j++ ) { op.bytes = pi_size[j]; - op.packet = pp_data[j]; + op.packet = (void *)pp_data[j]; if( pi_size[j] <= 0 ) msg_Err( p_mux, "header data corrupted"); diff --git a/modules/stream_out/rtpfmt.c b/modules/stream_out/rtpfmt.c index 29032581fd..356abd4eb6 100644 --- a/modules/stream_out/rtpfmt.c +++ b/modules/stream_out/rtpfmt.c @@ -72,8 +72,9 @@ static int rtp_xiph_pack_headers(size_t room, void *p_extra, size_t i_extra, uint8_t *theora_pixel_fmt) { unsigned packet_size[XIPH_MAX_HEADER_COUNT]; - void *packet[XIPH_MAX_HEADER_COUNT]; + const void *packet[XIPH_MAX_HEADER_COUNT]; unsigned packet_count; + if (xiph_SplitHeaders(packet_size, packet, &packet_count, i_extra, p_extra)) return VLC_EGENERIC;; @@ -84,7 +85,7 @@ static int rtp_xiph_pack_headers(size_t room, void *p_extra, size_t i_extra, { if (packet_size[0] < 42) return VLC_EGENERIC; - *theora_pixel_fmt = (((uint8_t *)packet[0])[41] >> 3) & 0x03; + *theora_pixel_fmt = (((const uint8_t *)packet[0])[41] >> 3) & 0x03; } unsigned length_size[2] = { 0, 0 }; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
