[148143] trunk/dports/multimedia/moc

devans at macports.org devans at macports.org
Wed Apr 27 15:25:40 PDT 2016


Revision: 148143
          https://trac.macports.org/changeset/148143
Author:   devans at macports.org
Date:     2016-04-27 15:25:39 -0700 (Wed, 27 Apr 2016)
Log Message:
-----------
moc: update to version 2.6-alpha1, master_sites, livecheck, apply upstream patches for ffmpeg-3.0 compatibility (#51207, maintainer timeout).

Modified Paths:
--------------
    trunk/dports/multimedia/moc/Portfile

Added Paths:
-----------
    trunk/dports/multimedia/moc/files/patch-ffmpeg-3.0.diff

Removed Paths:
-------------
    trunk/dports/multimedia/moc/files/patch-configure.diff
    trunk/dports/multimedia/moc/files/patch-ffmpeg-r2529.diff
    trunk/dports/multimedia/moc/files/patch-options.c.diff

Modified: trunk/dports/multimedia/moc/Portfile
===================================================================
--- trunk/dports/multimedia/moc/Portfile	2016-04-27 22:11:35 UTC (rev 148142)
+++ trunk/dports/multimedia/moc/Portfile	2016-04-27 22:25:39 UTC (rev 148143)
@@ -3,8 +3,7 @@
 PortSystem          1.0
 
 name                moc
-version             2.5.0-beta1
-revision            3
+version             2.6-alpha1
 license             GPL-2
 categories          multimedia
 maintainers         martinvazquez.net:eu
@@ -19,13 +18,12 @@
 
 homepage            http://moc.daper.net
 platforms           darwin
-master_sites        ftp://ftp.daper.net/pub/soft/moc/unstable/
+master_sites        http://ftp.daper.net/pub/soft/moc/unstable/
 
-checksums           md5     795ecba86847e082aa2f21937cc04804 \
-                    sha1    4030a1fa5c7cfef06909c54d8c7a1fbb93f23caa \
-                    rmd160  ca7095f71e5fe8155eda41e98547db541d6a4cab
+checksums           rmd160  283f9945abbd3b3d4e15f23485228c00983edfe8 \
+                    sha256  0b0a3515c65b4c47a250e350c663535778239352db859921f5d564ed727a0bbc
 
-use_bzip2           yes
+use_xz              yes
 
 depends_build	    port:pkgconfig 
 
@@ -41,7 +39,7 @@
                     port:jack \
                     port:curl
 
-patchfiles	    patch-ffmpeg-r2529.diff
+patchfiles          patch-ffmpeg-3.0.diff
 
 use_autoreconf	    yes
 autoreconf.args     -fvi
@@ -59,4 +57,4 @@
         configure.args-delete   --without-vorbis
 }
 
-livecheck.regex	    <title>music on console (.*)</title>
+livecheck.regex     ">${name}-\(\.*\)\.tar"

Deleted: trunk/dports/multimedia/moc/files/patch-configure.diff
===================================================================
--- trunk/dports/multimedia/moc/files/patch-configure.diff	2016-04-27 22:11:35 UTC (rev 148142)
+++ trunk/dports/multimedia/moc/files/patch-configure.diff	2016-04-27 22:25:39 UTC (rev 148143)
@@ -1,12 +0,0 @@
-diff -ur ../moc-2.4.3.orig/configure ./configure
---- ../moc-2.4.3.orig/configure	2007-07-30 17:49:11.000000000 +0200
-+++ ./configure	2008-03-26 19:32:00.000000000 +0100
-@@ -21998,7 +21998,7 @@
- 		;;
- esac
- 
--LDFLAGS="$LDFLAGS -export-dynamic"
-+LDFLAGS="$LDFLAGS ${export_dynamic_flag}"
- 
- { echo "$as_me:$LINENO: checking for ANSI C header files" >&5
- echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }

