summaryrefslogtreecommitdiff
path: root/extra/moc
diff options
context:
space:
mode:
authorNicolás Reynolds <fauno@endefensadelsl.org>2014-02-07 03:24:01 +0000
committerNicolás Reynolds <fauno@endefensadelsl.org>2014-02-07 03:24:01 +0000
commitb4f09e0a566f01cd9a250e2f44423169c70adc94 (patch)
treed407e83c47735fe0d24a6be03937a1d84f41c1cf /extra/moc
parentae5e27e4900c0c38025462f59e0524aef7aa630b (diff)
Fri Feb 7 03:21:50 UTC 2014
Diffstat (limited to 'extra/moc')
-rw-r--r--extra/moc/PKGBUILD35
-rw-r--r--extra/moc/moc-ffmpeg.patch557
2 files changed, 14 insertions, 578 deletions
diff --git a/extra/moc/PKGBUILD b/extra/moc/PKGBUILD
index 5f5fe7725..059249cb8 100644
--- a/extra/moc/PKGBUILD
+++ b/extra/moc/PKGBUILD
@@ -1,28 +1,26 @@
-# $Id: PKGBUILD 198322 2013-10-30 14:09:45Z allan $
+# $Id: PKGBUILD 205535 2014-02-06 19:58:31Z eric $
# Maintainer: Eric Bélanger <eric@archlinux.org>
pkgname=moc
-pkgver=2.5beta1
-pkgrel=5
+pkgver=2.5.0beta2
+pkgrel=1
epoch=1
pkgdesc="An ncurses console audio player designed to be powerful and easy to use"
arch=('i686' 'x86_64')
url="http://moc.daper.net/"
license=('GPL')
-depends=('libmad' 'libid3tag' 'jack' 'curl' 'libltdl' 'file' 'popt')
+depends=('libmad' 'libid3tag' 'jack' 'curl' 'libltdl' 'file')
makedepends=('speex' 'ffmpeg' 'taglib' 'libmpcdec' 'wavpack' 'libmodplug' 'faad2')
-optdepends=('speex: for using the speex plugin'
+optdepends=('speex: for using the speex plugin'
'ffmpeg: for using the ffmpeg plugin'
- 'taglib: for using the musepack plugin'
- 'libmpcdec: for using the musepack plugin'
- 'wavpack: for using the wavpack plugin'
- 'faad2: for using the aac plugin'
+ 'taglib: for using the musepack plugin'
+ 'libmpcdec: for using the musepack plugin'
+ 'wavpack: for using the wavpack plugin'
+ 'faad2: for using the aac plugin'
'libmodplug: for using the modplug plugin')
-source=(ftp://ftp.daper.net/pub/soft/moc/unstable/moc-2.5.0-beta1.tar.bz2{,.sig} \
- moc-ffmpeg.patch)
-sha1sums=('4030a1fa5c7cfef06909c54d8c7a1fbb93f23caa'
- '29c232c37e1f3737c3b670372732446e9c0786a8'
- 'f3b8b327dd27d50422b1ad8c9ef89a7366529307')
+source=(http://ftp.daper.net/pub/soft/moc/unstable/moc-${pkgver%b*}-${pkgver#*.*.?}.tar.bz2{,.sig})
+sha1sums=('bf786d719c853c22dec74bc2ee565aae4596fbe7'
+ 'SKIP')
# source PKGBUILD && mksource
mksource() {
@@ -40,13 +38,8 @@ mksource() {
gpg --detach-sign --use-agent -u ${GPGKEY} ${pkgname}-${pkgver}.tar.xz
}
-prepare() {
- cd ${pkgname}-2.5.0-beta1
- patch -p0 -i "${srcdir}/moc-ffmpeg.patch"
-}
-
build() {
- cd ${pkgname}-2.5.0-beta1
+ cd ${pkgname}-${pkgver%b*}-${pkgver#*.*.?}
./configure --prefix=/usr --without-rcc \
--with-oss --with-alsa --with-jack --with-aac --with-mp3 \
--with-musepack --with-vorbis --with-flac --with-wavpack \
@@ -56,6 +49,6 @@ build() {
}
package() {
- cd ${pkgname}-2.5.0-beta1
+ cd ${pkgname}-${pkgver%b*}-${pkgver#*.*.?}
make DESTDIR="${pkgdir}" install
}
diff --git a/extra/moc/moc-ffmpeg.patch b/extra/moc/moc-ffmpeg.patch
deleted file mode 100644
index e268e5427..000000000
--- a/extra/moc/moc-ffmpeg.patch
+++ /dev/null
@@ -1,557 +0,0 @@
-Index: menu.c
-===================================================================
---- menu.c (revision 2516)
-+++ menu.c (working copy)
-@@ -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: utf8.c
-===================================================================
---- utf8.c (revision 2516)
-+++ utf8.c (working copy)
-@@ -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: decoder_plugins/mp3/mp3.c
-===================================================================
---- decoder_plugins/mp3/mp3.c (revision 2516)
-+++ decoder_plugins/mp3/mp3.c (working copy)
-@@ -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 2516)
-+++ decoder_plugins/ffmpeg/ffmpeg.m4 (working copy)
-@@ -88,6 +88,25 @@
- [#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_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 2516)
-+++ decoder_plugins/ffmpeg/ffmpeg.c (working copy)
-@@ -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,12 +520,16 @@
- 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:
- 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);
-
-@@ -702,27 +790,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:
-@@ -943,12 +1042,14 @@
- char *buf, int buf_len)
- {
- int filled = 0;
-+ AVFrame *frame;
-
-+ frame = avcodec_alloc_frame ();
-+
- do {
- int len, got_frame, is_planar, plane_size, data_size, copied;
-- AVFrame frame;
-
-- 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 */
-@@ -968,33 +1069,46 @@
-
- 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->channels,
-+ frame->nb_samples,
- data->enc->sample_fmt, 1);
-
- if (data_size == 0)
- continue;
-
-- copied = copy_or_buffer (data, (char *)frame.extended_data[0],
-- plane_size, buf, buf_len);
-- buf += copied;
-- filled += copied;
-- buf_len -= copied;
-+ if (is_planar && data->enc->channels > 1) {
-+ int offset, ch;
-
-- if (is_planar && data->enc->channels > 1) {
-- int ch;
-+ for (offset = 0; offset < plane_size; offset += data->sample_width) {
-+ for (ch = 0; ch < data->enc->channels; ch += 1) {
-+ copied = copy_or_buffer (data,
-+ (char *)frame->extended_data[ch]
-+ + offset,
-+ data->sample_width, buf, buf_len);
-+ buf += copied;
-+ filled += copied;
-+ buf_len -= copied;
-+ }
-+ }
-+ }
-+ else {
-+ copied = copy_or_buffer (data, (char *)frame->extended_data[0],
-+ plane_size, buf, buf_len);
-+ buf += copied;
-+ filled += copied;
-+ buf_len -= copied;
-+ }
-
-- 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);
- } 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 +1236,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,20 +1300,23 @@
- {
- 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)
- {
- 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)
- {
- struct ffmpeg_data *data = (struct ffmpeg_data *)prv_data;
-
-+ if (data->timing_broken)
-+ return -1;
-+
- if (!data->stream)
- return -1;
-
-
-Index: configure.in
-===================================================================
---- configure.in (revision 2518)
-+++ configure.in (working copy)
-@@ -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,
-
-