summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/memdmp/vlc4/APKBUILD260
-rw-r--r--src/memdmp/vlc4/big-endian.patch16
-rw-r--r--src/memdmp/vlc4/check-headless.patch13
-rw-r--r--src/memdmp/vlc4/disable-sub-autodetect-fuzzy-1-test.patch20
-rw-r--r--src/memdmp/vlc4/fribidi_allow_deprecated.patch10
-rw-r--r--src/memdmp/vlc4/libplacebo-5.patch108
-rw-r--r--src/memdmp/vlc4/musl-ioctl.patch24
-rw-r--r--src/memdmp/vlc4/omxil-rpi-codecs.patch15
-rw-r--r--src/memdmp/vlc4/taglib-2.0.patch97
-rw-r--r--src/memdmp/vlc4/vlc.confd15
-rw-r--r--src/memdmp/vlc4/vlc.initd32
-rw-r--r--src/memdmp/vlc4/vlc4-daemon.pre-install15
-rw-r--r--src/memdmp/vlc4/vlc4-libs.pre-deinstall6
-rw-r--r--src/memdmp/vlc4/vlc4-libs.trigger7
14 files changed, 638 insertions, 0 deletions
diff --git a/src/memdmp/vlc4/APKBUILD b/src/memdmp/vlc4/APKBUILD
new file mode 100644
index 0000000..daafee2
--- /dev/null
+++ b/src/memdmp/vlc4/APKBUILD
@@ -0,0 +1,260 @@
+# Contributor: Ɓukasz Jendrysik <scadu@yandex.com>
+# Contributor: Leonardo Arena <rnalrd@alpinelinux.org>
+# Contributor: Natanael Copa <ncopa@alpinelinux.org>
+# Maintainer: memdmp <memdmp@estrogen.zone>
+
+_reponame="vlc"
+_repoowner="videolan"
+_repourl="https://code.videolan.org/${_repoowner}/${_reponame}" # GITHUB_CODELOAD_URL due to github not having IPv6.
+_reporef="70de580e9b8231fd0bb1da614ccbd95dcce9884a" # Must be a TAG OR BRANCH! Anything else may break shit.
+_reporefdate="20250616" # YYYYMMDD of the ref
+_buildtarget="Release" # or `Debug` for testing
+
+# https://code.videolan.org/videolan/vlc/-/archive/70de580e9b8231fd0bb1da614ccbd95dcce9884a/vlc-70de580e9b8231fd0bb1da614ccbd95dcce9884a.tar.gz
+
+pkgname=vlc4
+pkgver=3.99.99
+pkgrel=8
+pkgdesc="Multi-platform MPEG, VCD/DVD, and DivX player"
+triggers="vlc4-libs.trigger=/usr/lib/vlc/plugins"
+pkgusers="vlc"
+pkggroups="vlc"
+url="https://www.videolan.org/vlc/"
+arch="all"
+license="GPL-2.0-or-later"
+subpackages="
+ $pkgname-dev
+ $pkgname-doc
+ $pkgname-qt
+ $pkgname-daemon::noarch
+ $pkgname-libs
+ "
+makedepends="
+ a52dec-dev
+ abseil-cpp-dev
+ alsa-lib-dev
+ autoconf
+ automake
+ avahi-dev
+ bison
+ dav1d-dev
+ dbus-dev
+ eudev-dev
+ faad2-dev
+ ffmpeg4-dev
+ flac-dev
+ flex
+ freetype-dev
+ gnutls-dev
+ gtk+3.0-dev
+ gst-plugins-base-dev
+ libarchive-dev
+ libass-dev
+ libavc1394-dev
+ libbluray-dev
+ libcddb-dev
+ libdc1394-dev
+ libdvbpsi-dev
+ libdvdnav-dev
+ libdvdread-dev
+ libgcrypt-dev
+ libice-dev
+ libmad-dev
+ libmatroska-dev
+ libmicrodns-dev
+ libmpeg2-dev
+ libnotify-dev
+ libogg-dev
+ libplacebo5-dev
+ libraw1394-dev
+ librsvg-dev
+ libsamplerate-dev
+ libsecret-dev
+ libshout-dev
+ libsm-dev
+ libsrt-dev
+ libtheora-dev
+ libtool
+ libupnp-dev
+ libva-dev
+ libvdpau-dev
+ libvorbis-dev
+ libvpx-dev
+ libx11-dev
+ libxext-dev
+ libxinerama-dev
+ libxml2-dev
+ libxpm-dev
+ libxv-dev
+ live-media-dev
+ lua5.2-dev
+ mesa-dev
+ ncurses-dev
+ opus-dev
+ protobuf-dev
+ pulseaudio-dev
+ qt6-qt5compat-dev
+ qt6-qtbase-dev
+ qt6-qtbase-x11
+ qt6-qtbase-private-dev
+ qt6-qtdeclarative-dev
+ qt6-qtdeclarative-private-dev
+ qt6-qtsvg-dev
+ qt6-qttools-dev
+ qt6-qtwayland-dev
+ samba-dev
+ sdl2-dev
+ speex-dev
+ speexdsp-dev
+ sysfsutils-dev
+ taglib-dev
+ v4l-utils-dev
+ wayland-dev
+ wayland-protocols
+ x264-dev
+ x265-dev
+ xcb-util-keysyms-dev
+ xcb-util-renderutil-dev
+ xdg-utils
+ "
+source="${_repourl}/-/archive/${_reporef}/${_reponame}-${_reporef}.tar.gz
+ vlc.initd
+ vlc.confd
+ "
+builddir="${srcdir}/${_reponame}-${_reporef}"
+
+# secfixes:
+# 3.0.18-r0:
+# - CVE-2022-41325
+# 3.0.12-r0:
+# - CVE-2020-26664
+# 3.0.11-r0:
+# - CVE-2020-13428
+# 3.0.9.2-r0:
+# - CVE-2019-19721
+# - CVE-2020-6071
+# - CVE-2020-6072
+# - CVE-2020-6073
+# - CVE-2020-6077
+# - CVE-2020-6078
+# - CVE-2020-6079
+# 3.0.7.1-r2:
+# - CVE-2019-13602
+
+build() {
+ NOCONFIGURE=1 ./bootstrap
+
+ case "$CARCH" in
+ aarch64|arm*)
+ local arch_opts="--enable-omxil --enable-omxil-vout --enable-rpi-omxil"
+ ;;
+ esac
+
+ CFLAGS="$CFLAGS -fcommon -O2 -flto=auto" \
+ CXXFLAGS="$CXXFLAGS -flto=auto -O2" \
+ LUA=lua5.2 \
+ LUAC=luac5.2 \
+ ./configure \
+ --build=$CBUILD \
+ --host=$CHOST \
+ --prefix=/usr \
+ --disable-nls \
+ --disable-rpath \
+ --disable-static \
+ --enable-a52 \
+ --enable-avcodec \
+ --enable-avformat \
+ --enable-bluray \
+ --enable-dav1d \
+ --enable-dbus \
+ --enable-dc1394 \
+ --enable-dvbpsi \
+ --enable-dvdnav \
+ --enable-dvdread \
+ --enable-faad \
+ --enable-flac \
+ --enable-gnutls \
+ --enable-libcddb \
+ --enable-libplacebo \
+ --enable-libva \
+ --enable-live555 \
+ --enable-merge-ffmpeg \
+ --enable-ncurses \
+ --enable-realrtsp \
+ --enable-shout \
+ --enable-skins2 \
+ --enable-sout \
+ --enable-speex \
+ --enable-srt \
+ --enable-taglib \
+ --enable-theora \
+ --enable-upnp \
+ --enable-v4l2 \
+ --enable-vdpau \
+ --enable-vlm \
+ --enable-vorbis \
+ --enable-wma-fixed \
+ --enable-x264 \
+ --enable-xvideo \
+ $arch_opts
+
+ make
+}
+
+package() {
+ make -j1 DESTDIR="$pkgdir" install
+ # delete cache as it's autocreated by trigger
+ rm -rf "$pkgdir"/usr/lib/vlc/plugins/plugins.dat
+ # delete unneeded mozilla and kde support files
+ rm -rf "$pkgdir"/usr/lib/mozilla
+ rm -rf "$pkgdir"/usr/share/kde4
+
+ install -D -m755 "$srcdir"/vlc.initd "$pkgdir"/etc/init.d/vlc
+ install -D -m664 "$srcdir"/vlc.confd "$pkgdir"/etc/conf.d/vlc
+ install -d -o vlc -g vlc "$pkgdir"/var/log/vlc
+}
+
+check() {
+ make check || { cat ./*/test-suite.log; false; }
+}
+
+qt() {
+ pkgdesc="Qt frontend for VLC"
+ depends="vlc=$pkgver-r$pkgrel"
+ cd "$pkgdir"
+ # scan for elf files that directly or indirectly depends on
+ # libQt* libraries
+ for i in $(find . -type f ); do
+ if ldd $i 2>/dev/null | grep -q "libQt"; then
+ amove "$i"
+ fi
+ done
+ amove usr/share/icons \
+ usr/share/applications \
+ usr/share/metainfo \
+ usr/bin/qvlc
+}
+
+daemon() {
+ pkgdesc="Support for running VLC as a daemon"
+ install="vlc4-daemon.pre-install"
+ depends="vlc4=$pkgver-r$pkgrel"
+
+ amove etc/init.d
+ amove etc/conf.d
+ amove var/log/vlc
+}
+
+libs() {
+ depends=""
+ install="vlc4-libs.pre-deinstall"
+ default_libs
+
+ amove usr/lib/vlc/vlc-cache-gen
+}
+
+sha512sums="
+acf70b95bd217be4ca72a6098a35ec7b1c66119a73aeea6219c1f4656de68a88c53486dbff746de3d26272cc7d5258b46e6d99bdb1299089f4a0c83efd17134c vlc-70de580e9b8231fd0bb1da614ccbd95dcce9884a.tar.gz
+55e245190b443dde9c7215ea5210612fcca164900a9a4b025ccf0d1e3fc5206d00b52355b256974421e37c609875627f1db19f0f5a084511aec0daf677ecc9d6 vlc.initd
+d89190dca1b8b2c3faca5863dc6c7e6eb24e05178e6f75ed752fd3c6a73cb8a42d2625b6e56453296b7096ea868be642ecd42745dac20e7f13fc67dd3c3c7c49 vlc.confd
+"
diff --git a/src/memdmp/vlc4/big-endian.patch b/src/memdmp/vlc4/big-endian.patch
new file mode 100644
index 0000000..acb6676
--- /dev/null
+++ b/src/memdmp/vlc4/big-endian.patch
@@ -0,0 +1,16 @@
+Patch-Source: https://git.adelielinux.org/adelie/packages/-/blob/c543943fea431ad69f2447a4fafc1d17957aff46/user/vlc/endian-fix.patch
+
+--- vlc-3.0.3/modules/video_chroma/copy.c.old 2018-04-18 16:19:34.000000000 +0000
++++ vlc-3.0.3/modules/video_chroma/copy.c 2018-07-22 02:13:19.870000000 +0000
+@@ -1119,7 +1119,11 @@
+ vlc_assert_unreachable();
+ }
+
++#ifndef WORDS_BIGENDIAN
+ uint32_t color_16_UV = (colors_16_P[2] << 16) | colors_16_P[1];
++#else
++ uint32_t color_16_UV = (colors_16_P[1] << 16) | colors_16_P[2];
++#endif
+
+ PICCHECK(uint16_t, uint32_t, colors_16_P, color_16_UV, 2);
+ }
diff --git a/src/memdmp/vlc4/check-headless.patch b/src/memdmp/vlc4/check-headless.patch
new file mode 100644
index 0000000..25016f4
--- /dev/null
+++ b/src/memdmp/vlc4/check-headless.patch
@@ -0,0 +1,13 @@
+diff --git a/test/run_vlc.sh b/test/run_vlc.sh
+index af35987..9a0175b 100755
+--- a/test/run_vlc.sh
++++ b/test/run_vlc.sh
+@@ -2,7 +2,7 @@
+
+ set -e
+
+-VLC="./vlc --ignore-config --rc-fake-tty"
++VLC="./vlc -I dummy --ignore-config --rc-fake-tty"
+
+ $VLC -H
+ $VLC -vv vlc://quit
diff --git a/src/memdmp/vlc4/disable-sub-autodetect-fuzzy-1-test.patch b/src/memdmp/vlc4/disable-sub-autodetect-fuzzy-1-test.patch
new file mode 100644
index 0000000..b3dd8a1
--- /dev/null
+++ b/src/memdmp/vlc4/disable-sub-autodetect-fuzzy-1-test.patch
@@ -0,0 +1,20 @@
+This test fails on x86 and s390x so disable it for now
+reported upstream: https://trac.videolan.org/vlc/ticket/19321
+
+diff --git a/test/libvlc/slaves.c b/test/libvlc/slaves.c
+index 7b2c24fa43..7c47b3147b 100644
+--- a/test/libvlc/slaves.c
++++ b/test/libvlc/slaves.c
+@@ -194,10 +194,12 @@ main (void)
+ assert(p_expected_slaves[i].psz_uri != NULL);
+ }
+
++#if 0
+ printf("== Testing --sub-autodetect-fuzzy 1 (everything) ==\n");
+ test_media_has_slaves_from_parent(p_vlc, SLAVES_DIR "/test.mp4",
+ p_expected_slaves,
+ EXPECTED_SLAVES_COUNT);
++#endif
+ libvlc_release(p_vlc);
+
+ printf("== Testing --sub-autodetect-fuzzy 2 (full, left, and right match) ==\n");
diff --git a/src/memdmp/vlc4/fribidi_allow_deprecated.patch b/src/memdmp/vlc4/fribidi_allow_deprecated.patch
new file mode 100644
index 0000000..ca15ea2
--- /dev/null
+++ b/src/memdmp/vlc4/fribidi_allow_deprecated.patch
@@ -0,0 +1,10 @@
+--- a/modules/text_renderer/freetype/text_layout.c
++++ b/modules/text_renderer/freetype/text_layout.c
+@@ -52,7 +52,6 @@
+
+ /* RTL */
+ #if defined(HAVE_FRIBIDI)
+-# define FRIBIDI_NO_DEPRECATED 1
+ # include <fribidi.h>
+ #endif
+
diff --git a/src/memdmp/vlc4/libplacebo-5.patch b/src/memdmp/vlc4/libplacebo-5.patch
new file mode 100644
index 0000000..006e900
--- /dev/null
+++ b/src/memdmp/vlc4/libplacebo-5.patch
@@ -0,0 +1,108 @@
+patch vaguely ported from: https://code.videolan.org/videolan/vlc/-/merge_requests/2233
+
+diff --git a/modules/video_output/opengl/converter.h b/modules/video_output/opengl/converter.h
+index 7000e1f..49fa667 100644
+--- a/modules/video_output/opengl/converter.h
++++ b/modules/video_output/opengl/converter.h
+@@ -26,6 +26,9 @@
+ #include <vlc_picture_pool.h>
+ #include <vlc_opengl.h>
+
++#include <libplacebo/log.h>
++#include <libplacebo/shaders.h>
++
+ /* if USE_OPENGL_ES2 is defined, OpenGL ES version 2 will be used, otherwise
+ * normal OpenGL will be used */
+ #ifdef __APPLE__
+@@ -253,10 +256,6 @@ static inline bool HasExtension(const char *apis, const char *api)
+ return false;
+ }
+
+-struct pl_context;
+-struct pl_shader;
+-struct pl_shader_res;
+-
+ /*
+ * Structure that is filled by "glhw converter" module probe function
+ * The implementation should initialize every members of the struct that are
+@@ -273,7 +272,7 @@ struct opengl_tex_converter_t
+ vlc_gl_t *gl;
+
+ /* libplacebo context, created by the caller (optional) */
+- struct pl_context *pl_ctx;
++ pl_log pl_log;
+
+ /* Function pointers to OpenGL functions, set by the caller */
+ const opengl_vtable_t *vt;
+@@ -337,7 +336,7 @@ struct opengl_tex_converter_t
+ bool yuv_color;
+ GLfloat yuv_coefficients[16];
+
+- struct pl_shader *pl_sh;
++ pl_shader pl_sh;
+ const struct pl_shader_res *pl_sh_res;
+
+ /* Private context */
+diff --git a/modules/video_output/opengl/fragment_shaders.c b/modules/video_output/opengl/fragment_shaders.c
+index ecf7226..29f4148 100644
+--- a/modules/video_output/opengl/fragment_shaders.c
++++ b/modules/video_output/opengl/fragment_shaders.c
+@@ -611,7 +611,7 @@ opengl_fragment_shader_init_impl(opengl_tex_converter_t *tc, GLenum tex_target,
+
+ #ifdef HAVE_LIBPLACEBO
+ if (tc->pl_sh) {
+- struct pl_shader *sh = tc->pl_sh;
++ pl_shader sh = tc->pl_sh;
+ struct pl_color_map_params color_params = pl_color_map_default_params;
+ color_params.intent = var_InheritInteger(tc->gl, "rendering-intent");
+ color_params.tone_mapping_algo = var_InheritInteger(tc->gl, "tone-mapping");
+@@ -634,7 +634,7 @@ opengl_fragment_shader_init_impl(opengl_tex_converter_t *tc, GLenum tex_target,
+ pl_color_space_from_video_format(&tc->fmt),
+ dst_space, NULL, false);
+
+- struct pl_shader_obj *dither_state = NULL;
++ pl_shader_obj dither_state = NULL;
+ int method = var_InheritInteger(tc->gl, "dither-algo");
+ if (method >= 0) {
+
+diff --git a/modules/video_output/opengl/vout_helper.c b/modules/video_output/opengl/vout_helper.c
+index 13d65e0..1ee99af 100644
+--- a/modules/video_output/opengl/vout_helper.c
++++ b/modules/video_output/opengl/vout_helper.c
+@@ -570,8 +570,7 @@ opengl_deinit_program(vout_display_opengl_t *vgl, struct prgm *prgm)
+
+ #ifdef HAVE_LIBPLACEBO
+ FREENULL(tc->uloc.pl_vars);
+- if (tc->pl_ctx)
+- pl_context_destroy(&tc->pl_ctx);
++ pl_log_destroy(&tc->pl_log);
+ #endif
+
+ vlc_object_release(tc);
+@@ -622,21 +621,21 @@ opengl_init_program(vout_display_opengl_t *vgl, struct prgm *prgm,
+ // create the main libplacebo context
+ if (!subpics)
+ {
+- tc->pl_ctx = pl_context_create(PL_API_VER, &(struct pl_context_params) {
++ tc->pl_log = pl_log_create(PL_API_VER, &(struct pl_log_params) {
+ .log_cb = log_cb,
+ .log_priv = tc,
+ .log_level = PL_LOG_INFO,
+ });
+- if (tc->pl_ctx) {
++ if (tc->pl_log) {
+ # if PL_API_VER >= 20
+- tc->pl_sh = pl_shader_alloc(tc->pl_ctx, &(struct pl_shader_params) {
++ tc->pl_sh = pl_shader_alloc(tc->pl_log, &(struct pl_shader_params) {
+ .glsl.version = tc->glsl_version,
+ .glsl.gles = tc->is_gles,
+ });
+ # elif PL_API_VER >= 6
+- tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL, 0);
++ tc->pl_sh = pl_shader_alloc(tc->pl_log, NULL, 0);
+ # else
+- tc->pl_sh = pl_shader_alloc(tc->pl_ctx, NULL, 0, 0);
++ tc->pl_sh = pl_shader_alloc(tc->pl_log, NULL, 0, 0);
+ # endif
+ }
+ }
diff --git a/src/memdmp/vlc4/musl-ioctl.patch b/src/memdmp/vlc4/musl-ioctl.patch
new file mode 100644
index 0000000..5dee3e8
--- /dev/null
+++ b/src/memdmp/vlc4/musl-ioctl.patch
@@ -0,0 +1,24 @@
+musl libc has a different interface
+
+--- a/modules/access/v4l2/lib.c
++++ b/modules/access/v4l2/lib.c
+@@ -49,7 +49,7 @@ static int (*v4l2_fd_open_cb)(int, int) = fd_open;
+ //int (*v4l2_open) (const char *, int, ...) = open;
+ //int (*v4l2_dup) (const char *, int, ...) = dup;
+ int (*v4l2_close) (int) = close;
+-int (*v4l2_ioctl) (int, unsigned long int, ...) = ioctl;
++int (*v4l2_ioctl) (int, int, ...) = ioctl;
+ ssize_t (*v4l2_read) (int, void *, size_t) = read;
+ //ssize_t (*v4l2_write) (int, const void *, size_t) = write;
+ void * (*v4l2_mmap) (void *, size_t, int, int, int, int64_t) = mmap;
+--- a/modules/access/v4l2/v4l2.h
++++ b/modules/access/v4l2/v4l2.h
+@@ -28,7 +28,7 @@
+ /* libv4l2 functions */
+ extern int v4l2_fd_open(int, int);
+ extern int (*v4l2_close) (int);
+-extern int (*v4l2_ioctl) (int, unsigned long int, ...);
++extern int (*v4l2_ioctl) (int, int, ...);
+ extern ssize_t (*v4l2_read) (int, void *, size_t);
+ extern void * (*v4l2_mmap) (void *, size_t, int, int, int, int64_t);
+ extern int (*v4l2_munmap) (void *, size_t);
diff --git a/src/memdmp/vlc4/omxil-rpi-codecs.patch b/src/memdmp/vlc4/omxil-rpi-codecs.patch
new file mode 100644
index 0000000..9b7accf
--- /dev/null
+++ b/src/memdmp/vlc4/omxil-rpi-codecs.patch
@@ -0,0 +1,15 @@
+--- vlc-2.2.0/modules/codec/omxil/omxil_core.c.orig 2015-02-28 08:37:54.044936036 -0200
++++ vlc-2.2.0/modules/codec/omxil/omxil_core.c 2015-02-28 08:38:38.738271654 -0200
+@@ -204,6 +204,12 @@
+ #ifdef RPI_OMX
+ { "video_decoder.avc", "OMX.broadcom.video_decode" },
+ { "video_decoder.mpeg2", "OMX.broadcom.video_decode" },
++ { "video_decoder.mpeg4", "OMX.broadcom.video_decode" },
++ { "video_decoder.vp6", "OMX.broadcom.video_decode" },
++ { "video_decoder.vp8", "OMX.broadcom.video_decode" },
++ { "video_decoder.theora", "OMX.broadcom.video_decode" },
++ { "video_decoder.mjpg", "OMX.broadcom.video_decode" },
++ { "video_decoder.vc1", "OMX.broadcom.video_decode" },
+ { "iv_renderer", "OMX.broadcom.video_render" },
+ #endif
+ { 0, 0 }
diff --git a/src/memdmp/vlc4/taglib-2.0.patch b/src/memdmp/vlc4/taglib-2.0.patch
new file mode 100644
index 0000000..930e55f
--- /dev/null
+++ b/src/memdmp/vlc4/taglib-2.0.patch
@@ -0,0 +1,97 @@
+Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/vlc/-/raw/40b8a8a1fc24f594a0b828fbde521c644964efaf/taglib-2.patch
+diff --git a/modules/meta_engine/taglib.cpp b/modules/meta_engine/taglib.cpp
+index 84b401c..a3bdac7 100644
+--- a/modules/meta_engine/taglib.cpp
++++ b/modules/meta_engine/taglib.cpp
+@@ -185,7 +185,7 @@ public:
+ ByteVector res(length, 0);
+ ssize_t i_read = vlc_stream_Read( m_stream, res.data(), length);
+ if (i_read < 0)
+- return ByteVector::null;
++ return ByteVector();
+ else if ((size_t)i_read != length)
+ res.resize(i_read);
+ return res;
+@@ -216,7 +216,7 @@ public:
+
+ void seek(long offset, Position p)
+ {
+- uint64_t pos = 0;
++ offset_t pos = 0;
+ switch (p)
+ {
+ case Current:
+@@ -237,12 +237,12 @@ public:
+ return;
+ }
+
+- long tell() const
++ offset_t tell() const
+ {
+ return m_previousPos;
+ }
+
+- long length()
++ offset_t length()
+ {
+ uint64_t i_size;
+ if (vlc_stream_GetSize( m_stream, &i_size ) != VLC_SUCCESS)
+@@ -256,7 +256,7 @@ public:
+
+ private:
+ stream_t* m_stream;
+- int64_t m_previousPos;
++ offset_t m_previousPos;
+ };
+ #endif /* TAGLIB_VERSION_1_11 */
+
+@@ -465,7 +465,7 @@ static void ReadMetaFromASF( ASF::Tag* tag, demux_meta_t* p_demux_meta, vlc_meta
+ static void ReadMetaFromBasicTag(const Tag* tag, vlc_meta_t *dest)
+ {
+ #define SET( accessor, meta ) \
+- if( !tag->accessor().isNull() && !tag->accessor().isEmpty() ) \
++ if( !tag->accessor().isEmpty() ) \
+ vlc_meta_Set##meta( dest, tag->accessor().toCString(true) )
+ #define SETINT( accessor, meta ) \
+ if( tag->accessor() ) \
+@@ -806,15 +806,15 @@ static void ReadMetaFromMP4( MP4::Tag* tag, demux_meta_t *p_demux_meta, vlc_meta
+ {
+ MP4::Item list;
+ #define SET( keyName, metaName ) \
+- if( tag->itemListMap().contains(keyName) ) \
++ if( tag->itemMap().contains(keyName) ) \
+ { \
+- list = tag->itemListMap()[keyName]; \
++ list = tag->itemMap()[keyName]; \
+ vlc_meta_Set##metaName( p_meta, list.toStringList().front().toCString( true ) ); \
+ }
+ #define SET_EXTRA( keyName, metaName ) \
+- if( tag->itemListMap().contains(keyName) ) \
++ if( tag->itemMap().contains(keyName) ) \
+ { \
+- list = tag->itemListMap()[keyName]; \
++ list = tag->itemMap()[keyName]; \
+ vlc_meta_AddExtra( p_meta, metaName, list.toStringList().front().toCString( true ) ); \
+ }
+
+@@ -824,9 +824,9 @@ static void ReadMetaFromMP4( MP4::Tag* tag, demux_meta_t *p_demux_meta, vlc_meta
+ #undef SET
+ #undef SET_EXTRA
+
+- if( tag->itemListMap().contains("covr") )
++ if( tag->itemMap().contains("covr") )
+ {
+- MP4::CoverArtList list = tag->itemListMap()["covr"].toCoverArtList();
++ MP4::CoverArtList list = tag->itemMap()["covr"].toCoverArtList();
+ const char *psz_format = list[0].format() == MP4::CoverArt::PNG ? "image/png" : "image/jpeg";
+
+ msg_Dbg( p_demux_meta, "Found embedded art (%s) is %i bytes",
+@@ -1337,7 +1337,7 @@ static int WriteMeta( vlc_object_t *p_this )
+ if( RIFF::AIFF::File* riff_aiff = dynamic_cast<RIFF::AIFF::File*>(f.file()) )
+ WriteMetaToId3v2( riff_aiff->tag(), p_item );
+ else if( RIFF::WAV::File* riff_wav = dynamic_cast<RIFF::WAV::File*>(f.file()) )
+- WriteMetaToId3v2( riff_wav->tag(), p_item );
++ WriteMetaToId3v2( riff_wav->ID3v2Tag(), p_item );
+ }
+ else if( TrueAudio::File* trueaudio = dynamic_cast<TrueAudio::File*>(f.file()) )
+ {
diff --git a/src/memdmp/vlc4/vlc.confd b/src/memdmp/vlc4/vlc.confd
new file mode 100644
index 0000000..9a58842
--- /dev/null
+++ b/src/memdmp/vlc4/vlc.confd
@@ -0,0 +1,15 @@
+# Sample vlc params suitable for running as a daemon
+
+## --file-logging enable file logging
+## --logfile logfile name/path
+## -vvv verbose logging
+## -I dummy disable X11 interface
+## --sout PARAMS encoding parameters
+
+
+## Do NOT quote 'PARAMS' otherwise shell expansions will broke vlc
+##
+## The --daemon option will automatically be added so no need to add it
+## here.
+
+VLC_OPTS="--quiet -I dummy alsa://hw:0,0 --file-logging --logfile /var/log/vlc/vlc.log --sout #transcode{acodec=mp3,ab=48,channels=1,samplerate=22050}:std{access=http,mux=ogg,dst=:8080}"
diff --git a/src/memdmp/vlc4/vlc.initd b/src/memdmp/vlc4/vlc.initd
new file mode 100644
index 0000000..541a071
--- /dev/null
+++ b/src/memdmp/vlc4/vlc.initd
@@ -0,0 +1,32 @@
+#!/sbin/openrc-run
+
+description="VideoLAN daemon"
+pidfile="/var/run/vlc/${RC_SVCNAME}.pid"
+command="/usr/bin/vlc"
+
+depend() {
+ need net
+ after firewall
+}
+
+start_pre() {
+ checkpath --directory --owner vlc:vlc --mode 775 ${pidfile%/*}
+}
+
+start() {
+ ebegin "Starting ${RC_SVCNAME}"
+ start-stop-daemon --start \
+ --user vlc \
+ --pidfile ${pidfile} \
+ --exec ${command} \
+ -- \
+ --daemon --pidfile ${pidfile} ${VLC_OPTS}
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping ${RC_SVCNAME}"
+ start-stop-daemon --stop \
+ --pidfile ${pidfile}
+ eend $?
+}
diff --git a/src/memdmp/vlc4/vlc4-daemon.pre-install b/src/memdmp/vlc4/vlc4-daemon.pre-install
new file mode 100644
index 0000000..aed6c18
--- /dev/null
+++ b/src/memdmp/vlc4/vlc4-daemon.pre-install
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+groups="vlc audio video"
+
+for group in $groups; do
+ addgroup -S $group 2>/dev/null
+done
+adduser -S -D -h /home/vlc -s /bin/sh -G vlc -g vlc vlc 2>/dev/null
+
+# make sure vlc are in all groups
+for group in $groups; do
+ addgroup vlc $group 2>/dev/null
+done
+
+exit 0
diff --git a/src/memdmp/vlc4/vlc4-libs.pre-deinstall b/src/memdmp/vlc4/vlc4-libs.pre-deinstall
new file mode 100644
index 0000000..2b29179
--- /dev/null
+++ b/src/memdmp/vlc4/vlc4-libs.pre-deinstall
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+rm -r -f usr/lib/vlc/plugins/plugins.dat 2>/dev/null
+rmdir -p usr/lib/vlc/plugins 2>/dev/null
+
+exit 0
diff --git a/src/memdmp/vlc4/vlc4-libs.trigger b/src/memdmp/vlc4/vlc4-libs.trigger
new file mode 100644
index 0000000..b12b509
--- /dev/null
+++ b/src/memdmp/vlc4/vlc4-libs.trigger
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if [ -f /usr/lib/vlc/vlc-cache-gen ]; then
+ exec /usr/lib/vlc/vlc-cache-gen "$@" >/dev/null 2>&1
+fi
+exit 0
+