Added: trunk/dports/multimedia/moc/files/patch-ffmpeg-3.0.diff
===================================================================
--- trunk/dports/multimedia/moc/files/patch-ffmpeg-3.0.diff	                        (rev 0)
+++ trunk/dports/multimedia/moc/files/patch-ffmpeg-3.0.diff	2016-04-27 22:25:39 UTC (rev 148143)
@@ -0,0 +1,125 @@
+Index: configure.in
+===================================================================
+--- configure.in	(revision 2781)
++++ configure.in	(revision 2785)
+@@ -457,19 +457,3 @@
+ 	echo "         you will not hear any sound!"
+ 	echo
+ fi
+-
+-dnl
+-dnl  If the warning below gets reported, then for further guidance:
+-dnl
+-dnl         vi +/REQUEST_CHANNELS decoder_plugins/ffmpeg/ffmpeg.c
+-dnl
+-if test "x$want_ffmpeg" = "xyes" && \
+-   test "x$ac_cv_member_struct_AVCodecContext_request_channels" != "xyes"
+-then
+-	echo "WARNING: It appears that the FFmpeg/LibAV API has changed and no longer"
+-	echo "         supports downmixing to stereo as it did previously.  Report"
+-	echo "         this message along with the output of 'ffmpeg -version' to"
+-	echo "         <$PACKAGE_BUGREPORT>.  Meanwhile, you may have to live without"
+-	echo "         stereo downmixing."
+-	echo
+-fi
+Index: decoder_plugins/ffmpeg/ffmpeg.m4
+===================================================================
+--- decoder_plugins/ffmpeg/ffmpeg.m4	(revision 2781)
++++ decoder_plugins/ffmpeg/ffmpeg.m4	(revision 2785)
+@@ -39,6 +39,8 @@
+ 		LIBS="$LIBS $ffmpeg_LIBS"
+ 		AC_CHECK_MEMBERS([struct AVCodecContext.request_channels], [], [],
+ 	                     [#include <libavcodec/avcodec.h>])
++		AC_CHECK_HEADERS([ffmpeg/avformat.h \
++		                  libavformat/avformat.h libavutil/channel_layout.h])
+ 		AC_SEARCH_LIBS(avcodec_open2, avcodec,
+ 			[AC_DEFINE([HAVE_AVCODEC_OPEN2], 1,
+ 				[Define to 1 if you have the `avcodec_open2' function.])])
+@@ -46,6 +48,9 @@
+ 			[AC_DEFINE([HAVE_AVCODEC_DECODE_AUDIO4], 1,
+ 				[Define to 1 if you have the `avcodec_decode_audio4' function.])],
+ 			[AX_FUNC_POSIX_MEMALIGN])
++		AC_SEARCH_LIBS(av_packet_unref, avcodec,
++			[AC_DEFINE([HAVE_AV_PACKET_UNREF], 1,
++				[Define to 1 if you have the `av_packet_unref' function.])])
+ 		AC_SEARCH_LIBS(avformat_close_input, avformat,
+ 			[AC_DEFINE([HAVE_AVFORMAT_CLOSE_INPUT], 1,
+ 				[Define to 1 if you have the `avformat_close_input' function.])])
+Index: decoder_plugins/ffmpeg/ffmpeg.c
+===================================================================
+--- decoder_plugins/ffmpeg/ffmpeg.c	(revision 2781)
++++ decoder_plugins/ffmpeg/ffmpeg.c	(revision 2785)
+@@ -41,7 +41,11 @@
+ GCC_DIAG_ON(deprecated-declarations)
+ #include <libavutil/mathematics.h>
+ #ifdef HAVE_AV_GET_CHANNEL_LAYOUT_NB_CHANNELS
+-#include <libavutil/audioconvert.h>
++# if HAVE_LIBAVUTIL_CHANNEL_LAYOUT_H
++#  include <libavutil/channel_layout.h>
++# else
++#  include <libavutil/audioconvert.h>
++# endif
+ #endif
+ 
+ /* FFmpeg also likes common names, without that, our common.h and log.h
+@@ -769,32 +773,11 @@
+ 		return;
+ #endif
+ 
+-	data->enc->channels = 2;
+-
+ #ifdef HAVE_STRUCT_AVCODECCONTEXT_REQUEST_CHANNELS
+-
+-	/*
+-	 * When FFmpeg breaks its API (and it will), this code will be
+-	 * disabled and users will complain that MOC no longer downmixes
+-	 * to stereo.  This is because the 'request_channels' field in
+-	 * AVCodecContext is marked as deprecated (and so will probably
+-	 * be removed at some time) but FFmpeg requires it to be set to
+-	 * trigger downmixing (go figure!).  Currently, there is no
+-	 * guidance on how it will work in the future, but looking at
+-	 * where 's->downmixed' is set near the end of 'ac3_decode_init()'
+-	 * in the FFmpeg's source code file 'libavcodec/ac3dec.c' might
+-	 * help (in the absence of proper documentation).
+-	 */
+-
+ 	set_request_channels (data->enc, 2);
+-
+-#ifdef AV_CH_LAYOUT_STEREO_DOWNMIX
+-	data->enc->request_channel_layout = AV_CH_LAYOUT_STEREO_DOWNMIX;
+ #else
+-	data->enc->request_channel_layout = CH_LAYOUT_STEREO_DOWNMIX;
++	data->enc->request_channel_layout = AV_CH_LAYOUT_STEREO;
+ #endif
+-
+-#endif
+ }
+ 
+ static void *ffmpeg_open (const char *file)
+@@ -1064,7 +1047,12 @@
+ {
+ 	assert (pkt);
+ 
++#if HAVE_AV_PACKET_UNREF
++	av_packet_unref (pkt);
++#else
+ 	av_free_packet (pkt);
++#endif
++
+ 	free (pkt);
+ }
+ 
+Index: decoder_plugins/ffmpeg/ffmpeg.m4
+===================================================================
+--- decoder_plugins/ffmpeg/ffmpeg.m4	(revision 2799)
++++ decoder_plugins/ffmpeg/ffmpeg.m4	(revision 2800)
+@@ -39,8 +39,7 @@
+ 		LIBS="$LIBS $ffmpeg_LIBS"
+ 		AC_CHECK_MEMBERS([struct AVCodecContext.request_channels], [], [],
+ 	                     [#include <libavcodec/avcodec.h>])
+-		AC_CHECK_HEADERS([ffmpeg/avformat.h \
+-		                  libavformat/avformat.h libavutil/channel_layout.h])
++		AC_CHECK_HEADERS([libavutil/channel_layout.h])
+ 		AC_SEARCH_LIBS(avcodec_open2, avcodec,
+ 			[AC_DEFINE([HAVE_AVCODEC_OPEN2], 1,
+ 				[Define to 1 if you have the `avcodec_open2' function.])])

Deleted: trunk/dports/multimedia/moc/files/patch-ffmpeg-r2529.diff
===================================================================
--- trunk/dports/multimedia/moc/files/patch-ffmpeg-r2529.diff	2016-04-27 22:11:35 UTC (rev 148142)
+++ trunk/dports/multimedia/moc/files/patch-ffmpeg-r2529.diff	2016-04-27 22:25:39 UTC (rev 148143)
@@ -1,904 +0,0 @@
-Index: THANKS
-===================================================================
---- THANKS	(revision 2506)
-+++ THANKS	(revision 2529)
-@@ -10,6 +10,9 @@
- 	* Fixed miscellaneous coding errors.
- 	* Assisted with testing.
- 
-+Gregory Maxwell:
-+	* Provided patch for off_t in io_* functions.
-+
- Morten Grunnet Buhl:
- 	* Provided Yellow/Red theme.
- 
-@@ -44,6 +47,7 @@
- 	* Headed the effort to port MOC to OpenWRT.
- 	* Provided signficant information on DTS, AAC and other formats.
- 	* Also contributed much time in the refinement of feature ideas.
-+	* Provided 24-bit format conversion bug fixes.
- 
- Juho Hämäläinen:
- 	* Added -Q (--format) FORMAT_STRING option to display file information.
-@@ -202,6 +206,9 @@
- 	* Fixed segfault when trying to play a file using FFmpeg.
- 	* Migrated to newer FFmpeg API.
- 
-+"firejox"
-+	* Fixed screen upsets due to UTF-8 character handing.
-+
- "fluxid":
- 	* Fixed incorrect setting for themes red channel value.
- 
-Index: mocp.1
-===================================================================
---- mocp.1	(revision 2506)
-+++ mocp.1	(revision 2529)
-@@ -69,6 +69,11 @@
- set in the configuration file as \fBStartInMusicDir\fP.
- .LP
- .TP
-+\fB\-q\fP, \fB\-\-enqueue\fP
-+Add files given after command line options to the queue.  Don't start the
-+interface.
-+.LP
-+.TP
- \fB\-a\fP, \fB\-\-append\fP
- Append files, directories (recursively) and playlists given after command
- line options to the playlist.  Don't start the interface.
-Index: menu.c
-===================================================================
---- menu.c	(revision 2506)
-+++ menu.c	(revision 2529)
-@@ -90,9 +90,14 @@
- 	getyx (menu->win, y, x);
- 	if (title_width <= title_space || mi->align == MENU_ALIGN_LEFT)
- 		xwaddnstr (menu->win, mi->title, title_space);
--	else
--		xwaddstr (menu->win, mi->title + title_width - title_space);
-+	else {
-+		char *ptr;
- 
-+		ptr = xstrtail (mi->title, title_space);
-+		xwaddstr (menu->win, ptr);
-+		free (ptr);
-+	}
-+
- 	/* Fill the remainder of the title field with spaces. */
- 	if (mi == menu->selected) {
- 		getyx (menu->win, y, ix);
-Index: configure.in
-===================================================================
---- configure.in	(revision 2506)
-+++ configure.in	(revision 2529)
-@@ -142,7 +142,7 @@
- 
- PKG_PROG_PKG_CONFIG([0.20])
- 
--if test "x$PKG_CONFIG" == "x"
-+if test "x$PKG_CONFIG" = "x"
- then
- 	AC_MSG_WARN([No pkg-config utility found or it's too old, I will have trouble finding installed libraries.])
- fi
-@@ -293,7 +293,6 @@
- 
- dnl optional functions
- AC_CHECK_FUNCS([strcasestr strerror_r syslog])
--AC_CHECK_FUNCS([getrlimit pthread_attr_getstacksize])
- AX_CHECK_UNAME_SYSCALL
- 
- dnl MIME magic
-@@ -322,6 +321,7 @@
- CC="$PTHREAD_CC"
- CFLAGS="$PTHREAD_CFLAGS $CFLAGS"
- EXTRA_LIBS="$EXTRA_LIBS $PTHREAD_LIBS"
-+AC_CHECK_FUNCS([getrlimit pthread_attr_getstacksize])
- 
- dnl __FUNCTION__
- AC_TRY_COMPILE(,[printf(__FUNCTION__);], [AC_DEFINE([HAVE__FUNCTION__], 1,
-@@ -342,7 +342,7 @@
- fi
- 
- dnl popt
--AC_SEARCH_LIBS([poptGetContext], [popt], , [POPT_MISSING="yes"])
-+AC_CHECK_LIB([popt], [poptGetContext], [true], [POPT_MISSING="yes"])
- 
- dnl getopt
- AC_CHECK_FUNC(getopt_long,
-Index: utf8.c
-===================================================================
---- utf8.c	(revision 2506)
-+++ utf8.c	(revision 2529)
-@@ -199,47 +199,50 @@
- 
- int xwaddnstr (WINDOW *win, const char *str, const int n)
- {
--	int res;
-+	int res, width, inv_char;
-+	wchar_t *ucs;
-+	char *mstr, *lstr;
-+	size_t size, num_chars;
- 
- 	assert (n > 0);
- 	assert (str != NULL);
- 
--	if (using_utf8) {
-+	mstr = iconv_str (iconv_desc, str);
- 
--		/* This nasty hack is because we need to count n in chars, but
--		 * [w]addnstr() takes arguments in bytes (in UTF-8 a char can be
--		 * longer than 1 byte).  There are also problems with [w]addnwstr()
--		 * (screen garbled).  I have no better idea. */
-+	size = xmbstowcs (NULL, mstr, -1, NULL) + 1;
-+	ucs = (wchar_t *)xmalloc (sizeof(wchar_t) * size);
-+	xmbstowcs (ucs, mstr, size, &inv_char);
-+	width = wcswidth (ucs, WIDTH_MAX);
- 
--		wchar_t *ucs;
--		size_t size;
--		size_t utf_num_chars;
--		int inv_char;
--
--		size = xmbstowcs (NULL, str, -1, NULL) + 1;
--		ucs = (wchar_t *)xmalloc (sizeof(wchar_t) * size);
--		xmbstowcs (ucs, str, size, &inv_char);
--		if ((size_t)n < size - 1)
--			ucs[n] = L'\0';
--		utf_num_chars = wcstombs (NULL, ucs, 0);
--		if (inv_char) {
--			char *utf8 = (char *)xmalloc (utf_num_chars + 1);
--
--			wcstombs (utf8, ucs, utf_num_chars + 1);
--			res = waddstr (win, utf8);
--			free (utf8);
-+	if (width == -1) {
-+		size_t clidx;
-+		for (clidx = 0; clidx < size - 1; clidx++) {
-+			if (wcwidth (ucs[clidx]) == -1)
-+				ucs[clidx] = L'?';
- 		}
--		else
--			res = waddnstr (win, str, utf_num_chars);
--		free (ucs);
-+		width = wcswidth (ucs, WIDTH_MAX);
-+		inv_char = 1;
- 	}
--	else {
--		char *lstr = iconv_str (iconv_desc, str);
- 
--		res = waddnstr (win, lstr, n);
--		free (lstr);
-+	if (width > n) {
-+		while (width > n)
-+			width -= wcwidth (ucs[--size]);
-+		ucs[size] = L'\0';
- 	}
- 
-+	num_chars = wcstombs (NULL, ucs, 0);
-+	lstr = (char *)xmalloc (num_chars + 1);
-+
-+	if (inv_char)
-+		wcstombs (lstr, ucs, num_chars + 1);
-+	else
-+		snprintf (lstr, num_chars + 1, "%s", mstr);
-+
-+	res = waddstr (win, lstr);
-+
-+	free (ucs);
-+	free (lstr);
-+	free (mstr);
- 	return res;
- }
- 
-Index: audio_conversion.c
-===================================================================
---- audio_conversion.c	(revision 2506)
-+++ audio_conversion.c	(revision 2529)
-@@ -189,7 +189,7 @@
- 	size_t i;
- 
- 	/* maximum and minimum values of 32-bit samples */
--	const unsigned int U32_MAX = (1 << 24);
-+	const unsigned int U32_MAX = (1 << 24) - 1;
- 	const int S32_MAX = (1 << 23) - 1;
- 	const int S32_MIN = -(1 << 23);
- 
-@@ -201,7 +201,7 @@
- 		float f = in[i] * S32_MAX;
- 
- 		if (f >= S32_MAX)
--			*out_val = U32_MAX;
-+			*out_val = U32_MAX << 8;
- 		else if (f <= S32_MIN)
- 			*out_val = 0;
- 		else {
-@@ -231,9 +231,9 @@
- 		float f = in[i] * S32_MAX;
- 
- 		if (f >= S32_MAX)
--			*out_val = S32_MAX;
-+			*out_val = S32_MAX << 8;
- 		else if (f <= S32_MIN)
--			*out_val = S32_MIN;
-+			*out_val = S32_MIN << 8;
- 		else {
- #ifdef HAVE_LRINTF
- 			*out_val = lrintf(f) << 8;
-Index: io.c
-===================================================================
---- io.c	(revision 2506)
-+++ io.c	(revision 2529)
-@@ -141,20 +141,20 @@
- }
- 
- #ifdef HAVE_MMAP
--static off_t io_seek_mmap (struct io_stream *s, const long where)
-+static off_t io_seek_mmap (struct io_stream *s, const off_t where)
- {
--	assert (RANGE(0, where, (long)s->size));
-+	assert (RANGE(0, where, (off_t)s->size));
- 
- 	return (s->mem_pos = where);
- }
- #endif
- 
--static off_t io_seek_fd (struct io_stream *s, const int where)
-+static off_t io_seek_fd (struct io_stream *s, const off_t where)
- {
- 	return lseek (s->fd, where, SEEK_SET);
- }
- 
--static off_t io_seek_buffered (struct io_stream *s, const long where)
-+static off_t io_seek_buffered (struct io_stream *s, const off_t where)
- {
- 	off_t res = -1;
- 
-@@ -180,7 +180,7 @@
- 	return res;
- }
- 
--static off_t io_seek_unbuffered (struct io_stream *s, const long where)
-+static off_t io_seek_unbuffered (struct io_stream *s, const off_t where)
- {
- 	off_t res = -1;
- 
-Index: decoder_plugins/mp3/mp3.c
-===================================================================
---- decoder_plugins/mp3/mp3.c	(revision 2506)
-+++ decoder_plugins/mp3/mp3.c	(revision 2529)
-@@ -696,17 +696,19 @@
- {
- 	char *ext;
- 
-+	strcpy (buf, "MPx");
-+
- 	ext = ext_pos (file);
--	if (!strcasecmp (ext, "mp3"))
--		strcpy (buf, "MP3");
--	else if (!strcasecmp (ext, "mp2"))
--		strcpy (buf, "MP2");
--	else if (!strcasecmp (ext, "mp1"))
--		strcpy (buf, "MP1");
--	else if (!strcasecmp (ext, "mpga"))
--		strcpy (buf, "MPG");
--	else
--		strcpy (buf, "MPx");
-+	if (ext) {
-+		if (!strcasecmp (ext, "mp3"))
-+			strcpy (buf, "MP3");
-+		else if (!strcasecmp (ext, "mp2"))
-+			strcpy (buf, "MP2");
-+		else if (!strcasecmp (ext, "mp1"))
-+			strcpy (buf, "MP1");
-+		else if (!strcasecmp (ext, "mpga"))
-+			strcpy (buf, "MPG");
-+	}
- }
- 
- static int mp3_our_format_ext (const char *ext)
-Index: decoder_plugins/ffmpeg/ffmpeg.m4
-===================================================================
---- decoder_plugins/ffmpeg/ffmpeg.m4	(revision 2506)
-+++ decoder_plugins/ffmpeg/ffmpeg.m4	(revision 2529)
-@@ -88,6 +88,27 @@
- 		                 [#include <libavcodec/avcodec.h>])
- 		AC_CHECK_DECLS([AV_CODEC_ID_OPUS], , ,
- 		                 [#include <libavcodec/avcodec.h>])
-+		AC_SEARCH_LIBS(avcodec_free_frame, avcodec,
-+			[AC_DEFINE([HAVE_AVCODEC_FREE_FRAME], 1,
-+				[Define to 1 if you have the `avcodec_free_frame' function.])])
-+		AC_CHECK_DECLS([CODEC_ID_PCM_S8_PLANAR], , ,
-+		                 [#include <libavcodec/avcodec.h>])
-+		AC_CHECK_DECLS([AV_SAMPLE_FMT_U8P], , ,
-+		                 [#include <libavcodec/avcodec.h>])
-+		AC_CHECK_DECLS([AV_SAMPLE_FMT_S16P], , ,
-+		                 [#include <libavcodec/avcodec.h>])
-+		AC_CHECK_DECLS([AV_SAMPLE_FMT_S32P], , ,
-+		                 [#include <libavcodec/avcodec.h>])
-+		AC_CHECK_DECLS([AV_SAMPLE_FMT_FLTP], , ,
-+		                 [#include <libavcodec/avcodec.h>])
-+		AC_CHECK_DECLS([CODEC_CAP_EXPERIMENTAL], , ,
-+		                 [#include <libavcodec/avcodec.h>])
-+		AC_SEARCH_LIBS(av_get_sample_fmt_name, avutil,
-+			[AC_DEFINE([HAVE_AV_GET_SAMPLE_FMT_NAME], 1,
-+				[Define to 1 if you have the `av_get_sample_fmt_name' function.])])
-+		AC_SEARCH_LIBS(av_lockmgr_register, avcodec,
-+			[AC_DEFINE([HAVE_LOCKMGR_REGISTER], 1,
-+				[Define to 1 if you have the `av_lockmgr_register' function.])])
- 		CPPFLAGS="$save_CPPFLAGS"
- 		CFLAGS="$save_CFLAGS"
- 		LIBS="$save_LIBS"
-Index: decoder_plugins/ffmpeg/ffmpeg.c
-===================================================================
---- decoder_plugins/ffmpeg/ffmpeg.c	(revision 2506)
-+++ decoder_plugins/ffmpeg/ffmpeg.c	(revision 2529)
-@@ -99,6 +99,7 @@
- 	bool okay; /* was this stream successfully opened? */
- 	struct decoder_error error;
- 	long fmt;
-+	int sample_width;
- 	int bitrate;            /* in bits per second */
- 	int avg_bitrate;        /* in bits per second */
- #if SEEK_IN_DECODER
-@@ -106,6 +107,7 @@
- 	int seek_sec;           /* second to which to seek */
- #endif
- 	bool seek_broken;       /* FFmpeg seeking is broken */
-+	bool timing_broken;     /* FFmpeg trashes duration and bit_rate */
- #if SEEK_IN_DECODER && defined(DEBUG)
- 	pthread_t thread_id;
- #endif
-@@ -277,8 +279,72 @@
- 	}
- }
- 
-+/* Handle FFmpeg's locking requirements. */
-+#ifdef HAVE_LOCKMGR_REGISTER
-+static int locking_cb (void **mutex, enum AVLockOp op)
-+{
-+	int result;
-+
-+	switch (op) {
-+	case AV_LOCK_CREATE:
-+		*mutex = xmalloc (sizeof (pthread_mutex_t));
-+		result = pthread_mutex_init (*mutex, NULL);
-+		break;
-+	case AV_LOCK_OBTAIN:
-+		result = pthread_mutex_lock (*mutex);
-+		break;
-+	case AV_LOCK_RELEASE:
-+		result = pthread_mutex_unlock (*mutex);
-+		break;
-+	case AV_LOCK_DESTROY:
-+		result = pthread_mutex_destroy (*mutex);
-+		free (*mutex);
-+		*mutex = NULL;
-+		break;
-+	}
-+
-+	return result;
-+}
-+#endif
-+
-+/* Here we attempt to determine if FFmpeg/LibAV has trashed the 'duration'
-+ * and 'bit_rate' fields in AVFormatContext for large files.  Determining
-+ * whether or not they are likely to be valid is imprecise and will vary
-+ * depending (at least) on:
-+ *
-+ * - The file's size,
-+ * - The file's codec,
-+ * - The number and size of tags,
-+ * - The version of FFmpeg/LibAV, and
-+ * - Whether it's FFmpeg or LibAV.
-+ *
-+ * This function represents a best guess.
-+*/
-+static bool is_timing_broken (AVFormatContext *ic)
-+{
-+	int64_t file_size;
-+
-+	if (ic->duration < 0 || ic->bit_rate < 0)
-+		return true;
-+
-+#ifdef HAVE_AVIO_SIZE
-+	file_size = avio_size (ic->pb);
-+#else
-+	file_size = ic->file_size;
-+#endif
-+
-+	if (file_size < UINT32_MAX)
-+		return false;
-+
-+	return true;
-+}
-+
- static void ffmpeg_init ()
- {
-+#ifdef HAVE_LOCKMGR_REGISTER
-+	int rc;
-+#endif
-+
- #ifdef DEBUG
- 	av_log_set_level (AV_LOG_INFO);
- #else
-@@ -291,10 +357,20 @@
- 	supported_extns = lists_strs_new (16);
- 	load_audio_extns (supported_extns);
- 	load_video_extns (supported_extns);
-+
-+#ifdef HAVE_LOCKMGR_REGISTER
-+	rc = av_lockmgr_register (locking_cb);
-+	if (rc < 0)
-+		fatal ("Lock manager initialisation failed");
-+#endif
- }
- 
- static void ffmpeg_destroy ()
- {
-+#ifdef HAVE_LOCKMGR_REGISTER
-+	av_lockmgr_register (NULL);
-+#endif
-+
- 	av_log_set_level (AV_LOG_QUIET);
- 	ffmpeg_log_repeats (NULL);
- 
-@@ -341,9 +417,9 @@
- 	}
- #endif
- 
--	if (tags_sel & TAGS_TIME) {
-+	if (!is_timing_broken (ic) && tags_sel & TAGS_TIME) {
- 		info->time = -1;
--		if (ic->duration >= 0)
-+		if (ic->duration != (int64_t)AV_NOPTS_VALUE && ic->duration >= 0)
- 			info->time = ic->duration / AV_TIME_BASE;
- 	}
- 
-@@ -426,12 +502,6 @@
- 
- #endif
- 
--	if (tags_sel & TAGS_TIME) {
--		info->time = -1;
--		if (ic->duration != (int64_t)AV_NOPTS_VALUE && ic->duration >= 0)
--			info->time = ic->duration / AV_TIME_BASE;
--	}
--
- end:
- #ifdef HAVE_AVFORMAT_CLOSE_INPUT
- 	avformat_close_input (&ic);
-@@ -450,6 +520,9 @@
- 		if (!strcmp (data->ic->iformat->name, "wav")) {
- 			switch (data->enc->codec_id) {
- 			case CODEC_ID_PCM_S8:
-+#if HAVE_DECL_CODEC_ID_PCM_S8_PLANAR
-+			case CODEC_ID_PCM_S8_PLANAR:
-+#endif
- 				result = SFMT_S8;
- 				break;
- 			case CODEC_ID_PCM_U8:
-@@ -456,6 +529,7 @@
- 				result = SFMT_U8;
- 				break;
- 			case CODEC_ID_PCM_S16LE:
-+			case CODEC_ID_PCM_S16LE_PLANAR:
- 			case CODEC_ID_PCM_S16BE:
- 				result = SFMT_S16;
- 				break;
-@@ -490,15 +564,27 @@
- 
- 	switch (data->enc->sample_fmt) {
- 	case AV_SAMPLE_FMT_U8:
-+#if HAVE_DECL_AV_SAMPLE_FMT_U8P
-+	case AV_SAMPLE_FMT_U8P:
-+#endif
- 		result = SFMT_U8;
- 		break;
- 	case AV_SAMPLE_FMT_S16:
-+#if HAVE_DECL_AV_SAMPLE_FMT_S16P
-+	case AV_SAMPLE_FMT_S16P:
-+#endif
- 		result = SFMT_S16;
- 		break;
- 	case AV_SAMPLE_FMT_S32:
-+#if HAVE_DECL_AV_SAMPLE_FMT_S32P
-+	case AV_SAMPLE_FMT_S32P:
-+#endif
- 		result = SFMT_S32;
- 		break;
- 	case AV_SAMPLE_FMT_FLT:
-+#if HAVE_DECL_AV_SAMPLE_FMT_FLTP
-+	case AV_SAMPLE_FMT_FLTP:
-+#endif
- 		result = SFMT_FLOAT;
- 		break;
- 	default:
-@@ -597,6 +683,7 @@
- 	data->stream = NULL;
- 	data->enc = NULL;
- 	data->codec = NULL;
-+	data->sample_width = 0;
- 	data->bitrate = 0;
- 	data->avg_bitrate = 0;
- 
-@@ -624,6 +711,7 @@
- 	data->seek_sec = 0;
- #endif
- 	data->seek_broken = false;
-+	data->timing_broken = false;
- 
- 	decoder_error_init (&data->error);
- 
-@@ -655,6 +743,9 @@
- 	err = av_find_stream_info (data->ic);
- #endif
- 	if (err < 0) {
-+		/* Depending on the particular FFmpeg/LibAV version in use, this
-+		 * may misreport experimental codecs.  Given we don't know the
-+		 * codec at this time, we will have to live with it. */
- 		decoder_error (&data->error, ERROR_FATAL, 0,
- 				"Could not find codec parameters (err %d)",
- 				err);
-@@ -683,6 +774,19 @@
- 	debug ("FFmpeg thinks '%s' is format(codec) '%s(%s)'",
- 	        fn, data->ic->iformat->name, data->codec->name);
- 
-+#if HAVE_DECL_CODEC_CAP_EXPERIMENTAL
-+	/* This may or may not work depending on the particular version of
-+	 * FFmpeg/LibAV in use.  For some versions this will be caught in
-+	 * *_find_stream_info() above and misreported as an unfound codec
-+	 * parameters error. */
-+	if (data->codec->capabilities & CODEC_CAP_EXPERIMENTAL) {
-+		decoder_error (&data->error, ERROR_FATAL, 0,
-+				"The codec is experimental and may damage MOC: %s",
-+				data->codec->name);
-+		goto end;
-+	}
-+#endif
-+
- 	set_downmixing (data);
- 	if (data->codec->capabilities & CODEC_CAP_TRUNCATED)
- 		data->enc->flags |= CODEC_FLAG_TRUNCATED;
-@@ -702,27 +806,38 @@
- 	if (data->fmt == 0)
- 		data->fmt = fmt_from_sample_fmt (data);
- 	if (data->fmt == 0) {
-+#ifdef HAVE_AV_GET_SAMPLE_FMT_NAME
- 		decoder_error (&data->error, ERROR_FATAL, 0,
-+		               "Cannot get sample size from unknown sample format: %s",
-+		               av_get_sample_fmt_name (data->enc->sample_fmt));
-+#else
-+		decoder_error (&data->error, ERROR_FATAL, 0,
- 		               "Unsupported sample size!");
-+#endif
-+		avcodec_close (data->enc);
- 		goto end;
- 	}
-+	data->sample_width = sfmt_Bps (data->fmt);
- 	if (data->codec->capabilities & CODEC_CAP_DELAY)
- 		data->delay = true;
- 	data->seek_broken = is_seek_broken (data);
-+	data->timing_broken = is_timing_broken (data->ic);
- 
- 	data->okay = true;
- 
--	if (data->ic->duration >= AV_TIME_BASE) {
-+	if (!data->timing_broken && data->ic->duration >= AV_TIME_BASE) {
- #ifdef HAVE_AVIO_SIZE
- 		data->avg_bitrate = (int) (avio_size (data->ic->pb) /
--		                          (data->ic->duration / AV_TIME_BASE) * 8);
-+		                           (data->ic->duration / AV_TIME_BASE) * 8);
- #else
- 		data->avg_bitrate = (int) (data->ic->file_size /
--		                          (data->ic->duration / AV_TIME_BASE) * 8);
-+		                           (data->ic->duration / AV_TIME_BASE) * 8);
- #endif
- 	}
--	data->bitrate = data->ic->bit_rate;
- 
-+	if (!data->timing_broken && data->ic->bit_rate > 0)
-+		data->bitrate = data->ic->bit_rate;
-+
- 	return data;
- 
- end:
-@@ -908,8 +1023,6 @@
- 		                            &data_size, pkt->data, pkt->size);
- #endif
- 
--		debug ("Decoded %dB", data_size);
--
- 		if (len < 0)  {
- 			/* skip frame */
- 			decoder_error (&data->error, ERROR_STREAM, 0, "Error in the stream!");
-@@ -916,14 +1029,16 @@
- 			break;
- 		}
- 
-+		debug ("Decoded %dB", data_size);
-+
-+		pkt->data += len;
-+		pkt->size -= len;
-+
- 		if (data->eof && data_size == 0) {
- 			data->eos = true;
- 			break;
- 		}
- 
--		pkt->data += len;
--		pkt->size -= len;
--
- 		copied = copy_or_buffer (data, data->avbuf, data_size, buf, buf_len);
- 
- 		buf += copied;
-@@ -943,12 +1058,15 @@
-                           char *buf, int buf_len)
- {
- 	int filled = 0;
-+	char *packed;
-+	AVFrame *frame;
- 
-+	frame = avcodec_alloc_frame ();
-+
- 	do {
--		int len, got_frame, is_planar, plane_size, data_size, copied;
--		AVFrame frame;
-+		int len, got_frame, is_planar, packed_size, copied;
- 
--		len = avcodec_decode_audio4 (data->enc, &frame, &got_frame, pkt);
-+		len = avcodec_decode_audio4 (data->enc, frame, &got_frame, pkt);
- 
- 		if (len < 0)  {
- 			/* skip frame */
-@@ -956,45 +1074,56 @@
- 			break;
- 		}
- 
--		if (!got_frame) {
--			data->eos = data->eof;
--			break;
--		}
--
- 		debug ("Decoded %dB", len);
- 
- 		pkt->data += len;
- 		pkt->size -= len;
- 
--		is_planar = av_sample_fmt_is_planar (data->enc->sample_fmt);
--		data_size = av_samples_get_buffer_size (&plane_size,
--		                                        data->enc->channels,                                                   frame.nb_samples,
--		                                        data->enc->sample_fmt, 1);
-+		if (!got_frame) {
-+			data->eos = data->eof && (pkt->size == 0);
-+			continue;
-+		}
- 
--		if (data_size == 0)
-+		if (frame->nb_samples == 0)
- 			continue;
- 
--		copied = copy_or_buffer (data, (char *)frame.extended_data[0],
--		                         plane_size, buf, buf_len);
-+		is_planar = av_sample_fmt_is_planar (data->enc->sample_fmt);
-+		packed = (char *)frame->extended_data[0];
-+		packed_size = frame->nb_samples * data->sample_width
-+		                                * data->enc->channels;
-+
-+		if (is_planar && data->enc->channels > 1) {
-+			int sample, ch;
-+
-+			packed = xmalloc (packed_size);
-+
-+			for (sample = 0; sample < frame->nb_samples; sample += 1) {
-+				for (ch = 0; ch < data->enc->channels; ch += 1)
-+					memcpy (packed + (sample * data->enc->channels + ch)
-+					                         * data->sample_width,
-+					        (char *)frame->extended_data[ch] + sample * data->sample_width,
-+					        data->sample_width);
-+			}
-+		}
-+
-+		copied = copy_or_buffer (data, packed, packed_size, buf, buf_len);
- 		buf += copied;
- 		filled += copied;
- 		buf_len -= copied;
- 
--        if (is_planar && data->enc->channels > 1) {
--			int ch;
-+		debug ("Copying %dB (%dB filled)", packed_size, filled);
- 
--            for (ch = 1; ch < data->enc->channels; ch += 1) {
--				copied = copy_or_buffer (data, (char *)frame.extended_data[ch],
--				                         plane_size, buf, buf_len);
--				buf += copied;
--				filled += copied;
--				buf_len -= copied;
--            }
--        }
--
--		debug ("Copying %dB (%dB filled)", data_size, filled);
-+		if (packed != (char *)frame->extended_data[0])
-+			free (packed);
- 	} while (pkt->size > 0);
- 
-+	avcodec_get_frame_defaults (frame);
-+#ifdef HAVE_AVCODEC_FREE_FRAME
-+	avcodec_free_frame (&frame);
-+#else
-+	av_freep (&frame);
-+#endif
-+
- 	return filled;
- }
- #endif
-@@ -1122,9 +1251,10 @@
- 		free_packet (pkt);
- 	} while (!bytes_produced && !data->eos);
- 
--	data->bitrate = compute_bitrate (sound_params, bytes_used,
--	                                 bytes_produced + data->remain_buf_len,
--	                                 data->bitrate);
-+	if (!data->timing_broken)
-+		data->bitrate = compute_bitrate (sound_params, bytes_used,
-+		                                 bytes_produced + data->remain_buf_len,
-+		                                 data->bitrate);
- 
- 	return bytes_produced;
- }
-@@ -1185,7 +1315,7 @@
- {
- 	struct ffmpeg_data *data = (struct ffmpeg_data *)prv_data;
- 
--	return data->bitrate / 1000;
-+	return data->timing_broken ? -1 : data->bitrate / 1000;
- }
- 
- static int ffmpeg_get_avg_bitrate (void *prv_data)
-@@ -1192,7 +1322,7 @@
- {
- 	struct ffmpeg_data *data = (struct ffmpeg_data *)prv_data;
- 
--	return data->avg_bitrate / 1000;
-+	return data->timing_broken ? -1 : data->avg_bitrate / 1000;
- }
- 
- static int ffmpeg_get_duration (void *prv_data)
-@@ -1199,6 +1329,9 @@
- {
- 	struct ffmpeg_data *data = (struct ffmpeg_data *)prv_data;
- 
-+	if (data->timing_broken)
-+		return -1;
-+
- 	if (!data->stream)
- 		return -1;
- 
-Index: decoder_plugins/vorbis/vorbis.c
-===================================================================
---- decoder_plugins/vorbis/vorbis.c	(revision 2506)
-+++ decoder_plugins/vorbis/vorbis.c	(revision 2529)
-@@ -47,9 +47,9 @@
- 
- /* Tremor defines time as 64-bit integer milliseconds. */
- #ifndef HAVE_TREMOR
--static const double time_scaler = 1;
-+static const int64_t time_scaler = 1;
- #else
--static const ogg_int64_t time_scaler = 1000;
-+static const int64_t time_scaler = 1000;
- #endif
- 
- struct vorbis_data
-@@ -171,11 +171,11 @@
- 		get_comment_tags (&vf, info);
- 
- 	if (tags_sel & TAGS_TIME) {
--		int vorbis_time;
-+		int64_t vorbis_time;
- 
--	    vorbis_time = ov_time_total (&vf, -1) / time_scaler;
--	    if (vorbis_time >= 0)
--			info->time = vorbis_time;
-+		vorbis_time = ov_time_total (&vf, -1);
-+		if (vorbis_time >= 0)
-+			info->time = vorbis_time / time_scaler;
- 	}
- 
- 	ov_clear (&vf);
-@@ -244,12 +244,15 @@
- 		io_close (data->stream);
- 	}
- 	else {
-+		int64_t duration;
-+
- 		data->last_section = -1;
- 		data->avg_bitrate = ov_bitrate (&data->vf, -1) / 1000;
- 		data->bitrate = data->avg_bitrate;
--		data->duration = ov_time_total (&data->vf, -1) / time_scaler;
--		if (data->duration == OV_EINVAL)
--			data->duration = -1;
-+		data->duration = -1;
-+		duration = ov_time_total (&data->vf, -1);
-+		if (duration >= 0)
-+			data->duration = duration / time_scaler;
- 		data->ok = 1;
- 		get_comment_tags (&data->vf, data->tags);
- 	}
-@@ -280,9 +283,9 @@
- 
- static int vorbis_can_decode (struct io_stream *stream)
- {
--	char buf[34];
-+	char buf[35];
- 
--	if (io_peek (stream, buf, 34) == 34 && !memcmp (buf, "OggS", 4)
-+	if (io_peek (stream, buf, 35) == 35 && !memcmp (buf, "OggS", 4)
- 			&& !memcmp (buf + 28, "\01vorbis", 7))
- 		return 1;
- 
-Index: decoder_plugins/flac/flac.c
-===================================================================
---- decoder_plugins/flac/flac.c	(revision 2506)
-+++ decoder_plugins/flac/flac.c	(revision 2529)
-@@ -54,7 +54,7 @@
- 	int abort; /* abort playing (due to an error) */
- 
- 	unsigned length;
--	unsigned total_samples;
-+	FLAC__uint64 total_samples;
- 
- 	FLAC__byte sample_buffer[SAMPLE_BUFFER_SIZE];
- 	unsigned sample_buffer_fill;
-@@ -156,11 +156,8 @@
- 	if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO) {
- 		debug ("Got metadata info");
- 
--		data->total_samples =
--			(unsigned)(metadata->data.stream_info.total_samples
--				   & 0xffffffff);
--		data->bits_per_sample =
--			metadata->data.stream_info.bits_per_sample;
-+		data->total_samples = metadata->data.stream_info.total_samples;
-+		data->bits_per_sample = metadata->data.stream_info.bits_per_sample;
- 		data->channels = metadata->data.stream_info.channels;
- 		data->sample_rate = metadata->data.stream_info.sample_rate;
- 		data->length = data->total_samples / data->sample_rate;
-@@ -536,9 +533,10 @@
- 	if ((unsigned)sec > data->length)
- 		return -1;
- 
--	target_sample = (FLAC__uint64)((sec/(double)data->length) *
--			(double)data->total_samples);
-+	target_sample = (FLAC__uint64)(((double)sec / (double)data->length) *
-+	                               (double)data->total_samples);
- 
-+
- #ifdef LEGACY_FLAC
- 	if (FLAC__seekable_stream_decoder_seek_absolute(data->decoder,
- 				target_sample))
-Index: audio.c
-===================================================================
---- audio.c	(revision 2506)
-+++ audio.c	(revision 2529)
-@@ -169,7 +169,7 @@
- 	if (fmt1 & (SFMT_S16 | SFMT_U16)
- 			&& fmt2 & (SFMT_S16 | SFMT_U16))
- 		return 1;
--	if (fmt1 & (SFMT_S8 | SFMT_U8)
-+	if (fmt1 & (SFMT_S32 | SFMT_U32)
- 			&& fmt2 & (SFMT_S32 | SFMT_U32))
- 		return 1;
- 	if (fmt1 & fmt2 & SFMT_FLOAT)
-Index: TODO
-===================================================================
---- TODO	(revision 2506)
-+++ TODO	(revision 2529)
-@@ -9,8 +9,6 @@
-   - Recognition of ID3 tags v1 is broken (example: small.mp3).  [node/234]
-   - Perhaps MOC can add support for the frame field_type to differentiate
-     between ID3_FIELD_TYPE_LATIN1 and ID3_FIELD_TYPE_STRING.  [node/234]
--  - Characters which are represented in more than one screen column cause
--    the text to overflow its field.  [node/82, 99 and 788]
-   - Some Cyrillic characters in file and directory names don't get displayed
-     correctly.
- * Program crashes:

Deleted: trunk/dports/multimedia/moc/files/patch-options.c.diff
===================================================================
--- trunk/dports/multimedia/moc/files/patch-options.c.diff	2016-04-27 22:11:35 UTC (rev 148142)
+++ trunk/dports/multimedia/moc/files/patch-options.c.diff	2016-04-27 22:25:39 UTC (rev 148143)
@@ -1,14 +0,0 @@
-diff -ur ../moc-2.4.3.orig/options.c ./options.c
---- ../moc-2.4.3.orig/options.c	2007-05-22 20:24:34.000000000 +0200
-+++ ./options.c	2008-03-26 20:02:14.000000000 +0100
-@@ -172,8 +172,8 @@
- 	option_add_int ("SyncPlaylist", 1);
- 	option_add_int ("InputBuffer", 512);
- 	option_add_int ("Prebuffering", 64);
--	option_add_str ("JackOutLeft", "alsa_pcm:playback_1");
--	option_add_str ("JackOutRight", "alsa_pcm:playback_2");
-+	option_add_str ("JackOutLeft", "system:playback_1");
-+	option_add_str ("JackOutRight", "system:playback_2");
- 	option_add_int ("ASCIILines", 0);
- 	option_add_str ("FastDir1", NULL);
- 	option_add_str ("FastDir2", NULL);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/macports-changes/attachments/20160427/997a8d1b/attachment-0001.html>


More information about the macports-changes mailing list