Update to VLC 2.0.6.

ok sthen@
This commit is contained in:
brad 2013-04-11 17:58:42 +00:00
parent 4f389a6a50
commit d3834966df
14 changed files with 18 additions and 803 deletions

View File

@ -1,16 +1,14 @@
# $OpenBSD: Makefile,v 1.169 2013/04/04 16:49:56 brad Exp $
# $OpenBSD: Makefile,v 1.170 2013/04/11 17:58:42 brad Exp $
SHARED_ONLY= Yes
COMMENT-main= VideoLAN client; multimedia player
COMMENT-jack= JACK audio output module for VLC
V= 2.0.5
V= 2.0.6
DISTNAME= vlc-${V}
PKGNAME-main= ${DISTNAME}
REVISION-main= 6
PKGNAME-jack= vlc-jack-${V}
REVISION-jack= 2
CATEGORIES= x11
MASTER_SITES= http://download.videolan.org/pub/videolan/vlc/${V}/
EXTRACT_SUFX= .tar.xz
@ -32,13 +30,13 @@ WANTLIB-main= GL ICE lib/qt4/QtGui QtCore SM SDL SDL_image X11 Xcomposite \
ass atk-1.0 avcodec avformat avutil bluray c cairo cddb dvbpsi \
dvdnav dvdread ebml stdc++ expat ffi fontconfig freetype \
fribidi gcrypt gdk-x11-2.0 gdk_pixbuf-2.0 gio-2.0 glib-2.0 \
gmodule-2.0 gmp gnutls gobject-2.0 gpg-error gthread-2.0 \
gtk-x11-2.0 harfbuzz hogweed icudata icule icuuc jpeg matroska \
nettle notify opus orc-0.4 ogg p11-kit pango-1.0 pangocairo-1.0 \
pangoft2-1.0 pcre pixman-1 png postproc pthread-stubs \
samplerate schroedinger-1.0>=2.0 sndio speex speexdsp \
swscale tag tar tasn1 tiff usbhid vorbis vorbisenc webp \
x264 xcb-composite xcb-keysyms xcb-randr xcb-render \
gmodule-2.0 gmp gnutls gobject-2.0 gpg-error graphite2 \
gthread-2.0 gtk-x11-2.0 harfbuzz hogweed icudata icule icuuc \
jpeg matroska nettle notify opus orc-0.4 ogg p11-kit pango-1.0 \
pangocairo-1.0 pangoft2-1.0 pcre pixman-1 png postproc \
pthread-stubs samplerate schroedinger-1.0>=2.0 sndio speex \
speexdsp swscale tag tar tasn1 tiff usbhid vorbis vorbisenc \
webp x264 xcb-composite xcb-keysyms xcb-randr xcb-render \
xcb-shape xcb-shm xcb-xfixes xcb-xv xcb xml2 z ${WANTLIB-common}
WANTLIB-jack= jack vlccore ${WANTLIB-common}

View File

@ -1,2 +1,2 @@
SHA256 (vlc-2.0.5.tar.xz) = 3/nrAIYbzZ+ERv9c7b08X9K+1GDmv6hL2eAfdQ7Za24=
SIZE (vlc-2.0.5.tar.xz) = 18369292
SHA256 (vlc-2.0.6.tar.xz) = McyYA14s42xxqPEFqlqH49i14gags/cgjFztQHy+GWM=
SIZE (vlc-2.0.6.tar.xz) = 18619836

View File

