summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO33
-rw-r--r--PKGBUILD43
-rw-r--r--cdio-api-fixes.patch104
-rw-r--r--gmerlin-texi.patch1846
4 files changed, 2026 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..580c582cd85b
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,33 @@
+pkgbase = gmerlin
+ pkgdesc = Multimedia architecture for Linux
+ pkgver = 1.2.0
+ pkgrel = 8
+ url = http://openmovieeditor.sourceforge.net/HomePage
+ arch = x86_64
+ license = GPL
+ makedepends = alsa-lib
+ makedepends = pulseaudio
+ makedepends = v4l-utils
+ makedepends = mesa-libgl
+ depends = gavl
+ depends = gtk2
+ depends = libxv
+ depends = libvisual
+ depends = libcdio-paranoia
+ depends = mjpegtools
+ depends = libquicktime
+ depends = jack
+ optdepends = alsa-lib: for ALSA support
+ optdepends = jack: for JACK support
+ optdepends = libquicktime: for movie encoding
+ optdepends = pulseaudio: for PulseAudio support
+ optdepends = v4l-utils: for video conversion
+ source = http://downloads.sourceforge.net/sourceforge/gmerlin/gmerlin-1.2.0.tar.gz
+ source = cdio-api-fixes.patch
+ source = gmerlin-texi.patch
+ md5sums = 2f2a0880e738e71486f04c929ba067f4
+ md5sums = d0e407f01435394a0cfe04acb3c1a4cc
+ md5sums = 33a4dce06b7560fc839055c5a872435f
+
+pkgname = gmerlin
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..ca53c032a0dc
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,43 @@
+# $Id: PKGBUILD 266875 2017-11-15 14:29:11Z foutrelis $
+# Maintainer: Federico Cinelli <cinelli@aur.archlinux.org>
+
+pkgname=gmerlin
+pkgver=1.2.0
+pkgrel=8
+pkgdesc="Multimedia architecture for Linux"
+arch=('x86_64')
+url="http://openmovieeditor.sourceforge.net/HomePage"
+license=('GPL')
+depends=('gavl' 'gtk2' 'libxv' 'libvisual' 'libcdio-paranoia' 'mjpegtools' 'libquicktime' 'jack')
+makedepends=('alsa-lib' 'pulseaudio' 'v4l-utils' 'mesa-libgl')
+optdepends=('alsa-lib: for ALSA support'
+ 'jack: for JACK support'
+ 'libquicktime: for movie encoding'
+ 'pulseaudio: for PulseAudio support'
+ 'v4l-utils: for video conversion')
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz
+ cdio-api-fixes.patch
+ gmerlin-texi.patch)
+md5sums=('2f2a0880e738e71486f04c929ba067f4'
+ 'd0e407f01435394a0cfe04acb3c1a4cc'
+ '33a4dce06b7560fc839055c5a872435f')
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ patch -Np1 -i "$srcdir/cdio-api-fixes.patch"
+ patch -Np1 -i "$srcdir/gmerlin-texi.patch"
+
+ rm -rf cpuinfo.sh
+
+ ./configure --prefix=/usr --without-doxygen
+ sed -i 's|LIBS = -lgavl|LIBS = -lgavl -ldl -lpthread -lgtk-x11-2.0 -lgobject-2.0 -lglib-2.0 -lxml2 -lgdk-x11-2.0 -lgdk_pixbuf-2.0 -lX11|' {lib,tests,apps/*}/Makefile
+ sed -i 's|ln -sf $(DESTDIR)$(pkgdatadir)|ln -sf $(pkgdatadir)|' icons/Makefile
+ make
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+
+ make -j1 DESTDIR="$pkgdir" install
+}
diff --git a/cdio-api-fixes.patch b/cdio-api-fixes.patch
new file mode 100644
index 000000000000..14c934b16504
--- /dev/null
+++ b/cdio-api-fixes.patch
@@ -0,0 +1,104 @@
+diff -upr gmerlin-1.2.0.orig/plugins/cdaudio/cdparanoia.c gmerlin-1.2.0/plugins/cdaudio/cdparanoia.c
+--- gmerlin-1.2.0.orig/plugins/cdaudio/cdparanoia.c 2013-01-10 21:16:27.000000000 +0200
++++ gmerlin-1.2.0/plugins/cdaudio/cdparanoia.c 2013-01-10 21:25:59.000000000 +0200
+@@ -28,8 +28,8 @@
+
+ #include "cdaudio.h"
+ #define DO_NOT_WANT_PARANOIA_COMPATIBILITY
+-#include <cdio/cdda.h>
+-#include <cdio/paranoia.h>
++#include <cdio/paranoia/cdda.h>
++#include <cdio/paranoia/paranoia.h>
+
+ /*
+ * Ripping support
+diff -upr gmerlin-1.2.0.orig/plugins/cdaudio/cdtext.c gmerlin-1.2.0/plugins/cdaudio/cdtext.c
+--- gmerlin-1.2.0.orig/plugins/cdaudio/cdtext.c 2013-01-10 21:16:27.000000000 +0200
++++ gmerlin-1.2.0/plugins/cdaudio/cdtext.c 2013-01-10 21:25:27.000000000 +0200
+@@ -34,7 +34,7 @@
+ #include "cdaudio.h"
+
+ #define GET_FIELD(dst, key) \
+- field = cdtext_get_const(key, cdtext);
++ field = cdtext_get_const(cdtext, key, i+1);
+
+ #define GET_FIELD_DEFAULT(dst,key) \
+ field = cdtext_get_const(key, cdtext); \
+@@ -64,30 +64,26 @@ int bg_cdaudio_get_metadata_cdtext(CdIo_
+
+ /* Get information for the whole disc */
+
+- cdtext = cdio_get_cdtext (cdio, 0);
++ cdtext = cdio_get_cdtext (cdio);
+
+ if(!cdtext)
+ return 0;
+
+- artist = cdtext_get_const(CDTEXT_PERFORMER, cdtext);
+- author = cdtext_get_const(CDTEXT_COMPOSER, cdtext); /* Composer overwrites songwriter */
++ artist = cdtext_get_const(cdtext, CDTEXT_FIELD_PERFORMER, 0);
++ author = cdtext_get_const(cdtext, CDTEXT_FIELD_COMPOSER, 0); /* Composer overwrites songwriter */
+
+ if(!author)
+- author = cdtext_get_const(CDTEXT_SONGWRITER, cdtext);
++ author = cdtext_get_const(cdtext, CDTEXT_FIELD_SONGWRITER, 0);
+
+- album = cdtext_get_const(CDTEXT_TITLE, cdtext);
+- genre = cdtext_get_const(CDTEXT_GENRE, cdtext);
+- comment = cdtext_get_const(CDTEXT_MESSAGE, cdtext);
++ album = cdtext_get_const(cdtext, CDTEXT_FIELD_TITLE, 0);
++ genre = cdtext_get_const(cdtext, CDTEXT_FIELD_GENRE, 0);
++ comment = cdtext_get_const(cdtext, CDTEXT_FIELD_MESSAGE, 0);
+
+ for(i = 0; i < idx->num_tracks; i++)
+ {
+ if(idx->tracks[i].is_audio)
+ {
+- cdtext = cdio_get_cdtext (cdio, i+1);
+- if(!cdtext)
+- return 0;
+-
+- GET_FIELD(title, CDTEXT_TITLE);
++ GET_FIELD(title, CDTEXT_FIELD_TITLE);
+
+ if(!title)
+ return 0;
+@@ -95,7 +91,7 @@ int bg_cdaudio_get_metadata_cdtext(CdIo_
+ gavl_metadata_set(&info[idx->tracks[i].index].metadata,
+ GAVL_META_TITLE, title);
+
+- if((field = cdtext_get_const(CDTEXT_PERFORMER, cdtext)))
++ if((field = cdtext_get_const(cdtext, CDTEXT_FIELD_PERFORMER, i+1)))
+ gavl_metadata_set(&info[idx->tracks[i].index].metadata,
+ GAVL_META_ARTIST, field);
+ else
+@@ -103,10 +99,10 @@ int bg_cdaudio_get_metadata_cdtext(CdIo_
+ GAVL_META_ARTIST, artist);
+
+
+- if((field = cdtext_get_const(CDTEXT_COMPOSER, cdtext)))
++ if((field = cdtext_get_const(cdtext, CDTEXT_FIELD_COMPOSER, i+1)))
+ gavl_metadata_set(&info[idx->tracks[i].index].metadata,
+ GAVL_META_AUTHOR, field);
+- else if((field = cdtext_get_const(CDTEXT_SONGWRITER, cdtext)))
++ else if((field = cdtext_get_const(cdtext, CDTEXT_FIELD_SONGWRITER, i+1)))
+ gavl_metadata_set(&info[idx->tracks[i].index].metadata,
+ GAVL_META_AUTHOR, field);
+ else if(author)
+@@ -114,14 +110,14 @@ int bg_cdaudio_get_metadata_cdtext(CdIo_
+ GAVL_META_AUTHOR, author);
+
+
+- if((field = cdtext_get_const(CDTEXT_GENRE, cdtext)))
++ if((field = cdtext_get_const(cdtext, CDTEXT_FIELD_GENRE, i+1)))
+ gavl_metadata_set(&info[idx->tracks[i].index].metadata,
+ GAVL_META_GENRE, field);
+ else
+ gavl_metadata_set(&info[idx->tracks[i].index].metadata,
+ GAVL_META_GENRE, genre);
+
+- if((field = cdtext_get_const(CDTEXT_MESSAGE, cdtext)))
++ if((field = cdtext_get_const(cdtext, CDTEXT_FIELD_MESSAGE, i+1)))
+ gavl_metadata_set(&info[idx->tracks[i].index].metadata,
+ GAVL_META_COMMENT, field);
+ else
diff --git a/gmerlin-texi.patch b/gmerlin-texi.patch
new file mode 100644
index 000000000000..b352bf3ff1eb
--- /dev/null
+++ b/gmerlin-texi.patch
@@ -0,0 +1,1846 @@
+diff -Naur gmerlin-1.2.0.orig/doc/gmerlin.orig.texi gmerlin-1.2.0/doc/gmerlin.orig.texi
+--- gmerlin-1.2.0.orig/doc/gmerlin.orig.texi 1969-12-31 16:00:00.000000000 -0800
++++ gmerlin-1.2.0/doc/gmerlin.orig.texi 2013-02-27 16:04:03.847930671 -0800
+@@ -0,0 +1,1830 @@
++\input texinfo @c -*-texinfo-*-
++@comment %**start of header
++@setfilename gmerlin.info
++@include version.texi
++@settitle Gmerlin @value{VERSION}
++@dircategory Gmerlin
++@direntry
++* Gmerlin: (gmerlin). Gmerlin multimedia applications
++@end direntry
++
++
++@syncodeindex pg cp
++@comment %**end of header
++@copying
++This manual is for Gmerlin
++(version @value{VERSION}, @value{UPDATED}).
++
++Copyright @copyright{} 2001-2008 Members of the Gmerlin project.
++
++@quotation
++Permission is granted to copy, distribute and/or modify this document
++under the terms of the GNU Free Documentation License, Version 1.1 or
++any later version published by the Free Software Foundation; with no
++Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
++and with the Back-Cover Texts as in (a) below. A copy of the
++license is included in the section entitled ``GNU Free Documentation
++License.''
++
++(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
++this GNU Manual, like GNU software. Copies published by the Free
++Software Foundation raise funds for GNU development.''
++@end quotation
++@end copying
++@titlepage
++@title Gmerlin
++@subtitle for version @value{VERSION}, @value{UPDATED}
++@author Burkhard Plaum (@email{gmerlin@@users.sourceforge.net})
++@page
++@vskip 0pt plus 1filll
++@insertcopying
++@end titlepage
++
++@contents
++
++@ifnottex
++@node Top, Basics, (dir), (dir)
++@top Gmerlin userguide
++Gmerlin user guide.
++
++@insertcopying
++@end ifnottex
++
++@menu
++* Basics::
++* Installation::
++* General usage information::
++* Applications::
++* Plugins::
++* FAQ::
++* Get involved::
++@end menu
++
++@node Basics, Installation, Top, Top
++@chapter Basics
++This manual should help you to get familiar with gmerlin software. The
++gmerlin software is quite modular, because it consists of multiple
++packages, most of which can be used independently. In this document,
++it is assumed, that you have all packages installed (See Installation below).
++
++@node Installation, General usage information, Basics, Top
++@chapter Installation
++
++@menu
++* Requirements::
++* Compilation and installation::
++* Binary codecs::
++@end menu
++
++@node Requirements
++@section Requirements
++
++For compiling x264, you need @uref{http://nasm.sourceforge.net/, nasm}
++(@uref{http://www.tortall.net/projects/yasm/, yasm} on x86_64).
++They are included in
++most distributions. Required libraries can be installed from source or from
++binary packages. In the latter case, you must install the development
++packages (e.g. libfoo-devel-1.2.3-4.i386.rpm) also. This is what you need:
++
++@table @emph
++
++@item @uref{http://www.alsa-project.org/, Alsa}
++It's the recommended audio architecture
++
++@item @uref{http://www.tux.org/~ricdude/EsounD.html, esound}
++Only needed if neither Alsa nor OSS work for you.
++
++@item @uref{http://flac.sourceforge.net/, flac}
++For en-/decoding flac files (optional).
++
++@item @uref{http://www.gtk.org/, gtk-2.4.x}
++This is needed for compiling the GUI applications. Without it you'll
++get just the core library, which won't be of much use.
++
++@item @uref{http://www.ijg.org/, libjpeg}
++For reading and writing single JPEG images (strongly recommended)
++
++@item @uref{http://www.libpng.org/pub/png/libpng.html, libpng}
++For reading and writing single PNG images (strongly recommended).
++Also for decoding png encoded Quicktime and AVI files
++
++@item @uref{http://www.remotesensing.org/libtiff/, libtiff}
++For reading and writing single TIFF images (Optional)
++
++@item @uref{http://www.xmlsoft.org/, libxml}
++Required. All kinds of configuration files as well as the media
++tree are xml based.
++
++@item @uref{http://www.vorbis.com/, vorbis}
++Needed for en-/decoding Vorbis files. Also required for the
++theora encoding.
++
++@item @uref{http://musicbrainz.org/products/client/index.html, libmusicbrainz}
++Needed for getting Audio CD metadata using
++@uref{http://musicbrainz.org/, musicbrainz}
++
++@item @uref{http://libcddb.sourceforge.net/, libcddb}
++Needed for getting Audio CD metadata from CDDB servers
++
++@item Headers for libXv and libXinerama
++These are usually shipped with X11 but some distributions pack the header
++files separately (e.g. libxv-dev, libxinerama-dev). libXv is needed for
++hardware accelerated video playback, libXinerama adds support for
++multi-screen configurations.
++
++@item @uref{http://www.samba.org/, libsmbclient}
++For loading smb:// URLs (optional).
++
++@item @uref{http://sourceforge.net/projects/libvisual, libvisual}
++For using libvisual plugins (optional).
++
++@item @uref{http://www.ladspa.org, Ladspa plugins}
++Optional for audio filters/effects. Good experiences were made with
++the plugin packages @uref{http://www.ladspa.org/cmt/,cmt},
++@uref{http://plugin.org.uk, swh-plugins} and
++@uref{http://tap-plugins.sourceforge.net, tap-plugins}. Gmerlin looks for them
++at runtime, so you can install them at any time.
++
++@end table
++
++From now on, there are 2 ways to proceed:
++@itemize @bullet
++@item You can download the
++@uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=151779, gmerlin-dependencies}
++package, unpack it and install it using the instructions in the README file.
++A full dependencies install will provide you with the complete codec support,
++but some packages you already have might be installed a second time.
++Everything, however, gets into /opt/gmerlin, so there will be no conflicts.
++
++@item To have more control over the process, download and install the
++libraries listed below manually.
++@end itemize
++
++@table @emph
++@item @uref{http://www.gnu.org/software/libcdio/, libcdio}
++Neccessary for the VCD, Audio CD and DVD plugins.
++
++@item @uref{http://www.audiocoding.com/, faad2}
++Needed for MPEG-4 audio support (mp4, aac files).
++
++@item @uref{http://www.audiocoding.com/, faac}
++Needed for MPEG-4 audio encoding (.aac files) and for AAC encoding via
++libquicktime.
++
++@item @uref{http://www.ffmpeg.org/, FFmpeg}
++Many codecs, strongly recommended. You should get a sufficiently new
++version from @uref{http://ffmpeg.mplayerhq.hu/download.html, ffmpeg SVN}
++and use --enable-shared when calling configure. Another option is the
++version in the
++@uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=151779, gmerlin-dependencies} package.
++
++@item @uref{http://www.mp3dev.org/, lame}
++For encoding mp3 files and AVIs with mp3 audio streams with libquicktime.
++
++@item @uref{http://mad.sourceforge.net/, mad}
++For playing MPEG-1/2 audio (e.g. mp3)
++
++@item @uref{http://freshmeat.net/redir/libdvdread/17926/url_homepage/downloads.shtml, libdvdread}
++For playing DVDs. Gmerlins method of accessing DVD drives doesn't
++differ much from others. Thus, DVD playback howtos found in the web
++apply for gmerlin as well.
++
++@item @uref{http://developers.videolan.org/x264.html, x264}
++For H.264 encoding with libquicktime.
++
++@item @uref{http://www.videolan.org/developers/libdca.html, libdca}
++For decoding DTS streams.
++
++@item @uref{http://libmpeg2.sourceforge.net/, libmpeg2}
++For decoding MPEG-1/2 Video (like .mpg files and DVD video)
++
++@item @uref{http://liba52.sourceforge.net/, liba52}
++For playing AC3 (aka DVD audio) streams.
++
++@item @uref{http://www.musepack.net/, libmpcdec}
++For playing musepack files (optional).
++
++@item @uref{http://www.theora.org/, theora}
++For en-/decoding theora video (optional).
++
++@item @uref{http://www.speex.org/, speex}
++For en-/decoding Speex streams (optional).
++
++@item @uref{http://libquicktime.sourceforge.net/, libquicktime}
++Optional, for the libquicktime based encoding and decoding plugins.
++Mostly necessary if you want to encode video. For decoding Quicktime,
++gmerlin_avdecoder is a lot better.
++
++@item @uref{http://mjpeg.sourceforge.net/, mjpegtools}
++Optional for en-/decoding yuv4mpeg streams and for encoding high
++quality MPEG video using mpeg2enc and friends.
++
++@end table
++
++@node Compilation and installation
++@section Compilation and installation
++
++If you downloaded a release, make sure, that you have the latest
++version of all packages. Alternatively, you can download the latest
++@uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=151778, gmerlin-all-in-one}
++package. It contains all source packages together
++with optional scripts to build and install them. Check the included
++README file.
++
++We always try to be compatible ther GNU build system. This means, that
++all gmerlin packages are compiled using the usual
++@code{./configure; make; su; make install} prodecure. Type
++@code{./configure --help} to see the supported options.
++
++The order is the following:
++
++@itemize
++@item @uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=50349, gavl}
++@item @uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=14511, gmerlin}
++@item @uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=124659, gmerlin_avdecoder}
++@item @uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=152799, gmerlin-encoders}
++@item @uref{http://sourceforge.net/project/showfiles.php?group_id=19684&package_id=124661, gmerlin-visualizer}
++@end itemize
++
++@node Binary codecs
++@section Binary codecs
++
++These must be downloaded from the @uref{http://www1.mplayerhq.hu/MPlayer/releases/codecs/, MPlayer codec page}. Download the file
++essential-YYYYMMDD.tar.bz2, where YYYYMMDD is some date. Unpack the
++.tar.bz2 and move the included files to /usr/lib/codecs. At this
++location, the DLLs will also be found by other players.
++
++@node General usage information, Applications, Installation, Top
++@chapter General usage information
++
++@menu
++* Configuration data::
++* GUI::
++* GML Syntax: gml.
++* Setting parameters from the commandline::
++@end menu
++
++@node Configuration data
++@section Configuration data
++
++They are saved in the directory @code{~/.gmerlin}, which has subdirectories
++for all applications. The directory "generic" stores common configuration
++data for applications, which have no config dialog. Plugins used by these
++programs can be configured with the gmerlin_plugincfg application. If a
++program misbehaves, especially after a version upgrade, delete the file
++@code{~/.gmerlin/application_dir/config.xml}, where @code{application_dir}
++corresponds to the application. Normally, this shouldn't be necessary.
++
++@node GUI
++@section GUI
++
++@menu
++* Introduction: gui_intro.
++* Static and dynamic parameters: gui_statdyn.
++* Configuring input plugins: gui_i.
++* Configuring filters: gui_f.
++* Log messages: gui_log.
++* Tips: gui_tips.
++@end menu
++
++@node gui_intro
++@subsection Introduction
++
++We try to make this as consistent as possible across the applications.
++In many windows, you'll see context sensitive menus when you right
++click somewhere. Furthermore, tooltips are enabled in all programs by
++default. You can, however, switch them off if they bother you.
++
++@node gui_statdyn
++@subsection Static and dynamic parameters
++
++All GUI applications have their own configuration data.
++This means, that plugin configurations are not shared between
++these applications.
++
++There is a strict separation between static and plugin dependent
++configurations.
++
++Most applications have one or more config dialogs
++@ifhtml
++(
++@image{../img/config_16}
++)
++@end ifhtml
++which let you change settings either for several subsystems of the
++application or for plugins, depending on the context.
++To change the plugins themselves, there are separate plugin dialogs
++@ifhtml
++(
++@image{../img/plugin_16}
++)
++@end ifhtml
++which let you select and configure plugins.
++
++It might be a bit tricky to find out if a special option can be set
++via the the plugin dialog or via
++the global config dialog. The general rule is: All features, which are
++supported by the core architecture, are configured in some global
++dialog. You can expect them to be present on every gmerlin installation
++of the same version. The plugin options vary depending on what plugins
++are installed (that's the reason, why they are separated).
++
++@node gui_i
++@subsection Configuring input plugins
++
++@ifhtml
++@image{../img/gui_i}
++@end ifhtml
++
++This dialog lets you control, how input plugins (or image reader plugins)
++are loaded. The widgets on the right are valid for the plugin, which is selected
++on the left. You have the following options:
++
++@table @b
++@item Parameters
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++Lets you set parameters of the plugin. These will be valid when an instance of
++the plugin is opened the next time. If you configure hardware plugins in the player,
++you must close and reopen all device albums for the changes to become effective.
++For plugins, which have no options, this button is disabled.
++@item Info
++@ifhtml
++@image{../img/info_16}
++@end ifhtml
++Pops up a window showing much of the information, which is known to the plugin
++registry.
++@item Priority
++This lets you change the priority of the plugin, if multiple plugins are
++available for a gml. The value can be between 1 and 10. Usually, the default
++priorities are ok. But for image files, the priorities of the ``Image stills input plugin'' and the ``Image video input plugin'' decide, whether images are displayed
++as a slideshow or a video.
++@item Protocols
++Lets you configure the supported network protocols. The protocols should rarely
++be changed and changes are overwritten by a new install of the plugin. For plugins,
++which don't support network streams, the protocols cannot be changed.
++@item Extensions
++Lets you configure the file extensions, which are associated with the plugin.
++If you change the extensions, they are overwritten by a new install of the plugin.
++That's a good reason to report missing file extensions to the developers.
++@end table
++
++@node gui_f
++@subsection Configuring filters
++
++@ifhtml
++@image{../img/gui_f}
++@end ifhtml
++
++This dialog lets you build a filter chain to apply additional changes to the
++A/V data. The GUI player will apply most changes during playback (reinitializing the
++playback pipelines if necessary), the transcoder can change filter chains only per
++track. The filters are processed in top-to-bottom order.
++
++You have the following buttons:
++
++@table @b
++@item Add filter
++@ifhtml
++@image{../img/add_16}
++@end ifhtml
++Pops up a dialog, which will let you add new filters to the chain.
++Filter are always added to the end of the chain.
++@item Remove filter
++@ifhtml
++@image{../img/trash_16}
++@end ifhtml
++Deletes the currently selected filter
++@item Configure filter
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++Set parameters of the currently selected filter
++@item Move to top
++@ifhtml
++@image{../img/top_16}
++@end ifhtml
++Move filter to the top (= the beginning) of the chain
++@item Move up
++@ifhtml
++@image{../img/up_16}
++@end ifhtml
++Move filter up by one
++@item Move down
++@ifhtml
++@image{../img/down_16}
++@end ifhtml
++Move filter down by one
++@item Move to top
++@ifhtml
++@image{../img/bottom_16}
++@end ifhtml
++Move filter to the bottom (= the end) of the chain
++@end table
++
++@b{Note for the player}
++
++Even though filter parameters are changed on the fly,
++pressing ``cancel'', without pressing ``apply'' before will
++revert all changes you made.
++
++@node gui_log
++@subsection Log messages
++
++@ifhtml
++@image{../img/gui_log}
++
++@end ifhtml
++Messages from pretty much everywhere in the applications are sent through the
++logging mechanism, and finally show up in the log window. It's the first place to
++look, if something does not work as expected (e.g. an URL does not load).
++There are 4 different types of messages, @b{error}, @b{warning}, @b{info} and
++@b{debug}. In the configuration for the log window, you can select, which message
++you want to see, the colors of the messages and the history size.
++@node gui_tips
++@subsection Tips
++
++@itemize
++@item Many buttons, which are associated with a list, are disabled unless you select an item in the list
++@item Doubleclicking onto the background of a slider (@strong{not} the slider itself) resets it to the
++ factory default
++@end itemize
++
++@node gml
++@section GML Syntax
++
++GMLs (Gmerlin media locations) are pretty much similar to URLs or
++MRLs with the difference, that device plugins support passing the device.
++This makes it possible to use gmls with hardware setups, which have
++multiple devices for each plugin.
++
++A gml can be:
++
++@table @bullet
++@item A regular filename
++Optionally preceeded with ``file://''. This means, that @b{/files/music.mp3} is the same as
++@b{file:///files/music.mp3}.
++@item A dash ``-'' or the string ``stdin://'' for reading from stdin
++@item Any valid network URL
++Examples: @b{http://webstream.example.com:8080}, @b{ftp://user:pass@@ftp.example.com/music.mp3}
++@item A "hardare protocol" followed by the device like @b{cda:///dev/hdc}.
++Known hardware protocols are @b{cda} (Audio CD), @b{vcd}, @b{dvd} and
++@b{dvb}. The supported protocols may vary according to your installation.
++@end table
++
++
++@node Setting parameters from the commandline
++@section Setting parameters from the commandline
++
++Gmerlin configuration handling provides the same features for both GUI
++applications and commandline programs. The natural result is, that the
++commandline syntax is a bit more complicated, since parameters can be
++nested.
++
++In General options have the form
++
++@code{'parameter1=value1:parameter2=value2...'}
++
++The quotes are necessary, if the string contains characters, which
++have a special meaning for the shell.
++
++The syntax of values depends on the type:
++@table @strong
++@item Boolean
++Value can be either 0 or 1.
++@item Integer values
++An integer number.
++@item Float values
++A floating point (i.e. fractional) number.
++@item Strings
++A string. Colons ':' should be escaped with '\'.
++@item Time
++Time is in the format @code{@{[[HH:]MM:]SS@}} while the seconds can be
++fractional. Hours and Minutes are optional, thus any format of
++@code{@{5.5@}}, @code{@{0:05.5@}} or @code{@{0:00:05.5}@} is valid for a time
++of 5.5 seconds. Writing @code{0} instead of @code{00} is also ok.
++@item Enumeration with suboptions
++Value is in the form
++@code{string[@{subparameter1=subvalue1:subparameter2=subvalue2...@}]}.
++The subparameters are optional. E.g. if the option is for selecting a
++plugin, setting string to @code{foo} will select the plugin @code{foo} and
++pass the subparameters (if avaliable) to the @code{foo} plugin.
++@item List or chain with suboptions
++This is like enumeration with suboptions with the difference, that
++you can concatenate multiple options together with colons (:) and
++must enclose everything with braces. For example:
++
++@code{@{opt1@{param1=value1@}:opt2@{param2=value2@}@}}
++
++If you use @code{-help}, you'll also see supported ranges for
++numeric types, or supported options for strings (if available).
++
++@end table
++
++@node Applications, Plugins, General usage information, Top
++@chapter Applications
++
++@menu
++* GUI Player::
++* Player remote control::
++* GUI Transcoder::
++* Transcoder remote control::
++* Commandline player::
++* Commandline recorder::
++* Alsamixer::
++* Visualizer::
++* Keyboard daemon::
++@end menu
++
++@node GUI Player
++@section GUI Player
++Type @code{gmerlin} with optionally any number of files or URLs to start this.
++
++@menu
++* Invoking gmerlin: gmerlin_player_usage.
++* Main window::
++* Media tree::
++* Video window::
++* Track information: gmerlin_player_trackinfo.
++* Configuring playback pipelines: gmerlin_player_avconfig.
++* Shortcuts: gmerlin_player_shortcuts.
++@end menu
++
++@node gmerlin_player_usage
++@subsection Invoking gmerlin
++
++@include gmerlin_player.texi
++
++@node Main window
++@subsection Main window
++@ifhtml
++@image{../img/player_mainwin}
++
++@end ifhtml
++
++It's a usual player window, with self explanatory buttons.
++
++@menu
++* Main menu: player_mainmenu.
++* Display: player_display.
++@end menu
++
++@node player_mainmenu
++@subsubsection Main menu
++
++The menu button will show the main menu of the player. Here, you can
++control practically the whole application:
++
++@table @b
++@item Audio, video and subtitles
++ See @ref{gmerlin_player_avconfig, Configuring playback pipelines}.
++@item Chapters
++@ifhtml
++@image{../img/player_chapters}
++
++@end ifhtml
++Chapters in gmerlin are just seekpoints with optional labels.
++If an input plugin supports chapters (e.g. of DVDs), gmerlin will
++make them available through the chapter menu.
++@item Visualizations
++@ifhtml
++@image{../img/player_vis}
++
++@end ifhtml
++If the upper menu item is enabled and the video window isn't used otherwise,
++Visualizations will be turned on.
++The audio stream of an Audio/video track can be visualized by disabling the video stream
++of that file (See @ref{gmerlin_player_avconfig, Configuring playback pipelines}).
++
++Then you can set some plugin-independent options
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++and finally the plugin itself
++@ifhtml
++@image{../img/plugin_16}
++@end ifhtml
++. The menu for visualization plugin works exactly the same as for output plugins
++(See @ref{gmerlin_player_avconfig, Configuring playback pipelines}).
++
++@item Windows
++@ifhtml
++@image{../img/player_windows}
++
++@end ifhtml
++Here, you can show or hide the @ref{gui_log, Log window}, the
++@ref{gmerlin_player_trackinfo, Track info window} and the @ref{Media tree}.
++
++@item Options
++@ifhtml
++@image{../img/player_options}
++
++@end ifhtml
++Here, you can set @b{Preferences}
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++, configure @ref{gui_i, Input plugins}
++@ifhtml
++@image{../img/plugin_16}
++@end ifhtml
++, select
++@b{skins} or configure the @ref{Keyboard daemon}.
++
++@item Commands
++@ifhtml
++@image{../img/player_commands}
++
++@end ifhtml
++Here you have some commonly used commands. The good news about the
++shortcuts is, that they work in the
++media tree and in the video window as well.
++
++Only exception are the shortcuts, which map to ASCII-characters
++(Pause and Seek to start), they don't work in the media tree and in albums.
++
++Use this menu as a quick-help for all global
++shortcuts.
++
++@item Accessories
++@ifhtml
++@image{../img/player_accessories}
++
++@end ifhtml
++Here, you can conventiently fire up some other gmerlin applications
++like the @ref{GUI Transcoder}, the @ref{Visualizer} and the
++@ref{Alsamixer}.
++
++@end table
++
++@node player_display
++@subsubsection Display
++
++@ifhtml
++@image{../img/player_display}
++
++@end ifhtml
++The display is divided into several areas. Left of the
++time display, gmerlin shows an icon denoting the current
++operation mode (playing, paused etc.). Right of the time display,
++you have 2 fields. By left-clicking into the upper field, you can
++change the displayed time value. Options are
++@table @b
++@item Default
++Time is counted since track start
++@item ALL
++Time is counted since album start
++@item REM
++Remaining time until track end
++@item ALL REM
++Remaining time until album end
++@end table
++
++In the lower field, you can left-click to change the repeat mode.
++Options are @b{no repeat}, @b{repeat current track} and
++@b{repeat current album}.
++
++At the bottom, there is the scrolltext. It displayes the name of the currently played
++track (which can change e.g. for live radio stations), or a brief error messages if
++something goes wrong. Note, that in the latter case, you get more information from the
++@ref{gui_log, Log Window}.
++
++@node Media tree
++@subsection Media tree
++
++@ifhtml
++@image{../img/player_tree_tabbed}
++@end ifhtml
++
++The media tree can be used to store and organize your media collection.
++It consists of virtual folders called @emph{albums}. You can create albums,
++subalbums and move stuff between them like you want. The media files
++always stay at the same place in the filesystem. The albums can be either
++in own windows (Windowed mode) or as tabs in the tree window (tabbed mode). You
++cah switch this with the right-click menu of the tree widget.
++The tree- and album windows remember their screen positions.
++
++@menu
++* Tree widget: player_treewidget.
++* Album widget: player_albumwidget.
++@end menu
++
++@node player_treewidget
++@subsubsection Tree widget
++
++@b{Doubleclicking} an album opens it if it was closed or vice versa.
++
++@b{Creating albums} is done by right selecting the parent album in
++the tree and click the ``New album'' button
++@ifhtml
++@image{../img/folder_new_16}
++@end ifhtml
++or ``Album->New'' in the right-click menu. In the new empty album, you can then
++load files or URLs. Another option to import whole directory trees, is to
++click ``Album->New from directory''. It will pop up a directory selection dialog.
++The directory can optionally be scanned recursively. The tracks are either in one
++(flat) album, or in subalbums according to the directory structure.
++Note that importing large directories takes some time.
++
++@b{Deleting albums} is done by selecting them in the tree and
++clicking the ``remove'' button
++@ifhtml
++@image{../img/trash_16}
++@end ifhtml
++(or by choosing Album->Remove in the right click menu. Please note
++the following:
++
++@itemize @bullet
++@item Removing albums is done without confirmation
++@item All subalbums are removed as well
++@item This (as well as removing tracks) cannot be undone
++@item Good news: gmerlin @b{never} removes media files from disk
++@end itemize
++
++@b{Moving albums} is done with Drag & Drop
++
++@b{Loading files or URLs} into an open or closed album can be done by
++dragging it from a filemanager or webbrowser into the target album in the tree widget.
++
++Some @b{special albums} are automatically created in addition to the
++regular albums (which are created by you):
++
++@itemize @bullet
++@item @emph{Incoming:}
++@ifhtml
++@image{../img/incoming_closed_16}
++@end ifhtml
++
++It's the destination for tracks, which come from
++the comandline or from the remote.
++
++@item @emph{Favourites:}
++@ifhtml
++@image{../img/favourites_closed_16}
++@end ifhtml
++
++Each regular album has a Favourites button
++@ifhtml
++@image{../img/favourites_16}
++@end ifhtml
++, which
++lets you copy the selected tracks to the favourites. It's useful for
++quickly making a selection of tracks from multiple different albums.
++
++@item @emph{Plugin and device albums:}
++@ifhtml
++@image{../img/hardware_16}
++@end ifhtml
++
++Each plugin, which handles devices like removable disc drives
++@ifhtml
++@image{../img/drive_running_16}
++@end ifhtml
++or tuners
++@ifhtml
++@image{../img/tuner_16}
++@end ifhtml
++will create a plugin album. The available devices are
++then autoscanned and added as subalbums. Device albums are a bit limited:
++You can delete or reorder tracks, but you cannot move tracks from/to other
++albums.
++
++@end itemize
++
++@node player_albumwidget
++@subsubsection Album widget
++
++The album widget can either be in an own window (when the tree is in tabbed mode)
++or in a notebook right of the tree widget. It lists all tracks of that album.
++At the bottom there is a toolbar and a display of the total playback time of the album.
++
++A @b{track} in gmerlin is a piece of media, which can have an arbitrary number of audio-,
++video- and subtitle @b{streams}. A track can be divided into @b{chapters} (which are just
++seekpoints). Some files (like ALBW wrapped mp3s or concatenated Ogg streams), will show
++up as multiple tracks. You can move them around in the whole tree as if they were separate
++files.
++
++@b{Doubleclicking} an album opens it if it was closed or vice versa.
++
++The @b{right click menu} offers lots of options and shortcuts, not all of them are
++documented here.
++
++@b{Adding tracks} can happen in multiple ways:
++
++@itemize @bullet
++@item Drag Files or URLs from filenanagers or webbrowsers into an album
++@item Use the buttons
++@ifhtml
++@image{../img/folder_open_16}
++@end ifhtml
++@ifhtml
++@image{../img/earth_16}
++@end ifhtml
++in the album toolbar, or the right click menu
++@end itemize
++
++@b{Drag and Drop} is supported:
++@itemize @bullet
++@item From most webbrowsers and filenmanagers into the album (see above)
++@item From one regular album to another. By default, tracks are moved.
++ Press the @key{CTRL}-key before dragging, and the tracks will be copied.
++@item Inside all albums to sort the tracks
++@item From an album window into the tree window to transfer tracks to
++ another album
++@item From the album to text editors or graphics programs, which support
++dropping text. You'll get a string representation of the tracks, which
++will make designing disk covers easier.
++@end itemize
++
++@b{Error tracks} are tracks, which failed to load last time you tried.
++They are marked red but remain in the album. If they are on removable
++disks or in the network, you might retry playing them when they become
++available. To delete all error tracks, go to ``Select error tracks'' in the
++right click menu to select them. Then, press @kbd{@key{CTRL}+DELETE}
++to get rid of them.
++
++For keyboard commands, see @ref{gmerlin_player_shortcuts, Shortcuts}.
++
++@node Video window
++@subsection Video window
++
++This comes only when gmerlin has to show some video or still images. It
++is created and owned by the video output plugin (i.e. it has nothing to
++do with the core GUI). Currently, only an X11 plugin is available. It
++has some special features: You can zoom or squeeze the image to make
++your favourite tradeoff between aspect ratio distortion, black borders
++or cropped images. All global gmerlin @ref{gmerlin_player_shortcuts, Shortcuts} work
++also in the video window, as well as some special ones.
++
++@node gmerlin_player_trackinfo
++@subsection Track information
++@ifhtml
++@image{../img/player_trackinfo}
++
++@end ifhtml
++
++Here, you see detailed information of the currently (or last) played track
++in a tree structure. The right-click menu lets you copy either the whole contents or
++the currently selected row to the clipboard as plain text.
++
++@node gmerlin_player_avconfig
++@subsection Configuring playback pipelines
++
++The configuration for audio, video and subtitle handling is almost the same.
++
++@b{Stream menu}
++
++For each category, you have a stream menu.
++
++@ifhtml
++@image{../img/player_avconfig_menu}
++@end ifhtml
++
++In the upper part, you can select the available streams.
++You can also switch the stream off.
++
++In the lower part, you can set global (= plugin independent) options
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++, Filters
++@ifhtml
++@image{../img/filter_16}
++@end ifhtml
++ (See @ref{gui_f, Configuring filters})
++and the output plugin
++@ifhtml
++@image{../img/plugin_16}
++@end ifhtml
++.
++
++@b{Output plugin menu}
++
++@ifhtml
++@image{../img/player_avconfig_plugin}
++@end ifhtml
++
++In the upper part, you can change the output plugin (even during playback).
++In the lower part, you can configure
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++the plugin or show information
++@ifhtml
++@image{../img/info_16}
++@end ifhtml
++about the plugin.
++
++@node gmerlin_player_shortcuts
++@subsection Shortcuts
++
++The following global shortcuts are available in the main window, the media
++tree including albums and the video window:
++
++@table @kbd
++@item @key{CTRL}+G
++Pop up current album and goto current track
++
++@item @key{CTRL}+O
++Pop up preferences dialog
++
++@item @key{CTRL}+P
++Pop up input plugin dialog
++
++@item @key{CTRL}+Q
++Quit program
++
++@item @key{CTRL}+PAGEDOWN
++Goto next track
++
++@item @key{CTRL}+PAGEUP
++Goto previous track
++
++@item @key{CTRL}+@key{SHIFT}+PAGEDOWN
++Goto next chapter
++
++@item @key{CTRL}+@key{SHIFT}+PAGEUP
++Goto previous chapter
++
++@item @key{CTRL}+RIGHT
++Seek forward
++
++@item @key{CTRL}+LEFT
++Seek backward
++
++@item @key{SHIFT}+RIGHT
++Decrease volume
++
++@item @key{SHIFT}+LEFT
++Increase volume
++
++@item @key{CTRL}+M
++Toggle mute
++
++@item 0
++(Zero) Seek to start. This is not available in the media tree and the albums.
++
++@item Space
++Toggle pause. This is not available in the media tree and the albums.
++
++@item @key{CTRL}+G
++Goto current track. This raises the current album and moves to the
++current track within that album.
++
++@item F9
++Copy current track to favourites
++
++@item @key{CTRL}+Q
++Quit gmerlin
++@end table
++
++The following additional chortcuts are available in the @ref{Video window}:
++
++@table @kbd
++
++@item CTRL+PLUS/MINUS
++Increase/decrease aspect ratio (squeeze). Zoom and squeeze are a simple way to choose your
++personal tradeoff between aspect ratio distortion, missing image parts and black borders.
++
++@item CTRL+MOUSEWHEEL
++Increase/decrease aspect ratio (squeeze).
++
++@item ALT+PLUS/MINUS
++Increase/decrease zoom factor
++
++@item ALT+MOUSEWHEEL
++Increase/decrease zoom factor
++
++@item @key{CTRL}+HOME
++Reset zoom and squeeze
++
++@item HOME
++Resize the window to the size of the video. If the video has nonsquare
++pixels, the window width is adjustetd accordingly.
++
++@item @key{SHIFT}+HOME
++Shrink the window such that no black borders are visible abound the video
++
++@item B/b
++Increase/decrease brightness.
++
++@item S/s
++Increase/decrease saturation.
++
++@item C/c
++Increase/decrease contrast.
++
++Brightness, saturation and contrast work only, if the hardware and the currently used display driver
++support this.
++
++@item TAB
++Toggle fullscreen/windowed mode
++@item f
++Toggle fullscreen/windowed mode
++@item Esc
++Exit fullscreen mode
++@end table
++
++The following additional shortcuts are available inside @ref{player_albumwidget, albums}:
++
++@table @kbd
++@item UP/DOWN
++Move the cursor one track up/down
++
++@item PAGEUP/PAGEDOWN
++Move the cursor one page up/down
++
++@item Mousewheel
++Scroll
++
++@item SHIFT+UP/DOWN
++Move the cursor one track up/down and select track
++
++@item SHIFT+PAGEUP/PAGEDOWN
++Move the cursor one page up/down and select tracks
++
++@item @key{CTRL}+UP/DOWN
++Move the cursor one track up/down and unselect track
++
++@item ALT+HOME
++Move selected tracks to the top
++
++@item ALT+END
++Move selected tracks to the bottom
++
++@item ALT+MOUSEWHEEL
++Increase/decrease zoom factor
++
++
++@item @key{CTRL}+C
++Copy selected tracks to clipboard
++
++@item @key{CTRL}+X
++Cut selected tracks to clipboard
++
++@item @key{CTRL}+V
++Paste tracks from clipboard at the current cursor position
++
++@item @key{CTRL}+DELETE
++Delete selected tracks
++
++@item @key{CTRL}+F
++Search for tracks
++
++@item @key{CTRL}+I
++Display info about the currently selected track
++
++@item F10
++Copy selected tracks to favourites
++@end table
++
++@node Player remote control
++@section Player remote control
++
++@code{gmerlin_remote} is the command for remotely controlling the
++GUI player. It can be used as a helper application if webbrowsers
++or filenmanagers or for all kinds of remote control methods (including
++keyboard- or infrared-daemons), which can execute arbitrary shell
++commands. One example for a generic keyboard daemon, which can call
++@code{gmerlin_remote} is the @ref{Keyboard daemon, Gmerlin Keyboard daemon}.
++
++@menu
++* Invoking gmerlin_remote: gmerlin_remote.
++* Examples: gmerlin_remote_examples.
++@end menu
++
++@node gmerlin_remote
++@subsection Invoking gmerlin_remote
++
++@include gmerlin_remote.texi
++
++@node gmerlin_remote_examples
++@subsection Examples
++
++@table @code
++@item gmerlin_remote -play
++Play the current track (same as pressing the ``play'' button)
++
++@item gmerlin_remote -host remote.example.com -play
++Connect to @code{remote.example.com} and play the current track there
++
++@item gmerlin_remote -seek-rel -10.0
++Seek 10 seconds backwards
++
++@item gmerlin_remote -next
++Go to next track
++
++@item gmerlin_remote -chapter +
++Go to next chapter
++
++@item gmerlin_remote -openplay cda:///dev/scd0
++Open and play an audio CD in the first SCSI drive and start playing.
++Use commands like this in your desktop configuration for handling removable
++media.
++
++@item gmerlin_remote -launch -addplay http://webradio.example.com/stream.ogg
++Add the given gml to the Incoming
++@ifhtml
++@image{../img/incoming_closed_16}
++@end ifhtml
++album (launching a new player if necessary) and play it. Use commands like this as
++MIME-Handler in webbrowsers and filemanagers. A shortcut for this command is the
++script
++@code{gmerlin_launcher}.
++@end table
++
++
++@node GUI Transcoder
++@section GUI Transcoder
++
++@menu
++* Invoking gmerlin_transcoder: gmerlin_transcoder.
++* Quick intro: gmerlin_transcoder_intro.
++* Main window: gmerlin_transcoder_window.
++* Configuring encoder plugins: gmerlin_transcoder_enc.
++* Configuring tracks: gmerlin_transcoder_tracks.
++@end menu
++
++@node gmerlin_transcoder
++@subsection Invoking gmerlin_transcoder
++
++@include gmerlin_transcoder.texi
++
++@node gmerlin_transcoder_intro
++@subsection Quick intro
++
++Gmerlin transoder can transcode every supported input file
++to any of the supported output files. It has some unique features,
++which seperate it from other transcoding applications. Most notably:
++
++@table @b
++@item Per stream settings
++All settings are configured for each stream separately. This means,
++different streams can have different formats, different filters and
++even different codecs (of course only if the container supports it)
++
++@item Subtitle support
++There are plugins for exporting subitles to separate files or to the
++same file, where the A/V data gets written. Alternatively, you can
++blend subtitles onto the video frames (for containers, which don't
++support subtitles).
++
++@item Profile support
++Finding out the right encoder parameters can be a time-consuming task.
++@code{gmerlin_transcoder} allows you to save all settings and load them later.
++Once you have found out your favourite encoder settings for a specific task,
++transcoding is a matter of
++@itemize @bullet
++@item Loading the profile
++@item Adding tracks to the tasklist
++@item Clicking the transcode button
++@end itemize
++
++@item Postprocessing support
++There are postprocessors, which take the encoded files and
++make e.g. Audio CDs (with cdtext) from it. It also contains a frontend for cdrdao,
++so you can burn them as well.
++
++@item Chapter support
++@code{gmerlin_transcoder} imports all chapter seekpoints from the source, and writes
++them into the file (currently only supported for Quicktime and mp4).
++You can also edit chapter lists or create new ones
++@item Language codes
++@code{gmerlin_transcoder} lets you import, edit and export language codes for
++the Audio- and subtitle streams
++@item 2 Pass encoding
++For plugins, which support it, we can do 2-transcoding. There is also a
++generic volume normalizer built in.
++@end table
++
++There is a @ref{transcoder_tasklist, tasklist},
++in which the tracks are queued. All newly loaded tracks
++get the globally configured settings (plugins, formats, filters). You can then
++fine-tune the tracks by configuring them individually. Changing track
++parameters for multiple tracks at once isn't possible. Instead, make the
++settings, save them to a profile and load the profile before loading the
++tracks.
++
++@node gmerlin_transcoder_window
++@subsection Main window
++
++@ifhtml
++@image{../img/transcoder_mainwin}
++@end ifhtml
++
++The window contains of the following elements:
++
++@menu
++* Menu bar: transcoder_menubar.
++* Display: transcoder_display.
++* Progress bar: transcoder_progressbar.
++* Tasklist: transcoder_tasklist.
++@end menu
++
++@node transcoder_menubar
++@subsubsection Menu bar
++
++Here you have all @b{global} commands and settings.
++The item @b{Tasklist} has @b{per track} commands and settings.
++
++@b{File menu}
++
++@table @b
++@item Load tasklist...
++@ifhtml
++@image{../img/folder_open_16}
++@end ifhtml
++Pops up a file selection dialog and loads the chosen tasklist.
++The tracks are appended to already existing tracks in the list.
++Has a shortcut in the @b{upper} toolbar.
++@item Save tasklist...
++@ifhtml
++@image{../img/save_16}
++@end ifhtml
++Pops up a file selection dialog for saving the current tasklist.
++Has a shortcut in the @b{upper} toolbar.
++@item Quit
++@ifhtml
++@image{../img/quit_16}
++@end ifhtml
++Stop the current transcoding action (if any) and quit
++Has a shortcut in the @b{upper} toolbar.
++@end table
++
++@b{Options menu}
++@table @b
++@item Preferences
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++Here, you configure the GUI and the default settings for newly added tracks.
++The preferences are saved in the profile.
++
++@item Configure plugins
++@ifhtml
++@image{../img/plugin_16}
++@end ifhtml
++Here, you set the default plugins for newly added tracks. You can
++configure input plugins (See @ref{gui_i, Configuring input plugins})
++and encoders (See @ref{gmerlin_transcoder_enc, Configuring encoders}).
++The plugin settings are saved in the profile.
++
++@item Load profile...
++@ifhtml
++@image{../img/folder_open_16}
++@end ifhtml
++Pops up a file selection dialog and loads the chosen profile.
++All configuration and plugin settings for new tracks will be
++changed immediately.
++@item Save profile...
++@ifhtml
++@image{../img/save_16}
++@end ifhtml
++Pops up a file selection dialog for saving the current configuration
++to a profile.
++
++@end table
++
++@b{Actions}
++
++@table @b
++@item Start transcoding
++@ifhtml
++@image{../img/run_16}
++@end ifhtml
++This will start transcoding of the tracks in the trasklist in top-to-bottom
++order. While transcoding you can still add/delete/edit tracks in the list.
++Has a shortcut in the @b{upper} toolbar.
++@item Stop transcoding
++@ifhtml
++@image{../img/stop_16}
++@end ifhtml
++Stops transcoding. If the currently transcoded track is not a
++live stream, the produced files are deleted from disk (unless you disable
++this in the preferences). The currently decoded track is moved back to the
++top of the tasklist.
++Has a shortcut in the @b{upper} toolbar.
++@end table
++
++@b{Tasklist}
++
++This menu acts on the tasklist as a whole or the selected track(s).
++
++@table @b
++@item Add... -> Files...
++@ifhtml
++@image{../img/folder_open_16}
++@end ifhtml
++Pops up a file selection dialog, which lets you add files (optionally
++with a specific input plugin) to the end of the tasklist.
++Has a shortcut in the @b{lower} toolbar.
++@item Add... -> URLs...
++@ifhtml
++@image{../img/earth_16}
++@end ifhtml
++Pops up a window, which lets you enter an URL (optionally
++with a specific input plugin) to the end of the tasklist.
++Has a shortcut in the @b{lower} toolbar.
++@item Add... -> Drives...
++@ifhtml
++@image{../img/drive_running_16}
++@end ifhtml
++Pops up a window, which lets open a removeable disk (e.g.
++and Audio CD) and append it's tracks to the end of the
++tasklist. You must specify the device @b{and} the plugin.
++Has a shortcut in the @b{lower} toolbar.
++@item Selected... -> Move up...
++@ifhtml
++@image{../img/top_16}
++@end ifhtml
++Move the selected tracks to the top of the list, so they will be
++transcoded first.
++@item Selected... -> Move down...
++@ifhtml
++@image{../img/down_16}
++@end ifhtml
++Move the selected tracks to the bottom of the list, so they will be
++transcoded last
++@item Selected... -> Remove...
++@ifhtml
++@image{../img/trash_16}
++@end ifhtml
++Remove the selected tracks (without confirmation or undo).
++Has a shortcut in the @b{lower} toolbar.
++@item Selected... -> Configure...
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++Configure the selected track.
++Has a shortcut in the @b{lower} toolbar.
++@item Selected... -> Edit chapters...
++@ifhtml
++@image{../img/chapter_16}
++@end ifhtml
++Pop up the chapter editor. If the source has chapters, you'll
++find them here. You can also add/delete/move chapters. Chapters
++can also have names (currently only supported by the libquicktime encoder).
++Has a shortcut in the @b{lower} toolbar.
++
++@item Selected... -> Change encoders...
++@ifhtml
++@image{../img/plugin_16}
++@end ifhtml
++Here, you set the encoding plugins of the selected tracks.
++(See @ref{gmerlin_transcoder_enc, Configuring encoders}).
++Has a shortcut in the @b{lower} toolbar.
++
++@item Edit... -> Cut
++@ifhtml
++@image{../img/cut_16}
++@end ifhtml
++Cut selected tracks to the clipboard.
++Has a shortcut in the @b{lower} toolbar.
++
++@item Edit... -> Copy
++@ifhtml
++@image{../img/copy_16}
++@end ifhtml
++Copy selected tracks to the clipboard.
++Has a shortcut in the @b{lower} toolbar.
++
++@item Edit... -> Paste
++@ifhtml
++@image{../img/paste_16}
++@end ifhtml
++Paste tracks or album entries from the @ref{GUI Player}
++from the clipboard. Has a shortcut in the @b{lower} toolbar.
++@item Postprocess...
++Pops up a dialog to configure postprocessing.
++Postprocessing plugins are invoked whenever
++the tasklist gets empty. It adds all tracks, which have
++been encoded since batch transcoding was started.
++Postprocessors make some sanity checks of the files they get,
++and won't try to burn e.g. audio CDs with MPEG data.
++@end table
++
++@b{Windows}
++
++Here, you can show and hide the @ref{gui_log, log window}.
++
++@node transcoder_display
++@subsubsection Display
++Displays the currently performed action and the estimated
++remaining time for the current action. The time display in the lower right
++corner shows the total playback time of the tasklist.
++
++@node transcoder_progressbar
++@subsubsection Progress bar
++Displays the progress of the current action.
++
++@node transcoder_tasklist
++@subsubsection Tasklist
++
++A queue for tracks to be transcoded. Right clicking into the
++list pops up a menu, which is the same as in the menubar.
++
++New tracks can be added in various ways:
++
++@itemize @bullet
++@item By dragging files or URLs from filenanagers or webbrowsers into the tasklist
++@item By using the buttons in lower toolbar or the right click menu
++@item From the @ref{GUI Player} by right clicking into an album end select Selected->Transcode. If multiple transcoders are open, the
++instance, which listens on the remote port (can be only one at a time),
++gets the track.
++@item By dragging tracks from a gmerlin album into the tasklist
++@end itemize
++
++@node gmerlin_transcoder_enc
++@subsection Configuring encoders
++@ifhtml
++@image{../img/transcoder_enc}
++@end ifhtml
++
++This dialog exists in the global settings as well as in the per track
++settings. It describes a complete encoder setup.
++
++There are 2 different modes for encoding: Either all A/V streams go into
++one file, or into separate files (i.e. it's not possible to group some
++A/V streams and write others separately). You control this by clicking
++``Encode audio into video file'' checkbox. Subtitles can be written into
++the video file, or into a separate file. You can select this independently for
++text- and overlay subtitles with the corresponding checkbuttons.
++
++Note, that some streams are always written to a separate file (regardless
++of the check-box settings) if the video encoder plugin doesn't support streams
++of that type.
++
++Then, you can set encoder plugins for each stream type. The menu selects
++the plugin. Right of the menu, there are buttons for displaying plugin info
++@ifhtml
++@image{../img/info_16}
++@end ifhtml
++and setting global options
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++(like ID3 generation or fileformat flavours). These settings can be changed
++on a per track basis in the @ref{gmerlin_transcoder_tracks,
++ track configuration dialog}.
++
++Finally, there are the default audio-
++@ifhtml
++@image{../img/audio_16}
++@end ifhtml
++and video
++@ifhtml
++@image{../img/video_16}
++@end ifhtml
++settings. Here, you mostly configure codec parameters like bitrates, etc.
++To further tweak these settings of a per stream base, you'll find the
++same options for each stream in the @ref{gmerlin_transcoder_tracks,
++ track configuration dialog}.
++
++@node gmerlin_transcoder_tracks
++@subsection Configuring tracks
++@ifhtml
++@image{../img/transcoder_track}
++@end ifhtml
++
++It's a standard gmerlin configuration dialog, which is built dynamically
++depending on the stream layout of the source and the encoder setup. On
++the left you see a tree structure of all settings:
++@table @b
++@item General
++Sets global settings like basename of the file and an optional subdirectory
++of the encoding directory, where the file(s) will be written. Note, that
++the toplevel destination directory is configured globally, not per track.
++
++If you select ``postprocess only'', the input file will be sent directly
++to the postprocessing plugin. Enable this for files, which already have a
++format supported by the postprocessor.
++
++Finally you can choose to transcode only a certain selection given by
++the start- and/or end time.
++
++@item Metadata
++Here, any available metadata are imported from the input, and you can
++edit them. Note that not all medatada fields are supported by all output
++formats. Some formats don't support metadata at all.
++
++@item Global encoder options
++For each enabled encoding plugin, you can configure global settings here.
++
++@item Stream options
++For each stream, you have @b{Generic options}. Here you can en- or disable
++the stream, set the language and the format. In addition for subtitles,
++you can choose whether to convert text- to overlay subtitles, blend
++subtitles onto video frames or encode them separately.
++
++For Audio and video streams, you can also set up @ref{gui_f, filters}.
++
++For text subtitles, the @b{render options} let you configure the
++font and colors of the subtitles, if they are converted to overlay
++subtitles.
++
++The @b{default format} of subtitles is for the rare case, that you want
++to convert subtitles to a video stream. It's only used if you encode subtitles
++but no corresponding video stream.
++
++The last tree- node for each stream has always the codec option of the
++output plugin for the respective streams. Here, you can change encoder
++settings for each stream separately.
++@end table
++
++@node Transcoder remote control
++@section Transcoder remote control
++
++@menu
++* Invoking gmerlin_transcoder_remote: gmerlin_transcoder_remote.
++@end menu
++
++@node gmerlin_transcoder_remote
++@subsection Invoking gmerlin_transcoder_remote
++
++@include gmerlin_transcoder_remote.texi
++
++
++@node Commandline player
++@section Commandline player
++
++@menu
++* Invoking gmerlin_play: gmerlin_play.
++@end menu
++
++@node gmerlin_play
++@subsection Invoking gmerlin_play
++
++@include gmerlin_play.texi
++
++@node Commandline recorder
++@section Commandline recorder
++
++@menu
++* Invoking gmerlin-record: gmerlin-record.
++@end menu
++
++@node gmerlin-record
++@subsection Invoking gmerlin-record
++
++@include gmerlin_record.texi
++
++@node Alsamixer
++@section Alsamixer
++
++@ifhtml
++@image{../img/alsamixer}
++@end ifhtml
++
++Type @code{gmerlin_alsamixer} to start this.
++This is a mixer program, which is still convenient, if you have
++multiple soundcards with 100s of options each. It provides widgets
++for almost all soundcard parameters, which are supported by alsa.
++
++By right clicking on a control, you get a menu where you can:
++
++@itemize @bullet
++@item Move controls inside the window
++@ifhtml
++@image{../img/first_16}
++@image{../img/left_16}
++@image{../img/right_16}
++@image{../img/last_16}
++@end ifhtml
++
++@item Move controls to own windows
++@ifhtml
++@image{../img/windowed_16}
++@end ifhtml
++. To move them back to main window,
++ simply close the control-windows.
++@item Pop up an options dialog
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++, where you can select which controls should be shown at all.
++@end itemize
++
++All window configurations and coordinates are remembered. The actual mixer
++settings are @emph{not} remembered, since this is done globally by the
++Alsa startup scripts.
++
++@node Visualizer
++@section Visualizer
++
++@ifhtml
++@image{../img/visualizer}
++
++@end ifhtml
++
++Type @code{gmerlin_visualizer} to start this.
++Gmerlin visualizer opens your soundard for recording and displays a
++visualization in a window. It supports fullscreen and mouse- and
++keyboard interaction with visuals for visualization plugins, which
++support this.
++If you move the mouse or press the ``Menu key'', the toolbar will show
++up (either method can be disabled). It will be hidden again after
++the mouse is idle for some seconds.
++
++In the @b{upper left row}, you can change the input plugin, show info
++about the plugin
++@ifhtml
++@image{../img/info_16}
++@end ifhtml
++or configure the visualization
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++.
++
++In the @b{lower left row}, you can change the recording- and
++display plugins
++@ifhtml
++@image{../img/plugin_16}
++@end ifhtml
++, set global (plugin independent) options
++@ifhtml
++@image{../img/config_16}
++@end ifhtml
++, restart the visualization
++@ifhtml
++@image{../img/refresh_16}
++@end ifhtml
++, switch to fullscreen
++@ifhtml
++@image{../img/fullscreen_16}
++@end ifhtml
++or back
++@ifhtml
++@image{../img/windowed_16}
++@end ifhtml
++. Moreover you can show or hide the @ref{gui_log, Log window}
++@ifhtml
++@image{../img/log_16}
++@end ifhtml
++or exit
++@ifhtml
++@image{../img/quit_16}
++@end ifhtml
++the application.
++
++The @b{VU-meter} at the right displays the recording level as it comes
++from the device (i.e. @b{before} the visualizer gain is applied).
++
++You have the following @b{Shortcuts}:
++
++@table @kbd
++@item f
++Toggle fullscreen mode
++@item Tab
++Toggle fullscreen mode
++@item Escape
++Exit fullscreen mode
++@item Menu
++Show toolbar
++@end table
++
++All other keyboard- and mouse events are propagated to the display
++plugin and then to the visualization plugin.
++
++@node Keyboard daemon
++@section Keyboard daemon
++@ifhtml
++@image{../img/kbd_mainwin}
++
++@end ifhtml
++The gmerlin keyboard daemon is an X11 application, which grabs key combinations
++and executes commands. You will communicate mostly via
++the configuration utility @code{gmerlin_kbd_config}. It's independent of
++keyboard model definitions, because it allows to enter the keyboard combination
++in the config dialog directly. It's independent of gmerlin or any other
++multimedia architecture, since the actions can be arbitrary shell commands.
++
++You can manually start and stop the keyboard daemon, add, edit and delete
++key combinations and tell the daemon to apply the changes.
++
++To automatically start the keyboard daemon at each X11 start, find out
++where to enter start commands in your desktop configuration add the
++command @code{/usr/local/bin/gmerlin_kbd}. Change @code{/usr/local} to
++your install prefix if necessary.
++
++Messages from the keyboard daemon show up in @file{/var/log/messages} or
++in another syslog file depending on your system setup.
++
++@node Plugins, FAQ, Applications, Top
++@chapter Plugins
++
++@include plugins.texi
++
++@node FAQ, Get involved, Plugins, Top
++@chapter FAQ
++
++@menu
++* General questions::
++* Installation questions::
++* Usage questions::
++@end menu
++
++@node General questions
++@section General questions
++
++@node Installation questions
++@section Installation questions
++
++@strong{Q:} @emph{Why do I have to install so many packages to get all features?}
++
++@strong{A:} Because having one huge package is not good for people, who want to use
++only one small subset of the included libraries or applications. To make installation
++a bit easier, there are the gmerlin-dependencies and gmerlin-all-in-one packages.
++
++@strong{Q:} @emph{How do I enable Ladspa plugins?}
++
++@strong{A:} Gmerlin looks for Ladspa plugins in @code{/usr/lib/ladspa} and
++@code{/usr/local/lib/ladspa} by default. Additional paths can be set with the
++@code{LADSPA_PATH} enviromnent variable.
++
++@strong{Q:} @emph{Which Ladspa plugins work with gmerlin?}
++
++@strong{A:} All plugins, which have either 1 or 2 input and output ports. The numbers
++of input- and output ports must be equal.
++
++@strong{Q:} How do I enable DVB?
++
++@strong{A:} Gmerlin looks for DVB devices in /dev/dvb. Then, you must pass gmerlin
++ a channel configuration file created with the @uref{http://www.linuxtv.org/wiki/index.php/LinuxTV_dvb-apps,dvb-apps}
++ tools. Check the documentation coming with dvb-apps for how to create channel files. Gmerlin looks for channel maps
++ in the directories @code{$HOME/.szap}, @code{$HOME/.tzap}, @code{$HOME/.czap},
++ @code{$HOME/.azap}, @code{$HOME/.mplayer} and @code{$HOME/.xine}. The first time, you load the DVB plugin,
++ and each time you changed your channel map, the plugin will tune to each transponder and get the full
++ information about the programs (the information provided by dvp-apps is not sufficient). This can take some time.
++
++@node Usage questions
++@section Usage questions
++
++@strong{Q:} @emph{Ok, I compiled gmerlin and started the player, now how do I play a file?}
++
++@strong{A:} The easiest way is to open the Incoming or Favourites album
++and use one of the buttons at the bottom to open a file or URL. Or drag the
++file from a filemanager into an album. Later you might want to create
++your own albums.
++
++@strong{Q:} @emph{Can I play a VCD image from harddisk before burning?}
++
++@strong{A:} Yes. If you use vcdimager, you have 2 files: a .bin file and a .cue
++ file. If you load the .cue file with the avdecoder plugin, you'll be
++ able to play the VCD image.
++
++@strong{Q:} @emph{Can I play a DVD image from harddisk or from a mounted DVD drive?}
++
++@strong{A:} Yes, in the dvd directory, go to the subdirectory @code{video_ts} and load the
++ file @code{video_ts.ifo}.
++
++@strong{Q:} @emph{Can I play an audio CD image from harddisk before burning?}
++
++@strong{A:} Not yet.
++
++@strong{Q:} @emph{How can I make gmerlin the default audio CD player on my Desktop environment?}
++
++@strong{A:} First, find out how to configure the default audio CD player on your system.
++ Usually, you can set a command, which is executed, when a new audio cd is inserted.
++ Assuming your cdrom device is @code{/dev/hdd}, the command for opening and playing
++ an audio cd is:
++
++ @code{gmerlin_remote -launch -openplay cda:///dev/hdd}
++
++ If you just want ot open the CD (without starting playback), use:
++
++ @code{gmerlin_remote -launch -open cda:///dev/hdd}
++
++@strong{Q:} @emph{How can I make gmerlin the default DVD player on my Desktop environment?}
++
++@strong{A:} Same as for audio CDs, but replace @code{cda://} with @code{dvd://}.
++
++@strong{Q:} @emph{How can I configure gmerlin as a Mime handler for media files on my Desktop environment?}
++
++@strong{A:} Find out how to set up mime handlers (e.g. right click onto a file and select ``Open with...'').
++ Then, enter the command @code{gmerlin_launcher}.
++
++@strong{Q:} @emph{How can I map multimedia keys on my keyboard to gmerlin functions?}
++
++@strong{A:} You need some way to configure custom shell commands for multimedia keys. Check the
++documentation of your Desktop system. To remote control gmerlin, use the commandline program
++@code{gmerlin_remote}. Type @code{gmerlin_remote -help} for supported options and commands.
++
++@node Get involved, , FAQ, Top
++@chapter Get involved
++
++Contribution to gmerlin can happen at several skill levels:
++
++@itemize @bullet
++@item Report bugs and installation problems, tell about features you'd like to see.
++@item Tell us about files, which cannot be played. An URL and some infos (other applications
++ which play the file fine) can help a lot.
++@item Make skins. In /usr/local/gmerlin/skins/Default/skin.xml, you'll find an example skin description file.
++@item Assembler gurus can write more speed optimized routines for gavl
++@item Mathematics gurus can write more accurate routines for the higher quality
++levels of gavl.
++@end itemize
++
++@bye
++
+diff -Naur gmerlin-1.2.0.orig/doc/gmerlin.texi gmerlin-1.2.0/doc/gmerlin.texi
+--- gmerlin-1.2.0.orig/doc/gmerlin.texi 2013-02-27 16:56:41.202827892 -0800
++++ gmerlin-1.2.0/doc/gmerlin.texi 2013-02-27 16:58:29.743890528 -0800
+@@ -461,7 +461,7 @@
+
+ A gml can be:
+
+-@table @bullet
++@table @b
+ @item A regular filename
+ Optionally preceeded with ``file://''. This means, that @b{/files/music.mp3} is the same as
+ @b{file:///files/music.mp3}.