From 60bd665e74cfeeaf70882173a0dd56c883e2014a Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Fri, 12 Mar 2021 03:55:34 +0100 Subject: Added to git tree --- .../gst-plugins-good-0.10.16-rusxmms.diff | 224 +++++++++++++++++++++ patches/gstreamer/gstreamer | 14 ++ patches/gstreamer/libid3_problems | 3 + 3 files changed, 241 insertions(+) create mode 100644 patches/gstreamer/gst-plugins-good-0.10.16-rusxmms.diff create mode 100644 patches/gstreamer/gstreamer create mode 100644 patches/gstreamer/libid3_problems (limited to 'patches/gstreamer') diff --git a/patches/gstreamer/gst-plugins-good-0.10.16-rusxmms.diff b/patches/gstreamer/gst-plugins-good-0.10.16-rusxmms.diff new file mode 100644 index 0000000..95aea19 --- /dev/null +++ b/patches/gstreamer/gst-plugins-good-0.10.16-rusxmms.diff @@ -0,0 +1,224 @@ +diff -dPNur gst-plugins-good-0.10.16/configure.ac gst-plugins-good-0.10.16-ds/configure.ac +--- gst-plugins-good-0.10.16/configure.ac 2009-08-29 00:05:24.000000000 +0400 ++++ gst-plugins-good-0.10.16-ds/configure.ac 2009-10-29 06:20:29.000000000 +0300 +@@ -939,6 +939,13 @@ + AC_SUBST(BZ2_LIBS) + ]) + ++dnl *** id3demux to use LibRCC ++translit(dnm, m, l) AM_CONDITIONAL(USE_LIBRCC, true) ++AG_GST_CHECK_FEATURE(LIBRCC, [librcc support for id3demux],, [ ++ AG_GST_CHECK_LIBHEADER(LIBRCC, rcc, rccInit, ,librcc.h, LIBRCC_LIBS="-lrcc") ++ AC_SUBST(LIBRCC_LIBS) ++]) ++ + else + + dnl not building plugins with external dependencies, +@@ -974,6 +981,7 @@ + AM_CONDITIONAL(USE_XSHM, false) + AM_CONDITIONAL(USE_XVIDEO, false) + AM_CONDITIONAL(USE_ZLIB, false) ++AM_CONDITIONAL(USE_LIBRCC, false) + + fi dnl of EXT plugins + +diff -dPNur gst-plugins-good-0.10.16/gst/id3demux/gstid3demux.c gst-plugins-good-0.10.16-ds/gst/id3demux/gstid3demux.c +--- gst-plugins-good-0.10.16/gst/id3demux/gstid3demux.c 2009-08-11 02:15:55.000000000 +0400 ++++ gst-plugins-good-0.10.16-ds/gst/id3demux/gstid3demux.c 2009-10-29 06:44:25.000000000 +0300 +@@ -56,6 +56,7 @@ + + #include "gstid3demux.h" + #include "id3tags.h" ++#include "rccpatch.h" + + static const GstElementDetails gst_id3demux_details = + GST_ELEMENT_DETAILS ("ID3 tag demuxer", +@@ -107,11 +108,22 @@ + } + + static void ++gst_id3demux_finalize (GObject * object) ++{ ++ GstID3Demux *demux = GST_ID3DEMUX (object); ++ ++ rcc_patch_unref(); ++ ++ G_OBJECT_CLASS (parent_class)->finalize (object); ++} ++ ++static void + gst_id3demux_class_init (GstID3DemuxClass * klass) + { + GstTagDemuxClass *tagdemux_class = (GstTagDemuxClass *) klass; + GObjectClass *gobject_class = (GObjectClass *) klass; + ++ gobject_class->finalize = gst_id3demux_finalize; + gobject_class->set_property = gst_id3demux_set_property; + gobject_class->get_property = gst_id3demux_get_property; + +@@ -133,6 +145,7 @@ + gst_id3demux_init (GstID3Demux * id3demux, GstID3DemuxClass * klass) + { + id3demux->prefer_v1 = DEFAULT_PREFER_V1; ++ rcc_patch_ref(); + } + + static gboolean +diff -dPNur gst-plugins-good-0.10.16/gst/id3demux/id3v2frames.c gst-plugins-good-0.10.16-ds/gst/id3demux/id3v2frames.c +--- gst-plugins-good-0.10.16/gst/id3demux/id3v2frames.c 2009-08-11 02:15:55.000000000 +0400 ++++ gst-plugins-good-0.10.16-ds/gst/id3demux/id3v2frames.c 2009-10-29 06:40:17.000000000 +0300 +@@ -33,6 +33,7 @@ + #endif + + #include "id3tags.h" ++#include "rccpatch.h" + + GST_DEBUG_CATEGORY_EXTERN (id3demux_debug); + #define GST_CAT_DEFAULT (id3demux_debug) +@@ -986,7 +987,12 @@ + utf8 = NULL; + } + } +- } ++ } ++ ++ /* Try LibRCC library to detect encoding */ ++ utf8 = rcc_patch_to_utf8(start, size); ++ if (utf8) goto beach; ++ + /* Try current locale (if not UTF-8) */ + if (!g_get_charset (&env)) { + if ((utf8 = g_locale_to_utf8 (start, size, &bytes_read, NULL, NULL))) { +diff -dPNur gst-plugins-good-0.10.16/gst/id3demux/Makefile.am gst-plugins-good-0.10.16-ds/gst/id3demux/Makefile.am +--- gst-plugins-good-0.10.16/gst/id3demux/Makefile.am 2009-08-11 02:15:55.000000000 +0400 ++++ gst-plugins-good-0.10.16-ds/gst/id3demux/Makefile.am 2009-10-29 06:20:06.000000000 +0300 +@@ -1,10 +1,15 @@ + plugin_LTLIBRARIES = libgstid3demux.la + +-libgstid3demux_la_SOURCES = gstid3demux.c id3tags.c id3v2frames.c ++libgstid3demux_la_SOURCES = gstid3demux.c id3tags.c id3v2frames.c rccpatch.c + libgstid3demux_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) + libgstid3demux_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_MAJORMINOR@ \ + -lgstpbutils-@GST_MAJORMINOR@ $(GST_BASE_LIBS) $(ZLIB_LIBS) + libgstid3demux_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) + libgstid3demux_la_LIBTOOLFLAGS = --tag=disable-static + +-noinst_HEADERS = gstid3demux.h id3tags.h ++if USE_LIBRCC ++ libgstid3demux_la_LIBADD += @LIBRCC_LIBS@ ++endif ++ ++ ++noinst_HEADERS = gstid3demux.h id3tags.h rccpatch.h +diff -dPNur gst-plugins-good-0.10.16/gst/id3demux/rccpatch.c gst-plugins-good-0.10.16-ds/gst/id3demux/rccpatch.c +--- gst-plugins-good-0.10.16/gst/id3demux/rccpatch.c 1970-01-01 03:00:00.000000000 +0300 ++++ gst-plugins-good-0.10.16-ds/gst/id3demux/rccpatch.c 2009-10-29 07:05:20.000000000 +0300 +@@ -0,0 +1,91 @@ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include ++#include "rccpatch.h" ++ ++#ifdef HAVE_LIBRCC ++# include ++#endif /* HAVE_LIBRCC */ ++ ++ ++#ifdef HAVE_LIBRCC ++# define ID3_CLASS 0 ++# define ID3V2_CLASS 1 ++# define UTF_CLASS 2 ++# define OUT_CLASS 3 ++static rcc_class classes[] = { ++ { "id3", RCC_CLASS_STANDARD, NULL, NULL, "ID3 Encoding", 0 }, ++ { "id3v2", RCC_CLASS_STANDARD, "id3", NULL, "ID3 v.2 Encoding", 0 }, ++ { "utf", RCC_CLASS_KNOWN, "UTF-8", NULL, "Unicode Encoding", 0}, ++ { "out", RCC_CLASS_TRANSLATE_LOCALE, "LC_CTYPE", NULL, "Output Encoding", 0 }, ++ { NULL, RCC_CLASS_STANDARD, NULL, NULL, NULL, 0 } ++}; ++ ++static int rcc_initialized = 0; ++ ++static rcc_context ctx = NULL; ++#endif /* HAVE_LIBRCC */ ++ ++ ++static void rcc_patch_free() { ++#ifdef HAVE_LIBRCC ++ if (rcc_initialized) { ++ puts("clean"); ++ rccFree(); ++ rcc_initialized = 0; ++ } ++#endif /* HAVE_LIBRCC */ ++} ++ ++static void rcc_patch_init() { ++#ifdef HAVE_LIBRCC ++ if (rcc_initialized) return; ++ puts("init"); ++ rccInit(); ++ rccInitDefaultContext(NULL, 0, 0, classes, 0); ++ rccLoad(NULL, "xmms"); ++ rccInitDb4(NULL, NULL, 0); ++ rcc_initialized = 1; ++#endif /* HAVE_LIBRCC */ ++} ++ ++static int registered = 0; ++static int ref_count = 0; ++static GStaticMutex lock = G_STATIC_MUTEX_INIT; ++ ++void rcc_patch_ref() { ++ puts("ref"); ++ g_static_mutex_lock(&lock); ++ if (!registered) { ++ g_atexit(rcc_patch_free); ++ registered = 1; ++ } ++ if (++ref_count==1) rcc_patch_init(); ++ g_static_mutex_unlock(&lock); ++} ++ ++void rcc_patch_unref() { ++ puts("unref"); ++ g_static_mutex_lock(&lock); ++ if (--ref_count==0) rcc_patch_free(); ++ g_static_mutex_unlock(&lock); ++} ++ ++gchar *rcc_patch_to_utf8(const gchar *str, const guint size) { ++#ifdef HAVE_LIBRCC ++ gchar *res; ++ ++ if (rcc_initialized) { ++ g_static_mutex_lock(&lock); ++ res = rccSizedRecode(ctx, ID3_CLASS, UTF_CLASS, str, size, NULL); ++ g_static_mutex_unlock(&lock); ++ ++ return res; ++ } ++#endif /* HAVE_LIBRCC */ ++ ++ return NULL; ++} ++ +diff -dPNur gst-plugins-good-0.10.16/gst/id3demux/rccpatch.h gst-plugins-good-0.10.16-ds/gst/id3demux/rccpatch.h +--- gst-plugins-good-0.10.16/gst/id3demux/rccpatch.h 1970-01-01 03:00:00.000000000 +0300 ++++ gst-plugins-good-0.10.16-ds/gst/id3demux/rccpatch.h 2009-10-29 06:23:58.000000000 +0300 +@@ -0,0 +1,12 @@ ++#ifndef _RCC_PATCH_H ++#define _RCC_PATCH_H ++ ++#include ++ ++void rcc_patch_ref(); ++void rcc_patch_unref(); ++ ++gchar *rcc_patch_to_utf8(const gchar *str, const guint size); ++ ++ ++#endif /* _RCC_PATCH_H */ diff --git a/patches/gstreamer/gstreamer b/patches/gstreamer/gstreamer new file mode 100644 index 0000000..86a0b5f --- /dev/null +++ b/patches/gstreamer/gstreamer @@ -0,0 +1,14 @@ +totem -> gstreamer -> + mp3 playback [mad,ffmpeg,flump3dec] + id3 id3demux (plugins-good) + it uses tag functions (from plugins-base/gst-libs/gst/tag) to + access id3 v.1 and maintains id3 v.2 itself. + +tag contains 'gst_tag_freeform_string_to_utf8' which should be rcc'ized and +used from id3demux (and probably other places) instead of current patch. + +The question is initialization... + + +GST_TAG_ENCODING=CP1251 totem 01_-_vpotmah_192_lame_cbr.mp3 + diff --git a/patches/gstreamer/libid3_problems b/patches/gstreamer/libid3_problems new file mode 100644 index 0000000..4d74a7f --- /dev/null +++ b/patches/gstreamer/libid3_problems @@ -0,0 +1,3 @@ +problems with building of libid3 complaining due to id3_frametype_* undefined are due to + - missing gperf and as a result empty frametype.c and compat.c generated + - gperf should be installed and empty frametype.c, compat.c deleted -- cgit v1.2.3