@ -1,6 +1,6 @@
$OpenBSD: patch-configure_ac,v 1.26 2013/03/09 09:32:03 brad Exp $
--- configure.ac.orig Mon Oct 22 05:03:51 2012
+++ configure.ac Fri Mar 8 19:45:35 2013
$OpenBSD: patch-configure_ac,v 1.27 2013/04/11 17:58:42 brad Exp $
--- configure.ac.orig Sun Apr 7 14:42:04 2013
+++ configure.ac Mon Apr 8 12:00:21 2013
@@ -122,10 +122,6 @@ case "${host_os}" in
;;
openbsd*)
@ -55,53 +55,7 @@ $OpenBSD: patch-configure_ac,v 1.26 2013/03/09 09:32:03 brad Exp $
], [
CPPFLAGS_live555="-I${CONTRIB_DIR}/include/liveMedia -I${CONTRIB_DIR}/include/groupsock -I${CONTRIB_DIR}/include/BasicUsageEnvironment -I${CONTRIB_DIR}/include/UsageEnvironment"
])
@@ -2415,23 +2384,28 @@ dnl
AC_ARG_ENABLE(avcodec,
[ --enable-avcodec libavcodec codec (default enabled)])
AS_IF([test "${enable_avcodec}" != "no"], [
- PKG_CHECK_MODULES(AVCODEC,[libavcodec >= 52.25.0 libavutil],
- [
- VLC_SAVE_FLAGS
- CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
- CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
- AC_CHECK_HEADERS(libavcodec/avcodec.h)
- AC_CHECK_HEADERS(libavutil/avutil.h)
- VLC_ADD_PLUGIN([avcodec])
- VLC_ADD_LIBS([avcodec],[$AVCODEC_LIBS])
- AS_IF([test "${ac_cv_ld_bsymbolic}" != "no"], [
- VLC_ADD_LIBS([avcodec],[-Wl,-Bsymbolic])
- ])
- VLC_ADD_CFLAGS([avcodec],[$AVCODEC_CFLAGS])
- VLC_RESTORE_FLAGS
- have_avcodec="yes"
- ],[
- AC_MSG_ERROR([${AVCODEC_PKG_ERRORS}. Pass --disable-avcodec to ignore this error.])
+ PKG_CHECK_MODULES(AVCODEC,[libavcodec >= 52.25.0 libavutil], [
+ PKG_CHECK_EXISTS([libavcodec < 55],, [
+ AC_MSG_ERROR([libavcodec versions 55 and later are not supported yet.])
+ ])
+ VLC_SAVE_FLAGS
+ CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"
+ CFLAGS="${CFLAGS} ${AVCODEC_CFLAGS}"
+ LIBS="${LIBS} ${AVCODEC_LIBS}"
+ AC_CHECK_LIB(avutil, av_sample_fmt_is_planar,
+ AC_DEFINE([HAVE_AVUTIL_PLANAR], [1], [Define if libav* use planar audio formats]))
+ AC_CHECK_HEADERS(libavcodec/avcodec.h)
+ AC_CHECK_HEADERS(libavutil/avutil.h)
+ VLC_ADD_PLUGIN([avcodec])
+ VLC_ADD_LIBS([avcodec],[$AVCODEC_LIBS])
+ AS_IF([test "${ac_cv_ld_bsymbolic}" != "no"], [
+ VLC_ADD_LIBS([avcodec],[-Wl,-Bsymbolic])
+ ])
+ VLC_ADD_CFLAGS([avcodec],[$AVCODEC_CFLAGS])
+ VLC_RESTORE_FLAGS
+ have_avcodec="yes"
+ ],[
+ AC_MSG_ERROR([${AVCODEC_PKG_ERRORS}. Pass --disable-avcodec to ignore this error.])
])
], [
have_avcodec="no"
@@ -3514,6 +3488,24 @@ AS_IF([test "$enable_oss" != "no"], [
@@ -3519,6 +3488,24 @@ AS_IF([test "$enable_oss" != "no"], [
])
AC_SUBST(OSS_LIBS)
AM_CONDITIONAL([HAVE_OSS], [test "${have_oss}" = "yes"])

View File

@ -1,21 +0,0 @@
$OpenBSD: patch-include_vlc_common_h,v 1.3 2013/01/03 03:07:29 brad Exp $
--- include/vlc_common.h.orig Mon Dec 31 21:37:48 2012
+++ include/vlc_common.h Mon Dec 31 21:39:40 2012
@@ -659,7 +659,7 @@ static inline uint16_t bswap16 (uint16_t x)
VLC_USED
static inline uint32_t bswap32 (uint32_t x)
{
-#if VLC_GCC_VERSION(4,3)
+#if VLC_GCC_VERSION(4,3) || defined(__clang__)
return __builtin_bswap32 (x);
#else
return ((x & 0x000000FF) << 24)
@@ -673,7 +673,7 @@ static inline uint32_t bswap32 (uint32_t x)
VLC_USED
static inline uint64_t bswap64 (uint64_t x)
{
-#if VLC_GCC_VERSION(4,3)
+#if VLC_GCC_VERSION(4,3) || defined(__clang__)
return __builtin_bswap64 (x);
#elif !defined (__cplusplus)
return ((x & 0x00000000000000FF) << 56)

View File

@ -1,21 +0,0 @@
$OpenBSD: patch-include_vlc_cpu_h,v 1.1 2013/01/03 03:07:29 brad Exp $
--- include/vlc_cpu.h.orig Mon Dec 31 21:37:12 2012
+++ include/vlc_cpu.h Mon Dec 31 21:37:38 2012
@@ -40,7 +40,7 @@
# if defined (__MMX__)
# define VLC_MMX
-# elif VLC_GCC_VERSION(4, 4)
+# elif VLC_GCC_VERSION(4, 4) || defined(__clang__)
# define VLC_MMX __attribute__ ((__target__ ("mmx")))
# else
# define VLC_MMX VLC_MMX_is_not_implemented_on_this_compiler
@@ -48,7 +48,7 @@
# if defined (__SSE__)
# define VLC_SSE
-# elif VLC_GCC_VERSION(4, 4)
+# elif VLC_GCC_VERSION(4, 4) || defined(__clang__)
# define VLC_SSE __attribute__ ((__target__ ("sse")))
# else
# define VLC_SSE VLC_SSE_is_not_implemented_on_this_compiler

View File

@ -1,163 +0,0 @@
$OpenBSD: patch-modules_codec_avcodec_audio_c,v 1.1 2013/03/09 09:32:03 brad Exp $
--- modules/codec/avcodec/audio.c.orig Fri Mar 8 16:28:52 2013
+++ modules/codec/avcodec/audio.c Fri Mar 8 16:29:02 2013
@@ -29,6 +29,8 @@
# include "config.h"
#endif
+#include <assert.h>
+
#include <vlc_common.h>
#include <vlc_aout.h>
#include <vlc_codec.h>
@@ -81,6 +83,42 @@ struct decoder_sys_t
int64_t i_previous_layout;
};
+/**
+ * Interleaves audio samples within a block of samples.
+ * \param dst destination buffer for interleaved samples
+ * \param src source buffer with consecutive planes of samples
+ * \param samples number of samples (per channel/per plane)
+ * \param chans channels/planes count
+ * \param fourcc sample format (must be a linear sample format)
+ * \note The samples must be naturally aligned in memory.
+ * \warning Destination and source buffers MUST NOT overlap.
+ */
+static void Interleave( void *restrict dst, const void *restrict src,
+ unsigned samples, unsigned chans, vlc_fourcc_t fourcc )
+{
+#define INTERLEAVE_TYPE(type) \
+do { \
+ type *d = dst; \
+ const type *s = src; \
+ for( size_t i = 0; i < chans; i++ ) { \
+ for( size_t j = 0, k = 0; j < samples; j++, k += chans ) \
+ d[k] = *(s++); \
+ d++; \
+ } \
+} while(0)
+
+ switch( fourcc )
+ {
+ case VLC_CODEC_U8: INTERLEAVE_TYPE(uint8_t); break;
+ case VLC_CODEC_S16N: INTERLEAVE_TYPE(uint16_t); break;
+ case VLC_CODEC_FL32: INTERLEAVE_TYPE(float); break;
+ case VLC_CODEC_S32N: INTERLEAVE_TYPE(int32_t); break;
+ case VLC_CODEC_FL64: INTERLEAVE_TYPE(double); break;
+ default: assert(0);
+ }
+#undef INTERLEAVE_TYPE
+}
+
#define BLOCK_FLAG_PRIVATE_REALLOCATED (1 << BLOCK_FLAG_PRIVATE_SHIFT)
static void SetupOutputFormat( decoder_t *p_dec, bool b_trust );
@@ -230,6 +268,7 @@ static aout_buffer_t *SplitBuffer( decoder_t *p_dec )
{
decoder_sys_t *p_sys = p_dec->p_sys;
int i_samples = __MIN( p_sys->i_samples, 4096 );
+ int sample_planar=0;
aout_buffer_t *p_buffer;
if( i_samples == 0 ) return NULL;
@@ -241,16 +280,26 @@ static aout_buffer_t *SplitBuffer( decoder_t *p_dec )
p_buffer->i_length = date_Increment( &p_sys->end_date, i_samples )
- p_buffer->i_pts;
+ sample_planar = av_sample_fmt_is_planar( p_sys->p_context->sample_fmt );
+ if( sample_planar )
+ Interleave( p_buffer->p_buffer, p_sys->p_samples, i_samples, p_sys->p_context->channels, p_dec->fmt_out.audio.i_format );
+
if( p_sys->b_extract )
+ {
+ if( sample_planar )
+ memcpy( p_sys->p_samples, p_buffer->p_buffer, p_buffer->i_buffer );
+
aout_ChannelExtract( p_buffer->p_buffer, p_dec->fmt_out.audio.i_channels,
p_sys->p_samples, p_sys->p_context->channels, i_samples,
p_sys->pi_extraction, p_dec->fmt_out.audio.i_bitspersample );
- else
+ }
+ else if (!sample_planar)
memcpy( p_buffer->p_buffer, p_sys->p_samples, p_buffer->i_buffer );
p_sys->p_samples += i_samples * p_sys->p_context->channels * ( p_dec->fmt_out.audio.i_bitspersample / 8 );
p_sys->i_samples -= i_samples;
+
return p_buffer;
}
@@ -416,33 +465,25 @@ void EndAudioDec( decoder_t *p_dec )
*
*****************************************************************************/
-void GetVlcAudioFormat( vlc_fourcc_t *pi_codec, unsigned *pi_bits, int i_sample_fmt )
+vlc_fourcc_t GetVlcAudioFormat( int fmt )
{
- switch( i_sample_fmt )
- {
- case AV_SAMPLE_FMT_U8:
- *pi_codec = VLC_CODEC_U8;
- *pi_bits = 8;
- break;
- case AV_SAMPLE_FMT_S32:
- *pi_codec = VLC_CODEC_S32N;
- *pi_bits = 32;
- break;
- case AV_SAMPLE_FMT_FLT:
- *pi_codec = VLC_CODEC_FL32;
- *pi_bits = 32;
- break;
- case AV_SAMPLE_FMT_DBL:
- *pi_codec = VLC_CODEC_FL64;
- *pi_bits = 64;
- break;
-
- case AV_SAMPLE_FMT_S16:
- default:
- *pi_codec = VLC_CODEC_S16N;
- *pi_bits = 16;
- break;
- }
+ static const vlc_fourcc_t fcc[] = {
+ [AV_SAMPLE_FMT_U8] = VLC_CODEC_U8,
+ [AV_SAMPLE_FMT_S16] = VLC_CODEC_S16N,
+ [AV_SAMPLE_FMT_S32] = VLC_CODEC_S32N,
+ [AV_SAMPLE_FMT_FLT] = VLC_CODEC_FL32,
+ [AV_SAMPLE_FMT_DBL] = VLC_CODEC_FL64,
+#ifdef HAVE_AVUTIL_PLANAR
+ [AV_SAMPLE_FMT_U8P] = VLC_CODEC_U8,
+ [AV_SAMPLE_FMT_S16P] = VLC_CODEC_S16N,
+ [AV_SAMPLE_FMT_S32P] = VLC_CODEC_S32N,
+ [AV_SAMPLE_FMT_FLTP] = VLC_CODEC_FL32,
+ [AV_SAMPLE_FMT_DBLP] = VLC_CODEC_FL64,
+#endif
+ };
+ if( (sizeof(fcc) / sizeof(fcc[0])) > (unsigned)fmt )
+ return fcc[fmt];
+ return VLC_CODEC_S16N;
}
static const uint64_t pi_channels_map[][2] =
@@ -473,9 +514,8 @@ static void SetupOutputFormat( decoder_t *p_dec, bool
{
decoder_sys_t *p_sys = p_dec->p_sys;
- GetVlcAudioFormat( &p_dec->fmt_out.i_codec,
- &p_dec->fmt_out.audio.i_bitspersample,
- p_sys->p_context->sample_fmt );
+ p_dec->fmt_out.i_codec = GetVlcAudioFormat( p_sys->p_context->sample_fmt );
+ p_dec->fmt_out.audio.i_format = p_dec->fmt_out.i_codec;
p_dec->fmt_out.audio.i_rate = p_sys->p_context->sample_rate;
/* */
@@ -527,6 +567,6 @@ static void SetupOutputFormat( decoder_t *p_dec, bool
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = i_layout_dst;
- p_dec->fmt_out.audio.i_channels = i_channels_dst;
+ aout_FormatPrepare( &p_dec->fmt_out.audio );
}

View File

@ -1,15 +0,0 @@
$OpenBSD: patch-modules_codec_avcodec_avcodec_c,v 1.2 2013/03/30 02:06:26 brad Exp $
Re-enable the multi-threaded mode for the avcodec backend.
--- modules/codec/avcodec/avcodec.c.orig Tue Mar 19 19:45:29 2013
+++ modules/codec/avcodec/avcodec.c Tue Mar 19 19:46:39 2013
@@ -132,7 +132,7 @@ vlc_module_begin ()
add_bool( "ffmpeg-hw", false, HW_TEXT, HW_LONGTEXT, false )
#endif
#if defined(FF_THREAD_FRAME)
- add_integer( "ffmpeg-threads", 1, THREADS_TEXT, THREADS_LONGTEXT, true );
+ add_integer( "ffmpeg-threads", 0, THREADS_TEXT, THREADS_LONGTEXT, true );
#endif

View File

@ -1,27 +0,0 @@
$OpenBSD: patch-modules_codec_avcodec_avcodec_h,v 1.1 2013/03/09 09:32:03 brad Exp $
--- modules/codec/avcodec/avcodec.h.orig Fri Mar 8 16:29:45 2013
+++ modules/codec/avcodec/avcodec.h Fri Mar 8 16:29:50 2013
@@ -21,13 +21,22 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifndef HAVE_AVUTIL_PLANAR
+# define av_sample_fmt_is_planar(x) (0)
+#endif
+
+
#include "chroma.h"
/* VLC <-> avcodec tables */
int GetFfmpegCodec( vlc_fourcc_t i_fourcc, int *pi_cat,
int *pi_ffmpeg_codec, const char **ppsz_name );
int GetVlcFourcc( int i_ffmpeg_codec, int *pi_cat,
vlc_fourcc_t *pi_fourcc, const char **ppsz_name );
-void GetVlcAudioFormat( vlc_fourcc_t *, unsigned *pi_bits, int i_sample_fmt );
+vlc_fourcc_t GetVlcAudioFormat( int i_sample_fmt );
picture_t * DecodeVideo ( decoder_t *, block_t ** );
aout_buffer_t * DecodeAudio( decoder_t *, block_t ** );

View File

@ -1,126 +0,0 @@
$OpenBSD: patch-modules_codec_avcodec_encoder_c,v 1.1 2013/03/09 09:32:03 brad Exp $
--- modules/codec/avcodec/encoder.c.orig Fri Mar 8 16:31:00 2013
+++ modules/codec/avcodec/encoder.c Fri Mar 8 16:31:07 2013
@@ -32,6 +32,8 @@
# include "config.h"
#endif
+#include <assert.h>
+
#include <vlc_common.h>
#include <vlc_aout.h>
#include <vlc_sout.h>
@@ -188,6 +190,42 @@ static const uint16_t mpeg4_default_non_intra_matrix[6
23, 24, 25, 27, 28, 30, 31, 33,
};
+/**
+ * Deinterleaves audio samples within a block of samples.
+ * \param dst destination buffer for planar samples
+ * \param src source buffer with interleaved samples
+ * \param samples number of samples (per channel/per plane)
+ * \param chans channels/planes count
+ * \param fourcc sample format (must be a linear sample format)
+ * \note The samples must be naturally aligned in memory.
+ * \warning Destination and source buffers MUST NOT overlap.
+ */
+static void Deinterleave( void *restrict dst, const void *restrict src,
+ unsigned samples, unsigned chans, vlc_fourcc_t fourcc )
+{
+#define DEINTERLEAVE_TYPE(type) \
+do { \
+ type *d = dst; \
+ const type *s = src; \
+ for( size_t i = 0; i < chans; i++ ) { \
+ for( size_t j = 0, k = 0; j < samples; j++, k += chans ) \
+ *(d++) = s[k]; \
+ s++; \
+ } \
+} while(0)
+
+ switch( fourcc )
+ {
+ case VLC_CODEC_U8: DEINTERLEAVE_TYPE(uint8_t); break;
+ case VLC_CODEC_S16N: DEINTERLEAVE_TYPE(uint16_t); break;
+ case VLC_CODEC_FL32: DEINTERLEAVE_TYPE(float); break;
+ case VLC_CODEC_S32N: DEINTERLEAVE_TYPE(int32_t); break;
+ case VLC_CODEC_FL64: DEINTERLEAVE_TYPE(double); break;
+ default: assert(0);
+ }
+#undef DEINTERLEAVE_TYPE
+}
+
/*****************************************************************************
* OpenEncoder: probe the encoder
*****************************************************************************/
@@ -612,7 +650,8 @@ int OpenEncoder( vlc_object_t *p_this )
p_context->sample_fmt = p_codec->sample_fmts ?
p_codec->sample_fmts[0] :
AV_SAMPLE_FMT_S16;
- p_enc->fmt_in.i_codec = VLC_CODEC_S16N;
+ p_enc->fmt_in.i_codec = GetVlcAudioFormat( p_context->sample_fmt );
+
p_context->sample_rate = p_enc->fmt_out.audio.i_rate;
p_context->time_base.num = 1;
p_context->time_base.den = p_context->sample_rate;
@@ -826,9 +865,9 @@ int OpenEncoder( vlc_object_t *p_this )
if( p_enc->fmt_in.i_cat == AUDIO_ES )
{
- GetVlcAudioFormat( &p_enc->fmt_in.i_codec,
- &p_enc->fmt_in.audio.i_bitspersample,
- p_sys->p_context->sample_fmt );
+ p_enc->fmt_in.i_codec = GetVlcAudioFormat( p_sys->p_context->sample_fmt );
+ p_enc->fmt_in.audio.i_bitspersample = aout_BitsPerSample( p_enc->fmt_in.i_codec );
+
p_sys->i_sample_bytes = (p_enc->fmt_in.audio.i_bitspersample / 8) *
p_context->channels;
p_sys->i_frame_size = p_context->frame_size > 1 ?
@@ -1105,8 +1144,12 @@ static block_t *EncodeAudio( encoder_t *p_enc, aout_bu
int i_size = (p_sys->i_frame_size - i_delay_size) *
p_sys->i_sample_bytes;
- memcpy( p_sys->p_buffer + i_delay_size * p_sys->i_sample_bytes,
- p_buffer, i_size );
+ if( av_sample_fmt_is_planar( p_sys->p_context->sample_fmt ) )
+ Deinterleave( &p_sys->p_buffer[i_delay_size * p_sys->i_sample_bytes],
+ p_buffer, i_samples_delay, p_enc->fmt_in.audio.i_channels, p_enc->fmt_in.i_codec );
+ else
+ memcpy( p_sys->p_buffer + i_delay_size * p_sys->i_sample_bytes,
+ p_buffer, i_size );
p_buffer -= i_delay_size * p_sys->i_sample_bytes;
i_samples += i_samples_delay;
i_samples_delay = 0;
@@ -1115,7 +1158,14 @@ static block_t *EncodeAudio( encoder_t *p_enc, aout_bu
}
else
{
- p_samples = p_buffer;
+ if( av_sample_fmt_is_planar( p_sys->p_context->sample_fmt ) ) {
+ Deinterleave( p_sys->p_buffer,
+ p_buffer, p_sys->i_frame_size,
+ p_enc->fmt_in.audio.i_channels,
+ p_enc->fmt_in.i_codec );
+ p_samples = p_sys->p_buffer;
+ } else
+ p_samples = p_buffer;
}
i_out = avcodec_encode_audio( p_sys->p_context, p_sys->p_buffer_out,
@@ -1148,9 +1198,13 @@ static block_t *EncodeAudio( encoder_t *p_enc, aout_bu
/* Backup the remaining raw samples */
if( i_samples )
{
- memcpy( &p_sys->p_buffer[i_samples_delay * p_sys->i_sample_bytes],
- p_buffer,
- i_samples * p_sys->i_sample_bytes );
+ if( av_sample_fmt_is_planar( p_sys->p_context->sample_fmt ) )
+ Deinterleave( &p_sys->p_buffer[i_samples_delay * p_sys->i_sample_bytes],
+ p_buffer, i_samples, p_enc->fmt_in.audio.i_channels, p_enc->fmt_in.i_codec );
+ else
+ memcpy( &p_sys->p_buffer[i_samples_delay * p_sys->i_sample_bytes],
+ p_buffer,
+ i_samples * p_sys->i_sample_bytes );
}
return p_chain;

View File

@ -1,159 +0,0 @@
$OpenBSD: patch-modules_demux_asf_asf_c,v 1.1 2013/02/06 13:07:05 brad Exp $
Fix crash with broken ASF files (SA-1302).
--- modules/demux/asf/asf.c.orig Tue Aug 28 13:25:19 2012
+++ modules/demux/asf/asf.c Tue Feb 5 07:53:12 2013
@@ -383,15 +383,30 @@ static mtime_t GetMoviePTS( demux_sys_t *p_sys )
return i_time;
}
-#define GETVALUE2b( bits, var, def ) \
- switch( (bits)&0x03 ) \
- { \
- case 1: var = p_peek[i_skip]; i_skip++; break; \
- case 2: var = GetWLE( p_peek + i_skip ); i_skip+= 2; break; \
- case 3: var = GetDWLE( p_peek + i_skip ); i_skip+= 4; break; \
- case 0: \
- default: var = def; break;\
+static inline int GetValue2b(int *var, const uint8_t *p, int *skip, int left, int bits)
+{
+ switch(bits&0x03)
+ {
+ case 1:
+ if (left < 1)
+ return -1;
+ *var = p[*skip]; *skip += 1;
+ return 0;
+ case 2:
+ if (left < 2)
+ return -1;
+ *var = GetWLE(&p[*skip]); *skip += 2;
+ return 0;
+ case 3:
+ if (left < 4)
+ return -1;
+ *var = GetDWLE(&p[*skip]); *skip += 4;
+ return 0;
+ case 0:
+ default:
+ return 0;
}
+}
static int DemuxPacket( demux_t *p_demux )
{
@@ -405,15 +420,15 @@ static int DemuxPacket( demux_t *p_demux )
int i_packet_property;
int b_packet_multiple_payload;
- int i_packet_length;
- int i_packet_sequence;
- int i_packet_padding_length;
+ int i_packet_length = i_data_packet_min;
+ int i_packet_sequence = 0;
+ int i_packet_padding_length = 0;
uint32_t i_packet_send_time;
- uint16_t i_packet_duration;
int i_payload;
int i_payload_count;
int i_payload_length_type;
+ int peek_size;
if( stream_Peek( p_demux->s, &p_peek,i_data_packet_min)<i_data_packet_min )
@@ -421,6 +436,7 @@ static int DemuxPacket( demux_t *p_demux )
msg_Warn( p_demux, "cannot peek while getting new packet, EOF ?" );
return 0;
}
+ peek_size = i_data_packet_min;
i_skip = 0;
/* *** parse error correction if present *** */
@@ -461,9 +477,12 @@ static int DemuxPacket( demux_t *p_demux )
b_packet_multiple_payload = i_packet_flags&0x01;
/* read some value */
- GETVALUE2b( i_packet_flags >> 5, i_packet_length, i_data_packet_min );
- GETVALUE2b( i_packet_flags >> 1, i_packet_sequence, 0 );
- GETVALUE2b( i_packet_flags >> 3, i_packet_padding_length, 0 );
+ if (GetValue2b(&i_packet_length, p_peek, &i_skip, peek_size - i_skip, i_packet_flags >> 5) < 0)
+ goto loop_error_recovery;
+ if (GetValue2b(&i_packet_sequence, p_peek, &i_skip, peek_size - i_skip, i_packet_flags >> 1) < 0)
+ goto loop_error_recovery;
+ if (GetValue2b(&i_packet_padding_length, p_peek, &i_skip, peek_size - i_skip, i_packet_flags >> 3) < 0)
+ goto loop_error_recovery;
if( i_packet_padding_length > i_packet_length )
{
@@ -479,7 +498,7 @@ static int DemuxPacket( demux_t *p_demux )
}
i_packet_send_time = GetDWLE( p_peek + i_skip ); i_skip += 4;
- i_packet_duration = GetWLE( p_peek + i_skip ); i_skip += 2;
+ /* uint16_t i_packet_duration = GetWLE( p_peek + i_skip ); */ i_skip += 2;
i_packet_size_left = i_packet_length;
@@ -501,13 +520,13 @@ static int DemuxPacket( demux_t *p_demux )
int i_packet_keyframe;
unsigned int i_stream_number;
- int i_media_object_number;
+ int i_media_object_number = 0;
int i_media_object_offset;
- int i_replicated_data_length;
- int i_payload_data_length;
+ int i_replicated_data_length = 0;
+ int i_payload_data_length = 0;
int i_payload_data_pos;
int i_sub_payload_data_length;
- int i_tmp;
+ int i_tmp = 0;
mtime_t i_pts;
mtime_t i_pts_delta;
@@ -521,9 +540,12 @@ static int DemuxPacket( demux_t *p_demux )
i_packet_keyframe = p_peek[i_skip] >> 7;
i_stream_number = p_peek[i_skip++] & 0x7f;
- GETVALUE2b( i_packet_property >> 4, i_media_object_number, 0 );
- GETVALUE2b( i_packet_property >> 2, i_tmp, 0 );
- GETVALUE2b( i_packet_property, i_replicated_data_length, 0 );
+ if (GetValue2b(&i_media_object_number, p_peek, &i_skip, peek_size - i_skip, i_packet_property >> 4) < 0)
+ break;
+ if (GetValue2b(&i_tmp, p_peek, &i_skip, peek_size - i_skip, i_packet_property >> 2) < 0)
+ break;
+ if (GetValue2b(&i_replicated_data_length, p_peek, &i_skip, peek_size - i_skip, i_packet_property) < 0)
+ break;
if( i_replicated_data_length > 1 ) // should be at least 8 bytes
{
@@ -558,7 +580,9 @@ static int DemuxPacket( demux_t *p_demux )
i_pts = __MAX( i_pts - p_sys->p_fp->i_preroll * 1000, 0 );
if( b_packet_multiple_payload )
{
- GETVALUE2b( i_payload_length_type, i_payload_data_length, 0 );
+ i_payload_data_length = 0;
+ if (GetValue2b(&i_payload_data_length, p_peek, &i_skip, peek_size - i_skip, i_payload_length_type) < 0)
+ break;
}
else
{
@@ -645,6 +669,7 @@ static int DemuxPacket( demux_t *p_demux )
return 0;
}
i_packet_size_left -= i_read;
+ peek_size = 0;
p_frag->p_buffer += i_skip;
p_frag->i_buffer -= i_skip;
@@ -672,6 +697,7 @@ static int DemuxPacket( demux_t *p_demux )
msg_Warn( p_demux, "cannot peek, EOF ?" );
return 0;
}
+ peek_size = i_packet_size_left;
}
}
}

View File

@ -1,137 +0,0 @@
$OpenBSD: patch-modules_demux_mkv_Ebml_parser_cpp,v 1.1 2013/02/06 13:07:05 brad Exp $
Fix MKV behaviour with unknown or new EBML elements.
--- modules/demux/mkv/Ebml_parser.cpp.orig Fri Dec 9 11:58:27 2011
+++ modules/demux/mkv/Ebml_parser.cpp Tue Feb 5 07:55:42 2013
@@ -30,6 +30,7 @@
* Ebml Stream parser
*****************************************************************************/
EbmlParser::EbmlParser( EbmlStream *es, EbmlElement *el_start, demux_t *p_demux ) :
+ p_demux( p_demux ),
m_es( es ),
mi_level( 1 ),
m_got( NULL ),
@@ -103,7 +104,7 @@ void EbmlParser::Up( void )
{
if( mi_user_level == mi_level )
{
- fprintf( stderr,"MKV/Ebml Parser: Up cannot escape itself\n" );
+ msg_Warn( p_demux, "MKV/Ebml Parser: Up cannot escape itself" );
}
mi_user_level--;
@@ -133,15 +134,17 @@ void EbmlParser::Reset( demux_t *p_demux )
m_el[mi_level] = NULL;
mi_level--;
}
+ this->p_demux = p_demux;
mi_user_level = mi_level = 1;
// a little faster and cleaner
m_es->I_O().setFilePointer( static_cast<KaxSegment*>(m_el[0])->GetGlobalPosition(0) );
mb_dummy = var_InheritBool( p_demux, "mkv-use-dummy" );
}
-EbmlElement *EbmlParser::Get( void )
+EbmlElement *EbmlParser::Get( int n_call )
{
int i_ulev = 0;
+ EbmlElement *p_prev = NULL;
if( mi_user_level != mi_level )
{
@@ -155,24 +158,29 @@ EbmlElement *EbmlParser::Get( void )
return ret;
}
+ p_prev = m_el[mi_level];
if( m_el[mi_level] )
{
m_el[mi_level]->SkipData( *m_es, EBML_CONTEXT(m_el[mi_level]) );
- if( !mb_keep )
- {
- if( MKV_IS_ID( m_el[mi_level], KaxBlockVirtual ) )
- static_cast<KaxBlockVirtualWorkaround*>(m_el[mi_level])->Fix();
- delete m_el[mi_level];
- }
- mb_keep = false;
+
}
vlc_stream_io_callback & io_stream = (vlc_stream_io_callback &) m_es->I_O();
uint64 i_size = io_stream.toRead();
m_el[mi_level] = m_es->FindNextElement( EBML_CONTEXT(m_el[mi_level - 1]),
- i_ulev, i_size, mb_dummy, 1 );
+ i_ulev, i_size, true, 1 );
// mi_remain_size[mi_level] = m_el[mi_level]->GetSize();
if( i_ulev > 0 )
{
+ if( p_prev )
+ {
+ if( !mb_keep )
+ {
+ if( MKV_IS_ID( p_prev, KaxBlockVirtual ) )
+ static_cast<KaxBlockVirtualWorkaround*>(p_prev)->Fix();
+ delete p_prev;
+ }
+ mb_keep = false;
+ }
while( i_ulev > 0 )
{
if( mi_level == 1 )
@@ -192,9 +200,55 @@ EbmlElement *EbmlParser::Get( void )
}
else if( m_el[mi_level] == NULL )
{
- fprintf( stderr,"MKV/Ebml Parser: m_el[mi_level] == NULL\n" );
+ msg_Warn( p_demux,"MKV/Ebml Parser: m_el[mi_level] == NULL\n" );
}
+ else if( m_el[mi_level]->IsDummy() && !mb_dummy )
+ {
+ bool b_bad_position = false;
+ /* We got a dummy element but don't want those...
+ * perform a sanity check */
+ if( !mi_level )
+ {
+ msg_Err(p_demux, "Got invalid lvl 0 element... Aborting");
+ return NULL;
+ }
+ if( p_prev && p_prev->IsFiniteSize() &&
+ p_prev->GetEndPosition() != m_el[mi_level]->GetElementPosition())
+ {
+ msg_Err( p_demux, "Dummy Element at unexpected position... corrupted file?" );
+ b_bad_position = true;
+ }
+
+ if( n_call < 10 && !b_bad_position && m_el[mi_level]->IsFiniteSize() &&
+ ( !m_el[mi_level-1]->IsFiniteSize() ||
+ m_el[mi_level]->GetEndPosition() <= m_el[mi_level-1]->GetEndPosition() ) )
+ {
+ /* The element fits inside its upper element */
+ msg_Warn( p_demux, "Dummy element found... skipping it" );
+ return Get( ++n_call );
+ }
+ else
+ {
+ /* Too large, misplaced or 10 successive dummy elements */
+ msg_Err( p_demux, "Dummy element too large or misplaced... skipping to next upper element" );
+ delete m_el[mi_level];
+ m_el[mi_level] = NULL;
+ m_el[mi_level - 1]->SkipData( *m_es, EBML_CONTEXT(m_el[mi_level - 1]) );
+ return Get();
+ }
+ }
+
+ if( p_prev )
+ {
+ if( !mb_keep )
+ {
+ if( MKV_IS_ID( p_prev, KaxBlockVirtual ) )
+ static_cast<KaxBlockVirtualWorkaround*>(p_prev)->Fix();
+ delete p_prev;
+ }
+ mb_keep = false;
+ }
return m_el[mi_level];
}

View File

@ -1,37 +0,0 @@
$OpenBSD: patch-modules_demux_mkv_Ebml_parser_hpp,v 1.1 2013/02/06 13:07:05 brad Exp $
Fix MKV behaviour with unknown or new EBML elements.
--- modules/demux/mkv/Ebml_parser.hpp.orig Thu Dec 8 13:00:26 2011
+++ modules/demux/mkv/Ebml_parser.hpp Tue Feb 5 07:55:42 2013
@@ -39,7 +39,7 @@ class EbmlParser
void Up( void );
void Down( void );
void Reset( demux_t *p_demux );
- EbmlElement *Get( void );
+ EbmlElement *Get( int n_call = 0 );
void Keep( void );
EbmlElement *UnGet( uint64 i_block_pos, uint64 i_cluster_pos );
@@ -49,16 +49,17 @@ class EbmlParser
bool IsTopPresent( EbmlElement * ) const;
private:
+ demux_t *p_demux;
EbmlStream *m_es;
- int mi_level;
+ int mi_level;
EbmlElement *m_el[10];
int64_t mi_remain_size[10];
EbmlElement *m_got;
- int mi_user_level;
- bool mb_keep;
- bool mb_dummy;
+ int mi_user_level;
+ bool mb_keep;
+ bool mb_dummy;
};
/* This class works around a bug in KaxBlockVirtual implementation */

View File

@ -1,30 +0,0 @@
$OpenBSD: patch-modules_video_filter_deinterlace_yadif_h,v 1.1 2013/01/03 03:07:29 brad Exp $
--- modules/video_filter/deinterlace/yadif.h.orig Mon Dec 31 21:34:43 2012
+++ modules/video_filter/deinterlace/yadif.h Mon Dec 31 21:35:48 2012
@@ -39,7 +39,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x000100
#ifdef CAN_COMPILE_SSSE3
-#if defined(__SSE__) || VLC_GCC_VERSION(4, 4)
+#if defined(__SSE__) || VLC_GCC_VERSION(4, 4) || defined(__clang__)
// ================ SSSE3 =================
#define HAVE_YADIF_SSSE3
#define COMPILE_TEMPLATE_SSE 1
@@ -55,7 +55,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x000100
#endif
#ifdef CAN_COMPILE_SSE2
-#if defined(__SSE__) || VLC_GCC_VERSION(4, 4)
+#if defined(__SSE__) || VLC_GCC_VERSION(4, 4) || defined(__clang__)
// ================= SSE2 =================
#define HAVE_YADIF_SSE2
#define COMPILE_TEMPLATE_SSE 1
@@ -69,7 +69,7 @@ DECLARE_ASM_CONST(16, const xmm_reg, pw_1) = {0x000100
#endif
#ifdef CAN_COMPILE_MMX
-#if defined(__MMX__) || VLC_GCC_VERSION(4, 4)
+#if defined(__MMX__) || VLC_GCC_VERSION(4, 4) || defined(__clang__)
// ================ MMX =================
#define HAVE_YADIF_MMX
#define VLC_TARGET VLC_MMX

View File

@ -1,4 +1,4 @@
@comment $OpenBSD: PLIST-main,v 1.30 2013/01/03 03:18:21 brad Exp $
@comment $OpenBSD: PLIST-main,v 1.31 2013/04/11 17:58:42 brad Exp $
@pkgpath x11/vlc
%%amd64%%
%%i386%%
@ -58,6 +58,7 @@ include/vlc/plugins/vlc_image.h
include/vlc/plugins/vlc_inhibit.h
include/vlc/plugins/vlc_input.h
include/vlc/plugins/vlc_input_item.h
include/vlc/plugins/vlc_keys.h
include/vlc/plugins/vlc_main.h
include/vlc/plugins/vlc_md5.h
include/vlc/plugins/vlc_media_library.h
@ -438,6 +439,7 @@ share/locale/ach/LC_MESSAGES/
share/locale/ach/LC_MESSAGES/vlc.mo
share/locale/af/LC_MESSAGES/vlc.mo
share/locale/am/LC_MESSAGES/vlc.mo
share/locale/an/LC_MESSAGES/vlc.mo
share/locale/ar/LC_MESSAGES/vlc.mo
share/locale/ast/LC_MESSAGES/vlc.mo
share/locale/be/LC_MESSAGES/vlc.mo
@ -470,8 +472,6 @@ share/locale/ff/LC_MESSAGES/
share/locale/ff/LC_MESSAGES/vlc.mo
share/locale/fi/LC_MESSAGES/vlc.mo
share/locale/fr/LC_MESSAGES/vlc.mo
share/locale/fur/
share/locale/fur/LC_MESSAGES/
share/locale/fur/LC_MESSAGES/vlc.mo
share/locale/ga/LC_MESSAGES/vlc.mo
share/locale/gd/
@ -496,7 +496,6 @@ share/locale/kmr/
share/locale/kmr/LC_MESSAGES/
share/locale/kmr/LC_MESSAGES/vlc.mo
share/locale/ko/LC_MESSAGES/vlc.mo
share/locale/ku/LC_MESSAGES/vlc.mo
share/locale/lg/LC_MESSAGES/vlc.mo
share/locale/lt/LC_MESSAGES/vlc.mo
share/locale/lv/LC_MESSAGES/vlc.mo