chiark / gitweb /
Merge branch 'mdw/gstdecode'
authorMark Wooding <mdw@distorted.org.uk>
Tue, 15 Dec 2015 19:15:23 +0000 (19:15 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 16 Jan 2016 01:25:26 +0000 (01:25 +0000)
* mdw/gstdecode:
  Add documentation and administrivia about `disorder-gstdecode'.
  server/gstdecode.c: Produce the configured sample format directly.
  server/gstdecode.c: Allow user to tweak the various parameters.
  server/gstdecode.c: New program, like `disorder-decode'.

Conflicts:
.gitignore
CHANGES.html
README
debian/control

1  2 
.gitignore
CHANGES.html
configure.ac
debian/control
debian/rules
server/Makefile.am

diff --cc .gitignore
@@@ -207,12 -212,5 +207,14 @@@ libtests/test-suite.lo
  /GRTAGS
  /GSYMS
  /GTAGS
+ debian/disorder-gstdecode
+ server/disorder-gstdecode
 +/Debug
 +/lib/Debug
 +/clients/Debug
 +*.suo
 +*.sdf
 +*.opensdf
 +*.vcxproj.user
 +.dirstamp
 +tests/*.trs
diff --cc CHANGES.html
@@@ -49,100 -67,42 +49,136 @@@ href="README.upgrades.html">README.upgr
  
    </div>
  
+   <h3>GStreamer support</h3>
+   <div class=section>
+     <p>If it's detected at <tt>configure</tt> time, a new decoder
+     program <tt>disorder-gstdecode</tt> is built.  It uses the GStreamer
+     library for audio decoding and sample-rate conversion, among other
+     features.
+     <p>The decoder has a number of options for controlling the sample-rate and
+     audio format conversion, allowing various tradeoffs between quality and
+     processor time.  (High-quality conversion can consume more processor time
+     than decoding, so this is potentially useful on very a small device such as
+     a Raspberry Pi.</p>
+     <p>The GStreamer decoder can also use ReplayGain information stored in
+     audio files' metadata to adjust playback volume, so that tracks with very
+     wide dynamic range don't sound really quiet in comparison.  This
+     information can be added using tools such as <tt>mp3gain</tt>,
+     <tt>vorbisgain</tt>, or <tt>metaflac</tt>.  This is turned on by default if
+     you use the decoder; you can choose between per-album or per-track
+     settings, or turn it off entirely, using command-line options.</p> 
+     <p>The GStreamer decoder is not used by default, but it can be enabled
+     easily enough by dropping something like the following into the server
+     configuration file:
+       <pre>
+         player
+         player *.flac execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
+         player *.mp2 execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
+         player *.mp3 execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
+         player *.ogg execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
+         player *.wav execraw /usr/sbin/disorder-gstdecode -ralbum -f-8.0
+       </pre>
+     </p>
 +  <h3>Bug fixes</h3>
 +
 +  <div class=section>
 +
 +    <ul>
 +      <li>The CGI program now checks user passwords even when it runs as the
 +      main jukebox user(!).</li>
 +
 +      <li>DisObedience doesn't crash when search terms change under its
 +      feet.</li>
 +
 +      <li>The CGI program doesn't crash on some POST requests.
 +    </ul>
 +
 +  </div>
 +
 +</div>
 +
 +<h2>Changes up to version 5.1.1</h2>
 +
 +    <div class=section>
 +
 +      <h3>Bug fixes</h3>
 +
 +      <div class=section>
 +
 +        <ul>
 +          <li><code>player</code> and <code>tracklength</code> can now be used
 +          without arguments to clear the lists, as per the documentation.</li>
 +
 +          <li>Tracks without a player are forgotten upon rescan.</li>
 +
 +          <li>The speaker process avoids splitting frames.</li>
 +        </ul>
 +
 +        <p>Thanks to Mark Wooding and Joe Birr-Pixton.</p>
 +
 +      </div>
 +
 +    </div>
 +
 +<h2>Changes up to version 5.1</h2>
 +
 +<div class=section>
 +
 +  <h3>Removable Device Support</h3>
 +
 +  <div class=section>
 +
 +    <p>The server will now automatically initiate a rescan when a filesystem is
 +    mounted or unmounted.  (Use the <tt>mount_rescan</tt> option if you want to
 +    suppress this behavior.)</p>
 +
 +    <p>The server takes care not to hold audio files open unnecessarily, so
 +    that devices can be unmounted even if tracks from them are currently being
 +    buffered.</p>
 +
 +  </div>
 +
 +  <h3>Disobedience</h3>
 +
 +  <div class=section>
 +
 +    <p>You can now edit the <tt>required-tags</tt> and <tt>prohibited-tags</tt>
 +    global preferences in Disobedience
 +    (<a href="http://code.google.com/p/disorder/issues/detail?id=29">issue
 +    #29</a>).</p>
 +
 +    <p>The &ldquo;Manage users&rdquo; option is now more reliably greyed out if
 +    it will not work.  This depends on a server change too, so it may still be
 +    wrong if a new Disobedience is used against an old server.</p>
 +
 +    <p>A <tt>.desktop</tt> file is now shipped, making Disobedience visible as
 +    an application in freedesktop.org-compliant systems.</p>
 +
 +  </div>
 +
 +  <h3>Backups</h3>
 +
 +  <div class=section>
 +
 +    <p>The Debian package now includes a cronjob that backs up the database
 +    daily.  See <tt>/etc/cron.d/disorder</tt>.  You can put settings
 +    in <tt>/etc/default/disorder</tt> to turn this off or to control how long
 +    the backups are kept for.</p>
 +
 +    <p>The <tt>disorder-dump -r</tt> option was broken.</p>
 +
 +    <p><tt>disorder-dump</tt> now gets permissions right automatically (<a
 +    href="http://code.google.com/p/disorder/issues/detail?id=56">issue
 +    #56</a>).</p>
 +
 +  </div>
 +
    <h3>General</h3>
  
    <div class=section>
diff --cc configure.ac
@@@ -696,26 -737,8 +734,27 @@@ if test $want_gtk = yes; the
    AC_DEFINE([WITH_GTK], [1], [define if using GTK+])
  fi
  AM_CONDITIONAL([GTK], [test x$want_gtk = xyes])
+ AM_CONDITIONAL([GSTDECODE], [test x$want_gstdecode = xyes])
  
 +# Some GCC invocations warn for converting function pointers to void *.
 +# This is fair enough, as it's technically forbidden, but we use dlsym()
 +# which can pretty much only exist if object and function pointers are
 +# interconvertable.  So we disable -Werror if need be.
 +if test ! -z "$gcc_werror" && test "$ac_cv_func_dlfunc" != yes; then
 +  CFLAGS="${CFLAGS} $gcc_werror"
 +  AC_CACHE_CHECK([whether function pointers can be converted to void * without a warning],
 +               [rjk_cv_function_pointer_cast],[
 +    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
 +  void somefunction(void);],
 +                    [(void *)somefunction])],
 +                    [rjk_cv_function_pointer_cast=yes],
 +                    [rjk_cv_function_pointer_cast=no])])
 +  if test $rjk_cv_function_pointer_cast = no; then
 +    gcc_werror=""
 +  fi
 +  CFLAGS="${old_CFLAGS}"
 +fi
 +
  if test "x$GCC" = xyes; then
    # We need LLONG_MAX and annoyingly GCC doesn't always give it to us
    # by default.
diff --cc debian/control
@@@ -3,7 -3,7 +3,7 @@@ Maintainer: Richard Kettlewell <rjk@gre
  Section: sound
  Priority: optional
  Standards-Version: 3.8.1.0
- Build-Depends: libgc6-dev | libgc-dev, libgcrypt-dev, libdb4.3-dev | libdb4.5-dev | libdb4.7-dev | libdb4.8-dev | libdb5.1-dev, libpcre3-dev, libvorbis-dev, libmad0-dev, libasound2-dev, libpulse-dev, python, libflac-dev, libgtk2.0-dev (>= 2.12.12)
 -Build-Depends: libgc6-dev | libgc-dev, libgcrypt-dev, libdb4.3-dev | libdb4.5-dev | libdb4.7-dev | libdb4.8-dev, libpcre3-dev, libvorbis-dev, libmad0-dev, libasound2-dev, libao-dev, python, libflac-dev, libgtk2.0-dev (>= 2.12.12), pkg-config, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev
++Build-Depends: libgc6-dev | libgc-dev, libgcrypt-dev, libdb4.3-dev | libdb4.5-dev | libdb4.7-dev | libdb4.8-dev | libdb5.1-dev, libpcre3-dev, libvorbis-dev, libmad0-dev, libasound2-dev, libpulse-dev, python, libflac-dev, libgtk2.0-dev (>= 2.12.12), pkg-config, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev
  Vcs-Git: https://code.google.com/p/disorder/
  Homepage: http://www.greenend.org.uk/rjk/disorder/
  
diff --cc debian/rules
Simple merge
@@@ -21,8 -21,8 +21,9 @@@ sbin_PROGRAMS=disorderd disorder-deadlo
              disorder-stats disorder-dbupgrade disorder-choose
  noinst_PROGRAMS=trackname endian
  
 +AUTOMAKE_OPTIONS=subdir-objects
  AM_CPPFLAGS=-I${top_srcdir}/lib -I../lib
+ AM_CFLAGS=
  
  disorderd_SOURCES=disorderd.c api.c api-server.c daemonize.c play.c   \
        server.c server-queue.c queue-ops.c state.c plugin.c            \