[vlc-commits] trivial_mixer: specialize filter callbacks directly
vlc | branch: master | Rémi Denis-Courmont r...@remlab.net | Sun Nov 2 11:07:55 2014 +0200| [81765639fdae8b0c9532c31e90e49eb6aecd5d72] | committer: Rémi Denis-Courmont trivial_mixer: specialize filter callbacks directly http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=81765639fdae8b0c9532c31e90e49eb6aecd5d72 --- modules/audio_filter/channel_mixer/trivial.c | 201 +- 1 file changed, 100 insertions(+), 101 deletions(-) diff --git a/modules/audio_filter/channel_mixer/trivial.c b/modules/audio_filter/channel_mixer/trivial.c index 417de8f..a8c20dd 100644 --- a/modules/audio_filter/channel_mixer/trivial.c +++ b/modules/audio_filter/channel_mixer/trivial.c @@ -1,8 +1,7 @@ /* * trivial.c : trivial channel mixer plug-in (drops unwanted channels) * - * Copyright (C) 2002, 2006 VLC authors and VideoLAN - * $Id$ + * Copyright (C) 2002, 2006, 2014 VLC authors and VideoLAN * * Authors: Christophe Massiot mass...@via.ecp.fr * @@ -46,143 +45,138 @@ vlc_module_begin () set_callbacks( Create, NULL ) vlc_module_end () -typedef void (*mix_func_t)(float *, const float *, size_t, unsigned, unsigned); - /** - * Trivially down-mixes or up-mixes a buffer + * Trivially upmixes */ -static void SparseCopy( float *p_dest, const float *p_src, size_t i_len, -unsigned i_output_stride, unsigned i_input_stride ) +static block_t *Upmix( filter_t *p_filter, block_t *p_in_buf ) { -for( size_t i = 0; i i_len; i-- ) -{ -for( unsigned j = 0; j i_output_stride; j++ ) -p_dest[j] = p_src[j % i_input_stride]; +unsigned i_input_nb = aout_FormatNbChannels( p_filter-fmt_in.audio ); +unsigned i_output_nb = aout_FormatNbChannels( p_filter-fmt_out.audio ); -p_src += i_input_stride; -p_dest += i_output_stride; +assert( i_input_nb i_output_nb ); + +block_t *p_out_buf = block_Alloc( + p_in_buf-i_buffer * i_output_nb / i_input_nb ); +if( unlikely(p_out_buf == NULL) ) +{ +block_Release( p_in_buf ); +return NULL; } -} -static void CopyLeft( float *p_dest, const float *p_src, size_t i_len, - unsigned i_output_stride, unsigned i_input_stride ) -{ -assert( i_output_stride == 2 ); -assert( i_input_stride == 2 ); +p_out_buf-i_nb_samples = p_in_buf-i_nb_samples; +p_out_buf-i_dts= p_in_buf-i_dts; +p_out_buf-i_pts= p_in_buf-i_pts; +p_out_buf-i_length = p_in_buf-i_length; -for( unsigned i = 0; i i_len; i++ ) +float *p_dest = (float *)p_out_buf-p_buffer; +const float *p_src = (float *)p_in_buf-p_buffer; + +for( size_t i = 0; i p_in_buf-i_nb_samples; i-- ) { -*(p_dest++) = *p_src; -*(p_dest++) = *p_src; -p_src += 2; +for( unsigned j = 0; j i_output_nb; j++ ) +p_dest[j] = p_src[j]; + +p_src += i_input_nb; +p_dest += i_output_nb; } + +block_Release( p_in_buf ); +return p_out_buf; } -static void CopyRight( float *p_dest, const float *p_src, size_t i_len, -unsigned i_output_stride, unsigned i_input_stride ) +/** + * Trivially downmixes (i.e. drop extra channels) + */ +static block_t *Downmix( filter_t *p_filter, block_t *p_buf ) { -assert( i_output_stride == 2 ); -assert( i_input_stride == 2 ); +unsigned i_input_nb = aout_FormatNbChannels( p_filter-fmt_in.audio ); +unsigned i_output_nb = aout_FormatNbChannels( p_filter-fmt_out.audio ); -for( unsigned i = 0; i i_len; i++ ) +assert( i_input_nb = i_output_nb ); + +float *p_dest = (float *)p_buf-p_buffer; +const float *p_src = p_dest; + +for( size_t i = 0; i p_buf-i_nb_samples; i-- ) { -p_src++; -*(p_dest++) = *p_src; -*(p_dest++) = *p_src; -p_src++; +for( unsigned j = 0; j i_output_nb; j++ ) +p_dest[j] = p_src[j % i_input_nb]; + +p_src += i_input_nb; +p_dest += i_output_nb; } + +return p_buf; } -static void ExtractLeft( float *p_dest, const float *p_src, size_t i_len, - unsigned i_output_stride, unsigned i_input_stride ) +static block_t *CopyLeft( filter_t *p_filter, block_t *p_buf ) { -assert( i_output_stride == 1 ); -assert( i_input_stride == 2 ); +float *p = (float *)p_buf-p_buffer; -for( unsigned i = 0; i i_len; i++ ) +for( unsigned i = 0; i p_buf-i_nb_samples; i++ ) { -*(p_dest++) = *p_src; -p_src += 2; +p[1] = p[0]; +p += 2; } +(void) p_filter; +return p_buf; } -static void ExtractRight( float *p_dest, const float *p_src, size_t i_len, - unsigned i_output_stride, unsigned i_input_stride ) +static block_t *CopyRight( filter_t
[vlc-commits] trivial_mixer: select conversion in Create(), not DoWork()
vlc | branch: master | Rémi Denis-Courmont r...@remlab.net | Sun Nov 2 10:52:19 2014 +0200| [1047340ebc8f59895d7ad8747f7ec48528a31f64] | committer: Rémi Denis-Courmont trivial_mixer: select conversion in Create(), not DoWork() http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1047340ebc8f59895d7ad8747f7ec48528a31f64 --- modules/audio_filter/channel_mixer/trivial.c | 152 ++ 1 file changed, 105 insertions(+), 47 deletions(-) diff --git a/modules/audio_filter/channel_mixer/trivial.c b/modules/audio_filter/channel_mixer/trivial.c index 14823cb..417de8f 100644 --- a/modules/audio_filter/channel_mixer/trivial.c +++ b/modules/audio_filter/channel_mixer/trivial.c @@ -29,6 +29,8 @@ # include config.h #endif +#include assert.h + #include vlc_common.h #include vlc_plugin.h #include vlc_aout.h @@ -44,6 +46,8 @@ vlc_module_begin () set_callbacks( Create, NULL ) vlc_module_end () +typedef void (*mix_func_t)(float *, const float *, size_t, unsigned, unsigned); + /** * Trivially down-mixes or up-mixes a buffer */ @@ -60,6 +64,80 @@ static void SparseCopy( float *p_dest, const float *p_src, size_t i_len, } } +static void CopyLeft( float *p_dest, const float *p_src, size_t i_len, + unsigned i_output_stride, unsigned i_input_stride ) +{ +assert( i_output_stride == 2 ); +assert( i_input_stride == 2 ); + +for( unsigned i = 0; i i_len; i++ ) +{ +*(p_dest++) = *p_src; +*(p_dest++) = *p_src; +p_src += 2; +} +} + +static void CopyRight( float *p_dest, const float *p_src, size_t i_len, +unsigned i_output_stride, unsigned i_input_stride ) +{ +assert( i_output_stride == 2 ); +assert( i_input_stride == 2 ); + +for( unsigned i = 0; i i_len; i++ ) +{ +p_src++; +*(p_dest++) = *p_src; +*(p_dest++) = *p_src; +p_src++; +} +} + +static void ExtractLeft( float *p_dest, const float *p_src, size_t i_len, + unsigned i_output_stride, unsigned i_input_stride ) +{ +assert( i_output_stride == 1 ); +assert( i_input_stride == 2 ); + +for( unsigned i = 0; i i_len; i++ ) +{ +*(p_dest++) = *p_src; +p_src += 2; +} +} + +static void ExtractRight( float *p_dest, const float *p_src, size_t i_len, + unsigned i_output_stride, unsigned i_input_stride ) +{ +assert( i_output_stride == 1 ); +assert( i_input_stride == 2 ); + +for( unsigned i = 0; i i_len; i++ ) +{ +p_src++; +*(p_dest++) = *(p_src++); +} +} + +static void ReverseStereo( float *p_dest, const float *p_src, size_t i_len, + unsigned i_output_stride, unsigned i_input_stride ) +{ +assert( i_output_stride == 2 ); +assert( i_input_stride == 2 ); + +/* Reverse-stereo mode */ +for( unsigned i = 0; i i_len; i++ ) +{ +float i_tmp = p_src[0]; + +p_dest[0] = p_src[1]; +p_dest[1] = i_tmp; + +p_dest += 2; +p_src += 2; +} +} + /** * Mixes a buffer */ @@ -96,53 +174,11 @@ static block_t *DoWork( filter_t *p_filter, block_t *p_in_buf ) b_dualmono2stereo = (p_filter-fmt_out.audio.i_physical_channels ( AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT )); b_dualmono2stereo = ((p_filter-fmt_out.audio.i_physical_channels AOUT_CHAN_PHYSMASK) != (p_filter-fmt_in.audio.i_physical_channels AOUT_CHAN_PHYSMASK)); -if( likely( !b_reverse_stereo ! b_dualmono2stereo ) ) -{ -SparseCopy( p_dest, p_src, p_in_buf-i_nb_samples, i_output_nb, -i_input_nb ); -} -/* Special case from dual mono to stereo */ -else if( b_dualmono2stereo ) -{ -/* This is a bit special. */ -if( !(p_filter-fmt_out.audio.i_original_channels AOUT_CHAN_LEFT) ) -{ -p_src++; -} -if( p_filter-fmt_out.audio.i_physical_channels == AOUT_CHAN_CENTER ) -{ /* Mono mode */ -for( unsigned i = 0; i p_in_buf-i_nb_samples; i++ ) -{ -*p_dest = *p_src; -p_dest++; -p_src += 2; -} -} -else -{ /* Fake-stereo mode */ -for( unsigned i = 0; i p_in_buf-i_nb_samples; i++ ) -{ -*p_dest = *p_src; -p_dest++; -*p_dest = *p_src; -p_dest++; -p_src += 2; -} -} -} -else if( b_reverse_stereo ) -{ -/* Reverse-stereo mode */ -for ( unsigned i = 0; i p_in_buf-i_nb_samples; i++ ) -{ -float i_tmp = p_src[0]; -p_dest[0] = p_src[1]; -p_dest[1] = i_tmp; - -p_dest += 2; -p_src += 2; -} -} +mix_func_t func = p_filter-p_sys; + +if( func != NULL ) +func( p_dest, p_src, p_in_buf-i_nb_samples, i_output_nb, i_input_nb
[vlc-commits] PulseAudio: clobber original channels (refs #12673)
vlc | branch: master | Rémi Denis-Courmont r...@remlab.net | Sun Nov 2 11:35:16 2014 +0200| [a842bc4778ea330326af8abf6de5659c78e30cb7] | committer: Rémi Denis-Courmont PulseAudio: clobber original channels (refs #12673) Do like the other outputs do. http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a842bc4778ea330326af8abf6de5659c78e30cb7 --- modules/audio_output/pulse.c |1 + 1 file changed, 1 insertion(+) diff --git a/modules/audio_output/pulse.c b/modules/audio_output/pulse.c index a2da4d7..069cf6a 100644 --- a/modules/audio_output/pulse.c +++ b/modules/audio_output/pulse.c @@ -759,6 +759,7 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt) } if (fmt-i_physical_channels AOUT_CHAN_LFE) map.map[map.channels++] = PA_CHANNEL_POSITION_LFE; +fmt-i_original_channels = fmt-i_physical_channels; for (unsigned i = 0; map.channels ss.channels; i++) { map.map[map.channels++] = PA_CHANNEL_POSITION_AUX0 + i; ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] trivial_mixer: cosmetics
vlc | branch: master | Rémi Denis-Courmont r...@remlab.net | Sun Nov 2 10:16:49 2014 +0200| [a6c5f999ea28070c73f3c7db47414f666fdd6265] | committer: Rémi Denis-Courmont trivial_mixer: cosmetics http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a6c5f999ea28070c73f3c7db47414f666fdd6265 --- modules/audio_filter/channel_mixer/trivial.c | 109 +++--- 1 file changed, 47 insertions(+), 62 deletions(-) diff --git a/modules/audio_filter/channel_mixer/trivial.c b/modules/audio_filter/channel_mixer/trivial.c index b5d8457..14823cb 100644 --- a/modules/audio_filter/channel_mixer/trivial.c +++ b/modules/audio_filter/channel_mixer/trivial.c @@ -34,16 +34,8 @@ #include vlc_aout.h #include vlc_filter.h -/* - * Local prototypes - */ -static int Create( vlc_object_t * ); - -static block_t *DoWork( filter_t *, block_t * ); +static int Create( vlc_object_t * ); -/* - * Module descriptor - */ vlc_module_begin () set_description( N_(Audio filter for trivial channel mixing) ) set_capability( audio converter, 1 ) @@ -52,56 +44,31 @@ vlc_module_begin () set_callbacks( Create, NULL ) vlc_module_end () -/* - * Create: allocate trivial channel mixer - */ -static int Create( vlc_object_t *p_this ) -{ -filter_t * p_filter = (filter_t *)p_this; - -if ( (p_filter-fmt_in.audio.i_physical_channels - == p_filter-fmt_out.audio.i_physical_channels -p_filter-fmt_in.audio.i_original_channels - == p_filter-fmt_out.audio.i_original_channels) - || p_filter-fmt_in.audio.i_format != p_filter-fmt_out.audio.i_format - || p_filter-fmt_in.audio.i_rate != p_filter-fmt_out.audio.i_rate - || p_filter-fmt_in.audio.i_format != VLC_CODEC_FL32 ) -{ -return VLC_EGENERIC; -} - -p_filter-pf_audio_filter = DoWork; -return VLC_SUCCESS; -} - -/* - * SparseCopy: trivially downmix or upmix a buffer - */ -static void SparseCopy( float * p_dest, const float * p_src, size_t i_len, -int i_output_stride, int i_input_stride ) +/** + * Trivially down-mixes or up-mixes a buffer + */ +static void SparseCopy( float *p_dest, const float *p_src, size_t i_len, +unsigned i_output_stride, unsigned i_input_stride ) { -int i; -for ( i = i_len; i--; ) +for( size_t i = 0; i i_len; i-- ) { -int j; -for ( j = 0; j i_output_stride; j++ ) -{ +for( unsigned j = 0; j i_output_stride; j++ ) p_dest[j] = p_src[j % i_input_stride]; -} + p_src += i_input_stride; p_dest += i_output_stride; } } -/* - * DoWork: convert a buffer - */ -static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf ) +/** + * Mixes a buffer + */ +static block_t *DoWork( filter_t *p_filter, block_t *p_in_buf ) { int i_input_nb = aout_FormatNbChannels( p_filter-fmt_in.audio ); int i_output_nb = aout_FormatNbChannels( p_filter-fmt_out.audio ); - block_t *p_out_buf; + if( i_input_nb = i_output_nb ) { p_out_buf = p_in_buf; /* mix in place */ @@ -113,6 +80,7 @@ static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf ) p_in_buf-i_buffer * i_output_nb / i_input_nb ); if( !p_out_buf ) goto out; + /* on upmixing case, zero out buffer */ memset( p_out_buf-p_buffer, 0, p_out_buf-i_buffer ); p_out_buf-i_nb_samples = p_in_buf-i_nb_samples; @@ -121,8 +89,8 @@ static block_t *DoWork( filter_t * p_filter, block_t * p_in_buf ) p_out_buf-i_length = p_in_buf-i_length; } -float * p_dest = (float *)p_out_buf-p_buffer; -const float * p_src = (float *)p_in_buf-p_buffer; +float *p_dest = (float *)p_out_buf-p_buffer; +const float *p_src = (float *)p_in_buf-p_buffer; const bool b_reverse_stereo = p_filter-fmt_out.audio.i_original_channels AOUT_CHAN_REVERSESTEREO; bool b_dualmono2stereo = (p_filter-fmt_in.audio.i_original_channels AOUT_CHAN_DUALMONO ); b_dualmono2stereo = (p_filter-fmt_out.audio.i_physical_channels ( AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT )); @@ -134,18 +102,16 @@ static block_t *DoWork( filter_t * p_filter,
[vlc-commits] trivial_mixer: try to fix dual-mono (fixes #12673)
vlc | branch: master | Rémi Denis-Courmont r...@remlab.net | Sun Nov 2 12:08:56 2014 +0200| [d6388f26bb6efef29397ba91b02befc427b3423e] | committer: Rémi Denis-Courmont trivial_mixer: try to fix dual-mono (fixes #12673) Original channels is under-specified in my opinion. If you know where the design documentation is, please tell me. http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d6388f26bb6efef29397ba91b02befc427b3423e --- modules/audio_filter/channel_mixer/trivial.c | 81 -- 1 file changed, 50 insertions(+), 31 deletions(-) diff --git a/modules/audio_filter/channel_mixer/trivial.c b/modules/audio_filter/channel_mixer/trivial.c index a8c20dd..d05155a 100644 --- a/modules/audio_filter/channel_mixer/trivial.c +++ b/modules/audio_filter/channel_mixer/trivial.c @@ -185,45 +185,64 @@ static block_t *ReverseStereo( filter_t *p_filter, block_t *p_buf ) static int Create( vlc_object_t *p_this ) { filter_t *p_filter = (filter_t *)p_this; -block_t *(*func)(filter_t *, block_t *) = NULL; +const audio_format_t *infmt = p_filter-fmt_in.audio; +const audio_format_t *outfmt = p_filter-fmt_out.audio; -if( p_filter-fmt_in.audio.i_format != p_filter-fmt_out.audio.i_format - || p_filter-fmt_in.audio.i_rate != p_filter-fmt_out.audio.i_rate - || p_filter-fmt_in.audio.i_format != VLC_CODEC_FL32 ) +if( infmt-i_format != outfmt-i_format + || infmt-i_rate != outfmt-i_rate + || infmt-i_format != VLC_CODEC_FL32 ) return VLC_EGENERIC; -if( p_filter-fmt_in.audio.i_physical_channels - == p_filter-fmt_out.audio.i_physical_channels - p_filter-fmt_in.audio.i_original_channels - == p_filter-fmt_out.audio.i_original_channels ) +if( infmt-i_physical_channels == outfmt-i_physical_channels + infmt-i_original_channels == outfmt-i_original_channels ) return VLC_EGENERIC; -const bool b_reverse_stereo = p_filter-fmt_out.audio.i_original_channels AOUT_CHAN_REVERSESTEREO; -bool b_dualmono2stereo = (p_filter-fmt_in.audio.i_original_channels AOUT_CHAN_DUALMONO ); -b_dualmono2stereo = (p_filter-fmt_out.audio.i_physical_channels ( AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT )); -b_dualmono2stereo = ((p_filter-fmt_out.audio.i_physical_channels AOUT_CHAN_PHYSMASK) != (p_filter-fmt_in.audio.i_physical_channels AOUT_CHAN_PHYSMASK)); - -if( likely( !b_reverse_stereo ! b_dualmono2stereo ) ) +if( outfmt-i_physical_channels == AOUT_CHANS_STEREO ) { -if( aout_FormatNbChannels( p_filter-fmt_out.audio ) - aout_FormatNbChannels( p_filter-fmt_in.audio ) ) -func = Upmix; -else -func = Downmix; +bool swap = (outfmt-i_original_channels AOUT_CHAN_REVERSESTEREO) + != (infmt-i_original_channels AOUT_CHAN_REVERSESTEREO); + +if( (outfmt-i_original_channels AOUT_CHAN_PHYSMASK) +== AOUT_CHAN_LEFT ) +{ +p_filter-pf_audio_filter = swap ? CopyRight : CopyLeft; +return VLC_SUCCESS; +} + +if( (outfmt-i_original_channels AOUT_CHAN_PHYSMASK) + == AOUT_CHAN_RIGHT ) +{ +p_filter-pf_audio_filter = swap ? CopyLeft : CopyRight; +return VLC_SUCCESS; +} + +if( swap ) +{ +p_filter-pf_audio_filter = ReverseStereo; +return VLC_SUCCESS; +} } -/* Special case from dual mono to stereo */ -else if( b_dualmono2stereo ) + +if ( aout_FormatNbChannels( outfmt ) == 1 ) { -bool right = !(p_filter-fmt_out.audio.i_original_channels AOUT_CHAN_LEFT); -if( p_filter-fmt_out.audio.i_physical_channels == AOUT_CHAN_CENTER ) -/* Mono mode */ -func = right ? ExtractRight : ExtractLeft; -else -/* Fake-stereo mode */ -func = right ? CopyRight : CopyLeft; +bool mono = !!(infmt-i_original_channels AOUT_CHAN_DUALMONO); + +if( mono (infmt-i_original_channels AOUT_CHAN_LEFT) ) +{ +p_filter-pf_audio_filter = ExtractLeft; +return VLC_SUCCESS; +} + +if( mono (infmt-i_original_channels AOUT_CHAN_RIGHT) ) +{ +p_filter-pf_audio_filter = ExtractRight; +return VLC_SUCCESS; +} } -else /* b_reverse_stereo */ -func = ReverseStereo; -p_filter-pf_audio_filter = func; +if( aout_FormatNbChannels( outfmt ) aout_FormatNbChannels( infmt ) ) +p_filter-pf_audio_filter = Upmix; +else +p_filter-pf_audio_filter = Downmix; + return VLC_SUCCESS; } ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] PulseAudio: clobber original channels (refs #12673)
vlc/vlc-2.2 | branch: master | Rémi Denis-Courmont r...@remlab.net | Sun Nov 2 11:35:16 2014 +0200| [5a53ff0de2eeaab69980975ec8a4c6e6b78f190a] | committer: Rémi Denis-Courmont PulseAudio: clobber original channels (refs #12673) Do like the other outputs do. (cherry picked from commit a842bc4778ea330326af8abf6de5659c78e30cb7) http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=5a53ff0de2eeaab69980975ec8a4c6e6b78f190a --- modules/audio_output/pulse.c |1 + 1 file changed, 1 insertion(+) diff --git a/modules/audio_output/pulse.c b/modules/audio_output/pulse.c index a2da4d7..069cf6a 100644 --- a/modules/audio_output/pulse.c +++ b/modules/audio_output/pulse.c @@ -759,6 +759,7 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt) } if (fmt-i_physical_channels AOUT_CHAN_LFE) map.map[map.channels++] = PA_CHANNEL_POSITION_LFE; +fmt-i_original_channels = fmt-i_physical_channels; for (unsigned i = 0; map.channels ss.channels; i++) { map.map[map.channels++] = PA_CHANNEL_POSITION_AUX0 + i; ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] codec: avcodec: simplify clock set condition
vlc | branch: master | Francois Cartegnie fcvlc...@free.fr | Sun Nov 2 14:18:00 2014 +0100| [7307480b7a9b72d0f19a155216c608121a174a98] | committer: Francois Cartegnie codec: avcodec: simplify clock set condition date is always = VLC_TS_INVALID http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7307480b7a9b72d0f19a155216c608121a174a98 --- modules/codec/avcodec/audio.c |3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/codec/avcodec/audio.c b/modules/codec/avcodec/audio.c index 0812b36..a37f1cf 100644 --- a/modules/codec/avcodec/audio.c +++ b/modules/codec/avcodec/audio.c @@ -380,8 +380,7 @@ static block_t *DecodeAudio( decoder_t *p_dec, block_t **pp_block ) if( p_dec-fmt_out.audio.i_rate != (unsigned int)ctx-sample_rate ) date_Init( p_sys-end_date, ctx-sample_rate, 1 ); -if( p_block-i_pts VLC_TS_INVALID -p_block-i_pts date_Get( p_sys-end_date ) ) +if( p_block-i_pts date_Get( p_sys-end_date ) ) { date_Set( p_sys-end_date, p_block-i_pts ); } ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] demux: avi: set PCR on seek
vlc | branch: master | Francois Cartegnie fcvlc...@free.fr | Sun Nov 2 15:12:22 2014 +0100| [3d95e735d7135abcd7c031a87f6b43ecff0ea3bd] | committer: Francois Cartegnie demux: avi: set PCR on seek http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=3d95e735d7135abcd7c031a87f6b43ecff0ea3bd --- modules/demux/avi/avi.c |3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/demux/avi/avi.c b/modules/demux/avi/avi.c index 2d16936..53f3590 100644 --- a/modules/demux/avi/avi.c +++ b/modules/demux/avi/avi.c @@ -1533,8 +1533,9 @@ static int Seek( demux_t *p_demux, mtime_t i_date, int i_percent ) p_stream-b_eof = AVI_TrackSeek( p_demux, i_stream, i_date ) != 0; } -es_out_Control( p_demux-out, ES_OUT_SET_NEXT_DISPLAY_TIME, i_date ); p_sys-i_time = i_date; +es_out_Control( p_demux-out, ES_OUT_SET_PCR, VLC_TS_0 + p_sys-i_time ); +es_out_Control( p_demux-out, ES_OUT_SET_NEXT_DISPLAY_TIME, VLC_TS_0 + p_sys-i_time ); msg_Dbg( p_demux, seek: %PRId64 seconds, p_sys-i_time /CLOCK_FREQ ); return VLC_SUCCESS; ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] httpcookies: fix heap read overflow (fixes #12674)
vlc | branch: master | Rémi Denis-Courmont r...@remlab.net | Sun Nov 2 17:06:40 2014 +0200| [24b37f4859f716c86ad2649837b32184818a5da0] | committer: Rémi Denis-Courmont httpcookies: fix heap read overflow (fixes #12674) Cc: Antti Ajanki antti.aja...@iki.fi http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=24b37f4859f716c86ad2649837b32184818a5da0 --- src/misc/httpcookies.c | 14 ++ 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/misc/httpcookies.c b/src/misc/httpcookies.c index 4536880..7bd9850 100644 --- a/src/misc/httpcookies.c +++ b/src/misc/httpcookies.c @@ -332,10 +332,16 @@ static bool cookie_domain_matches( const http_cookie_t * cookie, const char *hos size_t host_len = strlen(host); size_t cookie_domain_len = strlen(cookie-psz_domain); -int i = host_len - cookie_domain_len; -bool is_suffix = ( i 0 ) -vlc_ascii_strcasecmp( host[i], cookie-psz_domain ) == 0; -bool has_dot_before_suffix = host[i-1] == '.'; +bool is_suffix = false, has_dot_before_suffix = false; + +if( host_len cookie_domain_len ) +{ +size_t i = host_len - cookie_domain_len; + +is_suffix = vlc_ascii_strcasecmp( host[i], cookie-psz_domain ) == 0; +has_dot_before_suffix = host[i-1] == '.'; +} + bool host_is_ipv4 = strspn(host, 0123456789.) == host_len; bool host_is_ipv6 = strchr(host, ':') != NULL; return is_suffix has_dot_before_suffix ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] access: bd: add assertion
vlc | branch: master | Tristan Matthews tma...@videolan.org | Sun Nov 2 18:08:15 2014 -0500| [ac7ec2d22c41ee2f614c22a818d0c658f6e1caaa] | committer: Tristan Matthews access: bd: add assertion http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ac7ec2d22c41ee2f614c22a818d0c658f6e1caaa --- modules/access/bd/bd.c |1 + 1 file changed, 1 insertion(+) diff --git a/modules/access/bd/bd.c b/modules/access/bd/bd.c index bf9ccd5..3b17f55 100644 --- a/modules/access/bd/bd.c +++ b/modules/access/bd/bd.c @@ -610,6 +610,7 @@ static int SetPlayItem( demux_t *p_demux, int i_mpls, int i_play_item ) if( p_sys-pp_clpi[i_clpi]-i_id == p_mpls_clpi-i_id ) p_clpi = p_sys-pp_clpi[i_clpi]; } +assert(p_clpi); const bool b_same_clpi = b_same_mpls p_sys-p_clpi-i_id == p_clpi-i_id; stream_t *p_m2ts = NULL; ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits
[vlc-commits] demux: ogg: avoid use-after-free
vlc | branch: master | Tristan Matthews tma...@videolan.org | Sun Nov 2 17:51:30 2014 -0500| [ba65ae57333c6252b9288cfa8e10a52d4082e51c] | committer: Tristan Matthews demux: ogg: avoid use-after-free http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ba65ae57333c6252b9288cfa8e10a52d4082e51c --- modules/demux/ogg.c |1 + 1 file changed, 1 insertion(+) diff --git a/modules/demux/ogg.c b/modules/demux/ogg.c index 260ea48..61102ec 100644 --- a/modules/demux/ogg.c +++ b/modules/demux/ogg.c @@ -1612,6 +1612,7 @@ static int Ogg_FindLogicalStreams( demux_t *p_demux ) { msg_Dbg( p_demux, found invalid Daala header ); Ogg_LogicalStreamDelete( p_demux, p_stream ); +p_stream = NULL; p_ogg-i_streams--; } } ___ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits