Search
j0ke.net Open Build Service
>
Projects
>
multimedia
>
mythtv
> mythtv-0.21-svnfixes.patch
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File mythtv-0.21-svnfixes.patch of Package mythtv (Revision 3)
Currently displaying revision
3
,
show latest
diff -uNr mythtv-0.21/bindings/perl/IO/Socket/INET/MythTV.pm mythtv/bindings/perl/IO/Socket/INET/MythTV.pm --- mythtv-0.21/bindings/perl/IO/Socket/INET/MythTV.pm 2007-12-01 22:49:49.000000000 +0100 +++ mythtv/bindings/perl/IO/Socket/INET/MythTV.pm 2007-12-01 22:49:49.000000000 +0100 @@ -3,8 +3,8 @@ # A MythTV Socket class that extends IO::Socket::INET to include some # MythTV-specific data queries # -# @url $URL: http://svn.mythtv.org/svn/tags/release-0-21/mythtv/bindings/perl/IO/Socket/INET/MythTV.pm $ -# @date $Date: 2007-12-01 21:49:49 +0000 (Sat, 01 Dec 2007) $ +# @url $URL: http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/bindings/perl/IO/Socket/INET/MythTV.pm $ +# @date $Date: 2007-12-01 22:49:49 +0100 (Sa, 01. Dez 2007) $ # @version $Revision: 15016 $ # @author $Author: xris $ # @copyright Silicon Mechanics diff -uNr mythtv-0.21/bindings/perl/MythTV/Channel.pm mythtv/bindings/perl/MythTV/Channel.pm --- mythtv-0.21/bindings/perl/MythTV/Channel.pm 2007-03-13 06:13:27.000000000 +0100 +++ mythtv/bindings/perl/MythTV/Channel.pm 2007-03-13 06:13:27.000000000 +0100 @@ -3,8 +3,8 @@ # # Object containing info about a particular MythTV channel. # -# @url $URL: http://svn.mythtv.org/svn/tags/release-0-21/mythtv/bindings/perl/MythTV/Channel.pm $ -# @date $Date: 2007-03-13 05:13:27 +0000 (Tue, 13 Mar 2007) $ +# @url $URL: http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/bindings/perl/MythTV/Channel.pm $ +# @date $Date: 2007-03-13 06:13:27 +0100 (Di, 13. Mär 2007) $ # @version $Revision: 13029 $ # @author $Author: xris $ # diff -uNr mythtv-0.21/bindings/perl/MythTV/Program.pm mythtv/bindings/perl/MythTV/Program.pm --- mythtv-0.21/bindings/perl/MythTV/Program.pm 2007-11-30 00:45:24.000000000 +0100 +++ mythtv/bindings/perl/MythTV/Program.pm 2007-11-30 00:45:24.000000000 +0100 @@ -3,8 +3,8 @@ # # Object containing info about a particular MythTV program. # -# @url $URL: http://svn.mythtv.org/svn/tags/release-0-21/mythtv/bindings/perl/MythTV/Program.pm $ -# @date $Date: 2007-11-29 23:45:24 +0000 (Thu, 29 Nov 2007) $ +# @url $URL: http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/bindings/perl/MythTV/Program.pm $ +# @date $Date: 2007-11-30 00:45:24 +0100 (Fr, 30. Nov 2007) $ # @version $Revision: 14997 $ # @author $Author: xris $ # diff -uNr mythtv-0.21/bindings/perl/MythTV/Recording.pm mythtv/bindings/perl/MythTV/Recording.pm --- mythtv-0.21/bindings/perl/MythTV/Recording.pm 2008-03-05 05:29:54.000000000 +0100 +++ mythtv/bindings/perl/MythTV/Recording.pm 2008-03-05 05:29:54.000000000 +0100 @@ -3,8 +3,8 @@ # # Object containing info about a particular MythTV recording. # -# @url $URL: http://svn.mythtv.org/svn/tags/release-0-21/mythtv/bindings/perl/MythTV/Recording.pm $ -# @date $Date: 2008-03-05 04:29:54 +0000 (Wed, 05 Mar 2008) $ +# @url $URL: http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/bindings/perl/MythTV/Recording.pm $ +# @date $Date: 2008-03-05 05:29:54 +0100 (Mi, 05. Mär 2008) $ # @version $Revision: 16398 $ # @author $Author: xris $ # diff -uNr mythtv-0.21/bindings/perl/MythTV/StorageGroup.pm mythtv/bindings/perl/MythTV/StorageGroup.pm --- mythtv-0.21/bindings/perl/MythTV/StorageGroup.pm 2007-01-06 21:45:00.000000000 +0100 +++ mythtv/bindings/perl/MythTV/StorageGroup.pm 2007-01-06 21:45:00.000000000 +0100 @@ -4,7 +4,7 @@ # Object containing info about a particular MythTV Storage Group. # # @url $URL: svn+ssh://cpinkham@cvs.mythtv.org/var/lib/svn/trunk/mythtv/bindings/perl/MythTV/StorageGroup.pm $ -# @date $Date: 2007-01-06 20:45:00 +0000 (Sat, 06 Jan 2007) $ +# @date $Date: 2007-01-06 21:45:00 +0100 (Sa, 06. Jan 2007) $ # @version $Revision: 12434 $ # @author $Author: xris $ # diff -uNr mythtv-0.21/bindings/perl/MythTV.pm mythtv/bindings/perl/MythTV.pm --- mythtv-0.21/bindings/perl/MythTV.pm 2008-03-05 17:17:02.000000000 +0100 +++ mythtv/bindings/perl/MythTV.pm 2008-03-05 17:17:02.000000000 +0100 @@ -1,8 +1,8 @@ # # MythTV bindings for perl. # -# @url $URL: http://svn.mythtv.org/svn/tags/release-0-21/mythtv/bindings/perl/MythTV.pm $ -# @date $Date: 2008-03-05 16:17:02 +0000 (Wed, 05 Mar 2008) $ +# @url $URL: http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/bindings/perl/MythTV.pm $ +# @date $Date: 2008-03-05 17:17:02 +0100 (Mi, 05. Mär 2008) $ # @version $Revision: 16401 $ # @author $Author: rkulagow $ # diff -uNr mythtv-0.21/configure mythtv/configure --- mythtv-0.21/configure 2008-03-04 22:23:23.000000000 +0100 +++ mythtv/configure 2009-04-19 23:30:15.000000000 +0200 @@ -163,6 +163,7 @@ echo " directory with frontend.h [$dvb_path]" echo " --disable-x11 disable X11 support" echo " --x11-path=X11LOC location of X11 include files [$x11_include_path-path]" +# echo " --enable-glx-procaddrarb use glXGetProcAddressARB() instead of glXGetProcAddress()" echo " --disable-xrandr disable X11 resolution switching" echo " --disable-xv disable XVideo (X11 video output accel.)" echo " --disable-xvmc disable XvMC (Linux/BSD MPEG accel.)" @@ -179,6 +180,8 @@ echo "" echo " --enable-mac-bundle produce standalone OS X apps (e.g. mythfrontend.app)" echo "" + echo " --runtime-prefix=PREFIX prefix to be used at runtime" + echo " (e.g. .. or /myth/latest)" echo " --with-bindings=LIST install the bindings specified in the" echo " comma-separated list" echo " Supported bindings: perl, python" @@ -904,9 +907,11 @@ xvmc_vld dvdv fribidi + glx_proc_addr_arb ' MYTHTV_LIST=' + audio_pulse audio_alsa audio_arts audio_jack @@ -1156,6 +1161,8 @@ CONFIG_DEFINES="" CONFIG_INCLUDEPATH="" PROFILEFLAGS="" +audio_pulse="default" +audio_pulse_libs="-lpulse" audio_alsa="default" audio_alsa_libs="-lasound" audio_arts="default" @@ -1178,6 +1185,7 @@ joystick_menu="default" lamemp3="yes" lirc="yes" +mac_bundle="no" opengl="yes" v4l="yes" x11="yes" @@ -1186,9 +1194,9 @@ xv="yes" xvmc="yes" xvmc_lib="" -xvmc_opengl="yes" xvmc_vld="yes" xvmcw="yes" +glx_proc_addr_arb="no" # libraries enable zlib @@ -1353,6 +1361,10 @@ ;; --xvmc-lib=*) xvmc_lib="$optval" ;; + --enable-glx-procaddrarb) glx_proc_addr_arb="yes" + ;; + --disable-glx-procaddrarb) glx_proc_addr_arb="no" + ;; --enable-mac-accel) dvdv="yes" ;; --disable-mac-accel) dvdv="no" @@ -1382,6 +1394,10 @@ # disabled due to abuse in Gentoo ebuild --disable-backend) ;; + --enable-mac-bundle) enable mac_bundle + ;; + --runtime-prefix=*) RUNPREFIX="$optval" + ;; --previous|--prev) echo "No history of previous configure parameters." ;; @@ -1475,6 +1491,7 @@ fi fi cmov="yes" + fast_cmov="yes" ;; # armv4l is a subset of armv[567]*l arm|armv[4567]*l) @@ -1586,6 +1603,7 @@ ;; freebsd) append CCONFIG "freebsd" + disable ivtv disable need_memalign backend="yes" ;; @@ -1599,10 +1617,13 @@ enable darwin disable dvb disable ivtv + ldver=$(ld -v 2>&1 | sed -e s/^[^-]*-//) osxver=$(uname -r | cut -c 1) - if [ ${osxver} = "9" ]; then - disable mmx - fi + if [[ ${ldver%.*} -lt "82" && ${osxver} = "9" && ${arch} = "x86_32" ]]; then + disable mmx + echo "You have a broken ld. Playback of HD videos may be very poor." + echo "See http://svn.mythtv.org/trac/ticket/4200 for intelleopardmmx.patch" + fi disable need_memalign disable opengl_video disable opengl_vsync @@ -1619,9 +1640,23 @@ FFSERVERLDFLAGS=-Wl,-bind_at_load ;; mingw32*) + enable backend + disable bindings_perl + disable bindings_python + disable dv1394 + disable dvb + disable ivtv + enable memalign_hack + disable network + enable opengl + if enabled wince; then + disable protocols + fi + disable v4l + enable windows + disable x11 + ###### Standard ffmpeg configure stuff follows: targetos=mingw32 - enable backend - enable windows shlibdir="$bindir" VHOOKSHFLAGS='-shared -L$(BUILD_ROOT)/libavformat -L$(BUILD_ROOT)/libavcodec -L$(BUILD_ROOT)/libavutil' VHOOKLIBS='-lavformat$(BUILDSUF) -lavcodec$(BUILDSUF) -lavutil$(BUILDSUF) $(EXTRALIBS)' @@ -1629,17 +1664,7 @@ VHOOKSHFLAGS="$VHOOKSHFLAGS -L\$(BUILD_ROOT)/libswscale" VHOOKLIBS="$VHOOKLIBS -lswscale\$(BUILDSUF)" fi - dv1394="no" - ffserver="no" - network="no" - opengl="yes" - if enabled wince; then - protocols="no" - fi disable ffserver - disable v4l - disable bindings_perl - disable bindings_python SLIBPREF="lib" SLIBSUF=".dll" EXESUF=".exe" @@ -2034,6 +2059,8 @@ # EM64T era Intel Xeon if expr "$processor" : ".*Intel(R) Xeon(R) CPU.*5110" > /dev/null ; then ARCHFLAGS="-march=k8" # this would be pentium4 on 32 bit systems + elif expr "$processor" : ".*Intel(R) Xeon(R) CPU.*5160" > /dev/null ; then + ARCHFLAGS="-march=k8" # this would be pentium4 on 32 bit systems # Various Intel Duo processors (EMT64T capable) elif expr "$processor" : ".*Intel(R).*Core(TM)2.*CPU" > /dev/null ; then ARCHFLAGS="-march=k8" # this would be pentium4 on 32 bit systems @@ -2528,6 +2555,12 @@ check_header sys/soundcard.h check_header soundcard.h +# PulseAudio probe +! disabled audio_pulse && + check_lib pulse/version.h pa_get_library_version $audio_pulse_libs && + enable audio_pulse || + disable audio_pulse + # ALSA probe ! disabled audio_alsa && check_lib alsa/asoundlib.h snd_asoundlib_version $audio_alsa_libs && @@ -2691,6 +2724,9 @@ fi fi +enabled libfftw3 && has_library libfftw3_threads && has_header fftw3.h || + disable libfftw3 + enabled x11 && has_library libX11 || disable x11 enabled xrandr && has_header X11/extensions/Xrandr.h || disable xrandr enabled xv && has_library libXv || disable xv @@ -2702,38 +2738,38 @@ check_header X11/extensions/XvMClib.h has_library libXvMCW || disable xvmcw check_header X11/extensions/vldXvMC.h -has_library libviaXvMC || has_library libchromeXvMC || disable xvmc_vld -has_library libviaXvMCPro || has_library libchromeXvMCPro || disable xvmc_pro if test x"$xvmc_lib" != x""; then VENDOR_XVMC_LIBS="-l"$xvmc_lib disable xvmcw elif enabled xvmcw; then VENDOR_XVMC_LIBS="-lXvMCW" -elif enabled xvmc_pro; then - if has_library libviaXvMCPro ; then - VENDOR_XVMC_LIBS="-lviaXvMCPro" - elif has_library libchromeXvMCPro ; then - VENDOR_XVMC_LIBS="-lchromeXvMCPro" - fi -elif enabled xvmc_vld; then - if has_library libviaXvMC ; then - VENDOR_XVMC_LIBS="-lviaXvMC" - elif has_library libchromeXvMC ; then - VENDOR_XVMC_LIBS="-lchromeXvMC" - fi +elif enabled xvmc_pro && has_library libviaXvMCPro ; then + VENDOR_XVMC_LIBS="-lviaXvMCPro" +elif enabled xvmc_pro && has_library libchromeXvMCPro ; then + VENDOR_XVMC_LIBS="-lchromeXvMCPro" +elif enabled xvmc_vld && has_library libviaXvMC ; then + VENDOR_XVMC_LIBS="-lviaXvMC" +elif enabled xvmc_vld && has_library libchromeXvMC ; then + VENDOR_XVMC_LIBS="-lchromeXvMC" elif has_library libXvMCNVIDIA ; then VENDOR_XVMC_LIBS="-lXvMCNVIDIA" elif has_library libI810XvMC ; then VENDOR_XVMC_LIBS="-lI810XvMC" + disable xvmc_vld xvmc_pro else - disable xvmc + disable xvmc xvmcw fi -test x"$VENDOR_XVMC_LIBS" != x"-lXvMCNVIDIA" && disable xvmc_opengl +if test x"$VENDOR_XVMC_LIBS" = x"-lXvMCNVIDIA" ; then + enable xvmc_opengl + disable xvmc_vld xvmc_pro +elif enabled xvmc_opengl ; then + disable xvmc_opengl + echo "Disabling XvMC-opengl. It is only available when linking against libXvMCNIVIDIA" +fi enabled xvmc_pro && enable xvmc_vld -enabled xvmc_opengl && disable xvmc_vld xvmc_pro # Can only do Mac accel on Mac platform @@ -2838,6 +2874,9 @@ libdir="${PREFIX}/${libdir_name}" fi +if test x"$RUNPREFIX" = x""; then + RUNPREFIX=${PREFIX} +fi echo "# Basic Settings" echo "Compile type $compile_type" @@ -2848,6 +2887,7 @@ echo "Compiler cache $ccache$ccache_txt" echo "DistCC $distcc$distcc_txt" echo "install prefix $PREFIX" +echo "runtime prefix $RUNPREFIX" <<BLOCK_QUOTE echo "source path $source_path" echo "C compiler $cc" @@ -2973,6 +3013,7 @@ if enabled frontend; then echo echo "# Sound Output Support" + echo "PulseAudio support ${audio_pulse-no}" echo "OSS support ${audio_oss-no}" echo "ALSA support ${audio_alsa-no}" echo "aRts support ${audio_arts-no}" @@ -3032,7 +3073,9 @@ echo "#define FFMPEG_CONFIG_H" >> $TMPH echo "#define FFMPEG_CONFIGURATION \"$FFMPEG_CONFIGURATION\"" >> $TMPH +echo "RUNPREFIX=$RUNPREFIX" >> $MYTH_CONFIG_MAK echo "PREFIX=$PREFIX" >> $MYTH_CONFIG_MAK +echo "LIBDIRNAME=$libdir_name" >> $MYTH_CONFIG_MAK echo "LIBDIR=$libdir" >> $MYTH_CONFIG_MAK <<BLOCK_QUOTE echo "SHLIBDIR=\$(DESTDIR)$shlibdir" >> config.mak @@ -3151,6 +3194,11 @@ echo "CONFIG_AUDIO_ALSA_LIBS=$audio_alsa_libs" >> $MYTH_CONFIG_MAK fi +if enabled audio_pulse; then + append CCONFIG "using_pulse" + echo "CONFIG_AUDIO_PULSE_LIBS=$audio_pulse_libs" >> $MYTH_CONFIG_MAK +fi + if enabled audio_arts; then append CCONFIG "using_arts" echo "CONFIG_AUDIO_ARTS_LIBS=$audio_arts_libs" >> $MYTH_CONFIG_MAK diff -uNr mythtv-0.21/contrib/channel_changers/6200ch.c mythtv/contrib/channel_changers/6200ch.c --- mythtv-0.21/contrib/channel_changers/6200ch.c 2008-03-04 18:43:47.000000000 +0100 +++ mythtv/contrib/channel_changers/6200ch.c 2009-04-25 05:52:16.000000000 +0200 @@ -34,8 +34,14 @@ // WARNING: Please update firewiredevice.cpp when adding to this list. #define DCH3200_VENDOR_ID1 0x00001c11 +#define DCH3200_VENDOR_ID2 0x00001cfb +#define DCH3200_VENDOR_ID3 0x00001fc4 +#define DCH3200_VENDOR_ID4 0x000023a3 #define DCH3200_MODEL_ID1 0x0000d330 +#define DCH3416_VENDOR_ID1 0x00001e46 +#define DCH3416_MODEL_ID1 0x0000b630 + #define DCT3412_VENDOR_ID1 0x0000159a #define DCT3412_MODEL_ID1 0x000034cb @@ -62,6 +68,7 @@ #define DCT6200_VENDOR_ID13 0x00001aad #define DCT6200_VENDOR_ID14 0x00000b06 #define DCT6200_VENDOR_ID15 0x0000195e +#define DCT6200_VENDOR_ID16 0x000010dc #define DCT6200_SPEC_ID 0x00005068 #define DCT6200_SW_VERSION 0x00010101 #define DCT6200_MODEL_ID1 0x0000620a @@ -76,13 +83,42 @@ #define DCT6416_VENDOR_ID2 0x00001a66 #define DCT6416_MODEL_ID1 0x0000646b -#define AVC1394_SUBUNIT_TYPE_6200 (9 << 19) /* uses a reserved subunit type */ +#define QIP7100_VENDOR_ID1 0x00002374 +#define QIP7100_MODEL_ID1 0x00008100 +#define QIP7100_MODEL_ID2 0x00000001 + +#define MOT_UNKNOWN_VENDOR_ID1 0x04db +#define MOT_UNKNOWN_VENDOR_ID2 0x0406 +#define MOT_UNKNOWN_VENDOR_ID3 0x0ce5 +#define MOT_UNKNOWN_VENDOR_ID4 0x111a +#define MOT_UNKNOWN_VENDOR_ID5 0x1225 +#define MOT_UNKNOWN_VENDOR_ID6 0x1404 +#define MOT_UNKNOWN_VENDOR_ID7 0x1626 +#define MOT_UNKNOWN_VENDOR_ID8 0x18c0 +#define MOT_UNKNOWN_VENDOR_ID9 0x1ade +#define MOT_UNKNOWN_VENDOR_ID10 0x1cfb +#define MOT_UNKNOWN_VENDOR_ID11 0x2040 +#define MOT_UNKNOWN_VENDOR_ID12 0x211e +#define MOT_UNKNOWN_VENDOR_ID13 0x2180 +#define MOT_UNKNOWN_VENDOR_ID14 0x2210 +#define MOT_UNKNOWN_VENDOR_ID15 0x230b +#define MOT_UNKNOWN_VENDOR_ID16 0x2375 +#define MOT_UNKNOWN_VENDOR_ID17 0x2395 +#define MOT_UNKNOWN_VENDOR_ID18 0x23a2 +#define MOT_UNKNOWN_VENDOR_ID19 0x23ed +#define MOT_UNKNOWN_VENDOR_ID20 0x23ee +#define MOT_UNKNOWN_VENDOR_ID21 0x23a0 +#define MOT_UNKNOWN_VENDOR_ID22 0x23a1 + +#define PACE_VENDOR_ID1 0x00005094 /* 550 & 779 */ +#define PACE_VENDOR_ID2 0x00005094 /* unknown */ +#define PACE550_MODEL_ID1 0x00010551 +#define PACE779_MODEL_ID1 0x00010755 -#define AVC1394_6200_COMMAND_CHANNEL 0x000007C00 /* 6200 subunit command */ #define AVC1394_6200_OPERAND_SET 0x20 /* 6200 subunit command operand */ -#define CTL_CMD0 AVC1394_CTYPE_CONTROL | AVC1394_SUBUNIT_TYPE_6200 | \ - AVC1394_SUBUNIT_ID_0 | AVC1394_6200_COMMAND_CHANNEL | \ +#define CTL_CMD0 AVC1394_CTYPE_CONTROL | AVC1394_SUBUNIT_TYPE_PANEL | \ + AVC1394_SUBUNIT_ID_0 | AVC1394_PANEL_COMMAND_PASS_THROUGH | \ AVC1394_6200_OPERAND_SET #define STARTING_NODE 1 /* skip 1394 nodes to avoid error msgs */ @@ -171,7 +207,7 @@ if (!handle) { if (!errno) { - fprintf(stderr, "Not Compatable!\n"); + fprintf(stderr, "Not Compatible!\n"); } else { perror("Couldn't get 1394 handle"); fprintf(stderr, "Is ieee1394, driver, and raw1394 loaded?\n"); @@ -218,9 +254,13 @@ // WARNING: Please update firewiredevice.cpp when adding to this list. if ( ((dir.vendor_id == DCH3200_VENDOR_ID1) || - (dir.vendor_id == DCT3412_VENDOR_ID1) || - (dir.vendor_id == DCT3416_VENDOR_ID1) || - (dir.vendor_id == DCT3416_VENDOR_ID2) || + (dir.vendor_id == DCH3200_VENDOR_ID2) || + (dir.vendor_id == DCH3200_VENDOR_ID3) || + (dir.vendor_id == DCH3200_VENDOR_ID4) || + (dir.vendor_id == DCH3416_VENDOR_ID1) || + (dir.vendor_id == DCT3412_VENDOR_ID1) || + (dir.vendor_id == DCT3416_VENDOR_ID1) || + (dir.vendor_id == DCT3416_VENDOR_ID2) || (dir.vendor_id == DCT5100_VENDOR_ID1) || (dir.vendor_id == DCT6200_VENDOR_ID1) || (dir.vendor_id == DCT6200_VENDOR_ID2) || @@ -237,11 +277,38 @@ (dir.vendor_id == DCT6200_VENDOR_ID13) || (dir.vendor_id == DCT6200_VENDOR_ID14) || (dir.vendor_id == DCT6200_VENDOR_ID15) || + (dir.vendor_id == DCT6200_VENDOR_ID16) || (dir.vendor_id == DCT6412_VENDOR_ID1) || (dir.vendor_id == DCT6412_VENDOR_ID2) || - (dir.vendor_id == DCT6416_VENDOR_ID1) || - (dir.vendor_id == DCT6416_VENDOR_ID2)) && + (dir.vendor_id == DCT6416_VENDOR_ID1) || + (dir.vendor_id == DCT6416_VENDOR_ID2) || + (dir.vendor_id == QIP7100_VENDOR_ID1) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID1) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID2) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID3) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID4) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID5) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID6) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID7) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID8) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID9) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID10) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID11) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID12) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID13) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID14) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID15) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID16) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID17) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID18) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID19) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID20) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID21) || + (dir.vendor_id == MOT_UNKNOWN_VENDOR_ID22) || + (dir.vendor_id == PACE_VENDOR_ID1) || + (dir.vendor_id == PACE_VENDOR_ID2)) && ((dir.model_id == DCH3200_MODEL_ID1) || + (dir.model_id == DCH3416_MODEL_ID1) || (dir.model_id == DCT3412_MODEL_ID1) || (dir.model_id == DCT3416_MODEL_ID1) || (dir.model_id == DCT3416_MODEL_ID2) || @@ -250,7 +317,12 @@ (dir.model_id == DCT6200_MODEL_ID2) || (dir.model_id == DCT6412_MODEL_ID1) || (dir.model_id == DCT6412_MODEL_ID2) || - (dir.model_id == DCT6416_MODEL_ID1)) ) { + (dir.model_id == DCT6416_MODEL_ID1) || + (dir.model_id == QIP7100_MODEL_ID1) || + (dir.model_id == QIP7100_MODEL_ID2) || + (dir.model_id == PACE550_MODEL_ID1) || + (dir.model_id == PACE779_MODEL_ID1)) ) + { if (dir.unit_spec_id != DCT6200_SPEC_ID) fprintf(stderr, "Warning: Unit Spec ID different.\n"); if (dir.unit_sw_version != DCT6200_SW_VERSION) diff -uNr mythtv-0.21/contrib/channel_changers/sa3250ch.c mythtv/contrib/channel_changers/sa3250ch.c --- mythtv-0.21/contrib/channel_changers/sa3250ch.c 2007-11-18 17:19:20.000000000 +0100 +++ mythtv/contrib/channel_changers/sa3250ch.c 2009-04-25 05:52:16.000000000 +0200 @@ -32,13 +32,24 @@ /* SA3250HD IDs */ /* WARNING: Please update firewiredevice.cpp when adding to this list. */ -#define SA_VENDOR_ID1 0x000011e6 -#define SA_VENDOR_ID2 0x000014f8 -#define SA_VENDOR_ID3 0x00001692 -#define SA_VENDOR_ID4 0x00001947 -#define SA_VENDOR_ID5 0x00000f21 -#define SA_VENDOR_ID6 0x00001ac3 -#define SA_VENDOR_ID7 0x00000a73 + +#define SA_VENDOR_ID1 0x00000a73 +#define SA_VENDOR_ID2 0x00000f21 +#define SA_VENDOR_ID3 0x000011e6 +#define SA_VENDOR_ID4 0x000014f8 +#define SA_VENDOR_ID5 0x00001692 +#define SA_VENDOR_ID6 0x00001868 +#define SA_VENDOR_ID7 0x00001947 +#define SA_VENDOR_ID8 0x00001ac3 +#define SA_VENDOR_ID9 0x00001bd7 +#define SA_VENDOR_ID10 0x00001cea +#define SA_VENDOR_ID11 0x00001e6b +#define SA_VENDOR_ID12 0x000021be +#define SA_VENDOR_ID13 0x0000223a +#define SA_VENDOR_ID14 0x000022ce +#define SA_VENDOR_ID15 0x000023be +#define SA_VENDOR_ID16 0x0000252e + #define SA3250HD_MODEL_ID1 0x00000be0 #define SA4200HD_MODEL_ID1 0x00001072 #define SA4250HDC_MODEL_ID1 0x000010cc @@ -130,13 +141,22 @@ i, dir.vendor_id, dir.model_id); /* WARNING: Please update firewiredevice.cpp when adding to this list. */ - if (((dir.vendor_id == SA_VENDOR_ID1) || - (dir.vendor_id == SA_VENDOR_ID2) || - (dir.vendor_id == SA_VENDOR_ID3) || - (dir.vendor_id == SA_VENDOR_ID4) || - (dir.vendor_id == SA_VENDOR_ID5) || - (dir.vendor_id == SA_VENDOR_ID6) || - (dir.vendor_id == SA_VENDOR_ID7)) && + if (((dir.vendor_id == SA_VENDOR_ID1) || + (dir.vendor_id == SA_VENDOR_ID2) || + (dir.vendor_id == SA_VENDOR_ID3) || + (dir.vendor_id == SA_VENDOR_ID4) || + (dir.vendor_id == SA_VENDOR_ID5) || + (dir.vendor_id == SA_VENDOR_ID6) || + (dir.vendor_id == SA_VENDOR_ID7) || + (dir.vendor_id == SA_VENDOR_ID8) || + (dir.vendor_id == SA_VENDOR_ID9) || + (dir.vendor_id == SA_VENDOR_ID10) || + (dir.vendor_id == SA_VENDOR_ID11) || + (dir.vendor_id == SA_VENDOR_ID12) || + (dir.vendor_id == SA_VENDOR_ID13) || + (dir.vendor_id == SA_VENDOR_ID14) || + (dir.vendor_id == SA_VENDOR_ID15) || + (dir.vendor_id == SA_VENDOR_ID16)) && ((dir.model_id == SA3250HD_MODEL_ID1) || (dir.model_id == SA4200HD_MODEL_ID1) || (dir.model_id == SA4250HDC_MODEL_ID1))) diff -uNr mythtv-0.21/contrib/configfiles/lircrc.native.example.mceusb2 mythtv/contrib/configfiles/lircrc.native.example.mceusb2 --- mythtv-0.21/contrib/configfiles/lircrc.native.example.mceusb2 2006-06-12 07:18:38.000000000 +0200 +++ mythtv/contrib/configfiles/lircrc.native.example.mceusb2 2006-06-12 07:18:38.000000000 +0200 @@ -2,7 +2,7 @@ # lircrc config file for the Microsoft Media Center Edition Remote, model 1039 # # @url $URL$ -# @date $Date: 2006-06-12 05:18:38 +0000 (Mon, 12 Jun 2006) $ +# @date $Date: 2006-06-12 07:18:38 +0200 (Mo, 12. Jun 2006) $ # @version $Revision: 10187 $ # @author $Author: xris $ # diff -uNr mythtv-0.21/contrib/icons/master_iconmap/channel_icons.pl mythtv/contrib/icons/master_iconmap/channel_icons.pl --- mythtv-0.21/contrib/icons/master_iconmap/channel_icons.pl 2007-03-23 06:38:00.000000000 +0100 +++ mythtv/contrib/icons/master_iconmap/channel_icons.pl 2007-03-23 06:38:00.000000000 +0100 @@ -5,8 +5,8 @@ # Also does searches for artwork URLs based on callsign or xmltvid, or displays # the master iconmap xml file from services.mythtv.org. # -# @url $URL: http://svn.mythtv.org/svn/tags/release-0-21/mythtv/contrib/icons/master_iconmap/channel_icons.pl $ -# @date $Date: 2007-03-23 05:38:00 +0000 (Fri, 23 Mar 2007) $ +# @url $URL: http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/contrib/icons/master_iconmap/channel_icons.pl $ +# @date $Date: 2007-03-23 06:38:00 +0100 (Fr, 23. Mär 2007) $ # @version $Revision: 13114 $ # @author $Author: xris $ # @copyright MythTV diff -uNr mythtv-0.21/contrib/mythrename.pl mythtv/contrib/mythrename.pl --- mythtv-0.21/contrib/mythrename.pl 2008-02-17 06:02:51.000000000 +0100 +++ mythtv/contrib/mythrename.pl 2008-02-17 06:02:51.000000000 +0100 @@ -7,7 +7,7 @@ # the mythtv recording directory from the database (code from nuvexport). # # @url $URL$ -# @date $Date: 2008-02-17 05:02:51 +0000 (Sun, 17 Feb 2008) $ +# @date $Date: 2008-02-17 06:02:51 +0100 (So, 17. Feb 2008) $ # @version $Revision: 16112 $ # @author $Author: xris $ # @license GPL diff -uNr mythtv-0.21/contrib/optimize_mythdb.pl mythtv/contrib/optimize_mythdb.pl --- mythtv-0.21/contrib/optimize_mythdb.pl 2007-08-04 11:25:32.000000000 +0200 +++ mythtv/contrib/optimize_mythdb.pl 2007-08-04 11:25:32.000000000 +0200 @@ -4,7 +4,7 @@ # finds. Suggested use is to cron it to run once per day. # # @url $URL$ -# @date $Date: 2007-08-04 09:25:32 +0000 (Sat, 04 Aug 2007) $ +# @date $Date: 2007-08-04 11:25:32 +0200 (Sa, 04. Aug 2007) $ # @version $Revision: 14140 $ # @author $Author: xris $ # @license GPL diff -uNr mythtv-0.21/contrib/OSX/osx-packager.pl mythtv/contrib/OSX/osx-packager.pl --- mythtv-0.21/contrib/OSX/osx-packager.pl 2008-02-26 04:18:10.000000000 +0100 +++ mythtv/contrib/OSX/osx-packager.pl 2009-05-07 01:39:26.000000000 +0200 @@ -4,10 +4,10 @@ ### osx-packager.pl ### ### = revision -### $Id: osx-packager.pl 16258 2008-02-26 03:18:10Z nigel $ +### $Id: osx-packager.pl 20497 2009-05-06 23:39:26Z nigel $ ### ### = location -### http://svn.mythtv.org/svn/trunk/mythtv/contrib/OSX/osx-packager.pl +### http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/contrib/OSX/osx-packager.pl ### ### = description ### Tool for automating frontend builds on Mac OS X. @@ -77,6 +77,7 @@ our %depend_order = ( 'mythtv' => [ + 'faad2', 'freetype', 'lame', 'mysqlclient', @@ -111,7 +112,7 @@ 'url' => 'http://subversion.tigris.org/downloads/subversion-1.4.3.tar.bz2', 'pre-conf' - => 'tar -xjf ../subversion-deps-1.4.3.tar.bz2', + => 'tar -xjf ../subversion-deps-1.4.3.tar.bz2 -C ..', 'conf' => [ '--disable-keychain', # Workaround a 10.3 build problem @@ -122,15 +123,17 @@ #=> 'yes' }, - 'freetype' - => + 'faad2' => + { + 'url' => "$sourceforge/sourceforge/faac/faad2-2.7.tar.gz", + }, + + 'freetype' => { - 'url' - => "$sourceforge/sourceforge/freetype/freetype-2.1.10.tar.gz", + 'url' => "$sourceforge/sourceforge/freetype/freetype-2.1.10.tar.gz", }, - 'lame' - => + 'lame' => { 'url' => "$sourceforge/sourceforge/lame/lame-3.96.1.tar.gz", @@ -180,7 +183,7 @@ => { 'url' - => 'http://mysql.osuosl.org/Downloads/MySQL-4.1/mysql-4.1.22.tar.gz', + => 'http://mirror.provenscaling.com/mysql/community/source/4.1/mysql-4.1.22.tar.gz', 'conf' => [ '--without-debug', @@ -195,35 +198,6 @@ 'qt-mt' => -# { -# 'url' -# => 'http://ftp.iasi.roedu.net/mirrors/ftp.trolltech.com/qt/sources/qt-mac-opensource-src-4.0.1.tar.gz', -# 'conf-cmd' -# => 'echo yes | ./configure', -# 'conf' -# => [ -# '-prefix', '"$PREFIX"', -# '-system-zlib', -# '-fast', -# '-qt-sql-mysql', -# '-qt-libpng', -# '-qt-libjpeg', -# '-qt-gif', -# '-platform macx-g++', -# '-no-tablet', -# '-I"$PREFIX/include/mysql"', -# '-L"$PREFIX/lib/mysql"', -# ], -# 'post-conf' -# => 'echo "QMAKE_LFLAGS_SHLIB += -single_module" >> src/qt.pro', -# 'make' -# => [ -# 'sub-src', -# 'qmake-install', -# 'moc-install', -# 'src-install' -# ], -# }, { 'url' => 'http://ftp.iasi.roedu.net/mirrors/ftp.trolltech.com/qt/source/qt-mac-free-3.3.8.tar.gz', @@ -367,11 +341,8 @@ 'exif' => { - 'url' => "$sourceforge/sourceforge/libexif/libexif-0.6.13.tar.bz2", - 'conf' => [ '--disable-nls' ], - 'post-conf' => 'echo "install-apidocs: -install-apidocs-internals: -" >> doc/Makefile.in' + 'url' => "$sourceforge/sourceforge/libexif/libexif-0.6.17.tar.bz2", + 'conf' => [ '--disable-docs' ] } ); @@ -536,6 +507,15 @@ die; } +if ( ! $OPT{'svnbranch'} ) +{ + &Complain(<<END); +This script can probably only build branch release-0-21-fixes. +To build SVN HEAD, please try the latest version instead. e.g. +http://svn.mythtv.org/svn/trunk/packaging/OSX/build/osx-packager.pl +END +} + our $WORKDIR = "$SCRIPTDIR/.osx-packager"; mkdir $WORKDIR; @@ -555,6 +535,8 @@ our $SRCDIR = "$WORKDIR/src"; mkdir $SRCDIR; +our $SVNDIR = "$SRCDIR/myth-svn"; + # configure mythplugins, and mythtv, etc our %conf = ( 'mythplugins' @@ -577,6 +559,8 @@ 'mythtv' => [ '--prefix=' . $PREFIX, + '--runtime-prefix=../Resources', + '--enable-libfaad', # To "cross compile" something for a lesser Mac: #'--tune=G3', #'--disable-altivec', @@ -633,7 +617,8 @@ $cpus =~ s/.*, (\d+) processors$/$1/; if ( $cpus gt 1 ) { - &Verbose("Using $cpus parallel CPUs"); + &Verbose("Using", $cpus+1, "jobs on $cpus parallel CPUs"); + ++$cpus; $parallel_make_flags = "-j$cpus"; } @@ -646,7 +631,11 @@ &Syscall([ '/bin/rm', '-f', '-r', '$PREFIX/lib/libmyth*' ]); &Syscall([ '/bin/rm', '-f', '-r', '$PREFIX/lib/mythtv' ]); &Syscall([ '/bin/rm', '-f', '-r', '$PREFIX/share/mythtv' ]); - &Syscall([ '/bin/rm', '-f', '-r', $SRCDIR ]); + &Syscall([ 'find', $SVNDIR, '-name', '*.o', '-delete' ]); + &Syscall([ 'find', $SVNDIR, '-name', '*.a', '-delete' ]); + &Syscall([ 'find', $SVNDIR, '-name', '*.dylib', '-delete' ]); + &Syscall([ 'find', $SVNDIR, '-name', '*.orig', '-delete' ]); + &Syscall([ 'find', $SVNDIR, '-name', '*.rej', '-delete' ]); exit; } @@ -668,6 +657,21 @@ ### Third party packages my (@build_depends, %seen_depends); my @comps = ('mythtv', @components); + +# Deal with user-supplied skip arguments +if ( $OPT{'mythtvskip'} ) +{ @comps = grep(!m/mythtv/, @comps) } +if ( $OPT{'pluginskip'} ) +{ @comps = grep(!m/mythplugins/, @comps) } +if ( $OPT{'themeskip'} ) +{ @comps = grep(!m/myththemes/, @comps) } + +if ( ! @comps ) +{ + &Complain("Nothing to build! Too many ...skip arguments?"); + exit; +} + &Verbose("Including components:", @comps); # If no SubVersion in path, and we are checking something out, build SVN: @@ -705,7 +709,7 @@ unless (-e $filename) { &Verbose("Downloading $sw"); - unless (&Syscall([ '/usr/bin/curl', '-L', $url, '>', $filename ], + unless (&Syscall([ '/usr/bin/curl', '-f', '-L', $url, '>', $filename ], 'munge' => 1)) { &Syscall([ '/bin/rm', $filename ]) if (-e $filename); @@ -847,8 +851,7 @@ } } -my $svndir = "$SRCDIR/myth-svn"; -mkdir $svndir; +mkdir $SVNDIR; # Deal with Subversion branches, revisions and tags: my $svnrepository = 'http://svn.mythtv.org/svn/'; @@ -898,34 +901,20 @@ if (! $OPT{'nohead'}) { # Empty subdirectory 'config' sometimes causes checkout problems - &Syscall(['rm', '-fr', $svndir . '/mythtv/config']); + &Syscall(['rm', '-fr', $SVNDIR . '/mythtv/config']); Verbose("Checking out source code"); &Syscall([ $svn, 'co', @svnrevision, - map($svnrepository . $_, @comps), $svndir ]) or die; + map($svnrepository . $_, @comps), $SVNDIR ]) or die; } else { - &Syscall("mkdir -p $svndir/mythtv/config") -} - -# Deal with user-supplied skip arguments -if ( $OPT{'mythtvskip'} ) -{ @comps = grep(!m/mythtv/, @comps) } -if ( $OPT{'pluginskip'} ) -{ @comps = grep(!m/mythplugins/, @comps) } -if ( $OPT{'themeskip'} ) -{ @comps = grep(!m/myththemes/, @comps) } - -if ( ! @comps ) -{ - &Complain("Nothing to build! Too many ...skip arguments?"); - exit; + &Syscall("mkdir -p $SVNDIR/mythtv/config") } # Build MythTV and any plugins foreach my $comp (@comps) { - my $compdir = "$svndir/$comp/" ; + my $compdir = "$SVNDIR/$comp/" ; chdir $compdir; @@ -1037,10 +1026,18 @@ $VERS .= '.' . $OPT{'version'} if $OPT{'version'}; ### Program which creates bundles: -our @bundler = "$svndir/mythtv/contrib/OSX/osx-bundler.pl"; +our @bundler = "$SVNDIR/mythtv/contrib/OSX/osx-bundler.pl"; if ( $OPT{'verbose'} ) { push @bundler, '--verbose' } + +### Framework that has a screwed up link dependency path +my $AVCfw = '/Developer/FireWireSDK*/Examples/' . + 'Framework/AVCVideoServices.framework'; +my @AVCfw = split / /, `ls -d $AVCfw`; +$AVCfw = pop @AVCfw; +chop $AVCfw; + ### Create each package. ### Note that this is a bit of a waste of disk space, ### because there are now multiple copies of each library. @@ -1060,7 +1057,7 @@ # Get a fresh copy of the binary &Verbose("Building self-contained $target"); &Syscall([ 'rm', '-fr', $finalTarget ]) or die; - &Syscall([ 'cp', "$svndir/mythtv/programs/$builtTarget/$builtTarget", + &Syscall([ 'cp', "$SVNDIR/mythtv/programs/$builtTarget/$builtTarget", "$SCRIPTDIR/$target" ]) or die; # Convert it to a bundled .app @@ -1068,10 +1065,12 @@ "$PREFIX/lib/", "$PREFIX/lib/mysql" ]) or die; - # Remove copy of binary unlink "$SCRIPTDIR/$target" or die; + if ( $AVCfw ) + { &RecursiveCopy($AVCfw, "$finalTarget/Contents/Frameworks") } + if ( $target eq "MythFrontend" or $target =~ m/^MythTV/ ) { my $res = "$finalTarget/Contents/Resources"; @@ -1088,8 +1087,12 @@ foreach my $lib ( glob "$libs/mythtv/*/*" ) { &Syscall([ @bundler, $lib ]) or die } + # Allow Finder's 'Get Info' to manage plugin list: + &Syscall([ 'mv', $plug, "$finalTarget/Contents/Plugins" ]) or die; + &Syscall([ 'ln', '-s', "../../../Plugins", $plug ]) or die; + # The icon - &Syscall([ 'cp', "$svndir/mythtv/programs/mythfrontend/mythfrontend.icns", + &Syscall([ 'cp', "$SVNDIR/mythtv/programs/mythfrontend/mythfrontend.icns", "$res/application.icns" ]) or die; &Syscall([ '/Developer/Tools/SetFile', '-a', 'C', $finalTarget ]) or die; } @@ -1179,7 +1182,7 @@ my ($src, $dst) = @_; # First copy absolutely everything - &Syscall([ '/bin/cp', '-R', "$src", "$dst"]) or die; + &Syscall([ '/bin/cp', '-pR', "$src", "$dst"]) or die; # Then strip out any .svn directories my @files = map { chomp $_; $_ } `find $dst -name .svn`; @@ -1197,7 +1200,7 @@ } ###################################### -## CleanMakefiles removes every Makefile +## CleanMakefiles removes every generated Makefile ## from our MythTV build that contains PREFIX. ## Necessary when we change the ## PREFIX variable. @@ -1207,7 +1210,7 @@ { &Verbose("Cleaning MythTV makefiles containing PREFIX"); &Syscall([ 'find', '.', '-name', 'Makefile', '-exec', - 'egrep', '-q', 'PREFIX', '{}', ';', '-delete' ]) or die; + 'egrep', '-q', 'qmake.*PREFIX', '{}', ';', '-delete' ]) or die; } # end CleanMakefiles diff -uNr mythtv-0.21/contrib/Win32/build/mythtvsetup.iss mythtv/contrib/Win32/build/mythtvsetup.iss --- mythtv-0.21/contrib/Win32/build/mythtvsetup.iss 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/contrib/Win32/build/mythtvsetup.iss 2008-04-24 05:07:09.000000000 +0200 @@ -0,0 +1,493 @@ +; Script generated by the Inno Setup Script Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! +; =file +; mythtv.iss +; +; =description +; InnoSetup setup file for win32 installation of mythtv +; For now, simple *.* copy of all source files to destination computer +; and a few cmd to launch front and backend +; =revision +; +; =author +; Arnon + +; TODO +; - More selective copy of sources, especially share +; - Allow selective full/remote/local installation +; - Add mqsql checks and configuration +; - If user selects different app or appdata paths, add env variables + +;Uncomment next line to test iss package- setup will not include any files +;#define TESTING + +; Version information is generated by MythInstaller.bat +#ifndef TESTING +#include <versioninfo.iss> +#endif + +#ifdef TESTING +#define MyAppName "MythTV 0.21" +#define MyAppVerName "MythtTV 0.21" +#define MyAppPublisher "www.mythtv.org" +#define MyAppURL "www.mythtv.org" +#define appdata "C:\Program Files\Mythtv" +#endif + +[Setup] +AppName={#MyAppName} +AppVerName={#MyAppVerName} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={pf}\mythtv +DisableDirPage=yes +DefaultGroupName={#MyAppName} +DisableProgramGroupPage=yes +OutputDir=c:\mythtv\setup +OutputBaseFilename=MythTvSetup +Compression=lzma +SolidCompression=yes +AppModifyPath="{app}\UninsHs.exe" /m0=AppName + + +[Languages] +Name: english; MessagesFile: compiler:Default.isl + +[Tasks] +;Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked + +[Files] +; File list is generated by MythInstaller.bat +Source: isxdl.dll; Flags: dontcopy +Source: WizModernSmallImage-IS.bmp; Flags: dontcopy +Source: mysql.gif; Flags: dontcopy +Source: UninsHs.exe; DestDir: {app}; Flags: restartreplace +Source: configuremysql.vbs; DestDir: {app} +#ifndef TESTING +#include <files.iss> +#endif + +[Icons] +Name: {group}\Myth Frontend; Filename: {app}\mythfrontend.exe; WorkingDir: {app} +Name: {group}\Myth Backend; Filename: {app}\mythbackend.exe; WorkingDir: {app} +Name: {group}\Setup; Filename: {app}\mythtv-setup.exe; WorkingDir: {app} +Name: {group}\Readme; Filename: {app}\readme.txt; WorkingDir: {app} +Name: {group}\Uninstall {#MyAppName}; Filename: {app}\UninsHs.exe; Parameters: /u0={#MyAppName} +Name: {group}\Utilities\MythCommFlag; Filename: {app}\mythcommflag.exe; WorkingDir: {app} +Name: {group}\Utilities\MythFillDatabase; Filename: {app}\MythFillDatabase.exe; WorkingDir: {app} +Name: {group}\Utilities\Mythtvosd; Filename: {app}\Mythtvosd.exe; WorkingDir: {app} +Name: {group}\Utilities\MythWelcome; Filename: {app}\MythWelcome.exe; WorkingDir: {app} + +[Dirs] +Name: {app}\sqldrivers +Name: {app}\share +Name: {app}\share\mythtv +Name: {app}\share\mythtv\themes +Name: {app}\share\mythtv\mythweather +Name: {app}\share\mythtv\i18n +Name: {app}\lib +Name: {app}\lib\mythtv +Name: {app}\lib\mythtv\plugins +Name: {app}\lib\mythtv\filters +Name: {localappdata}\mythtv +[INI] + +Filename: {userappdata}\mythtv\mysql.txt; Section: #; Key: DBHostName; String: {code:GetUser|IPAddress} +Filename: {userappdata}\mythtv\mysql.txt; Section: #; Key: DBHostPing; String: {code:GetUser|Ping} +Filename: {userappdata}\mythtv\mysql.txt; Section: #; Key: DBUserName; String: {code:GetUser|DBUsername} +Filename: {userappdata}\mythtv\mysql.txt; Section: #; Key: DBPassword; String: {code:GetUser|DBPassword} +Filename: {userappdata}\mythtv\mysql.txt; Section: #; Key: DBName; String: mythconverg +Filename: {userappdata}\mythtv\mysql.txt; Section: #; Key: DBType; String: QMYSQL3 +Filename: {userappdata}\mythtv\mysql.txt; Section: #; Key: LocalHostName; String: {computername} + +[Run] +Filename: {sys}\cscript.exe; Parameters: " //H:CScript {app}\configuremysql.vbs"; WorkingDir: {app}; Flags: shellexec runascurrentuser; Tasks: ; Languages: ; Check: ConfigureMySQL +Filename: {sys}\msiexec.exe; Parameters: /x {tmp}\mysql-essential-5.0.45-win32.msi /quiet INSTALLLEVEL=2; Description: Installing MySQL; Flags: skipifdoesntexist; Check: InstallMySQL +Filename: {sys}\notepad.exe; Parameters: {app}\readme.txt; WorkingDir: {app}; Flags: shellexec runascurrentuser; Tasks: ; Languages: +Filename: {app}\UninsHs.exe; Parameters: /r0=AppName,{language},{srcexe}; Flags: runminimized + +[InstallDelete] +Name: {app}\package_flag; Type: files + +Name: {app}\package_flag; Type: files +Name: {app}\lib; Type: filesandordirs +Name: {app}\mythtv; Type: filesandordirs +Name: {app}\share; Type: filesandordirs +Name: {app}\sqldrivers; Type: filesandordirs + +[Code] +var + LocalRemotePage: TInputOptionWizardPage; + ConfigureSQL: TInputOptionWizardPage; + SQLPage: TInputOptionWizardPage; + RemoteSQLPage: TInputQueryWizardPage; + BackendPage: TInputQueryWizardPage; + DownloadMySqlPage: TWizardPage; + MySQLPathRead, bSQLDetected: Boolean; + MySQLPath: String; + MySQLVersion: String; + FilesDownloaded: Boolean; + DownloadMySqlCheckBox: TCheckBox; + + +procedure isxdl_AddFile(URL, Filename: PChar); +external 'isxdl_AddFile@files:isxdl.dll stdcall'; +function isxdl_DownloadFiles(hWnd: Integer): Integer; +external 'isxdl_DownloadFiles@files:isxdl.dll stdcall'; +function isxdl_SetOption(Option, Value: PChar): Integer; +external 'isxdl_SetOption@files:isxdl.dll stdcall'; + +function GetModuleHandle(lpModuleName: LongInt): LongInt; +external 'GetModuleHandleA@kernel32.dll stdcall'; +function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt; +external 'ExtractIconA@shell32.dll stdcall'; +function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur: LongInt; hbrFlickerFreeDraw, diFlags: LongInt): LongInt; +external 'DrawIconEx@user32.dll stdcall'; +function DestroyIcon(hIcon: LongInt): LongInt; +external 'DestroyIcon@user32.dll stdcall'; + +const + DI_NORMAL = 3; + +// ------------------------------------------------------------------------------------------ +// Helper Functions +// +// ------------------------------------------------------------------------------------------ + +// MySqlInstalled - determines if MySql is already installed +// Returns True or False +function MySqlInstalled: Boolean; +var + MySqlPathKeyName, MySqlPathValueName, MySqlVersionValueName: String; +begin + if not MySQLPathRead then begin + MySqlPathKeyName := 'SOFTWARE\MySQL AB\MySQL Server 5.0'; + Result := RegKeyExists(HKLM, MySqlPathKeyName); + end; +end; + +// InstallMySQL - Should installer install MySQL (True or False) +function InstallMySQL: Boolean; +begin + Result := DownloadMySqlCheckBox.Checked and FilesDownloaded; +end; + +// FrontendOnly - did user select Local installation +function FrontendOnly: Boolean; +begin + if LocalRemotePage.SelectedValueIndex =0 then + Result := true + else + Result := false; +end; + +// ConfigureMySQL - Should installer configure MySQL +function ConfigureMySQL: Boolean; +begin + Result := false + + if DownloadMySqlCheckBox.Checked and FilesDownloaded and (ConfigureSQL.SelectedValueIndex =0) then + Result := true; + if MySqlInstalled and (ConfigureSQL.SelectedValueIndex =0) then + Result := true; +end; + +// DownloadFile - function to download MySQL +function DownloadFiles(DownloadSQL: Boolean): Boolean; +var + hWnd: Integer; + URL, FileName: String; +begin + isxdl_SetOption('label', 'Downloading extra files'); + isxdl_SetOption('description', 'Please wait while Setup is downloading extra files to your computer.'); + + try + FileName := ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'); + if not FileExists(FileName) then + ExtractTemporaryFile(ExtractFileName(FileName)); + isxdl_SetOption('smallwizardimage', FileName); + except + end; + + //turn off isxdl resume so it won't leave partially downloaded files behind + //resuming wouldn't help anyway since we're going to download to {tmp} + isxdl_SetOption('resume', 'false'); + + hWnd := StrToInt(ExpandConstant('{wizardhwnd}')); + + if DownloadSQL then begin + URL := 'http://mirror.services.wisc.edu/mysql/Downloads/MySQL-5.0/mysql-essential-5.0.45-win32.msi'; + FileName := ExpandConstant('{tmp}\mysql-essential-5.0.45-win32.msi'); + isxdl_AddFile(URL, FileName); + end; + + + if isxdl_DownloadFiles(hWnd) <> 0 then + FilesDownloaded := True + else + SuppressibleMsgBox('Setup could not download the extra files. Try again later or download and install the extra files manually.' + #13#13 + 'Setup will now continue installing normally.', mbError, mb_Ok, idOk); + + Result := True; +end; + + +// GetUser - Function used by installer to extract the value to write into mysql.txt +function GetUser(Param: String): String; +begin + // Return a user value + if Param = 'IPAddress' then begin + // If user selected Full Installation - local ip address + if LocalRemotePage.SelectedValueIndex = 0 then + Result := '127.0.0.1' + else + Result := RemoteSQLPage.Values[0]; + end else if Param = 'Ping' then begin + // If user selected Full Installation - no ping needed + if LocalRemotePAge.SelectedValueIndex = 0 then + Result := 'no' + else + Result := 'yes'; + end else if Param = 'DBUsername' then + Result := RemoteSQLPage.Values[1] + else if Param = 'DBPassword' then + Result := RemoteSQLPage.Values[2] + else if Param = 'Hostname' then + Result := RemoteSQLPage.Values[3] +end; +// ------------------------------------------------------------------------------------------ +// Dialog Box Functions +// +// ------------------------------------------------------------------------------------------ + +function CreateCustomOptionPage(AAfterId: Integer; ACaption, ASubCaption, AIconFileName, ALabel1Caption, ALabel2Caption, + ACheckCaption: String; var CheckBox: TCheckBox): TWizardPage; +var + Page: TWizardPage; + Rect: TRect; + hIcon: LongInt; + Label1, Label2: TNewStaticText; +begin + Page := CreateCustomPage(AAfterID, ACaption, ASubCaption); + + try + AIconFileName := ExpandConstant('{tmp}\' + AIconFileName); + if not FileExists(AIconFileName) then + ExtractTemporaryFile(ExtractFileName(AIconFileName)); + + Rect.Left := 0; + Rect.Top := 0; + Rect.Right := 32; + Rect.Bottom := 32; + + hIcon := ExtractIcon(GetModuleHandle(0), AIconFileName, 0); + try + with TBitmapImage.Create(Page) do begin + with Bitmap do begin + Width := 32; + Height := 32; + Canvas.Brush.Color := WizardForm.Color; + Canvas.FillRect(Rect); + DrawIconEx(Canvas.Handle, 0, 0, hIcon, 32, 32, 0, 0, DI_NORMAL); + end; + Parent := Page.Surface; + end; + finally + DestroyIcon(hIcon); + end; + except + end; + + Label1 := TNewStaticText.Create(Page); + with Label1 do begin + AutoSize := False; + Left := WizardForm.SelectDirLabel.Left; + Width := Page.SurfaceWidth - Left; + WordWrap := True; + Caption := ALabel1Caption; + Parent := Page.Surface; + end; + WizardForm.AdjustLabelHeight(Label1); + + Label2 := TNewStaticText.Create(Page); + with Label2 do begin + Top := Label1.Top + Label1.Height + ScaleY(12); + Caption := ALabel2Caption; + Parent := Page.Surface; + end; + WizardForm.AdjustLabelHeight(Label2); + + CheckBox := TCheckBox.Create(Page); + with CheckBox do begin + Top := Label2.Top + Label2.Height + ScaleY(12); + Width := Page.SurfaceWidth; + Caption := ACheckCaption; + Parent := Page.Surface; + Checked := false; + end; + + Result := Page; +end; + +// CreateDownloadMYSQLPage - create a Custom Option Page to download MySQL +procedure CreateDownloadMYSQLPage; +var + Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption: String; +begin + Caption := 'MySQL'; + SubCaption1 := 'Would you like to download and install MySQL 5?'; + IconFileName := 'mysql.gif'; + Label1Caption := + 'MySQL Community Server is the worlds most popular open source database to the open source community' + + ' and is freely available under the open source GPL license. See http://www.mysql.com for more information.' + #13#10#13#10 + + 'MySQL is required for a full installation of MythTV.'; + Label2Caption := 'Select whether you would like to download and install MySQL, then click Next.'; + CheckCaption := '&Download and install MySQL'; + + DownloadMySqlPage := CreateCustomOptionPage(RemoteSQLPage.ID, Caption, SubCaption1, IconFileName, Label1Caption, Label2Caption, CheckCaption, DownloadMySqlCheckBox); +end; +// ------------------------------------------------------------------------------------------ +// Initialize Setup - set default parameters +// +// ------------------------------------------------------------------------------------------ +function InitializeSetup(): Boolean; +begin + MySQLPathRead := False; + Result := True; + bSQLDetected := False; + FilesDownloaded := False; +end; + + +procedure InitializeWizard; +begin + // Create the page objects + // First Page - find out if a Frontend or Full installation + LocalRemotePage := CreateInputOptionPage(wpWelcome, + 'Installation Mode', + '', + 'MythTv can be installed as a Frontend only, connecting to a remote MythTV backend, or a full installation, providing a combined frontend/backend system. Please specify the installation you want, and press Next.', + True, False); + LocalRemotePage.Add('Frontend installation only - requires a MythTV Backend on another machine'); + LocalRemotePage.Add('Full Installation - Combined frontend & backend - requires MySql installation'); + + // MySQL.ini parameters - If FrontEnd only + RemoteSQLPage := CreateInputQueryPage(LocalRemotePage.ID, + 'Database Information', 'Required information to connect to Backend system', + 'Please enter the database configuration for your Backend system, and press Next'); + RemoteSQLPage.Add('Backend IP Address or Hostname:', False); + RemoteSQLPage.Add('Backend Database Username:', False); + RemoteSQLPage.Add('Backend Database Password:', False); + RemoteSQLPage.Add('Frontend Hostname (this PC)', False); + + // If Full installation and download of MySQL needed - Create DownloadMySqlPage page + CreateDownloadMYSQLPage; + DownloadMySqlCheckBox.Checked := false; + + // If Full installation and configuration of MySQL for MythTV needed + ConfigureSQL := CreateInputOptionPage(DownloadMySqlPage.ID, + 'MySQL Configuration', 'Configure MySql for Mythtv', + 'You have MySQL installed. Do you want to configure MySQL for mythtv? You can answer no and configure it manually, or run configuremysql.vbs from the Mythtv directory after setup', + True, False); + ConfigureSQL.Add('Yes'); + ConfigureSQL.Add('No'); + + + // End Page Objects + // Set default values, using settings that were stored last time if possible } + case GetPreviousData('InstallationMode', '') of + 'frontend': LocalRemotePage.SelectedValueIndex := 0; + 'combined': LocalRemotePage.SelectedValueIndex := 1; + else + LocalRemotePage.SelectedValueIndex := 0; + end; + + RemoteSQLPage.Values[0] := GetPreviousData('IPAddress', ''); + RemoteSQLPage.Values[1] := GetPreviousData('DBUsername', 'mythtv'); + RemoteSQLPage.Values[2] := GetPreviousData('DBPassword', 'mythtv'); + RemoteSQLPage.Values[3] := GetPreviousData('Hostname', ExpandConstant('{computername}')); + ConfigureSQL.SelectedValueIndex := StrToIntDef(GetPreviousData('ConfigureMySQL','1'),1); +end; + + + + +procedure RegisterPreviousData(PreviousDataKey: Integer); +var + InstallationMode: String; +begin + { Store the settings so we can restore them next time } + case LocalRemotePage.SelectedValueIndex of + 0: InstallationMode := 'frontend'; + 1: InstallationMode := 'combined'; + end; + SetPreviousData(PreviousDataKey, 'InstallationMode', InstallationMode); + SetPreviousData(PreviousDataKey, 'IPAddress', RemoteSQLPage.Values[0]); + SetPreviousData(PreviousDataKey, 'DBUsername', RemoteSQLPage.Values[1]); + SetPreviousData(PreviousDataKey, 'DBPassword', RemoteSQLPage.Values[2]); + SetPreviousData(PreviousDataKey, 'Hostname', RemoteSQLPage.Values[3]); + SetPreviousData(PreviousDataKey, 'DwldMySql', IntToStr(Ord(DownloadMySqlCheckBox.Checked))); + SetPreviousData(PreviousDataKey, 'ConfigureMySQL', IntToStr(Ord(ConfigureSQL.SelectedValueIndex))); + +end; + +// The wizard calls this event function to determine whether or not a particular page } +// (specified by PageID) should be shown at all. } +// If you return True, the page will be skipped; if you return False, the page may be shown. } +// Note: This event function isn't called for the wpWelcome, wpPreparing, and wpInstalling pages, } +// nor for pages that Setup has already determined should be skipped } +// (for example, wpSelectComponents in an install containing no components). } +function ShouldSkipPage(PageID: Integer): Boolean; +begin + // User has selected Full installation - skip page to fillout mysql.txt + if (PageID = RemoteSQLPage.ID) and (LocalRemotePage.SelectedValueIndex <> 0) then + Result := True + // User has selected Frontend only - skip question to download MySql + else if (PageID = DownloadMySqlPage.ID) and FrontendOnly then + Result := True + // User has selected Full installation but SQL is installed + else if (PageID = DownloadMySqlPage.ID) and MySqlInstalled then + Result := True + // User has selected Frontend only - skip MySql installation page + else if (PageID = DownloadMySqlPage.ID) and FrontendOnly then + Result := True +// User has selected Frontend only - Skip MySQL configuration page + else if (PageID = ConfigureSQL.ID) and FrontendOnly then + Result := True + else if (PageID = wpReady) and InstallMySQL and not FrontendOnly then + Result := DownloadFiles(DownloadMySqlCheckBox.Checked) + else + Result := False; +end; + +{Called when the user clicks the Next button.} +{If you return True, the wizard will move to the next page;} +{if you return False, it will remain on the current page (specified by CurPageID)} +{Used to validate entry on page} +function NextButtonClick(CurPageID: Integer): Boolean; +var + I: Integer; +begin + // User selected Frontend or Full installation - if Frontend only, nothing to validate + // If Full, lets find out of MySQL is installed - decision will decide what Screen to show + if CurPageID = LocalRemotePage.ID then begin + // If Full installation - find out status of MySQL Installation + Result := True; + end else if CurPageID = RemoteSQLPage.ID then begin + // User is prompted to fill out mysql.txt values for remote server + // Validate that fields are filled + if RemoteSQLPage.Values[0] = '' then begin + MsgBox('You must enter an IP Address or Hostname.', mbError, MB_OK); + Result := False; + end else if (RemoteSQLPage.Values[1] = '') then begin + MsgBox('You must enter a DB username and password.', mbError, MB_OK); + Result := False; + end else if (RemoteSQLPage.Values[2] = '') then begin + MsgBox('You must enter a DB username and password.', mbError, MB_OK); + Result := False; + end else + Result := True; + end else + Result := True; +end; diff -uNr mythtv-0.21/contrib/Win32/MythInstaller.bat mythtv/contrib/Win32/MythInstaller.bat --- mythtv-0.21/contrib/Win32/MythInstaller.bat 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/contrib/Win32/MythInstaller.bat 2008-06-02 05:00:06.000000000 +0200 @@ -0,0 +1,69 @@ +@rem = '--*-Perl-*-- +@rem +@rem Wrapper for bootstrapping Windows build and install. +@rem Checks for Perl, attempts to download latest win32-packager.pl, +@rem and then executes that with any supplied arguments. +@rem + +@echo off + +if "%OS%" == "Windows_NT" setlocal +set PERL5LIB= +set PERLLIB= +set PERL5OPT= +set PERLIO= +set PERL_UNICODE= +if "%OS%" == "Windows_NT" goto WinNT +perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9 +goto endofperl + +:WinNT +if not exist c:\perl\bin\perl.exe goto no_perl +@rem +@rem If we needed any non-standard Perl modules, this is how to install them: +@rem if NOT exist C:\Perl\site\lib\Config\inifiles.pm call c:\perl\bin\ppm.bat install Config-inifiles +@rem if errorlevel 1 echo You do not have Perl in your PATH. +@rem +perl -x -S %0 %* +if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl +if %errorlevel% == 9009 echo You do not have Perl in your PATH. +if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul +goto endofperl + +:no_perl +echo Could not find Perl in C:\Perl. +echo Please download ActivePerl from http://www.activestate.com/store +echo install it, and then run this script again. +sleep 1 +c:\windows\explorer http://www.activestate.com/store/activeperl/download +goto endofperl + +@rem '; +#!c:/perl/bin/perl.exe -w +use strict; +use LWP::UserAgent; +use IO::File; + +my $file = 'win32-packager.pl'; +my $url = "http://svn.mythtv.org/svn/trunk/mythtv/contrib/Win32/build/$file"; +my $proxy = ''; # or somehting like: 'http://enter.your.proxy.here:8080'; + +my $ua = LWP::UserAgent->new; +$ua->proxy(['http', 'ftp'], $proxy); +my $req = HTTP::Request->new(GET => $url); +my $res = $ua->request($req); + +if ($res->is_success) { + my $f = new IO::File "> $file" || die "Can't create $file: $!\n"; + $f->binmode(); + $f->print($res->content); + $f->close(); +} + +if ( ! -s $file ) { + die "Cannot download $url"; +} + +exec "c:/perl/bin/perl.exe -w $file @ARGV"; +__END__ +:endofperl diff -uNr mythtv-0.21/contrib/Win32/run/mythbackend.cmd mythtv/contrib/Win32/run/mythbackend.cmd --- mythtv-0.21/contrib/Win32/run/mythbackend.cmd 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/contrib/Win32/run/mythbackend.cmd 2008-04-24 05:07:09.000000000 +0200 @@ -0,0 +1,58 @@ +@Echo off +:: +:: Script to run mythbackend through gdb (easily?) +:: There is likely a more efficient way of doing this, +:: but we have to start somewhere. +:: +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: This script is used for gathering backtraces using gdb +Echo COMMENTS: See: http://www.mythtv.org/docs/mythtv-HOWTO-22.html#ss22.2 +Echo COMMENTS: See: http://www.mythtv.org/wiki/index.php/Windows_Port +Echo COMMENTS: -------------------------------------- +Echo. +:: +:gdbcommands +:: +:: Check for and Create if needed the .\gdbcommands.txt +:: +:: syntax taken from [ http://www.mythtv.org/docs/mythtv-HOWTO.html#toc22.2 ] +:: +if not exist ./gdbcommands.txt ( + echo handle SIGPIPE nostop noprint > .\gdbcommands.txt + echo handle SIG33 nostop noprint >> .\gdbcommands.txt + echo set logging on >> .\gdbcommands.txt + echo set pagination off >> .\gdbcommands.txt + echo set args -l myth.log --noupnp --nosched --nojobqueue --nohousekeeper --noautoexpire -v all >> .\gdbcommands.txt + echo run >> .\gdbcommands.txt + echo thread apply all bt full >> .\gdbcommands.txt + echo set logging off >> .\gdbcommands.txt ) +@Echo off + +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: Clearing old gdb.txt before running gdb again. +Echo COMMENTS: -------------------------------------- +Echo. +:: +:: add current data/time to gdb.txt +:: will this be a bad idea? who knows? =) +:: +date /t > .\gdb.txt +time /t >> .\gdb.txt + +:gdb +:: +:: gdb should be in the path. +:: +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: If you need to add any switches to mythbackend edit gdbcommands.txt +Echo COMMENTS: see: "mythbackend.exe --help" for options +Echo COMMENTS: -------------------------------------- +Echo. +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: Starting: gdb +Echo COMMENTS: -------------------------------------- +gdb .\mythbackend.exe -x .\gdbcommands.txt + +Echo. +Echo The backtrace can be found in .\gdb.txt +Echo. diff -uNr mythtv-0.21/contrib/Win32/run/mythfrontend.cmd mythtv/contrib/Win32/run/mythfrontend.cmd --- mythtv-0.21/contrib/Win32/run/mythfrontend.cmd 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/contrib/Win32/run/mythfrontend.cmd 2008-04-24 05:07:09.000000000 +0200 @@ -0,0 +1,57 @@ +@Echo off +:: +:: Script to run mythfrontend through gdb (easily?) +:: There is likely a more efficient way of doing this, +:: but we have to start somewhere. +:: +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: This script is used for gathering backtraces using gdb +Echo COMMENTS: See: http://www.mythtv.org/docs/mythtv-HOWTO-22.html#ss22.2 +Echo COMMENTS: See: http://www.mythtv.org/wiki/index.php/Windows_Port +Echo COMMENTS: -------------------------------------- +Echo. +:: +:gdbcommands +:: +:: Check for and Create if needed the .\gdbcommands.txt +:: +:: syntax taken from [ http://www.mythtv.org/docs/mythtv-HOWTO.html#toc22.2 ] +:: +if not exist ./gdbcommands.txt ( + echo handle SIGPIPE nostop noprint > .\gdbcommands.txt + echo handle SIG33 nostop noprint >> .\gdbcommands.txt + echo set logging on >> .\gdbcommands.txt + echo set pagination off >> .\gdbcommands.txt + echo set args -l myth.log -d -v all >> .\gdbcommands.txt + echo run >> .\gdbcommands.txt + echo thread apply all bt full >> .\gdbcommands.txt + echo set logging off >> .\gdbcommands.txt ) +@Echo off + +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: Clearing old gdb.txt before running gdb again. +Echo COMMENTS: -------------------------------------- +Echo. +:: +:: add current data/time to gdb.txt +:: will this be a bad idea? who knows? =) +:: +date /t > .\gdb.txt +time /t >> .\gdb.txt + +:gdb +:: +:: gdb should be in the path. +:: +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: If you need to add any switches to mythfrontend edit gdbcommands.txt +Echo COMMENTS: see: "mythfrontend.exe --help" for options +Echo COMMENTS: -------------------------------------- +Echo. +Echo COMMENTS: -------------------------------------- +Echo COMMENTS: Starting: gdb +Echo COMMENTS: -------------------------------------- +gdb .\mythfrontend.exe -x .\gdbcommands.txt +Echo. +Echo The backtrace can be found in .\gdb.txt +Echo. diff -uNr mythtv-0.21/contrib/Win32/win32-packager.pl mythtv/contrib/Win32/win32-packager.pl --- mythtv-0.21/contrib/Win32/win32-packager.pl 2008-02-26 04:18:10.000000000 +0100 +++ mythtv/contrib/Win32/win32-packager.pl 2008-06-12 05:09:18.000000000 +0200 @@ -11,7 +11,7 @@ ### originally based loosely on osx-packager.pl, but now is its own beast. ### ### =revision -### $Id: win32-packager.pl 16258 2008-02-26 03:18:10Z nigel $ +### $Id: win32-packager.pl 17459 2008-06-12 03:09:18Z nigel $ ### ### =author ### David Bussenschutt @@ -68,11 +68,13 @@ # it has NOT been tested much, and will with HIGH PROBABILITY fail somewhere. # TODO - Only $mingw is tested and most likely is safe to change. -# perl compatible paths (single forward slashes in DOS style): -my $msys = 'C:/MSys/1.0/'; # must end in slash, and use forward slashes / -my $sources = 'C:/msys/1.0/sources/'; # must end in slash, and use forward slashes / -my $mingw = 'C:/MinGW/'; # must end in slash, and use forward slashes / -my $mythtv = 'C:/mythtv/'; # this is where the entire SVN checkout lives so c:/mythtv/mythtv/ is the main codebase. # must end in slash, and use forward slashes / +# Perl compatible paths. DOS style, but forward slashes, and must end in slash: +my $msys = 'C:/MSys/1.0/'; +my $sources = 'C:/msys/1.0/sources/'; +my $mingw = 'C:/MinGW/'; +my $mythtv = 'C:/mythtv/'; # this is where the entire SVN checkout lives + # so c:/mythtv/mythtv/ is the main codebase. +my $build = 'C:/mythtv/build/'; # where 'make install' installs into # DOS executable CMD.exe versions of the paths (for when we shell to DOS mode): my $dosmsys = perl2dos($msys); @@ -80,11 +82,17 @@ my $dosmingw = perl2dos($mingw); my $dosmythtv = perl2dos($mythtv); -# unix/msys equivalent versions of the paths (for when we shell to MSYS/UNIX mode): -my $unixmsys = '/'; # msys root is always mounted here, irrespective of where DOS says it really is. -my $unixmingw = '/mingw/'; # mingw is always mounted here under unix, if you setup mingw right in msys, so we will usually just say /mingw in the code, not '.$unixmingw.' or similar (see /etc/fstab) -my $unixsources = perl2unix($sources); $unixsources =~ s#$unixmsys#/#i; #strip leading msys path, if there, it's unnecessary as it's mounted under / +# Unix/MSys equiv. versions of the paths (for when we shell to MSYS/UNIX mode): +my $unixmsys = '/'; # MSys root is always mounted here, + # irrespective of where DOS says it really is. +my $unixmingw = '/mingw/'; # MinGW is always mounted here under unix, + # if you setup mingw right in msys, + # so we will usually just say /mingw in the code, + # not '.$unixmingw.' or similar (see /etc/fstab) +my $unixsources = perl2unix($sources); +$unixsources =~ s#$unixmsys#/#i; #strip leading msys path, if there, it's unnecessary as it's mounted under / my $unixmythtv = perl2unix($mythtv); +my $unixbuild = perl2unix($build); #NOTE: ITS IMPORTANT that the PATHS use the correct SLASH-ing method for the type of action: @@ -520,7 +528,16 @@ [ grep => ['Makefile|MAKEFILE',$mythtv.'mythtv/Makefile'], shell => ['rm '.$unixmythtv.'mythtv/Makefile','nocheck'], comment => 'broken Makefile, delete it' ], # configure -[ file => $mythtv.'mythtv/Makefile', shell => ['source '.$unixmythtv.'qt_env.sh','cd '.$unixmythtv.'mythtv','./configure --prefix=/usr --disable-dbox2 --disable-hdhomerun --disable-dvb --disable-ivtv --disable-iptv --disable-joystick-menu --disable-xvmc-vld --disable-x11 --disable-xvmc --enable-directx --enable-memalign-hack --cpu=k8 --compile-type=debug'], comment => 'do we already have a Makefile for mythtv?' ], +[ file => $mythtv.'mythtv/Makefile', + shell => ['source '.$unixmythtv.'qt_env.sh', + 'cd '.$unixmythtv.'mythtv', + './configure --prefix='.$unixbuild.' --runtime-prefix=..'. + ' --disable-dbox2 --disable-hdhomerun'. + ' --disable-dvb --disable-ivtv --disable-iptv'. + ' --disable-joystick-menu --disable-xvmc-vld --disable-x11'. + ' --disable-xvmc --enable-directx'. + ' --enable-memalign-hack --cpu=k8 --compile-type=debug'], +comment => 'do we already have a Makefile for mythtv?' ], # make [ newer => [$mythtv.'mythtv/libs/libmyth/libmyth-0.21.dll',$mythtv.'mythtv/last_build.txt'], shell => ['rm '.$unixmythtv.'mythtv/libs/libmyth/libmyth-0.21.dll','source '.$unixmythtv.'qt_env.sh','cd '.$unixmythtv.'mythtv','make'], comment => 'libs/libmyth/libmyth-0.21.dll - redo make unless all these files exist, and are newer than the last_build.txt identifier' ], [ newer => [$mythtv.'mythtv/libs/libmythtv/libmythtv-0.21.dll',$mythtv.'mythtv/last_build.txt'], shell => ['rm '.$unixmythtv.'mythtv/libs/libmythtv/libmythtv-0.21.dll','source '.$unixmythtv.'qt_env.sh','cd '.$unixmythtv.'mythtv','make'], comment => 'libs/libmythtv/libmythtv-0.21.dll - redo make unless all these files exist, and are newer than the last_build.txt identifier' ], diff -uNr mythtv-0.21/docs/doxygen-architecture-document.cpp mythtv/docs/doxygen-architecture-document.cpp --- mythtv-0.21/docs/doxygen-architecture-document.cpp 2008-01-07 04:04:51.000000000 +0100 +++ mythtv/docs/doxygen-architecture-document.cpp 2008-06-12 05:09:18.000000000 +0200 @@ -163,7 +163,7 @@ <dt>osx-packager.pl <dd>Downloads and builds all dependencies, then the source, of %MythTV and all the official plugins, on Mac OS 10.3 thru 10.5 - <dt>win32-packager.pl <dd>Similar tool for Windows XP + <dt>win32-packager.pl <dd>Similar tool for Windows XP and Vista </dl> */ @@ -458,7 +458,7 @@ The custom protocol is an ASCII encoded length and command string. Command sequences can be easily sent to the backend using telnet. -<I>%e.g.</I> \verbatim telnet 127.0.0.1 5432 +<I>%e.g.</I> \verbatim telnet 127.0.0.1 6543 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.\endverbatim @@ -493,6 +493,70 @@ */ +/** \defgroup myth_startup Myth startup sequence +This line is filler that is ignored by Doxygen. + +Most MythTV programs follow a common sequence: +<ol> + <li>Process (parse) command-line arguments</li> + <li>Create a MythContext object, which stores paths for later location + of runtime assets (filters/fonts/plugins/themes/translations)</li> + <li>(optionally) Create a UPnP client or server</li> + <li>Initialise the MythContext, which:</li> + <ul> + <li>Tries to find a database on localhost, + or on the host specified in mysql.txt,</li> + <li>Tries to locate exactly one backend host via UPnP, + to find its database,</li> + <li>If possible, displays a list of all backends located via UPnP + for the user to choose from, or</li> + <li>Fails</li> + </ul> + <li>Create the main window/screen, display themed menus, <i>et c.</i></li> +</ol> +(examine program/*/main.cpp, and libs/libmyth/mythcontext.cpp, +for further detail). + +<p> + +The "runtime assets" mentioned above are stored in a number of well-known +locations. The following methods in MythContext allow programs and plugins +to access these assets: +<ol> + <li>GetInstallPrefix() returns the value of MCP's m_installprefix variable, + which is either the runtime env. var. $MYTHTVDIR or the compile-time var. + RUNPREFIX. If these are relative paths, it is initialised relative to the + binary location. The value is used thus: + <ul> + <li>GetInstallPrefix() + /share/mythtv/ = GetShareDir(), GetFontsDir()</li> + <li>GetInstallPrefix() + /share/mythtv/themes/ = GetThemesParentDir()</li> + <li>GetInstallPrefix() + /share/mythtv/i18n/ = GetTranslationsDir()</li> + <li>GetInstallPrefix() + /share/mythtv/mytharchive</li> + <li>GetInstallPrefix() + /share/mythtv/mytharchive/themes</li> + <li>GetInstallPrefix() + /share/mythtv/mytharchive/scripts</li> + <li>GetInstallPrefix() + /share/mythtv/mythflix/scripts</li> + <li>GetInstallPrefix() + /share/mythtv/mythnews</li> + <li>GetInstallPrefix() + /share/mythtv/mythvideo/scripts</li> + <li>GetInstallPrefix() + /share/mythtv/mythweather</li> + <li>GetInstallPrefix() + /share/mythtv/mythweather/scripts</li> + <li>GetInstallPrefix() + /bin/ignyte</li> + <li>GetInstallPrefix() + /bin/mythfilldatabase</li> + <li>GetInstallPrefix() + /bin/mtd</li> + <li>GetInstallPrefix() + /lib/mythtv/ = GetLibraryDir()</li> + <li>GetInstallPrefix() + /lib/mythtv/plugins/ = GetPluginsDir()</li> + <li>GetInstallPrefix() + /lib/mythtv/filters/ = GetFiltersDir()</li> + </ul></li> + + <li>GetConfDir() returns the value of the runtime env. var. $MYTHCONFDIR, + or $HOME/.mythtv.</li> + + <li>mysql.txt is loaded from GetShareDir(), GetInstallPrefix() + /etc/mythtv, + GetConfDir(), and the current directory. Later files override the values + from earlier ones.</li> +</ol> + + */ + /** \defgroup qobject_dangers QObject is dangerous for your health This line is filler that is ignored by Doxygen. diff -uNr mythtv-0.21/docs/doxygen-create-developer-docs.cfg mythtv/docs/doxygen-create-developer-docs.cfg --- mythtv-0.21/docs/doxygen-create-developer-docs.cfg 2008-01-09 03:59:45.000000000 +0100 +++ mythtv/docs/doxygen-create-developer-docs.cfg 2008-05-05 17:30:02.000000000 +0200 @@ -23,7 +23,7 @@ # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 0.20 +PROJECT_NUMBER = 0.21 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff -uNr mythtv-0.21/docs/index.html mythtv/docs/index.html --- mythtv-0.21/docs/index.html 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/index.html 2009-01-20 17:29:36.000000000 +0100 @@ -15,7 +15,7 @@ <H1>Installing and using MythTV</H1> <H2>Robert Kulagowski, -<A HREF="mailto:rkulagow@rocketmail.com">mailto:rkulagow@rocketmail.com</A></H2>2008-03-05, v0.21.00pre +<A HREF="mailto:rkulagow@rocketmail.com">mailto:rkulagow@rocketmail.com</A></H2>2009-01-20, v0.21.07 <HR> <EM>Initially, installation of MythTV seems like a huge task. There are lots of dependencies, and various distributions seem to do the same thing @@ -87,8 +87,9 @@ <LI><A NAME="toc8.1">8.1</A> <A HREF="mythtv-HOWTO-8.html#ss8.1">Gentoo</A> <LI><A NAME="toc8.2">8.2</A> <A HREF="mythtv-HOWTO-8.html#ss8.2">Obtaining and compiling lirc</A> <LI><A NAME="toc8.3">8.3</A> <A HREF="mythtv-HOWTO-8.html#ss8.3">Completing the lirc install </A> -<LI><A NAME="toc8.4">8.4</A> <A HREF="mythtv-HOWTO-8.html#ss8.4">Additional information for lirc</A> -<LI><A NAME="toc8.5">8.5</A> <A HREF="mythtv-HOWTO-8.html#ss8.5">Configuring lirc for use with an IR blaster</A> +<LI><A NAME="toc8.4">8.4</A> <A HREF="mythtv-HOWTO-8.html#ss8.4">Additional information for lirc - native mode</A> +<LI><A NAME="toc8.5">8.5</A> <A HREF="mythtv-HOWTO-8.html#ss8.5">Additional information for lirc - irxevent mode</A> +<LI><A NAME="toc8.6">8.6</A> <A HREF="mythtv-HOWTO-8.html#ss8.6">Configuring lirc for use with an IR blaster</A> </UL> <P> <H2><A NAME="toc9">9.</A> <A HREF="mythtv-HOWTO-9.html">Configuring MythTV. </A></H2> @@ -96,7 +97,7 @@ <UL> <LI><A NAME="toc9.1">9.1</A> <A HREF="mythtv-HOWTO-9.html#ss9.1">Configuring the Master backend system</A> <LI><A NAME="toc9.2">9.2</A> <A HREF="mythtv-HOWTO-9.html#ss9.2">Post-configuration</A> -<LI><A NAME="toc9.3">9.3</A> <A HREF="mythtv-HOWTO-9.html#ss9.3">Configuring a non-master backend </A> +<LI><A NAME="toc9.3">9.3</A> <A HREF="mythtv-HOWTO-9.html#ss9.3">Configuring a slave backend </A> <LI><A NAME="toc9.4">9.4</A> <A HREF="mythtv-HOWTO-9.html#ss9.4">Configuring and running mythfilldatabase</A> <LI><A NAME="toc9.5">9.5</A> <A HREF="mythtv-HOWTO-9.html#ss9.5">Grabbing channel icons for Schedules Direct users</A> </UL> diff -uNr mythtv-0.21/docs/mythtv-HOWTO-1.html mythtv/docs/mythtv-HOWTO-1.html --- mythtv-0.21/docs/mythtv-HOWTO-1.html 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-1.html 2008-06-04 22:27:03.000000000 +0200 @@ -97,14 +97,18 @@ <A HREF="http://mysettopbox.tv">http://mysettopbox.tv</A> if you'd like to install a custom version of Knoppix optimized for MythTV.</P> <P>See -<A HREF="http://linpvr.org">http://linpvr.org</A> if you'd like -to install MythTV onto a VIA Epia M machine.</P> +<A HREF="http://www.minimyth.org">http://www.minimyth.org</A> if you'd like +to install MythTV onto a diskless system.</P> <P>See <A HREF="http://bit.blkbk.com">http://bit.blkbk.com</A> if you'd -like to install MythTV on a Xbox.</P> +like to install MythTV on a Xbox. +<B>NOTE</B>: Site appears unmaintained.</P> <P>See <A HREF="http://wilsonet.com/mythtv/">http://wilsonet.com/mythtv/</A> for instructions tailored to RedHat's Fedora Core distribution.</P> +<P>See +<A HREF="http://www.mythbuntu.org">http://www.mythbuntu.org</A> if +you'd like to install a customized version of Ubuntu optimized for MythTV.</P> <P>There is a MythTV wiki at <A HREF="http://wiki.mythtv.org">http://wiki.mythtv.org</A>.</P> <P>If you are installing this version for Schedules Direct support, please see diff -uNr mythtv-0.21/docs/mythtv-HOWTO-22.html mythtv/docs/mythtv-HOWTO-22.html --- mythtv-0.21/docs/mythtv-HOWTO-22.html 2007-12-27 07:24:08.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-22.html 2008-10-27 20:56:52.000000000 +0100 @@ -111,6 +111,8 @@ handle SIG33 nostop noprint set logging on set pagination off +set breakpoint pending on +break qFatal set args -l myth.log -v record,channel,siparser run thread apply all bt full diff -uNr mythtv-0.21/docs/mythtv-HOWTO-23.html mythtv/docs/mythtv-HOWTO-23.html --- mythtv-0.21/docs/mythtv-HOWTO-23.html 2007-08-25 00:20:21.000000000 +0200 +++ mythtv/docs/mythtv-HOWTO-23.html 2009-01-01 21:23:06.000000000 +0100 @@ -1078,6 +1078,7 @@ <LI>v/V = VCT : ATSC only</LI> <LI>n/N = NIT : DVB only</LI> <LI>s/S = SDT : DVB only</LI> +<LI>c/C = Crypt : The channel is encrypted. If you have a CAM you should see a "C" after a few seconds.</LI> </UL> </P> <H2><A NAME="ss23.23">23.23</A> <A HREF="mythtv-HOWTO.html#toc23.23">What is the difference between the various Hauppauge PVR models?</A> @@ -1085,7 +1086,7 @@ <P>This is covered in the hardware section, and extensively covered on the Hauppauge website. ( -<A HREF="http://www.hauppauge.com/pages/compare_pvr.html">http://www.hauppauge.com/pages/compare_pvr.html</A>) Please check the +<A HREF="http://www.hauppauge.com/site/compare/compare_pvr.html">http://www.hauppauge.com/site/compare/compare_pvr.html</A>) Please check the Hauppauge website for the most accurate information.</P> <P>A PVR-150 comes in a number of versions: <UL> diff -uNr mythtv-0.21/docs/mythtv-HOWTO-3.html mythtv/docs/mythtv-HOWTO-3.html --- mythtv-0.21/docs/mythtv-HOWTO-3.html 2008-02-16 16:08:13.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-3.html 2008-10-27 20:56:52.000000000 +0100 @@ -235,6 +235,9 @@ CPU. (The PVR-350 can simultaneously be used as an output device.) Using the on-board MPEG-2 encoder greatly reduces the CPU requirements for encoding.</P> +<P>The ivtv driver was incorporated into the Linux kernel starting at v2.6.22.</P> +<P>There is a Beta driver for the HVR-1600 card at +<A HREF="http://www.ivtvdriver.org/index.php/Cx18">http://www.ivtvdriver.org/index.php/Cx18</A></P> <P><B>NOTE</B>: Motherboards with the Via chipset are notoriously bad with DMA and have caused numerous issues with ivtv, including hard locks. See the ivtv website @@ -277,9 +280,10 @@ <P>There are a number of HDTV cards with Linux drivers which are known to operate in the United States; a complete list of cards with DVB drivers can be found at -<A HREF="http://www.linuxtv.org/wiki/index.php/ATSC_devices">http://www.linuxtv.org/wiki/index.php/ATSC_devices</A> Some cards support -capture of unencrypted digital cable TV (utilizing QAM256), others will only -work with Over The Air signals captured with an antenna (with 8VSB).</P> +<A HREF="http://www.linuxtv.org/wiki/index.php/ATSC_Devices">http://www.linuxtv.org/wiki/index.php/ATSC_Devices</A> Some cards +support capture of unencrypted digital cable TV (utilizing QAM256), others +will only work with Over The Air (aka "OTA") signals captured with an +antenna (with 8VSB).</P> <P>Cards that have been reported to work include: <UL> <LI>pcHDTV HD-2000, Air2PC PCI rev 1-3 (8VSB only)</LI> @@ -336,8 +340,8 @@ <A HREF="http://www.plextor.com/english/support/LinuxSDK.htm">http://www.plextor.com/english/support/LinuxSDK.htm</A>. MythTV uses the Plextor to capture hardware encoded MPEG-4, so the host CPU requirements are low.</P> <P>Hauppauge WinTV-PVR-USB2 (driver available at -<A HREF="http://www.isely.net/pvrusb2/">http://www.isely.net/pvrusb2/</A>) emulates a PVR-x50 -card.</P> +<A HREF="http://www.isely.net/pvrusb2/">http://www.isely.net/pvrusb2/</A>) +emulates a PVR-x50 card.</P> <H3>IP Recorder (RTSP, RTS, UDP)</H3> @@ -360,13 +364,6 @@ <LI>Hauppauge WinTV-USB series</LI> <LI>Hauppauge WinTV-PVR-usb (model 602), or WinTV-PVR-PCI (model 880) cards (no driver - this is not the PVR-250/350 series of cards supported by the IvyTV driver)</LI> -<LI>Hauppauge HVR-1600. (no driver). <B>NOTE</B>: There have been -reports (2006-12 timeframe) that Hauppauge is putting the HVR-1600 inside of -the PVR-150 box; if you're purchasing a retail PVR-150, carefully examine -the packaging - there should be some indication that the hardware inside is -actually a HVR-1600 and not a PVR-150. Check the Supported Hardware ( -<A HREF="http://www.ivtvdriver.org/index.php/Supported_hardware">http://www.ivtvdriver.org/index.php/Supported_hardware</A>) page of the -ivtv driver for updated support information.</LI> <LI>ATI All-in-Wonder series</LI> </UL> </P> @@ -539,7 +536,7 @@ <IMG SRC="warning.png"> <CAPTION><B>NOTE</B>: you must have the MySQL database software installed on a system to store the master database. This does not necessarily mean that -MySQL must run on one of the MythTV boxes. The minimum MySQL version is 3.23.</CAPTION> +MySQL must run on one of the MythTV boxes. The minimum MySQL version is 5.0.</CAPTION> </FIGURE> </P> diff -uNr mythtv-0.21/docs/mythtv-HOWTO-5.html mythtv/docs/mythtv-HOWTO-5.html --- mythtv-0.21/docs/mythtv-HOWTO-5.html 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-5.html 2009-01-02 21:32:59.000000000 +0100 @@ -200,33 +200,48 @@ <H2><A NAME="ss5.4">5.4</A> <A HREF="mythtv-HOWTO.html#toc5.4">Manually building MythTV</A> </H2> -<P>If you are going to use <B>subversion</B>, execute the following -instructions to obtain the latest version of MythTV:</P> -<P> +<P><B>NOTE</B>: Unless you are reading this documentation on the day that a +new version of MythTV is released, it is highly encouraged that you use the +"-fixes" version of the software and not the source tarball.</P> +<P>To download the release version, execute: <BLOCKQUOTE><CODE> <PRE> -$ mkdir mythtv -$ svn co http://svn.mythtv.org/svn/trunk/ mythtv -$ cd mythtv +$ mkdir mythtv-release-0-21-fixes +$ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0-21-fixes +$ cd mythtv-release-0-21-fixes </PRE> </CODE></BLOCKQUOTE> </P> -<P>To use a release version, you can execute: +<P>See +<A HREF="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1">http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1</A> for +release notes for MythTV v0.21.1</P> +<P>Execute the following instructions to obtain the latest version of MythTV. +This is known as the "trunk" version and is considered the unstable code +which is not guaranteed to work. Use of trunk implies that you are also +reading the mythtv-dev and mythtv-commits mailing lists; failure to read +those mailing lists can cause your system to stop working.</P> +<P> <BLOCKQUOTE><CODE> <PRE> -$ mkdir mythtv-release-0.21 -$ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0.21 -$ cd mythtv-release-0.21 +$ mkdir mythtv +$ svn co http://svn.mythtv.org/svn/trunk/ mythtv +$ cd mythtv </PRE> </CODE></BLOCKQUOTE> </P> +<P>See +<A HREF="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22">http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22</A> for +release notes for MythTV v0.22</P> <P><B>NOTE</B>: Using a svn version of the code allows you to stay up-to-date with changes. So, if there's an update to the 0.21 release and you originally obtained it using svn, you could enter the -mythtv-release-0.21 directory and type "svn up", which will update your copy -with the fixed version from the website. You would then recompile and -install the updated 0.21 code.</P> -<P>If you are using the tarball, then unpack it: +mythtv-release-0-21-fixes directory and type "svn up", which will update +your copy with the fixed version from the website. You would then recompile +and install the updated 0.21 code.</P> +<P>If you are using the tarball, then unpack it. Again, use of the tarball is +only appropriate if a "-fixes" branch hasn't been created for the code that +you're running.</P> +<P> <BLOCKQUOTE><CODE> <PRE> $ tar -xjf mythtv-0.21.tar.bz2 diff -uNr mythtv-0.21/docs/mythtv-HOWTO-6.html mythtv/docs/mythtv-HOWTO-6.html --- mythtv-0.21/docs/mythtv-HOWTO-6.html 2006-12-29 15:50:02.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-6.html 2008-03-11 17:28:16.000000000 +0100 @@ -14,7 +14,7 @@ <HR> <H2><A NAME="mysql"></A> <A NAME="s6">6.</A> <A HREF="mythtv-HOWTO.html#toc6">MySQL.</A></H2> -<P>If you install MySQL 4.x, rather than 3.x, you will also want to comment +<P>When you install MySQL 5.x you will also want to comment out "log-bin" in your <CODE>my.cnf</CODE> configuration file. This option will quickly fill your "/var" disk partition with many gigabytes of data, unless you are doing database replication and deleting these files regularly.</P> @@ -165,7 +165,7 @@ <CODE>127.0.0.1</CODE>. If you change either of these items, restart <B>MySQL</B>.</P> <P><B>NOTE</B>: Your distribution may have a customized MySQL configuration -file; in Mandrive, check <CODE>/etc/sysconfig/mysqld</CODE> for additional +file; in Mandriva, check <CODE>/etc/sysconfig/mysqld</CODE> for additional configuration.</P> <HR> diff -uNr mythtv-0.21/docs/mythtv-HOWTO-8.html mythtv/docs/mythtv-HOWTO-8.html --- mythtv-0.21/docs/mythtv-HOWTO-8.html 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-8.html 2009-01-11 21:54:33.000000000 +0100 @@ -332,7 +332,27 @@ If <B>irxevent</B> isn't running, then MythTV will not respond to your remote control unless you're using native lirc support.</P> -<H2><A NAME="ss8.4">8.4</A> <A HREF="mythtv-HOWTO.html#toc8.4">Additional information for lirc</A> + +<H2><A NAME="ss8.4">8.4</A> <A HREF="mythtv-HOWTO.html#toc8.4">Additional information for lirc - native mode</A> +</H2> + +<P>If you will be using native mode, your lircrc file will need to look something like this: +<BLOCKQUOTE><CODE> +<PRE> +begin + remote = mceusb + prog = mythtv + button = Guide + config = S + repeat = 0 + delay = 0 +end +</PRE> +</CODE></BLOCKQUOTE> +</P> +<P>Note that the name of the "prog" is <B>mythtv</B>, not <B>mythtvfrontend</B></P> + +<H2><A NAME="ss8.5">8.5</A> <A HREF="mythtv-HOWTO.html#toc8.5">Additional information for lirc - irxevent mode</A> </H2> <P>Take a look at the lircrc.example files in the <CODE>contrib/configfiles/</CODE> @@ -401,7 +421,7 @@ the key. The actual <B>repeat =</B> number will vary from system to system, so experiment and see which value works best for you.</P> -<H2><A NAME="ss8.5">8.5</A> <A HREF="mythtv-HOWTO.html#toc8.5">Configuring lirc for use with an IR blaster</A> +<H2><A NAME="ss8.6">8.6</A> <A HREF="mythtv-HOWTO.html#toc8.6">Configuring lirc for use with an IR blaster</A> </H2> <P>Lirc has support for various IR transmitters. A popular model is the Actisys diff -uNr mythtv-0.21/docs/mythtv-HOWTO-9.html mythtv/docs/mythtv-HOWTO-9.html --- mythtv-0.21/docs/mythtv-HOWTO-9.html 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-9.html 2009-01-20 17:29:36.000000000 +0100 @@ -529,7 +529,7 @@ <A HREF="mythtv-HOWTO-23.html#logrotate">Automatically rotating logs</A> for more information.</P> -<H2><A NAME="nonmaster_backend"></A> <A NAME="ss9.3">9.3</A> <A HREF="mythtv-HOWTO.html#toc9.3">Configuring a non-master backend </A> +<H2><A NAME="nonmaster_backend"></A> <A NAME="ss9.3">9.3</A> <A HREF="mythtv-HOWTO.html#toc9.3">Configuring a slave backend </A> </H2> <P>Ensure that you've granted access to the master MySQL database for remote @@ -558,16 +558,16 @@ <P>Make sure that the IP addresses on the General setup screen are accurate. If the slave backend can't communicate with the master backend due to IP address misconfiguration then MythTV will not function properly.</P> -<P>Configuration of a non-master backend follows the same general procedure +<P>Configuration of a slave backend follows the same general procedure as that of the master backend, with the exception that you skip over the "Video Sources" step. All possible video sources need to be defined on the master backend system; only the master backend will query a listings -provider to obtain guide data for all the non-master backends.</P> +provider to obtain guide data for all the slave backends.</P> <P> <FIGURE> <EPS FILE="stop.eps"> <IMG SRC="stop.png"> -<CAPTION><B>NOTE</B>: Do not run <CODE>mythfilldatabase</CODE> on a non-master backend.</CAPTION> +<CAPTION><B>NOTE</B>: Do not run <CODE>mythfilldatabase</CODE> on a slave backend.</CAPTION> </FIGURE> </P> <H2><A NAME="ss9.4">9.4</A> <A HREF="mythtv-HOWTO.html#toc9.4">Configuring and running mythfilldatabase</A> diff -uNr mythtv-0.21/docs/mythtv-HOWTO.html mythtv/docs/mythtv-HOWTO.html --- mythtv-0.21/docs/mythtv-HOWTO.html 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO.html 2009-01-20 17:29:36.000000000 +0100 @@ -15,7 +15,7 @@ <H1>Installing and using MythTV</H1> <H2>Robert Kulagowski, -<A HREF="mailto:rkulagow@rocketmail.com">mailto:rkulagow@rocketmail.com</A></H2>2008-03-05, v0.21.00pre +<A HREF="mailto:rkulagow@rocketmail.com">mailto:rkulagow@rocketmail.com</A></H2>2009-01-20, v0.21.07 <HR> <EM>Initially, installation of MythTV seems like a huge task. There are lots of dependencies, and various distributions seem to do the same thing @@ -87,8 +87,9 @@ <LI><A NAME="toc8.1">8.1</A> <A HREF="mythtv-HOWTO-8.html#ss8.1">Gentoo</A> <LI><A NAME="toc8.2">8.2</A> <A HREF="mythtv-HOWTO-8.html#ss8.2">Obtaining and compiling lirc</A> <LI><A NAME="toc8.3">8.3</A> <A HREF="mythtv-HOWTO-8.html#ss8.3">Completing the lirc install </A> -<LI><A NAME="toc8.4">8.4</A> <A HREF="mythtv-HOWTO-8.html#ss8.4">Additional information for lirc</A> -<LI><A NAME="toc8.5">8.5</A> <A HREF="mythtv-HOWTO-8.html#ss8.5">Configuring lirc for use with an IR blaster</A> +<LI><A NAME="toc8.4">8.4</A> <A HREF="mythtv-HOWTO-8.html#ss8.4">Additional information for lirc - native mode</A> +<LI><A NAME="toc8.5">8.5</A> <A HREF="mythtv-HOWTO-8.html#ss8.5">Additional information for lirc - irxevent mode</A> +<LI><A NAME="toc8.6">8.6</A> <A HREF="mythtv-HOWTO-8.html#ss8.6">Configuring lirc for use with an IR blaster</A> </UL> <P> <H2><A NAME="toc9">9.</A> <A HREF="mythtv-HOWTO-9.html">Configuring MythTV. </A></H2> @@ -96,7 +97,7 @@ <UL> <LI><A NAME="toc9.1">9.1</A> <A HREF="mythtv-HOWTO-9.html#ss9.1">Configuring the Master backend system</A> <LI><A NAME="toc9.2">9.2</A> <A HREF="mythtv-HOWTO-9.html#ss9.2">Post-configuration</A> -<LI><A NAME="toc9.3">9.3</A> <A HREF="mythtv-HOWTO-9.html#ss9.3">Configuring a non-master backend </A> +<LI><A NAME="toc9.3">9.3</A> <A HREF="mythtv-HOWTO-9.html#ss9.3">Configuring a slave backend </A> <LI><A NAME="toc9.4">9.4</A> <A HREF="mythtv-HOWTO-9.html#ss9.4">Configuring and running mythfilldatabase</A> <LI><A NAME="toc9.5">9.5</A> <A HREF="mythtv-HOWTO-9.html#ss9.5">Grabbing channel icons for Schedules Direct users</A> </UL> Dateien mythtv-0.21/docs/mythtv-HOWTO.pdf und mythtv/docs/mythtv-HOWTO.pdf sind verschieden. diff -uNr mythtv-0.21/docs/mythtv-HOWTO.sgml mythtv/docs/mythtv-HOWTO.sgml --- mythtv-0.21/docs/mythtv-HOWTO.sgml 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO.sgml 2009-01-20 17:29:36.000000000 +0100 @@ -3,7 +3,7 @@ <title>Installing and using MythTV <author>Robert Kulagowski, <url url="mailto:rkulagow@rocketmail.com" name="mailto:rkulagow@rocketmail.com"> -<date>2008-03-05, v0.21.00pre +<date>2009-01-20, v0.21.07 <abstract> Initially, installation of MythTV seems like a huge task. There are lots of dependencies, and various distributions seem to do the same thing @@ -91,16 +91,20 @@ See <url url="http://mysettopbox.tv" name="http://mysettopbox.tv"> if you'd like to install a custom version of Knoppix optimized for MythTV. -See <url url="http://linpvr.org" name="http://linpvr.org"> if you'd like -to install MythTV onto a VIA Epia M machine. +See <url url="http://www.minimyth.org" name="http://www.minimyth.org"> if you'd like +to install MythTV onto a diskless system. See <url url="http://bit.blkbk.com" name="http://bit.blkbk.com"> if you'd like to install MythTV on a Xbox. +<bf>NOTE</bf>: Site appears unmaintained. See <url url="http://wilsonet.com/mythtv/" name="http://wilsonet.com/mythtv/"> for instructions tailored to RedHat's Fedora Core distribution. +See <url url="http://www.mythbuntu.org" name="http://www.mythbuntu.org"> if +you'd like to install a customized version of Ubuntu optimized for MythTV. + There is a MythTV wiki at <url url="http://wiki.mythtv.org" name="http://wiki.mythtv.org">. @@ -490,6 +494,12 @@ on-board MPEG-2 encoder greatly reduces the CPU requirements for encoding. +The ivtv driver was incorporated into the Linux kernel starting at v2.6.22. + +There is a Beta driver for the HVR-1600 card at <url +url="http://www.ivtvdriver.org/index.php/Cx18" +name="http://www.ivtvdriver.org/index.php/Cx18"> + <bf>NOTE</bf>: Motherboards with the Via chipset are notoriously bad with DMA and have caused numerous issues with ivtv, including hard locks. See the ivtv website <url url="http://ivtvdriver.org" name="http://ivtvdriver.org"> @@ -530,10 +540,11 @@ <sect3>HDTV. <p>There are a number of HDTV cards with Linux drivers which are known to operate in the United States; a complete list of cards with DVB drivers can -be found at <url url="http://www.linuxtv.org/wiki/index.php/ATSC_devices" -name="http://www.linuxtv.org/wiki/index.php/ATSC_devices"> Some cards support -capture of unencrypted digital cable TV (utilizing QAM256), others will only -work with Over The Air signals captured with an antenna (with 8VSB). +be found at <url url="http://www.linuxtv.org/wiki/index.php/ATSC_Devices" +name="http://www.linuxtv.org/wiki/index.php/ATSC_Devices"> Some cards +support capture of unencrypted digital cable TV (utilizing QAM256), others +will only work with Over The Air (aka "OTA") signals captured with an +antenna (with 8VSB). Cards that have been reported to work include: <itemize> @@ -596,8 +607,8 @@ Plextor to capture hardware encoded MPEG-4, so the host CPU requirements are low. Hauppauge WinTV-PVR-USB2 (driver available at <url -url="http://www.isely.net/pvrusb2/" name="http://www.isely.net/pvrusb2/">) emulates a PVR-x50 -card. +url="http://www.isely.net/pvrusb2/" name="http://www.isely.net/pvrusb2/">) +emulates a PVR-x50 card. <sect3>IP Recorder (RTSP, RTS, UDP) <p>MPEG-2, MPEG-4 and H.264 internet TS stream recording is supported using @@ -619,14 +630,6 @@ <item>Hauppauge WinTV-USB series <item>Hauppauge WinTV-PVR-usb (model 602), or WinTV-PVR-PCI (model 880) cards (no driver - this is not the PVR-250/350 series of cards supported by the IvyTV driver) -<item>Hauppauge HVR-1600. (no driver). <bf>NOTE</bf>: There have been -reports (2006-12 timeframe) that Hauppauge is putting the HVR-1600 inside of -the PVR-150 box; if you're purchasing a retail PVR-150, carefully examine -the packaging - there should be some indication that the hardware inside is -actually a HVR-1600 and not a PVR-150. Check the Supported Hardware (<url -url="http://www.ivtvdriver.org/index.php/Supported_hardware" -name="http://www.ivtvdriver.org/index.php/Supported_hardware">) page of the -ivtv driver for updated support information. <item>ATI All-in-Wonder series </itemize> @@ -797,7 +800,7 @@ <img src="warning.png"> <caption><bf>NOTE</bf>: you must have the MySQL database software installed on a system to store the master database. This does not necessarily mean that -MySQL must run on one of the MythTV boxes. The minimum MySQL version is 3.23. +MySQL must run on one of the MythTV boxes. The minimum MySQL version is 5.0. </caption></figure> <sect2>Pre-compiled packages <label id="precompiled"> @@ -1326,8 +1329,27 @@ <label id="manually_building_mythtv"> <sect1>Manually building MythTV -<p>If you are going to use <bf>subversion</bf>, execute the following -instructions to obtain the latest version of MythTV: +<p> +<bf>NOTE</bf>: Unless you are reading this documentation on the day that a +new version of MythTV is released, it is highly encouraged that you use the +"-fixes" version of the software and not the source tarball. + +To download the release version, execute: +<tscreen><verb> +$ mkdir mythtv-release-0-21-fixes +$ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0-21-fixes +$ cd mythtv-release-0-21-fixes +</verb></tscreen> + +See <url url="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1" +name="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1"> for +release notes for MythTV v0.21.1 + +Execute the following instructions to obtain the latest version of MythTV. +This is known as the "trunk" version and is considered the unstable code +which is not guaranteed to work. Use of trunk implies that you are also +reading the mythtv-dev and mythtv-commits mailing lists; failure to read +those mailing lists can cause your system to stop working. <tscreen><verb> $ mkdir mythtv @@ -1335,21 +1357,21 @@ $ cd mythtv </verb></tscreen> -To use a release version, you can execute: -<tscreen><verb> -$ mkdir mythtv-release-0.21 -$ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0.21 -$ cd mythtv-release-0.21 -</verb></tscreen> +See <url url="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22" +name="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22"> for +release notes for MythTV v0.22 <bf>NOTE</bf>: Using a svn version of the code allows you to stay up-to-date with changes. So, if there's an update to the 0.21 release and you originally obtained it using svn, you could enter the -mythtv-release-0.21 directory and type "svn up", which will update your copy -with the fixed version from the website. You would then recompile and -install the updated 0.21 code. +mythtv-release-0-21-fixes directory and type "svn up", which will update +your copy with the fixed version from the website. You would then recompile +and install the updated 0.21 code. + +If you are using the tarball, then unpack it. Again, use of the tarball is +only appropriate if a "-fixes" branch hasn't been created for the code that +you're running. -If you are using the tarball, then unpack it: <tscreen><verb> $ tar -xjf mythtv-0.21.tar.bz2 $ cd mythtv-0.21 @@ -1516,7 +1538,7 @@ # emerge mythtv </verb></tscreen> <sect>MySQL.<label id="mysql"> -<p>If you install MySQL 4.x, rather than 3.x, you will also want to comment +<p>When you install MySQL 5.x you will also want to comment out "log-bin" in your <tt>my.cnf</tt> configuration file. This option will quickly fill your "/var" disk partition with many gigabytes of data, unless you are doing database replication and deleting these files regularly. @@ -1636,7 +1658,7 @@ <bf>MySQL</bf>. <bf>NOTE</bf>: Your distribution may have a customized MySQL configuration -file; in Mandrive, check <tt>/etc/sysconfig/mysqld</tt> for additional +file; in Mandriva, check <tt>/etc/sysconfig/mysqld</tt> for additional configuration. <sect>Configuring Sound. @@ -2019,7 +2041,23 @@ If <bf>irxevent</bf> isn't running, then MythTV will not respond to your remote control unless you're using native lirc support. -<sect1>Additional information for lirc + +<sect1>Additional information for lirc - native mode +<p>If you will be using native mode, your lircrc file will need to look something like this: +<tscreen><verb> +begin + remote = mceusb + prog = mythtv + button = Guide + config = S + repeat = 0 + delay = 0 +end +</verb></tscreen> + +Note that the name of the "prog" is <bf>mythtv</bf>, not <bf>mythtvfrontend</bf> + +<sect1>Additional information for lirc - irxevent mode <p>Take a look at the lircrc.example files in the <tt>contrib/configfiles/</tt> directory. In my case, (Pinnacle Studio card) the channel up and down functions weren't working, due to the fact that the button names were different than @@ -2729,7 +2767,7 @@ <ref id="logrotate" name="Automatically rotating logs"> for more information. -<sect1>Configuring a non-master backend <label id="nonmaster_backend"> +<sect1>Configuring a slave backend <label id="nonmaster_backend"> <p>Ensure that you've granted access to the master MySQL database for remote backends as discussed in the section titled <ref id="modify_perm_mysql" name="Modifying access to the MySQL database for multiple systems"> and that @@ -2760,16 +2798,16 @@ If the slave backend can't communicate with the master backend due to IP address misconfiguration then MythTV will not function properly. -Configuration of a non-master backend follows the same general procedure +Configuration of a slave backend follows the same general procedure as that of the master backend, with the exception that you skip over the "Video Sources" step. All possible video sources need to be defined on the master backend system; only the master backend will query a listings -provider to obtain guide data for all the non-master backends. +provider to obtain guide data for all the slave backends. <figure loc="here"> <eps file="stop.eps" height="1cm"> <img src="stop.png"> -<caption><bf>NOTE</bf>: Do not run <tt>mythfilldatabase</tt> on a non-master backend. +<caption><bf>NOTE</bf>: Do not run <tt>mythfilldatabase</tt> on a slave backend. </caption> </figure> <sect1>Configuring and running mythfilldatabase @@ -5913,6 +5951,8 @@ handle SIG33 nostop noprint set logging on set pagination off +set breakpoint pending on +break qFatal set args -l myth.log -v record,channel,siparser run thread apply all bt full @@ -7376,12 +7416,13 @@ <item>v/V = VCT : ATSC only <item>n/N = NIT : DVB only <item>s/S = SDT : DVB only +<item>c/C = Crypt : The channel is encrypted. If you have a CAM you should see a "C" after a few seconds. </itemize> <sect1>What is the difference between the various Hauppauge PVR models? <p>This is covered in the hardware section, and extensively covered on the Hauppauge website. (<url -url="http://www.hauppauge.com/pages/compare_pvr.html" -name="http://www.hauppauge.com/pages/compare_pvr.html">) Please check the +url="http://www.hauppauge.com/site/compare/compare_pvr.html" +name="http://www.hauppauge.com/site/compare/compare_pvr.html">) Please check the Hauppauge website for the most accurate information. A PVR-150 comes in a number of versions: @@ -7931,13 +7972,19 @@ You can then press ESC until you return to the main screen. </article> <!-- Revision History -v0.21.00, 2008-03-05. Start prepping for 0.21. Add a tip for using a -subdirectory as the target of a storage group in case of mount failure to -prevent root partition fillup. Update SVN download instructions to grab the -entire tree, so that you don't end up with versions of code / themes that -are incompatible. Bump XMLTV version. bjm's recording updates. - +v0.21.00, 2008-03-10. Initial version for 0.21. Update link to ATSC +devices. Add note that ivtv driver is in kernel. Add note that xbox +mini-distribution site appears dead. Update information on HVR-1600. +Update minimum MySQL version. +v0.21.01, 2008-06-03. Add mythbuntu. +v0.21.02, 2008-06-04. Update minimyth link. +v0.21.03, 2008-10-27. Update Hauppauge link. +v0.21.04, 2009-01-01. "Crypt" description on LAMC table. +v0.21.05, 2009-01-02. Expand instructions on how to use -fixes rather than +the source tarball, put pointer to wiki for Release Notes. +v0.21.06, 2009-01-11. Add information for native lirc mode +v0.21.07, 2009-01-20. Standardize terminology for slave backends. --> <!-- diff -uNr mythtv-0.21/docs/mythtv-HOWTO-singlehtml.html mythtv/docs/mythtv-HOWTO-singlehtml.html --- mythtv-0.21/docs/mythtv-HOWTO-singlehtml.html 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO-singlehtml.html 2009-01-20 17:29:36.000000000 +0100 @@ -8,7 +8,7 @@ <H1>Installing and using MythTV</H1> <H2>Robert Kulagowski, -<A HREF="mailto:rkulagow@rocketmail.com">mailto:rkulagow@rocketmail.com</A></H2>2008-03-05, v0.21.00pre +<A HREF="mailto:rkulagow@rocketmail.com">mailto:rkulagow@rocketmail.com</A></H2>2009-01-20, v0.21.07 <HR> <EM>Initially, installation of MythTV seems like a huge task. There are lots of dependencies, and various distributions seem to do the same thing @@ -80,8 +80,9 @@ <LI><A NAME="toc8.1">8.1</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.1">Gentoo</A> <LI><A NAME="toc8.2">8.2</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.2">Obtaining and compiling lirc</A> <LI><A NAME="toc8.3">8.3</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.3">Completing the lirc install </A> -<LI><A NAME="toc8.4">8.4</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.4">Additional information for lirc</A> -<LI><A NAME="toc8.5">8.5</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.5">Configuring lirc for use with an IR blaster</A> +<LI><A NAME="toc8.4">8.4</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.4">Additional information for lirc - native mode</A> +<LI><A NAME="toc8.5">8.5</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.5">Additional information for lirc - irxevent mode</A> +<LI><A NAME="toc8.6">8.6</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss8.6">Configuring lirc for use with an IR blaster</A> </UL> <P> <H2><A NAME="toc9">9.</A> <A HREF="mythtv-HOWTO-singlehtml.html#s9">Configuring MythTV. </A></H2> @@ -89,7 +90,7 @@ <UL> <LI><A NAME="toc9.1">9.1</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss9.1">Configuring the Master backend system</A> <LI><A NAME="toc9.2">9.2</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss9.2">Post-configuration</A> -<LI><A NAME="toc9.3">9.3</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss9.3">Configuring a non-master backend </A> +<LI><A NAME="toc9.3">9.3</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss9.3">Configuring a slave backend </A> <LI><A NAME="toc9.4">9.4</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss9.4">Configuring and running mythfilldatabase</A> <LI><A NAME="toc9.5">9.5</A> <A HREF="mythtv-HOWTO-singlehtml.html#ss9.5">Grabbing channel icons for Schedules Direct users</A> </UL> @@ -322,14 +323,18 @@ <A HREF="http://mysettopbox.tv">http://mysettopbox.tv</A> if you'd like to install a custom version of Knoppix optimized for MythTV.</P> <P>See -<A HREF="http://linpvr.org">http://linpvr.org</A> if you'd like -to install MythTV onto a VIA Epia M machine.</P> +<A HREF="http://www.minimyth.org">http://www.minimyth.org</A> if you'd like +to install MythTV onto a diskless system.</P> <P>See <A HREF="http://bit.blkbk.com">http://bit.blkbk.com</A> if you'd -like to install MythTV on a Xbox.</P> +like to install MythTV on a Xbox. +<B>NOTE</B>: Site appears unmaintained.</P> <P>See <A HREF="http://wilsonet.com/mythtv/">http://wilsonet.com/mythtv/</A> for instructions tailored to RedHat's Fedora Core distribution.</P> +<P>See +<A HREF="http://www.mythbuntu.org">http://www.mythbuntu.org</A> if +you'd like to install a customized version of Ubuntu optimized for MythTV.</P> <P>There is a MythTV wiki at <A HREF="http://wiki.mythtv.org">http://wiki.mythtv.org</A>.</P> <P>If you are installing this version for Schedules Direct support, please see @@ -715,6 +720,9 @@ CPU. (The PVR-350 can simultaneously be used as an output device.) Using the on-board MPEG-2 encoder greatly reduces the CPU requirements for encoding.</P> +<P>The ivtv driver was incorporated into the Linux kernel starting at v2.6.22.</P> +<P>There is a Beta driver for the HVR-1600 card at +<A HREF="http://www.ivtvdriver.org/index.php/Cx18">http://www.ivtvdriver.org/index.php/Cx18</A></P> <P><B>NOTE</B>: Motherboards with the Via chipset are notoriously bad with DMA and have caused numerous issues with ivtv, including hard locks. See the ivtv website @@ -757,9 +765,10 @@ <P>There are a number of HDTV cards with Linux drivers which are known to operate in the United States; a complete list of cards with DVB drivers can be found at -<A HREF="http://www.linuxtv.org/wiki/index.php/ATSC_devices">http://www.linuxtv.org/wiki/index.php/ATSC_devices</A> Some cards support -capture of unencrypted digital cable TV (utilizing QAM256), others will only -work with Over The Air signals captured with an antenna (with 8VSB).</P> +<A HREF="http://www.linuxtv.org/wiki/index.php/ATSC_Devices">http://www.linuxtv.org/wiki/index.php/ATSC_Devices</A> Some cards +support capture of unencrypted digital cable TV (utilizing QAM256), others +will only work with Over The Air (aka "OTA") signals captured with an +antenna (with 8VSB).</P> <P>Cards that have been reported to work include: <UL> <LI>pcHDTV HD-2000, Air2PC PCI rev 1-3 (8VSB only)</LI> @@ -816,8 +825,8 @@ <A HREF="http://www.plextor.com/english/support/LinuxSDK.htm">http://www.plextor.com/english/support/LinuxSDK.htm</A>. MythTV uses the Plextor to capture hardware encoded MPEG-4, so the host CPU requirements are low.</P> <P>Hauppauge WinTV-PVR-USB2 (driver available at -<A HREF="http://www.isely.net/pvrusb2/">http://www.isely.net/pvrusb2/</A>) emulates a PVR-x50 -card.</P> +<A HREF="http://www.isely.net/pvrusb2/">http://www.isely.net/pvrusb2/</A>) +emulates a PVR-x50 card.</P> <H3>IP Recorder (RTSP, RTS, UDP)</H3> @@ -840,13 +849,6 @@ <LI>Hauppauge WinTV-USB series</LI> <LI>Hauppauge WinTV-PVR-usb (model 602), or WinTV-PVR-PCI (model 880) cards (no driver - this is not the PVR-250/350 series of cards supported by the IvyTV driver)</LI> -<LI>Hauppauge HVR-1600. (no driver). <B>NOTE</B>: There have been -reports (2006-12 timeframe) that Hauppauge is putting the HVR-1600 inside of -the PVR-150 box; if you're purchasing a retail PVR-150, carefully examine -the packaging - there should be some indication that the hardware inside is -actually a HVR-1600 and not a PVR-150. Check the Supported Hardware ( -<A HREF="http://www.ivtvdriver.org/index.php/Supported_hardware">http://www.ivtvdriver.org/index.php/Supported_hardware</A>) page of the -ivtv driver for updated support information.</LI> <LI>ATI All-in-Wonder series</LI> </UL> </P> @@ -1019,7 +1021,7 @@ <IMG SRC="warning.png"> <CAPTION><B>NOTE</B>: you must have the MySQL database software installed on a system to store the master database. This does not necessarily mean that -MySQL must run on one of the MythTV boxes. The minimum MySQL version is 3.23.</CAPTION> +MySQL must run on one of the MythTV boxes. The minimum MySQL version is 5.0.</CAPTION> </FIGURE> </P> @@ -1629,33 +1631,48 @@ <H2><A NAME="ss5.4">5.4</A> <A HREF="#toc5.4">Manually building MythTV</A> </H2> -<P>If you are going to use <B>subversion</B>, execute the following -instructions to obtain the latest version of MythTV:</P> -<P> +<P><B>NOTE</B>: Unless you are reading this documentation on the day that a +new version of MythTV is released, it is highly encouraged that you use the +"-fixes" version of the software and not the source tarball.</P> +<P>To download the release version, execute: <BLOCKQUOTE><CODE> <PRE> -$ mkdir mythtv -$ svn co http://svn.mythtv.org/svn/trunk/ mythtv -$ cd mythtv +$ mkdir mythtv-release-0-21-fixes +$ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0-21-fixes +$ cd mythtv-release-0-21-fixes </PRE> </CODE></BLOCKQUOTE> </P> -<P>To use a release version, you can execute: +<P>See +<A HREF="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1">http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1</A> for +release notes for MythTV v0.21.1</P> +<P>Execute the following instructions to obtain the latest version of MythTV. +This is known as the "trunk" version and is considered the unstable code +which is not guaranteed to work. Use of trunk implies that you are also +reading the mythtv-dev and mythtv-commits mailing lists; failure to read +those mailing lists can cause your system to stop working.</P> +<P> <BLOCKQUOTE><CODE> <PRE> -$ mkdir mythtv-release-0.21 -$ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0.21 -$ cd mythtv-release-0.21 +$ mkdir mythtv +$ svn co http://svn.mythtv.org/svn/trunk/ mythtv +$ cd mythtv </PRE> </CODE></BLOCKQUOTE> </P> +<P>See +<A HREF="http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22">http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22</A> for +release notes for MythTV v0.22</P> <P><B>NOTE</B>: Using a svn version of the code allows you to stay up-to-date with changes. So, if there's an update to the 0.21 release and you originally obtained it using svn, you could enter the -mythtv-release-0.21 directory and type "svn up", which will update your copy -with the fixed version from the website. You would then recompile and -install the updated 0.21 code.</P> -<P>If you are using the tarball, then unpack it: +mythtv-release-0-21-fixes directory and type "svn up", which will update +your copy with the fixed version from the website. You would then recompile +and install the updated 0.21 code.</P> +<P>If you are using the tarball, then unpack it. Again, use of the tarball is +only appropriate if a "-fixes" branch hasn't been created for the code that +you're running.</P> +<P> <BLOCKQUOTE><CODE> <PRE> $ tar -xjf mythtv-0.21.tar.bz2 @@ -1849,7 +1866,7 @@ </P> <H2><A NAME="mysql"></A> <A NAME="s6">6.</A> <A HREF="#toc6">MySQL.</A></H2> -<P>If you install MySQL 4.x, rather than 3.x, you will also want to comment +<P>When you install MySQL 5.x you will also want to comment out "log-bin" in your <CODE>my.cnf</CODE> configuration file. This option will quickly fill your "/var" disk partition with many gigabytes of data, unless you are doing database replication and deleting these files regularly.</P> @@ -2000,7 +2017,7 @@ <CODE>127.0.0.1</CODE>. If you change either of these items, restart <B>MySQL</B>.</P> <P><B>NOTE</B>: Your distribution may have a customized MySQL configuration -file; in Mandrive, check <CODE>/etc/sysconfig/mysqld</CODE> for additional +file; in Mandriva, check <CODE>/etc/sysconfig/mysqld</CODE> for additional configuration.</P> <H2><A NAME="s7">7.</A> <A HREF="#toc7">Configuring Sound.</A></H2> @@ -2433,7 +2450,27 @@ If <B>irxevent</B> isn't running, then MythTV will not respond to your remote control unless you're using native lirc support.</P> -<H2><A NAME="ss8.4">8.4</A> <A HREF="#toc8.4">Additional information for lirc</A> + +<H2><A NAME="ss8.4">8.4</A> <A HREF="#toc8.4">Additional information for lirc - native mode</A> +</H2> + +<P>If you will be using native mode, your lircrc file will need to look something like this: +<BLOCKQUOTE><CODE> +<PRE> +begin + remote = mceusb + prog = mythtv + button = Guide + config = S + repeat = 0 + delay = 0 +end +</PRE> +</CODE></BLOCKQUOTE> +</P> +<P>Note that the name of the "prog" is <B>mythtv</B>, not <B>mythtvfrontend</B></P> + +<H2><A NAME="ss8.5">8.5</A> <A HREF="#toc8.5">Additional information for lirc - irxevent mode</A> </H2> <P>Take a look at the lircrc.example files in the <CODE>contrib/configfiles/</CODE> @@ -2502,7 +2539,7 @@ the key. The actual <B>repeat =</B> number will vary from system to system, so experiment and see which value works best for you.</P> -<H2><A NAME="ss8.5">8.5</A> <A HREF="#toc8.5">Configuring lirc for use with an IR blaster</A> +<H2><A NAME="ss8.6">8.6</A> <A HREF="#toc8.6">Configuring lirc for use with an IR blaster</A> </H2> <P>Lirc has support for various IR transmitters. A popular model is the Actisys @@ -3140,7 +3177,7 @@ <A HREF="#logrotate">Automatically rotating logs</A> for more information.</P> -<H2><A NAME="nonmaster_backend"></A> <A NAME="ss9.3">9.3</A> <A HREF="#toc9.3">Configuring a non-master backend </A> +<H2><A NAME="nonmaster_backend"></A> <A NAME="ss9.3">9.3</A> <A HREF="#toc9.3">Configuring a slave backend </A> </H2> <P>Ensure that you've granted access to the master MySQL database for remote @@ -3169,16 +3206,16 @@ <P>Make sure that the IP addresses on the General setup screen are accurate. If the slave backend can't communicate with the master backend due to IP address misconfiguration then MythTV will not function properly.</P> -<P>Configuration of a non-master backend follows the same general procedure +<P>Configuration of a slave backend follows the same general procedure as that of the master backend, with the exception that you skip over the "Video Sources" step. All possible video sources need to be defined on the master backend system; only the master backend will query a listings -provider to obtain guide data for all the non-master backends.</P> +provider to obtain guide data for all the slave backends.</P> <P> <FIGURE> <EPS FILE="stop.eps"> <IMG SRC="stop.png"> -<CAPTION><B>NOTE</B>: Do not run <CODE>mythfilldatabase</CODE> on a non-master backend.</CAPTION> +<CAPTION><B>NOTE</B>: Do not run <CODE>mythfilldatabase</CODE> on a slave backend.</CAPTION> </FIGURE> </P> <H2><A NAME="ss9.4">9.4</A> <A HREF="#toc9.4">Configuring and running mythfilldatabase</A> @@ -6432,6 +6469,8 @@ handle SIG33 nostop noprint set logging on set pagination off +set breakpoint pending on +break qFatal set args -l myth.log -v record,channel,siparser run thread apply all bt full @@ -7987,6 +8026,7 @@ <LI>v/V = VCT : ATSC only</LI> <LI>n/N = NIT : DVB only</LI> <LI>s/S = SDT : DVB only</LI> +<LI>c/C = Crypt : The channel is encrypted. If you have a CAM you should see a "C" after a few seconds.</LI> </UL> </P> <H2><A NAME="ss23.23">23.23</A> <A HREF="#toc23.23">What is the difference between the various Hauppauge PVR models?</A> @@ -7994,7 +8034,7 @@ <P>This is covered in the hardware section, and extensively covered on the Hauppauge website. ( -<A HREF="http://www.hauppauge.com/pages/compare_pvr.html">http://www.hauppauge.com/pages/compare_pvr.html</A>) Please check the +<A HREF="http://www.hauppauge.com/site/compare/compare_pvr.html">http://www.hauppauge.com/site/compare/compare_pvr.html</A>) Please check the Hauppauge website for the most accurate information.</P> <P>A PVR-150 comes in a number of versions: <UL> diff -uNr mythtv-0.21/docs/mythtv-HOWTO.txt mythtv/docs/mythtv-HOWTO.txt --- mythtv-0.21/docs/mythtv-HOWTO.txt 2008-03-05 22:38:21.000000000 +0100 +++ mythtv/docs/mythtv-HOWTO.txt 2009-01-20 17:29:36.000000000 +0100 @@ -1,7 +1,7 @@ Installing and using MythTV Robert Kulagowski, mailto:rkulagow@rocketmail.com <mailto:rkulagow@rocketmail.com> - 2008-03-05, v0.21.00pre + 2009-01-20, v0.21.07 Initially, installation of MythTV seems like a huge task. There are lots of dependencies, and various distributions seem to do the same @@ -110,8 +110,9 @@ 8.1 Gentoo 8.2 Obtaining and compiling lirc 8.3 Completing the lirc install - 8.4 Additional information for lirc - 8.5 Configuring lirc for use with an IR blaster + 8.4 Additional information for lirc - native mode + 8.5 Additional information for lirc - irxevent mode + 8.6 Configuring lirc for use with an IR blaster 9. Configuring MythTV. 9.1 Configuring the Master backend system @@ -126,7 +127,7 @@ 9.1.6.3 Migrating to Storage Groups. 9.1.6.4 Advanced: Algorithm used by the Storage Group 9.2 Post-configuration - 9.3 Configuring a non-master backend + 9.3 Configuring a slave backend 9.4 Configuring and running mythfilldatabase 9.4.1 Periodically running mythfilldatabase 9.5 Grabbing channel icons for Schedules Direct users @@ -343,7 +344,6 @@ 24.4 Caching support for Schedules Direct - ______________________________________________________________________ [1m1. First things first.[0m @@ -445,15 +445,18 @@ See http://mysettopbox.tv <http://mysettopbox.tv> if you'd like to install a custom version of Knoppix optimized for MythTV. - See http://linpvr.org <http://linpvr.org> if you'd like to install - MythTV onto a VIA Epia M machine. + See http://www.minimyth.org <http://www.minimyth.org> if you'd like to + install MythTV onto a diskless system. See http://bit.blkbk.com <http://bit.blkbk.com> if you'd like to - install MythTV on a Xbox. + install MythTV on a Xbox. [1mNOTE[22m: Site appears unmaintained. See http://wilsonet.com/mythtv/ <http://wilsonet.com/mythtv/> for instructions tailored to RedHat's Fedora Core distribution. + See http://www.mythbuntu.org <http://www.mythbuntu.org> if you'd like + to install a customized version of Ubuntu optimized for MythTV. + There is a MythTV wiki at http://wiki.mythtv.org <http://wiki.mythtv.org>. @@ -525,6 +528,7 @@ but is not available in the current release. + [1m1.7. Mailing lists / getting help[0m It's recommended that you join the user list at @@ -659,6 +663,7 @@ http://pvrhw.goldfish.org/ <http://pvrhw.goldfish.org/>. The website will let you browse what other users have reported as their hardware configuration, and how happy they are with the results. + If you have specific questions about the suitability of specific hardware choices, you can consult the archives of the mythtv-users mailing list at http://www.gossamer-threads.com/lists/mythtv/ @@ -724,7 +729,6 @@ requirements are quite low. See the ``Video Capture Device'' section for details. - The price differential between a frame grabber and a card that implements hardware MPEG-2 encoding, such as the Hauppauge PVR-x50 series, is now less than $30 US. Primary development in MythTV has @@ -788,6 +792,8 @@ There are other ramifications to using XFS and JFS - neither offer the opportunity to shrink a filesystem; they may only be expanded. + + [1mNOTE[22m: You [4mmust[24m [4mnot[24m use ReiserFS v3 for your recordings. You will get corrupted recordings if you do. @@ -866,6 +872,13 @@ device.) Using the on-board MPEG-2 encoder greatly reduces the CPU requirements for encoding. + The ivtv driver was incorporated into the Linux kernel starting at + v2.6.22. + + There is a Beta driver for the HVR-1600 card at + http://www.ivtvdriver.org/index.php/Cx18 + <http://www.ivtvdriver.org/index.php/Cx18> + [1mNOTE[22m: Motherboards with the Via chipset are notoriously bad with DMA and have caused numerous issues with ivtv, including hard locks. See the ivtv website http://ivtvdriver.org <http://ivtvdriver.org> for the @@ -914,11 +927,11 @@ There are a number of HDTV cards with Linux drivers which are known to operate in the United States; a complete list of cards with DVB drivers can be found at - http://www.linuxtv.org/wiki/index.php/ATSC_devices - <http://www.linuxtv.org/wiki/index.php/ATSC_devices> Some cards + http://www.linuxtv.org/wiki/index.php/ATSC_Devices + <http://www.linuxtv.org/wiki/index.php/ATSC_Devices> Some cards support capture of unencrypted digital cable TV (utilizing QAM256), - others will only work with Over The Air signals captured with an - antenna (with 8VSB). + others will only work with Over The Air (aka "OTA") signals captured + with an antenna (with 8VSB). Cards that have been reported to work include: @@ -957,6 +970,7 @@ The Simple Answer: Once you are in the 3.2 Ghz P4-class of CPU you should have no issues with viewing HDTV. + The Complicated Answer: For 720p content (1280x720), a 2.4GHz P4 should be sufficient. @@ -1022,15 +1036,6 @@ cards (no driver - this is not the PVR-250/350 series of cards supported by the IvyTV driver) - +o Hauppauge HVR-1600. (no driver). [1mNOTE[22m: There have been reports - (2006-12 timeframe) that Hauppauge is putting the HVR-1600 inside - of the PVR-150 box; if you're purchasing a retail PVR-150, - carefully examine the packaging - there should be some indication - that the hardware inside is actually a HVR-1600 and not a PVR-150. - Check the Supported Hardware - (http://www.ivtvdriver.org/index.php/Supported_hardware - <http://www.ivtvdriver.org/index.php/Supported_hardware>) page of - the ivtv driver for updated support information. +o ATI All-in-Wonder series @@ -1158,7 +1163,6 @@ MythTV supports the TV-out and MPEG-2 decoder functions in the IvyTV driver. - The PVR-350 is unique amongst the Hauppauge PVR-x50 cards in that it also supports audio output, but you need to connect that audio output to something. There are two courses of action you may take: @@ -1218,7 +1222,8 @@ [1mNOTE[22m: you must have the MySQL database software installed on a system to store the master database. This does not necessarily mean that MySQL must run on one of the MythTV boxes. The minimum MySQL - version is 3.23. + version is 5.0. + [1m3.2.1. Pre-compiled packages[0m @@ -1280,9 +1285,10 @@ Then run: - # apt-get update - # apt-get dist-upgrade - # apt-get update + + # apt-get update + # apt-get dist-upgrade + # apt-get update @@ -1292,6 +1298,7 @@ # apt-get install mythtv-suite + These steps however, do NOT perform the installation of any drivers required for [1mALSA[22m, capture cards, [1mlirc kernel modules[22m, etc., nor do they set up your MythTV database. Check http://ATrpms.net/topic/multi- @@ -1339,7 +1346,6 @@ the default directory, read and write the database, access the audio and video devices, and everything else that MythTV needs to do. - See /usr/share/doc/[4mpackagename[24m/README.Debian for more information, including copies of the MythTV documentation. The mythtv-doc package contains a copy of this HOWTO in /usr/share/doc/mythtv-doc. @@ -1417,6 +1423,7 @@ everything already installed + In that case, you're ready to move to the next ``section''. Once you have completed installing the pre-requisites, exit out of the shell and start a new one to ensure that any environment variables setup by @@ -1463,9 +1470,10 @@ to your /etc/apt/sources.list - # Christian Marillat's packages (mplayer, lame) - deb http://www.debian-multimedia.org sid main - deb-src http://www.debian-multimedia.org sid main + + # Christian Marillat's packages (mplayer, lame) + deb http://www.debian-multimedia.org sid main + deb-src http://www.debian-multimedia.org sid main @@ -1525,11 +1533,11 @@ - $ su - - # echo /usr/local/lib >> /etc/ld.so.conf - # /sbin/ldconfig - # exit - $ + $ su - + # echo /usr/local/lib >> /etc/ld.so.conf + # /sbin/ldconfig + # exit + $ @@ -1597,17 +1605,16 @@ [1mNOTE[22m: ^D means press CTRL and d at the same time. + $ su + # cd /etc/profile.d + cat > mythtv.sh + export QTDIR=/usr/lib/qt3 + export PATH=$PATH:/usr/lib/qt3/bin + ^D - $ su - # cd /etc/profile.d - cat > mythtv.sh - export QTDIR=/usr/lib/qt3 - export PATH=$PATH:/usr/lib/qt3/bin - ^D - - # chmod a+x mythtv.sh - # exit - $ exit + # chmod a+x mythtv.sh + # exit + $ exit @@ -1708,18 +1715,19 @@ Check that it worked: - # ls -l /usr/local/lib - -rw-r--r-- 1 root root 381706 Nov 4 14:22 libmp3lame.a - -rwxr-xr-x 1 root root 674 Nov 4 14:22 libmp3lame.la* - lrwxrwxrwx 1 root root 19 Nov 4 14:22 libmp3lame.so -> - libmp3lame.so.0.0.0* - lrwxrwxrwx 1 root root 19 Nov 4 14:22 libmp3lame.so.0 -> - libmp3lame.so.0.0.0* - -rwxr-xr-x 1 root root 360197 Nov 4 14:22 - libmp3lame.so.0.0.0* - # exit - $ + # ls -l /usr/local/lib + -rw-r--r-- 1 root root 381706 Nov 4 14:22 libmp3lame.a + -rwxr-xr-x 1 root root 674 Nov 4 14:22 libmp3lame.la* + lrwxrwxrwx 1 root root 19 Nov 4 14:22 libmp3lame.so -> + libmp3lame.so.0.0.0* + lrwxrwxrwx 1 root root 19 Nov 4 14:22 libmp3lame.so.0 -> + libmp3lame.so.0.0.0* + -rwxr-xr-x 1 root root 360197 Nov 4 14:22 + libmp3lame.so.0.0.0* + + # exit + $ @@ -1769,22 +1777,20 @@ $ tar -xjf xmltv-0.5.51.tar.bz2 - - Install the xmltv prerequisites. The following prerequisites are the minimum required; when you actually start running the xmltv setup pro- gram it may alert you to other modules that are required.: - $ su - # perl -MCPAN -e shell - cpan> install XML::Twig - cpan> install Date::Manip - Date::Manip is up to date. - cpan> install LWP - cpan> install XML::Writer - cpan> exit + $ su + # perl -MCPAN -e shell + cpan> install XML::Twig + cpan> install Date::Manip + Date::Manip is up to date. + cpan> install LWP + cpan> install XML::Writer + cpan> exit @@ -1833,34 +1839,53 @@ [1m5.4. Manually building MythTV[0m - If you are going to use [1msubversion[22m, execute the following instructions - to obtain the latest version of MythTV: + [1mNOTE[22m: Unless you are reading this documentation on the day that a new + version of MythTV is released, it is highly encouraged that you use + the "-fixes" version of the software and not the source tarball. + To download the release version, execute: - $ mkdir mythtv - $ svn co http://svn.mythtv.org/svn/trunk/ mythtv - $ cd mythtv + $ mkdir mythtv-release-0-21-fixes + $ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0-21-fixes + $ cd mythtv-release-0-21-fixes - To use a release version, you can execute: + See http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1 + <http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.21.1> for + release notes for MythTV v0.21.1 + Execute the following instructions to obtain the latest version of + MythTV. This is known as the "trunk" version and is considered the + unstable code which is not guaranteed to work. Use of trunk implies + that you are also reading the mythtv-dev and mythtv-commits mailing + lists; failure to read those mailing lists can cause your system to + stop working. - $ mkdir mythtv-release-0.21 - $ svn co http://svn.mythtv.org/svn/branches/release-0-21-fixes/ mythtv-release-0.21 - $ cd mythtv-release-0.21 + $ mkdir mythtv + $ svn co http://svn.mythtv.org/svn/trunk/ mythtv + $ cd mythtv + + + + See http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22 + <http://www.mythtv.org/wiki/index.php/Release_Notes_-_0.22> for + release notes for MythTV v0.22 [1mNOTE[22m: Using a svn version of the code allows you to stay up-to-date with changes. So, if there's an update to the 0.21 release and you originally obtained it using svn, you could enter the mythtv- - release-0.21 directory and type "svn up", which will update your copy - with the fixed version from the website. You would then recompile and - install the updated 0.21 code. + release-0-21-fixes directory and type "svn up", which will update your + copy with the fixed version from the website. You would then + recompile and install the updated 0.21 code. + + If you are using the tarball, then unpack it. Again, use of the + tarball is only appropriate if a "-fixes" branch hasn't been created + for the code that you're running. - If you are using the tarball, then unpack it: $ tar -xjf mythtv-0.21.tar.bz2 @@ -1875,8 +1900,7 @@ To compile: - - $ make -j 2 + $ make -j 2 @@ -1934,7 +1958,6 @@ executable. Enabling real-time scheduling is optional, but can make the video display smoother, especially if you are decoding HDTV. - [1m5.4.1.1. rlimits[0m The rlimits method is the preferred method and is included in Linux @@ -1994,7 +2017,8 @@ would still like to do this, you just need to run this as root: - # chmod a+s /usr/local/bin/mythfrontend /usr/local/bin/mythtv + + # chmod a+s /usr/local/bin/mythfrontend /usr/local/bin/mythtv @@ -2055,11 +2079,10 @@ [1m6. MySQL.[0m - If you install MySQL 4.x, rather than 3.x, you will also want to - comment out "log-bin" in your my.cnf configuration file. This option - will quickly fill your "/var" disk partition with many gigabytes of - data, unless you are doing database replication and deleting these - files regularly. + When you install MySQL 5.x you will also want to comment out "log-bin" + in your my.cnf configuration file. This option will quickly fill your + "/var" disk partition with many gigabytes of data, unless you are + doing database replication and deleting these files regularly. [1m6.1. Distribution-specific information[0m @@ -2077,11 +2100,10 @@ If this is happening to you, try running the following commands. - - $ su - # chkconfig --level 35 mysql on - # /etc/rc.d/init.d/mysql start - # exit + $ su + # chkconfig --level 35 mysql on + # /etc/rc.d/init.d/mysql start + # exit @@ -2114,8 +2136,7 @@ To setup the initial MySQL databases: - - $ cd database + $ cd database @@ -2169,8 +2190,6 @@ mysql> grant all on mythconverg.* to mythtv@"%" identified by "mythtv"; mysql> flush privileges; - - For a more secure setup, you can restrict which machines or subnets have access. If you have a complete DNS system operational, you could do the following: @@ -2190,6 +2209,8 @@ mysql> grant all on mythconverg.* to mythtv@"192.168.1.%" identified by "mythtv"; mysql> flush privileges; + + You'll also need to check that the "networking" feature of MySQL is turned on. Check that /etc/mysql/my.cnf [4mdoes[24m [4mnot[24m contain skip- networking. If it does, remove it. Also verify that bind-address is @@ -2197,7 +2218,7 @@ these items, restart [1mMySQL[22m. [1mNOTE[22m: Your distribution may have a customized MySQL configuration - file; in Mandrive, check /etc/sysconfig/mysqld for additional + file; in Mandriva, check /etc/sysconfig/mysqld for additional configuration. @@ -2474,7 +2495,6 @@ [1mNOTE to Mandriva 9.1 users[22m: skip to the manual start paragraph below. - If the lirc configure program / compile did not mention anything about a kernel module, then you are finished. If it did mention a kernel module, you must edit the /etc/modules.conf file. Add this line as the @@ -2499,7 +2519,7 @@ 9.1 users, type: # /etc/rc.d/init.d/lircd start instead of: - # /usr/local/sbin/lircd + # /usr/local/sbin/lircd @@ -2536,6 +2556,7 @@ another may contain a definition for "Chan+". Your lircrc file must therefore be configured appropriately, or it won't work. + If this fails, complaining of a missing lircd.conf file, then you must find or make one. First look for a pre-made configuration file at http://lirc.sourceforge.net/remotes/ @@ -2622,6 +2643,7 @@ $ irw + Start pressing the keys on your remote; [1mirw [22mwill print the name of the button as it is defined in your /etc/lircd.conf. If you don't see any- thing at this point, you need to troubleshoot further by going back to @@ -2644,7 +2666,29 @@ control unless you're using native lirc support. - [1m8.4. Additional information for lirc[0m + + [1m8.4. Additional information for lirc - native mode[0m + + If you will be using native mode, your lircrc file will need to look + something like this: + + + + begin + remote = mceusb + prog = mythtv + button = Guide + config = S + repeat = 0 + delay = 0 + end + + + + Note that the name of the "prog" is [1mmythtv[22m, not [1mmythtvfrontend[0m + + + [1m8.5. Additional information for lirc - irxevent mode[0m Take a look at the lircrc.example files in the contrib/configfiles/ directory. In my case, (Pinnacle Studio card) the channel up and down @@ -2717,7 +2761,7 @@ experiment and see which value works best for you. - [1m8.5. Configuring lirc for use with an IR blaster[0m + [1m8.6. Configuring lirc for use with an IR blaster[0m Lirc has support for various IR transmitters. A popular model is the Actisys IR-200L http://store.snapstreamstore.com/accessories.html @@ -3406,7 +3450,7 @@ called ``Automatically rotating logs'' for more information. - [1m9.3. Configuring a non-master backend[0m + [1m9.3. Configuring a slave backend[0m Ensure that you've granted access to the master MySQL database for remote backends as discussed in the section titled ``Modifying access @@ -3436,16 +3480,15 @@ backend due to IP address misconfiguration then MythTV will not function properly. - Configuration of a non-master backend follows the same general - procedure as that of the master backend, with the exception that you - skip over the "Video Sources" step. All possible video sources need - to be defined on the master backend system; only the master backend - will query a listings provider to obtain guide data for all the non- - master backends. + Configuration of a slave backend follows the same general procedure as + that of the master backend, with the exception that you skip over the + "Video Sources" step. All possible video sources need to be defined + on the master backend system; only the master backend will query a + listings provider to obtain guide data for all the slave backends. - [1mNOTE[22m: Do not run mythfilldatabase on a non-master backend. + [1mNOTE[22m: Do not run mythfilldatabase on a slave backend. [1m9.4. Configuring and running mythfilldatabase[0m @@ -3485,7 +3528,6 @@ fit. The [1mmythbackend [22mprogram will now run [1mmythfilldatabase [22mfor you. - [1m9.5. Grabbing channel icons for Schedules Direct users[0m While the Schedules Direct TV listings service has several advantages, @@ -3547,6 +3589,9 @@ [1mNOTE[22m: You should go through the various setup screens in mythfrontend before using any other modules to ensure that the the database is correctly initialized. + + + [1m10.1. General[0m The General screen has configuration items that don't really fit @@ -6929,6 +6974,8 @@ handle SIG33 nostop noprint set logging on set pagination off + set breakpoint pending on + break qFatal set args -l myth.log -v record,channel,siparser run thread apply all bt full @@ -8611,24 +8658,29 @@ +o s/S = SDT : DVB only + +o c/C = Crypt : The channel is encrypted. If you have a CAM you + should see a "C" after a few seconds. + [1m23.23. What is the difference between the various Hauppauge PVR mod-[0m [1mels?[0m This is covered in the hardware section, and extensively covered on the Hauppauge website. - (http://www.hauppauge.com/pages/compare_pvr.html - <http://www.hauppauge.com/pages/compare_pvr.html>) Please check the - Hauppauge website for the most accurate information. + (http://www.hauppauge.com/site/compare/compare_pvr.html + <http://www.hauppauge.com/site/compare/compare_pvr.html>) Please check + the Hauppauge website for the most accurate information. A PVR-150 comes in a number of versions: +o The PVR-150 (Model 1045) is the retail kit. It comes with a remote control and an IR Blaster. It does not have a radio tuner. + +o The PVR-150 MCE (Model 1042) will usually come in a plain white box and is sold as an OEM device. It does not come with a remote control, since it's usually used as the second, third, etc capture device. + +o The PVR-150 MCE Kit (Model 1062) does not have a radio tuner and comes with a Microsoft Media Center remote control instead of Hauppauge's. Dateien mythtv-0.21/docs/stop.png und mythtv/docs/stop.png sind verschieden. Dateien mythtv-0.21/docs/warning.png und mythtv/docs/warning.png sind verschieden. Dateien mythtv-0.21/i18n/mythfrontend_cz.qm und mythtv/i18n/mythfrontend_cz.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_cz.ts mythtv/i18n/mythfrontend_cz.ts --- mythtv-0.21/i18n/mythfrontend_cz.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_cz.ts 2008-04-10 13:40:17.000000000 +0200 @@ -164,23 +164,23 @@ </message> <message> <source>Create Input Group</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vytvořit skupinu vstupů</translation> </message> <message> <source>Enter new group name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zadat jméno nové skupiny</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Chyba</translation> </message> <message> <source>Sorry, this Input Group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jméno skupiny nemůže být prázdné.</translation> </message> <message> <source>Sorry, this Input Group name is already in use.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto jméno skupiny již existuje.</translation> </message> </context> <context> @@ -457,23 +457,23 @@ </message> <message> <source>Add</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přidat</translation> </message> <message> <source>Match words in the subtitle</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Hledat slova v titulku</translation> </message> <message> <source>Match this series</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Hledat tuto sérii</translation> </message> <message> <source>Only shows marked as widescreen</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pouze programy označené jako širokoúhlé</translation> </message> <message> <source>Exclude H.264 encoded streams (EIT only)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyřadit data kódovaná H.264 (pouze EIT)</translation> </message> </context> <context> @@ -583,159 +583,159 @@ </message> <message> <source>The Cartesian latitude for your location.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kartézská šířka pro vaši lokaci.</translation> </message> <message> <source>Use negative numbers for southern and western coordinates.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Použijte záporná čísla pro jižní a západní koordináty.</translation> </message> <message> <source>The Cartesian longitude for your location.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kartézská délka pro Vaši lokaci.</translation> </message> <message> <source>Device Type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Typ zařízení</translation> </message> <message> <source>Switch</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přepínač</translation> </message> <message> <source>Rotor</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Rotor</translation> </message> <message> <source>LNB</source> - <translation type="unfinished"></translation> + <translation type="unfinished">LNB</translation> </message> <message> <source>Optional descriptive name for this device, to make it easier to configure settings later.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Volitelné jméno pro toto zařízení. Pomáhá při pozdější konfiguraci nastavení.</translation> </message> <message> <source>Repeat Count</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Počet opakování</translation> </message> <message> <source>Number of times to repeat DiSEqC commands sent to this device. Larger values may help with less reliable devices.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Počet opakování příkazů DiSEqC odeslaných na toto zařízení. Vyšší hodnoty mohou pomoci s méně spolehlivými zařízeními.</translation> </message> <message> <source>Switch Type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Typ přepínače</translation> </message> <message> <source>Select the type of switch from the list.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte typ přepínače ze seznamu.</translation> </message> <message> <source>Tone</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tónový</translation> </message> <message> <source>DiSEqC (Uncommitted)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">DiSEqC (nepropojený)</translation> </message> <message> <source>Legacy SW21</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tradiční SW21</translation> </message> <message> <source>Legacy SW42</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tradiční SW42</translation> </message> <message> <source>Legacy SW64</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tradiční SW64</translation> </message> <message> <source>Number of ports</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Počet portů</translation> </message> <message> <source>The number of ports this switch has.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Počet portů které přepínač nabízí.</translation> </message> <message> <source>Switch Configuration</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Konfigurace přepínače</translation> </message> <message> <source>Rotor Type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Typ rotoru</translation> </message> <message> <source>Select the type of rotor from the list.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte typ rotoru ze seznamu.</translation> </message> <message> <source>DiSEqC 1.2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">DiSEqC 1.2</translation> </message> <message> <source>DiSEqC 1.3 (GotoX/USALS)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">DiSEqC 1.3 (GotoX/USALS)</translation> </message> <message> <source>Rotor Low Speed (deg/sec)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nízká rychlost motoru (stupňů/sec)</translation> </message> <message> <source>To allow the approximate monitoring of rotor movement, enter the rated angular speed of the rotor when powered at 13V.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pro umožnění přesného monitorování posunu motoru, zadejte nominální rychlost motoru při napájení 13V.</translation> </message> <message> <source>Rotor High Speed (deg/sec)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vysoká rychlost motoru (stupňů/sec)</translation> </message> <message> <source>To allow the approximate monitoring of rotor movement, enter the rated angular speed of the rotor when powered at 18V.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pro umožnění přesného monitorování posunu motoru, zadejte nominální rychlost motoru při napájení 18V.</translation> </message> <message> <source>Position Index %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ukazatel pozice %1</translation> </message> <message> <source>Orbital Position</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Orbitální pozice</translation> </message> <message> <source>Position #%1 (%2)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pozice #%1 (%2)</translation> </message> <message> <source>Rotor Position Map</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Mapa pozice rotoru</translation> </message> <message> <source>Rotor Configuration</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Konfigurace rotoru</translation> </message> <message> <source>Positions</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pozice</translation> </message> <message> <source>Rotor position setup.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nastavení pozice rotoru.</translation> </message> <message> <source>Single (Europe)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jednoduchý (Evropa)</translation> </message> <message> <source>Universal (Europe)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Univerzální (Evropa)</translation> </message> <message> <source>Circular (N. America)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kruhový-circular (S. Amerika)</translation> </message> <message> <source>Linear (N. America)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Lineární (S. Amerika)</translation> </message> <message> <source>C Band</source> @@ -751,31 +751,31 @@ </message> <message> <source>Select the LNB preset from the list, or choose 'Custom' and set the advanced settings below.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte přednastavený LNB ze seznamu, zvolte jiný pro nastavení rozšířených možností níže.</translation> </message> <message> <source>Custom</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jiný</translation> </message> <message> <source>LNB Type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Typ LNB</translation> </message> <message> <source>Select the type of LNB from the list.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte typ LNB ze seznamu</translation> </message> <message> <source>Legacy (Fixed)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tradiční (pevný)</translation> </message> <message> <source>Standard (Voltage)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Standardní (napětí)</translation> </message> <message> <source>Universal (Voltage & Tone)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Univerzální (napětí a tón)</translation> </message> <message> <source>Bandstacked</source> @@ -807,35 +807,35 @@ </message> <message> <source>LNB Reversed</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Obrácené LNB</translation> </message> <message> <source>This defines whether the signal reaching the LNB is reversed from normal polarization. This happens to circular signals bouncing twice on a toroidal dish.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto definuje zda je signál dopadající na LNB obrácený oproti standardní polarizaci. Toto vzniká při svojitém dopadu kruhového (circular) signálu na toroidní disk.</translation> </message> <message> <source>LNB Configuration</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Konfigurace LNB</translation> </message> <message> <source>Select Type of Device</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte typ zařízení</translation> </message> <message> <source>DiSEqC Device Tree</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Strom zařízení DiSEqC</translation> </message> <message> <source>Choose a port to use for this switch.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zvolte který port na přepínači chcete použít.</translation> </message> <message> <source>Port %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Port %1</translation> </message> <message> <source>Choose a satellite position.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zvolte pozici satelitu.</translation> </message> <message> <source>Locates the satellite you wish to point to with the longitude along the Clarke Belt of the satellite [-180..180] and its hemisphere.</source> @@ -843,23 +843,31 @@ </message> <message> <source>Longitude (degrees)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zeměpisná délka (stupňů)</translation> </message> <message> <source>Hemisphere</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Polokoule</translation> </message> <message> <source>Eastern</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Východní</translation> </message> <message> <source>Western</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Západní</translation> </message> <message> <source>DTV Device Configuration</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Konfigurace zařízení DTV</translation> + </message> + <message> + <source>Voltage</source> + <translation type="unfinished">Napětí</translation> + </message> + <message> + <source>Mini DiSEqC</source> + <translation type="unfinished">Mini DiDEqC</translation> </message> </context> <context> @@ -873,7 +881,7 @@ <name>GuideGrid</name> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished">Smazat '%1' %2 pravidlo?</translation> + <translation type="unfinished">Smazat pravidlo '%1' %2 ?</translation> </message> </context> <context> @@ -1098,7 +1106,7 @@ </message> <message> <source>Select removable media to eject or insert</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte výměnné médium pro vyjmutí nebo vložení</translation> </message> </context> <context> @@ -1151,11 +1159,11 @@ </message> <message> <source>MythTV was unable to backup your database.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">MythTV nebylo schopno provést zálohu databáze.</translation> </message> <message> <source>If your system becomes unstable, a database backup file called %1 is located in %2.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud se Váš systém stane nestabilní, soubor se zálohou databáze se jmenuje %1 a je uložen v %2.</translation> </message> </context> <context> @@ -1327,11 +1335,11 @@ </message> <message> <source>Playlist options</source> - <translation type="unfinished">Volby plejlistu</translation> + <translation type="unfinished">Volby playlistu</translation> </message> <message> <source>Add this recording to Playlist</source> - <translation type="unfinished">Přidat tuto nahrávku do plejlistu</translation> + <translation type="unfinished">Přidat tuto nahrávku do Playlistu</translation> </message> <message> <source>Are you sure you want to delete:</source> @@ -1363,11 +1371,11 @@ </message> <message> <source>There are %1 items in the playlist.</source> - <translation type="unfinished">V plejlistu je %1 položek.</translation> + <translation type="unfinished">V playlistu je %1 položek.</translation> </message> <message> <source>There is %1 item in the playlist.</source> - <translation type="unfinished">V plejlistu je %1 položka.</translation> + <translation type="unfinished">V playlistu je %1 položka.</translation> </message> <message> <source>Play</source> @@ -1379,23 +1387,23 @@ </message> <message> <source>Clear Playlist</source> - <translation type="unfinished">Smazat plejlist</translation> + <translation type="unfinished">Smazat Playlist</translation> </message> <message> <source>Toggle playlist for this Category/Title</source> - <translation type="unfinished">Přepnout plejlist pro tuto kategorii/název</translation> + <translation type="unfinished">Přepnout playlist pro tuto kategorii/název</translation> </message> <message> <source>Toggle playlist for this Recording Group</source> - <translation type="unfinished">Přepnout plejlist pro tuto nahrávací skupinu</translation> + <translation type="unfinished">Přepnout playlist pro tuto nahrávací skupinu</translation> </message> <message> <source>Toggle playlist for this recording</source> - <translation type="unfinished">Přepnout plejlist pro tuto nahrávku</translation> + <translation type="unfinished">Přepnout playlist pro tuto nahrávku</translation> </message> <message> <source>These actions affect all items in the playlist</source> - <translation type="unfinished">Tyto akce ovlivní všechny položky v plejlistu</translation> + <translation type="unfinished">Tyto akce ovlivní všechny položky v playlist</translation> </message> <message> <source>Change Recording Group</source> @@ -1463,11 +1471,11 @@ </message> <message> <source>Remove from Playlist</source> - <translation type="unfinished">Odstranit z plejlistu</translation> + <translation type="unfinished">Odstranit z playlistu</translation> </message> <message> <source>Add to Playlist</source> - <translation type="unfinished">Přidat do plejlistu</translation> + <translation type="unfinished">Přidat do playlistu</translation> </message> <message> <source>Stop Recording</source> @@ -1535,7 +1543,7 @@ </message> <message> <source>Add this Group to Playlist</source> - <translation type="unfinished">Přidat tuto skupinu do plejlistu</translation> + <translation type="unfinished">Přidat tuto skupinu do playlistu</translation> </message> <message> <source>ERROR: Recorded file does not exist.</source> @@ -1651,7 +1659,7 @@ </message> <message> <source>Watch List</source> - <translation type="unfinished">Watch List</translation> + <translation type="unfinished">K přehrání</translation> </message> <message> <source>There are no recordings in your current view</source> @@ -1687,7 +1695,7 @@ </message> <message> <source>Show Watch List</source> - <translation type="unfinished">Zobraz Watch List</translation> + <translation type="unfinished">Zobraz seznam "K přehrání"</translation> </message> <message> <source>Show Searches</source> @@ -1751,19 +1759,19 @@ </message> <message> <source>_NO_TITLE_</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ŽÁDNÝ_NÁZEV</translation> </message> <message> <source>Delete, and allow re-record</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Smazat a povolit nové nahrání</translation> </message> <message> <source>Deleted</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Smazáno</translation> </message> <message> <source>Allow this program to re-record</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Povolit tento program pro znovunahrání</translation> </message> </context> <context> @@ -1818,19 +1826,19 @@ </message> <message> <source>Max CPUs</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Max CPU</translation> </message> <message> <source>Fallback Deinterlacer</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Záložní deinterlace</translation> </message> <message> <source>Maximum number of CPU cores used for decoding.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Maximální počet jader CPU použitých pro dekódování.</translation> </message> <message> <source> Multithreaded decoding disabled-only one CPU will be used, please recompile with --enable-ffmpeg-pthreads to enable.</source> - <translation type="unfinished"></translation> + <translation type="unfinished"> Vícevláknové dekódování je vypnuto, bude použito pouze jedno jádro, spusťte prosím novou kompilaci s parametrem --enable-ffmpeg-pthreads pro povolení</translation> </message> </context> <context> @@ -2122,7 +2130,7 @@ </message> <message> <source>0 .. 9 moves to Nx10 percent in list</source> - <translation type="unfinished"></translation> + <translation type="unfinished">0 až 9 přesune na Nx10 procent v seznamu</translation> </message> </context> <context> @@ -2970,7 +2978,7 @@ </message> <message> <source>Tuner Busy</source> - <translation type="unfinished">Ladič zaneprázdněn</translation> + <translation type="unfinished">Tuner zaneprázdněn</translation> </message> <message> <source>Inactive</source> @@ -3042,7 +3050,7 @@ </message> <message> <source>the tuner card was already being used.</source> - <translation type="unfinished">karta ladiče bylo už použita.</translation> + <translation type="unfinished">karta tuneru bylo už použita.</translation> </message> <message> <source>you should never see this.</source> @@ -3827,7 +3835,7 @@ </message> <message> <source>If specified, this command will be run to change the channel for inputs which have an external tuner device such as a cable box. The first argument will be the channel number.</source> - <translation type="unfinished">Tento příkaz bude spuštěn pro změnu kanálu pro vsupy, které mají externí tuner jako je "cable box". První argument je číslo kanálu.</translation> + <translation type="unfinished">Tento příkaz bude spuštěn pro změnu kanálu pro vstupy, které mají externí tuner jako je "cable box". První argument je číslo kanálu.</translation> </message> <message> <source>Preset tuner to channel</source> @@ -4735,7 +4743,7 @@ </message> <message> <source>General</source> - <translation type="unfinished">Obecné</translation> + <translation type="unfinished">Všeobecné nastavení</translation> </message> <message> <source>Program Guide</source> @@ -5388,7 +5396,7 @@ </message> <message> <source>The AutoExpire List shows all recordings which may be expired and the order of their expiration. Recordings at the top of the list will be expired first.</source> - <translation type="unfinished">Seznam AutoExpirací ukazuje všechny nahrávky, které mohou expirovat jejich pořadí. Nahrávky na začátku seznamu expirují nejdříve.</translation> + <translation type="unfinished">Seznam AutoExpirací ukazuje všechny nahrávky, které mohou expirovat a pořadí jejich expirace. Nahrávky na začátku seznamu expirují nejdříve.</translation> </message> <message> <source>%1 hours left</source> @@ -6560,7 +6568,7 @@ </message> <message> <source>Musical/Opera</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Muzikál/Opera</translation> </message> <message> <source>Ballet</source> @@ -6568,23 +6576,23 @@ </message> <message> <source>Arts/Culture</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Umění/Kultura</translation> </message> <message> <source>Performing Arts</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Herecké umění</translation> </message> <message> <source>Fine Arts</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Výtvarné umění</translation> </message> <message> <source>Religion</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Náboženství</translation> </message> <message> <source>Popular Culture/Traditional Arts</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Populární vzdělávání/ Tradiční umění</translation> </message> <message> <source>Literature</source> @@ -6592,103 +6600,103 @@ </message> <message> <source>Film/Cinema</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Film</translation> </message> <message> <source>Experimental Film/Video</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Experimentální film</translation> </message> <message> <source>Broadcasting/Press</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vysílání/ Tisk</translation> </message> <message> <source>New Media</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nová média</translation> </message> <message> <source>Arts/Culture Magazines</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kulturní/ umělecké magazíny</translation> </message> <message> <source>Social/Policical/Economics</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Sociální/Politické/Ekonomické</translation> </message> <message> <source>Magazines/Reports/Documentary</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Magazíny/Reportáže/Dokumentární</translation> </message> <message> <source>Economics/Social Advisory</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ekonomické/ Sociální poradna</translation> </message> <message> <source>Remarkable People</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pozoruhodní lidé</translation> </message> <message> <source>Education/Science/Factual</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vzdělávání/Věda/Fakty</translation> </message> <message> <source>Nature/animals/Environment</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Příroda/Zvířata/Prostředí</translation> </message> <message> <source>Technology/Natural Sciences</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Technologie/Přírodní vědy</translation> </message> <message> <source>Medicine/Physiology/Psychology</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Lékařské/Psychologie/Fyziologie</translation> </message> <message> <source>Foreign Countries/Expeditions</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zahraniční země/Expedice</translation> </message> <message> <source>Social/Spiritual Sciences</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Společenské/Duševní vědy</translation> </message> <message> <source>Further Education</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Další vzdělávání</translation> </message> <message> <source>Languages</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jazyky</translation> </message> <message> <source>Leisure/Hobbies</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zábava/Koníčky</translation> </message> <message> <source>Tourism/Travel</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Cestování/Turistika</translation> </message> <message> <source>Handicraft</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Řemesla</translation> </message> <message> <source>Motoring</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Motorismus</translation> </message> <message> <source>Fitness & Health</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zdraví & Fitness</translation> </message> <message> <source>Cooking</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vaření</translation> </message> <message> <source>Advertizement/Shopping</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Reklamy/TV Shopping</translation> </message> <message> <source>Gardening</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zahradničení</translation> </message> <message> <source>Original Language</source> @@ -6700,7 +6708,7 @@ </message> <message> <source>"Unpublished" Programmes</source> - <translation type="unfinished"></translation> + <translation type="unfinished">"Nepublikované" programy</translation> </message> <message> <source>Live Broadcast</source> @@ -6713,7 +6721,7 @@ </message> <message> <source>Title match (regex)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Název odpovídá</translation> </message> <message> <source>Automatically set new recording rules to use this group if the title matches this regular expression. For example, "(News|CNN)" would match any title in which "News" or "CNN" appears.</source> @@ -6766,7 +6774,7 @@ </message> <message> <source>Other Showing</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ostatní představení</translation> </message> <message> <source>the recording failed.</source> @@ -6806,7 +6814,7 @@ </message> <message> <source>Deaf Signing</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Označeno "pro neslyšící"</translation> </message> <message> <source>Last Recorded</source> @@ -6826,7 +6834,7 @@ </message> <message> <source>Watch List Score</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Hodnocení seznamu "K přehrání"</translation> </message> <message> <source>Auto-expire off</source> @@ -6846,7 +6854,7 @@ </message> <message> <source>Watch List Status</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Status seznamu "K přehrání"</translation> </message> <message> <source>Storage Group</source> @@ -6854,7 +6862,7 @@ </message> <message> <source>SAP/Bilingual</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Duální zvuk</translation> </message> <message> <source>Main Language</source> @@ -6862,7 +6870,7 @@ </message> <message> <source>SAP Language</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jazyk sekundárního zvuku</translation> </message> <message> <source>Dual</source> @@ -6870,7 +6878,7 @@ </message> <message> <source>Chooses the language(s) to record when two languages are broadcast. Only Layer II supports the recording of two languages (Dual).Requires ivtv 0.4.0 or later.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte jazyk pro nahrávání, pokud je vysílán duální zvuk. Pouze Vrstva II podporuje nahrávání dvou jazyků (duální). vyžaduje ivtv 0.4.0 nebo novější.</translation> </message> <message> <source>If set, the bitrate specified will be used for 640x480. If other resolutions are used, the bitrate will be scaled appropriately.</source> @@ -7034,7 +7042,7 @@ </message> <message> <source>Rename to Match</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přejmenovat na odpovídající</translation> </message> <message> <source>Existing Channel Treatment</source> @@ -7126,7 +7134,7 @@ </message> <message> <source>Do not Transcode new recordings</source> - <translation type="unfinished">Nepřekodovat nové nahrávky</translation> + <translation type="unfinished">Nepřekódovat nové nahrávky</translation> </message> <message> <source>[ Select transcoder ]</source> @@ -7154,15 +7162,15 @@ </message> <message> <source>This section lists each transport that MythTV currently knows about. The display fields are video source, modulation, frequency, and when relevant symbol rate, network id, and transport id.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tato sekce obsahuje všechny transporty které MythTV zná. Zobrazují se pole zdroj, modulace, frekvence, odpovídající symbolovou rychlost, síťové ID a ID transportu.</translation> </message> <message> <source>Sorry, the Transport Editor can only be used to edit transports which are connected to a card input.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Editor transportu může být použit pouze k úpravě transportů, které jsou připojeny ke vstupu karty.</translation> </message> <message> <source>Failed to probe a capture card connected to this transport's video source. Please make sure the backend is not running.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zjišťování zda je zachytávací karta připojena ke zdroji tohoto transportu selhalo. Ujistěte se prosím že backend neběží.</translation> </message> <message> <source>The Video Sources to which this Transport is connected are incompatible, please create seperate video sources for these cards. </source> @@ -7174,11 +7182,11 @@ </message> <message> <source>Guiding standard to use for making sense of the data streams after they have been demodulated, error corrected and demultiplexed.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Standard pro zpracování datového toku poté, co je demodulován, jsou zkorigovány chyby a demultiplexován.</translation> </message> <message> <source>OpenCable</source> - <translation type="unfinished"></translation> + <translation type="unfinished">OpenCable</translation> </message> <message> <source>MPEG</source> @@ -7204,11 +7212,11 @@ </message> <message> <source>Adjust Playback</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přizpůsobit přehrávání</translation> </message> <message> <source>Adjust Recorder</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přizpůsobit nahrávání</translation> </message> <message> <source>Mythtv has been idle for %1 minutes and will exit in %2 seconds. Are you still watching?</source> @@ -7261,11 +7269,11 @@ </message> <message> <source>Note: Closed caption decoding will not work with libmpeg2.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Poznámka: dekódování skrytých titulků nebude fungovat s libmpeg2.</translation> </message> <message> <source>Standard XvMC will use XvMC API 1.0 to play back video; this is fast, but does not work well with HDTV sized frames.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Standardní XvMC bude používat XvMC API 1.0 pro přehrávání obrazu. To je sice rychlé, ale nepracuje dobře se snímky v HDTV rozlišení.</translation> </message> <message> <source>VIA XvMC will use the VIA VLD XvMC extension.</source> @@ -7281,7 +7289,7 @@ </message> <message> <source>Linear blend</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Lineární míchání (blend)</translation> </message> <message> <source>Kernel</source> @@ -7293,15 +7301,15 @@ </message> <message> <source>One field</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jedno půlsnímek</translation> </message> <message> <source>Linear blend (HW)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Lineární míchání (HW)</translation> </message> <message> <source>Kernel (HW)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kernel (HW)</translation> </message> <message> <source>Bob (2x, HW)</source> @@ -7309,87 +7317,87 @@ </message> <message> <source>One field (HW)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jeden půlsnímek (HW)</translation> </message> <message> <source>One Field (2x, HW)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jeden půlsnímek (2x, HW)</translation> </message> <message> <source>Kernel (2x, HW)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kernel (2x, HW)</translation> </message> <message> <source>Linear blend (2x, HW)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Lineární míchání (2x, HW)</translation> </message> <message> <source>Interlaced (2x, Hw)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Prokládané (2x, HW)</translation> </message> <message> <source>Video rendering method</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Metoda zobrazování obrazu</translation> </message> <message> <source>Render video offscreen. Used internally.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Počítat obraz mimo obrazovku. Používá se interně.</translation> </message> <message> <source>Use X11 pixel copy to render video. This is not recommended if any other option is available. The video will not be scaled to fit the screen. This will work with all X11 servers, local and remote.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Používat kopírování pixelů X11 pro zobrazení obrazu. Toto není doporučeno, pokud je k dispozici jiná možnost. Obraz nebude upraven na velikost obrazovky. Toto funguje se všemi X11 servery, lokálními i vzdálenými.</translation> </message> <message> <source>Use X11 shared memory pixel transfer to render video. This is only recommended over the X11 pixel copy renderer. The video will not be scaled to fit the screen. This works with most local X11 servers.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Použít přenos pixelů sdílenou pamětí X11. Toto je doporučeno pouze oproti kopírování pixelů X11. Obraze nebude upraven na velikost obrazovky. Toto funguje s většinou lokálních X11 serverů.</translation> </message> <message> <source>This is the standard video renderer for X11 systems. It uses XVideo hardware assist for scaling, color conversion. If the hardware offers picture controls the renderer supports them.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je standardní zobrazovač obrazu pro X11 systémy. Využívá XVideo hardwarovou akceleraci pro úpravu velikosti a konverzi barev. Pokud hardware nabízí kontrolu obrazu, zobrazovač ji použije.</translation> </message> <message> <source>This is the standard video renderer for XvMC decoders. It uses XVideo hardware assist for scaling, color conversion and when available offers XVideo picture controls.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je standardní zobrazovač obrazu pro dekodéry XvMC. Používá XVideo hardwarovou akceleraci pro úpravu velikosti a konverzi barev. Pokud hardware nabízí kontrolu obrazu, zobrazovač ji použije.</translation> </message> <message> <source>This video renderer for XvMC on nVidia cards uses XVideo for color conversion and OpenGL for scaling. The main benefit of this renderer is that it allows OpenGL OSD rendering, which frees two XvMC buffers for decoding. It requires a reasonably fast nVidia card.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tento zobrazovač videa pro karty nVidia používá XVideo pro barevnou konverzi a OpenGL pro úpravu velikosti. Hlavní výhodou tohoto zobrazovače je umožnění zobrazování OSD s pomocí OpenGL. To uvolní dva XvMC buffery pro dekódování. Je vyžadována dostatečně rychlá karta nVidia.</translation> </message> <message> <source>This video renderer uses DirectFB for scaling and color conversion. It is not as feature rich as the standard video renderer, but can run on Linux hardware without an X11 server.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tento zobrazovač používá DirectFB pro úpravu velikosti a barevnou konverzi. Nemá tolik vlastností jako standardní zobrazovač, ale může běžet na Linuxovém hardware be X11 serveru.</translation> </message> <message> <source>This is the standard video render for Macintosh OS X systems.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je standardní zobrazovač pro systémy Macintosh OS X.</translation> </message> <message> <source>This is the only video renderer for the MacAccel decoder.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je zobrazovač videa pouze pro dekodér MacAccel.</translation> </message> <message> <source>This is only video renderer for the PVR-350 decoder.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je zobrazovač videa pouze pro dekodér PVR-350.</translation> </message> <message> <source>This video renderer uses OpenGL for scaling and color conversion and can offer limited picture contols. This requires a faster GPU than XVideo. Also, when enabled, picture controls consume additional resources.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tento zobrazovač obrazu používá OpenGl pro úpravu velikosti a barevnou konverzi a může nabídnout omezenou kontrolu obrazu. Vyžaduje rychlejší GPU než XVideo. Pokud je aktivován, kontrola obrazu spotřebuje dodatečné zdroje.</translation> </message> <message> <source>Perform no deinterlacing.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Neprovádět odstraňování prokládání.</translation> </message> <message> <source>Shows only one of the two fields in the frame. This looks good when displaying a high motion 1080i video on a 720p display.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazovat pouze jedno pole ze dvou ve snímku. Toto vypadá dobře, pokud zobrazujete velmi pohyblivý obraz 1080i na 720p obrazovce.</translation> </message> <message> <source>Blends the odd and even fields linearly into one frame.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Smíchat liché a sudé půlsnímky lineárně do jednoho snímku.</translation> </message> <message> <source>This filter disables deinterlacing when the two fields are similar, and performs linear deinterlacing otherwise.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tento filtr vypne odstraňování prokládání pokud jsou půlsnímky podobné jinak provede lineární odstranění prokládání.</translation> </message> <message> <source>(Hardware Accelerated)</source> @@ -7397,7 +7405,7 @@ </message> <message> <source>With workaround for broken interlaced modelines.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">S náhradním řešením pro poškozené prokládané řádky.</translation> </message> <message> <source>'%1' has not been documented yet.</source> @@ -7409,23 +7417,23 @@ </message> <message> <source>Render the OSD using the XVideo chromakey feature.This renderer does not alpha blend. But it is the fastest OSD renderer; and is particularly efficient compared to the ia44blend OSD renderer for XvMC.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazit OSD s využitím vlastnosti XVideo "sytost barev" (chromakey). Tentozobrazovač nepoužívá aplha míchání. Ale je to nejrychlejší zobrazovač OSD zvláště efektivní v porovnání se zobrazovačem OSD ia44blend pro XvMC. </translation> </message> <message> <source>Note: nVidia hardware after the 5xxx series does not have XVideo chromakey support.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Poznámka: karty nVidia po sérii 5xxx nemají podporu pro XVideo "sytost barev" (chromakey)</translation> </message> <message> <source>Software OSD rendering uses your CPU to alpha blend the OSD.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Softwarové OSD zobrazování použije Vaše CPU pro alfa míchání OSD.</translation> </message> <message> <source>Uses hardware support for 16 color alpha-blend surfaces for rendering the OSD. Because of the limited color range, MythTV renders the OSD in 16 level grayscale.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Využívá podporu hardware pro 16-ti barevné alpha míchání pro zobrazení OSD. Z důvodu omezeného barevného rozsahu, MythTV zobrazuje OSD v 16-ti úrovních šedi. </translation> </message> <message> <source>Note: Not recommended for nVidia or Intel chipsets. This removes two of the limited XvMC buffers from decoding duty.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Poznámka: Není doporučováno pro karty nVidia a Intel. Toto uvolňuje dvě z omezených XvMC vyrovnávacích pamětí z procesu dekódování.</translation> </message> <message> <source>Renders the OSD using the PVR-350 chromakey feature.</source> @@ -7485,7 +7493,7 @@ </message> <message> <source>Perform EIT Scan</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Provést scan programových dat</translation> </message> <message> <source>If this is enabled the data in this source will be updated with listing data provided by the channels themselves 'over-the-air'.</source> @@ -7553,7 +7561,7 @@ </message> <message> <source>When you change this setting, the text below should change to the name and type of your card. If the card cannot be opened, an error message will be displayed.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud změníte toto nastavení, text níže bude změněn na jméno a typ Vaší karty. Pokud karta nemůže být otevřena, bude zobrazena chybová hláška.</translation> </message> <message> <source>Subtype</source> @@ -7573,7 +7581,7 @@ </message> <message> <source>This option makes the backend dvb-recorder only open the card when it is actually in-use, leaving it free for other programs at other times.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tato volba zajistí otevření karty backendem pouze v případě že ji skutečně používá, v ostatních případech je karta ponechána volná pro jiné programy.</translation> </message> <message> <source>DVB Tuning Delay (msec)</source> @@ -7589,15 +7597,15 @@ </message> <message> <source>Cable box model</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Model kabelového STB</translation> </message> <message> <source>Generic</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Obecný</translation> </message> <message> <source>Choose the model that most closely resembles your set top box. Depending on firmware revision SA4200HD may work better for a SA3250HD box.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte model který nejlépe odpovídá Vašemu set-top-boxu. V závislosti na revizi firmware SA4200HD může pracovat lépe než SA3250HD.</translation> </message> <message> <source>Connection Type</source> @@ -7609,43 +7617,43 @@ </message> <message> <source>DBOX2 Streaming Port</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vysílací port DBOX2</translation> </message> <message> <source>DBOX2 streaming port on your DBOX2.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Číslo vysílacího portu (streaming) na Vašem DBOX2</translation> </message> <message> <source>DBOX2 HTTP Port</source> - <translation type="unfinished"></translation> + <translation type="unfinished">HTTP port DBOX2</translation> </message> <message> <source>DBOX2 http port on your DBOX2.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Číslo HTTP portu na Vašem DBOX2.</translation> </message> <message> <source>DBOX2 Host IP</source> - <translation type="unfinished"></translation> + <translation type="unfinished">IP adresa DBOX2</translation> </message> <message> <source>DBOX2 Host IP is the remote device.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vzdálená IP adresa vašeho DBOX2</translation> </message> <message> <source>Device ID</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ID zařízení</translation> </message> <message> <source>IP address or Device ID from the bottom of the HDHomeRun. You may use 'FFFFFFFF' if there is only one unit on your your network.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">IP adresa nebo ID zařízení ze spodu HDHomeRun. Můžete použít "FFFFFFFF" pokud je na Vaší síti pouze jedno takové zařízení.</translation> </message> <message> <source>M3U URL</source> - <translation type="unfinished"></translation> + <translation type="unfinished">M3U URL</translation> </message> <message> <source>URL of M3U containing IPTV channel URLs.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">URL M3U souboru který obsahuje URL IPTV stanic.</translation> </message> <message> <source>Tuner</source> @@ -7665,7 +7673,7 @@ </message> <message> <source>FireWire cable box</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kabelový box FireWire</translation> </message> <message> <source>USB MPEG-4 encoder box (Plextor ConvertX, etc)</source> @@ -7673,15 +7681,15 @@ </message> <message> <source>DBox2 TCP/IP cable box</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kabelový STB DBOX2 TCP/IP</translation> </message> <message> <source>HDHomeRun DTV tuner box</source> - <translation type="unfinished"></translation> + <translation type="unfinished">DTV STB HDHomeRun</translation> </message> <message> <source>Network Recorder</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Síťové nahrávací zařízení</translation> </message> <message> <source>Display Name (optional)</source> @@ -7689,7 +7697,7 @@ </message> <message> <source>This name is displayed on screen when live TV begins and when changing the selected input or card. If you use this, make sure the information is unique for each input.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto jméno je zobrazeno na obrazovce při spuštění živé TV a při změně vybraného vstupu nebo karty. Pokud toto používáte, ujistěte se že informace je unikátní pro každý vstup.</translation> </message> <message> <source>Unencrypted channels only</source> @@ -7725,15 +7733,15 @@ </message> <message> <source>If the input priority is not equal for all inputs, the scheduler may choose to record a show at a later time so that it can record on an input with a higher value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud priorita vstupů není stejná pro všechny vstupy, plánovač může vybrat k nahrávání pozdější čas aby mohl využít vstupu s vyšší prioritou.</translation> </message> <message> <source>Use DishNet Long-term EIT Data</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Použít dlouhodobá programová data DishNet</translation> </message> <message> <source>If you point your satellite dish toward DishNet's birds, you may wish to enable this feature. For best results, enable general EIT collection as well.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud Váš satelitní disk míří na satelity DishNet, měli by jste uvažovat o povolení této vlastnosti. Pro nejlepší výsledky, povolte taktéž obecné získávání programových informací.</translation> </message> <message> <source>(Delete all capture cards on %1)</source> @@ -7749,11 +7757,11 @@ </message> <message> <source>Data Direct Lineup</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Seznam stanic Data Direct</translation> </message> <message> <source>Retrieve Lineups</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Načíst seznamy stanic</translation> </message> <message> <source>Starting LiveTV channel.</source> @@ -7765,7 +7773,7 @@ </message> <message> <source>The following programs will be recorded instead:</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Následující programy budou nahrány místo:</translation> </message> <message> <source>currently running.</source> @@ -7785,63 +7793,63 @@ </message> <message> <source>mythfilldatabase ran, but did not insert any new data into the Guide for %1 of %2 sources. This can indicate a potential grabber failure.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">mythfilldatabase běžel, ale nevložil žádná data do programových informací pro %1 ze %2 zdrojů. Toto může indikovat potenciální selhání kolektoru (grabber).</translation> </message> <message> <source>Extra audio buffering</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Extra vyrovnávací paměť pro audio</translation> </message> <message> <source>Enable this setting if MythTV is playing "crackly" audio and you are using hardware encoding. This setting will have no effect on MPEG-4 or RTJPEG video. MythTV will keep extra audio data in its internal buffers to workaround this bug.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Povolte toto nastavení pokud MythTV poškozuje při přehrávání zvuk a používáte hardwarové kódování. Toto nastavení nebude mít vliv na MPEG-4 nebo RTJPEG obraz. MythTV bude udržovat extra zvuková data v interní vyrovnávací paměti pro odstranění této chyby. </translation> </message> <message> <source>If given, a password must be entered to view the complete list of all recordings.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud zadáno, heslo musí být vloženo aby byl zobrazen kompletní seznam všech nahraných pořadů.</translation> </message> <message> <source>Default group filter to apply</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Výchozí skupinový filtr k aplikování</translation> </message> <message> <source>Default group filter to apply on the View Recordings screen.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Výchozí filtr pro aplikování na obrazovce "Nahrané pořady".</translation> </message> <message> <source>Always prompt for initial group filter</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vždy se zeptat na výchozí skupinový filtr</translation> </message> <message> <source>Always prompt the user for the initial filter to apply when entering the Watch Recordings screen.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vždy se zeptat uživatele na úvodní filtr k aplikování při vstupu na obrazovku "Nahrané pořady".</translation> </message> <message> <source>Save current group filter when changed</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Uložit aktuální skupinový filtr když bude změněn</translation> </message> <message> <source>Remember the last selected filter instead of displaying the default filter whenever you enter the playback screen.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pamatovat si poslední vybraný filtr místo zobrazení výchozího filtru kdykoli vstoupíte na obrazovku "Nahrané pořady".</translation> </message> <message> <source>Select what type of grouping to show on the Watch Recordings screen by default.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyberte typ výchozího seskupování k zobrazení na obrazovce "Nahrané pořady".</translation> </message> <message> <source>Show filter name instead of "All Programs"</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazit jméno filtru místo "Všechny programy"</translation> </message> <message> <source>Use the name of the display filter currently applied in place of the term "All Programs" in the playback screen.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Použít jméno aktuálně aplikovaného filtru na místě výrazu "Všechny programy" na obrazovce "Nahrané pořady".</translation> </message> <message> <source>Show 'LiveTV' recordings when using "All Programs" filter</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazit nahrávky pořízené při běhu Živé TV při použití filtru "Všechny programy"</translation> </message> <message> <source>If this setting is disabled, LiveTV recordings will only be visible via the special "LiveTV" Recording Group.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud je toto nastavení vypnuto, Nahrávky z Živé TV budou zobrazeny pouze přes specielní nahrávací skupinu "Živá TV".</translation> </message> <message> <source>If enabled, the selector highlight will start on the Program titles window, otherwise the selector will default to the recordings.</source> @@ -7849,184 +7857,184 @@ </message> <message> <source>Show group summary</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazit přehled o skupině</translation> </message> <message> <source>While selecting a group, show a group summary instead of showing info about the first episode in that group.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Když vyberete skupinu, zobrazí se přehled o skupině místo zobrzení informace o první epizodě v dané skupině.</translation> </message> <message> <source>Smart Fast Forwarding</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Chytré rychlé přeskakování vpřed</translation> </message> <message> <source>If enabled, then immediately after rewinding, only skip forward the same amount as skipping backwards.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, okamžitě po přeskakování vzad, přeskakovat vpřed pouze o stejný úsek jako se přeskakovalo vzad.</translation> </message> <message> <source>Seek to exact frame</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přeskakovat na specifický snímek</translation> </message> <message> <source>If enabled, seeking is frame exact, but slower.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, přeskakování je přesně na určitý snímek, ale je pomalejší.</translation> </message> <message> <source>This determines the method used by MythTV to detect when commercials start and end.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto určuje metodu použitou při detekování začátku a konce reklam.</translation> </message> <message> <source>Automatically skip commercial breaks that have been flagged during Automatic Commercial Flagging or by the mythcommflag program, or just notify that a commercial has been detected.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Automaticky přeskakovat reklamní přestávky, pokud byly označeny během automatického označování reklam nebo s pomocí programu mythcommflag, nebo pouze upozornit že reklamy byly detekovány.</translation> </message> <message> <source>Run commercial flagger</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Spustit označovač reklam</translation> </message> <message> <source>This is the default value used for the Auto-Commercial Flagging setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je výchozí hodnota nastavení Automatického označování reklam když je naplánováno nové nahrávání.</translation> </message> <message> <source>Run transcoder</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Spustit překódování</translation> </message> <message> <source>This is the default value used for the Auto-Transcode setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je výchozí hodnota nastavení Automatického překódování když je naplánováno nové nahrávání.</translation> </message> <message> <source>Default Transcoder</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Výchozí program překódování</translation> </message> <message> <source>This is the default value used for the transcoder setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je výchozí hodnota použitá pro nastavení překódování když je naplánováno nové nahrávání.</translation> </message> <message> <source>Deferral days for Auto-Transcode jobs</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Odložení pro Automatické úlohy překódování (dnů)</translation> </message> <message> <source>If non-zero, Auto-Transcode jobs will be scheduled to run this many days after a recording completes instead of immediately afterwards.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud není 0, Automatické úlohy pro překódování budou naplánovány na spuštění tolik dní poté co je nahrávání ukončeno místo okamžitého spuštění.</translation> </message> <message> <source>Run User Job #%1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Spustit Uživatelskou úlohu č.%1</translation> </message> <message> <source>This is the default value used for the 'Run %1' setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Totoje výchozí hodnota použitá pro "Spustit %1" když je naplánováno nové nahrávání.</translation> </message> <message> <source>Enable stricter Commercial Detection code. Disable if some commercials are not being detected.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Povolit striktnější kód detekování reklam. ??Vypněte?? pokud některé reklamy nejsou detekovány.</translation> </message> <message> <source>When using Blank Frame Detection and Auto-Flagging, include blank frames following commercial breaks as part of the commercial break.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Když používáte detekci prázdných snímků a automatické označování, zahrnout prázdné snímky následující po komerční přestávce jako část komerční přestávky.</translation> </message> <message> <source>Commercial Skip Auto-Rewind Amount</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Velikost automatického přeskočení zpět při vynechávání reklam</translation> </message> <message> <source>If set, MythTV will automatically rewind this many seconds after performing a commercial skip.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno, MythTV se automaticky vrátí tolik sekund zpět po vynechání reklam.</translation> </message> <message> <source>Commercial Skip Notify Amount</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Velikost přeskočení zpět při Oznámení reklam</translation> </message> <message> <source>If set, MythTV will act like a commercial begins this many seconds early. This can be useful when commercial notification is used in place of automatic skipping.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno, MythTv se bude chovat jako by reklamy začínaly o tolik sekund dříve. Toto může být užitečné pokud je použito upozornění na reklamy při automatické vynechávání reklam.</translation> </message> <message> <source>Maximum commercial skip (in seconds)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Maximální délka komerční přestávky (v sekundách)</translation> </message> <message> <source>MythTV will discourage long manual commercial skips. Skips which are longer than this will require the user to hit the SKIP key twice. Automatic commercial skipping is not affected by this limit.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">MythTV zabrání využití dlouhých manuálních přeskočení. Přeskočení která jsou delší než tento limit budou vyžadovat dvojité stisknutí klávesy Přeskočit. Automatická přeskakování nejsou ovlivněna tímto limitem.</translation> </message> <message> <source>Merge short commercial breaks (in seconds)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Spojit krátké komerční přestávky (vteřin)</translation> </message> <message> <source>Treat consecutive commercial breaks shorter than this as one break when skipping forward. Useful if you have to skip a few times during breaks. Applies to automatic skipping as well. Set to 0 to disable.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyhodnotit po sobě následující přestávky kratší než tento limit jako jednu při přeskakování vpřed. Toto je užitečné pokud musíte přeskakovat několikrát během jedné přednášky. Aplikuje se i na automatické přeskakování. Nastavte na 0 pro vypnutí.</translation> </message> <message> <source>Auto Expire Instead of Delete Recording</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Automaticky expirovat místo mazání nahrávek</translation> </message> <message> <source>Instead of deleting a recording, move recording to the 'Deleted' recgroup and turn on autoexpire.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Místo mazání nahrávek, přesunout nahrávky do nahrávací skupiny "Smazané" a zapnout automatickou expiraci.</translation> </message> <message> <source>Method used to determine which recorded shows to delete first. LiveTV recordings will always expire before normal recordings.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Metoda použitá pro vyhodnocení které nahrávky smazat jako první. Nahrávky z Živé TV budou expirovat vždy dříve než normální nahrávky.</translation> </message> <message> <source>The number of days bonus a program gets for each priority point. This is only used when the Weighted Time/Priority Auto Expire Method is selected.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Množství bonusových dní které program obdrží za každý bod priority. Toto je využívánou pouze pokud je použita metoda expirace Vážená čas/priorita.</translation> </message> <message> <source>Auto Expire Default</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Výchozí Automatická expirace</translation> </message> <message> <source>New Recording Free Disk Space Threshold (in Megabytes)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Požadovaná velikost prázdného místa na disku pro nová nahrávání (v MB)</translation> </message> <message> <source>MythTV will stop scheduling new recordings on a backend when its free disk space falls below this value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">MythTV zastaví plánování nových nahrávání pokud velikost volného místa na disku backendu klesne pod tuto hodnotu.</translation> </message> <message> <source>If set, programs that have been marked as watched and are auto-expired will be re-recorded if they are shown again.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno, programy které byly označeny jako "přehrané" a jsou automaticky expirované, budou znovu nahrány pokud budou znovu vysílány.</translation> </message> <message> <source>Category of shows to be extended</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kategorie programu pro rozšíření</translation> </message> <message> <source>Record past end of show (in minutes)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nahrávat za koncem programu (v minutách)</translation> </message> <message> <source>For the specified category, an attempt will be made to extend the recording by the specified time. It is ignored when two shows have been scheduled without enough time in between.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pro specifické kategorie, bude proveden pokud o prodloužení nahrávání o specifikovaný čas. Toto je ignorováno pokud jsou dva programy naplánovány bez dostatečného času mezi nimi.</translation> </message> <message> <source>Category record over-time</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Prodloužené nahrávání dle Kategorie</translation> </message> <message> <source>Profile Item</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Položka profilu</translation> </message> <message> <source>Example Custom filter list: 'ivtc,denoise3d'</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Příklad seznamu uživatelského filtru: "ivtc,denoise3d"</translation> </message> <message> <source>Main deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Hlavní metoda odstraňování prokládání.</translation> </message> <message> <source>Fallback deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Náhradní metoda odstraňování prokládání.</translation> </message> <message> <source>&</source> <comment>and</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">&</translation> </message> <message> <source>if rez</source> @@ -8034,49 +8042,51 @@ </message> <message> <source>Edit</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Upravit</translation> </message> <message> <source>Add New Entry</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přidat novou položku</translation> </message> <message> <source>Playback Profiles</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Profily přehrávání</translation> </message> <message> <source>Current Video Playback Profile</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Aktuální přehrávací profil</translation> </message> <message> <source>Add New</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přidat novou</translation> </message> <message> <source>Enter Playback Group Name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zadejte jméno skupiny přehrávání</translation> </message> <message> <source>Sorry, playback group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jméno přehrávací skupiny +nesmí být prázdné.</translation> </message> <message> <source>Sorry, playback group name '%1' is already being used.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jméno přehrávací skupiny +"%1" je již použito.</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Chyba</translation> </message> <message> <source>Sort all sub-titles/multi-titles Ascending</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Třídit věechny titulky Vzestupně</translation> </message> <message> <source>Sort all sub-titles/multi-titles Descending</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Třídit věechny tituky Sestupně</translation> </message> <message> <source>Sort sub-titles Descending, multi-titles Ascending</source> @@ -8096,191 +8106,191 @@ </message> <message> <source>Sticky keys</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ovládací klávesy (Vpřed, Vzad) </translation> </message> <message> <source>If enabled, fast forward and rewind continue after the key is released. Pressing the key again increases the fast forward or rewind speed. The alternate fast forward and rewind keys always behave in this way.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, rychlé přetáčení vpřed a vzad pokračuje pokud je klávesa uvolněna. Opětovný stisk klávesy zvyšuje rychlost posunu. Alternativní klávesy pro přetáčení se takto chovají vždy.</translation> </message> <message> <source>Fast forward/rewind reposition amount</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Velikost posunu po rychlém přetáčení vpřed/vzad</translation> </message> <message> <source>When exiting sticky keys fast forward/rewind mode, reposition this many 1/100th seconds before resuming normal playback. This compensates for the reaction time between seeing where to resume playback and actually exiting seeking.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Když se ukončuje mód rychlého posunu vpřed/vzad, provede se posun o tolika násobek setiny sekundy před pokračováním normálního přehrávání. Toto kompenzuje reakční dobu mezi okamžikem kdy chceme ukončit posun a aktuální pozicí.</translation> </message> <message> <source>If enabled, pressing the sticky rewind key in fast forward mode switches to rewind mode, and vice versa. If disabled, it will decrease the current speed or switch to play mode if the speed can't be decreased further.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, stisknutím klávesy pro zpětný posun při posunu vpřed přepne do posunu zpět a obráceně. Pokud zakázáno, bude snížena rychlost posunu nebo přepnuto na normální přehrávání, pokud už není možno více snížit rychlost posunu.</translation> </message> <message> <source>Text zoom percentage</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Procento zvětšení textu</translation> </message> <message> <source>Default Caption Font Type</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Výchozí typ fontu pro titulky</translation> </message> <message> <source>This allows you to set which font type to use when the broadcaster does not specify a font.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto vám umožní vybrat typ fontu, pokud vysílající žádný nespecifikoval.</translation> </message> <message> <source>Monospaced serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Serif (stejná rozteč)</translation> </message> <message> <source>Proportional serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Serif (proporcionální)</translation> </message> <message> <source>Monospaced sans serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Sans Serif (stejná rozteč</translation> </message> <message> <source>Proportional sans serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Sans Serif (proporcionální)</translation> </message> <message> <source>Casual</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Naformální</translation> </message> <message> <source>Cursive</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kurzíva</translation> </message> <message> <source>Capitals</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Velká písmena</translation> </message> <message> <source>Vertical scaling</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vertikální škálování</translation> </message> <message> <source>Adjust this if the image does not fill your screen vertically. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto nastavte pokud obrázek nepasuje na Vaši obrazovku vertikálně. Možnosti -100% až 100%</translation> </message> <message> <source>Horizontal scaling</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Horizontální škálování</translation> </message> <message> <source>Adjust this if the image does not fill your screen horizontally. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto nastavte pokud obrázek nepasuje na Vaši obrazovku vertikálně. Možnosti -100% až 100%</translation> </message> <message> <source>Scan displacement (X)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zjišťovat posunutí (X)</translation> </message> <message> <source>Scan displacement (Y)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zjišťovat posunutí (Y)</translation> </message> <message> <source>Always stream recordings from the backend</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vždy vysílat nahrávky z backendu</translation> </message> <message> <source>Enable this setting if you want MythTV to always stream files from a remote backend instead of directly reading a recording file if it is accessible locally.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Povolte toto nastavení pokud chcete aby MythTV vždy nahrávky vysílalo ze vzdáleného backendu místo přímého načítání nahrávky pokud je dostupná lokálně. </translation> </message> <message> <source>Use the video as the timebase and warp the audio to keep it in sync. (Experimental)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Použít obraz jako časovou základnu a upravit zvuk aby byl synchroní. (Experimentální)</translation> </message> <message> <source>Clear Saved Position on playback</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vymazat uložené pozice při dalším přehrávání</translation> </message> <message> <source>Automatically clear saved position on a recording when the recording is played back. If disabled, you can mark the beginning with rewind then save position.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Automaticky vymaže uložené pozice pro nahrávku pokud je znovu přehrána. Pokud zakázáno, můžete označit začátek s přetočením a poté uložit pozici.</translation> </message> <message> <source>Alternate Clear Saved Position</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Alternativní vymazání uložených pozic.</translation> </message> <message> <source>During playback the Select key (Enter or Space) will alternate between "Position Saved" and "Position Cleared". If disabled, the Select key will save the current position for each keypress.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Během přehrávání stiskněte výběrovou klávesu (Enter nebo Mezerník) s alternací mezi "Pozice uložena" a "Pozice vymazána". Pokud zakázáno, výběrová klávesa uloží současnou pozici pro každé stisknutí klávesy. </translation> </message> <message> <source>Enable picture controls</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Povolit kontrolu obrazu</translation> </message> <message> <source>If enabled, MythTV attempts to initialize picture controls (brightness, contrast, etc.) that are applied during playback.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, MythTV se pokusí inicializovat kontrolu obrazu (jas, kontrast, apod.) která je aplikována při přehrávání.</translation> </message> <message> <source>Warn on no audio output</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Varovat pokud neexistuje zvukový výstup</translation> </message> <message> <source>Action on playback exit</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Akce při ukončení přehrávání</translation> </message> <message> <source>Always prompt (excluding Live TV)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vždy se zeptat (vyjma Živé TV)</translation> </message> <message> <source>Always prompt (including Live TV)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vždy se zeptat (včetně Živé TV)</translation> </message> <message> <source>Prompt for Live TV only</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ptát se pouze pro Živou TV</translation> </message> <message> <source>If set to prompt, a menu will be displayed when you exit playback mode. The options available will allow you to save your position, delete the recording, or continue watching.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno na "zeptat se", bude zobrazeno menu pokud ukončujete přehrávání. Možnosti kterou jsou k dispozici: uložit pozici, vymazat nahrávku nebo pokračovat v přehrávání.</translation> </message> <message> <source>Prompt at end of recording</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zeptat se na konci nahrávání</translation> </message> <message> <source>Jump to Program OSD</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Skočit do programového OSD</translation> </message> <message> <source>Set the choice between viewing the current recording group in the OSD, or showing the 'Watch Recording' screen when 'Jump to Program' is activated. If set, the recordings are shown in the OSD</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nastavuje výběr mezi zobrazením aktuální nahrávací skupiny v OSD nebo zobrazení obrazovky "Nahrané pořady" když se aktivuje "Skočit na program". Pokud nastaveno, nahrávky jsou zobrazeny v OSD</translation> </message> <message> <source>If set, when you exit near the end of a recording it will be marked as watched. The automatic detection is not foolproof, so do not enable this setting if you don't want an unwatched recording marked as watched.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno, jsou nahrávky z jejichž přehrávání vyskočíte blízko konci, označeny jako "přehráno". Automatická detekce není bezchybná, takže toto neaktivujte pokud nechcete aby nepřehrané nahrávky byly označeny jako přehrané.</translation> </message> <message> <source>MythTV will use this offset to make a thumbnail image this many seconds from the beginning of the recording, unless this offset happens to be between cutpoints or inside a flagged advertisement.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">MythTV bude používat tento posun pro vytvoření náhledového obrázku tolik vteřin od začátku nahrávání. Pokud toto posunutí není v bloku k odstranění nebo označeném reklamním bloku.</translation> </message> <message> <source>Generate preview image from a bookmark if possible</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Generovat náhledový obrázek ze záložky pokud je k dispozici</translation> </message> <message> <source>If enabled, MythTV will ignore the above time offset, and use the bookmark inside the recording as the offset for creating a thumbnail image. As with the above, MythTV will honour cutlists and increase this offset if necessary.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, MythTV bude ignorovat výše uvedený časový posun, a využije záložky uvnitř nahrávky jako posun pro generaci náhledového obrázku. Tak jako výše, MythTV bude ctít části k odstranění a zvětší tento posun pokud bude potřeba.</translation> </message> <message> <source>When enabled, a preview of the recording will play in a small window on the "Watch a Recording" menu.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, náhled nahrávky bude přehráván v malém okně menu "Nahrané pořady".</translation> </message> <message> <source>Use Transparent Boxes</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Použít transparentní rámeček</translation> </message> <message> <source>If enabled, the Watch Recording and Delete Recording screens will use transparency. Disable if selecting the recordings is slow due to high CPU usage.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, obrazovky "Nahrané pořady" a "Smazat nahrávky" použijí transparentnost. Vypněte, pokud výběr nahrávky je pomalý kvůli vysokému zatížení CPU.</translation> </message> <message> <source>Popup Background Shading Method</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Metoda stínování pozadí vyskakujících oken</translation> </message> <message> <source>Use line edit virtual keyboards</source> @@ -8424,19 +8434,19 @@ </message> <message> <source>Reschedule Higher Priorities</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přeplánovat vyšší priority</translation> </message> <message> <source>Move higher priority programs to other cards and showings when resolving conflicts. This can be used to record lower priority programs that would otherwise not be recorded, but risks missing a higher priority program if the schedule changes.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přesune ppořady s vyšší prioritou na jiné karty a zobrazí informaci o řešení konfliktů. Toto může být použito pro nahrání pořadů s nižší prioritou, které by se jinak nanahrály. Riskujete ale promeškání pořadů s vyšší prioritou pokud dojde k časové změně v programu.</translation> </message> <message> <source>Avoid back to back recordings from different channels</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyhnout se navazujícím nahrávkám z různých stanic</translation> </message> <message> <source>If set, the scheduler will avoid assigning shows from different channels to the same card if their end time and start time match. This will be allowed when necessary in order to resolve conflicts.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno, plánovač se vyhne přiřazení pořadů z různých stanic na stejnou kartu pokud je jejich čas konce a žačátku stejný. Toto bude povoleno pouze v případě potřeby pro řešení konfliktů.</translation> </message> <message> <source>Default 'Start Early' minutes for new recording rules</source> @@ -8444,15 +8454,15 @@ </message> <message> <source>Set this to '0' unless you expect that the majority of your show times will not match your TV listings. This sets the initial start early or start late time when rules are created. These can then be adjusted per recording rule.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto nastavte na "0" pokud nepředpokládáte že většina pořadů nebude souhlasit s Vaším TV programem. Toto nastavuje dřívější nebo pozdější start nahrávání když jsou vytvářena pravidla. Toto může být upraveno pro každé pravidlo.</translation> </message> <message> <source>Default 'End Late' minutes for new recording rules</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Výchozí počet minut pro "pozdější konec" nahrávání pro nová pravidla nahrávání</translation> </message> <message> <source>Set this to '0' unless you expect that the majority of your show times will not match your TV listings. This sets the initial end late or end early time when rules are created. These can then be adjusted per recording rule.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto nastavte na "0" pokud nepředpokládáte že většina pořadů nebude souhlasit s Vaším TV programem. Toto nastavuje dřívější nebo pozdější ukončení nahrávání když jsou vytvářena pravidla. Toto může být upraveno pro každé pravidlo.</translation> </message> <message> <source>Complex Prioritization</source> @@ -8468,7 +8478,7 @@ </message> <message> <source>Additional priority when a showing matches the preferred input selected in the 'Scheduling Options' section of the recording rule.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Dodatečná priorita když pořad souhlasí s preferovaným vstupem nastaveným v sekci "možnosti plánování" nahrávacího pravidla.</translation> </message> <message> <source>HDTV Recording Priority</source> @@ -8476,39 +8486,39 @@ </message> <message> <source>Additional priority when a showing is marked as an HDTV broadcast in the TV listings.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Dodatečná priorita když je pořad označen jako HDTV vysílání v TV programu.</translation> </message> <message> <source>Single Recordings Priority</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Priorita jednotlivého nahrávání</translation> </message> <message> <source>Single Recordings will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jednotlivé nahrávání získá tuto dodatečnou hodnotu priority nahrávání. </translation> </message> <message> <source>Weekslot Recordings Priority</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Priorita týdenního pravidelné nahrávání </translation> </message> <message> <source>Weekslot Recordings will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pravidelné týdenní nahrávání získá tuto dodatečnou hodnotu priority nahrávání. </translation> </message> <message> <source>Timeslot Recordings Priority</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pravidelné časové nahrávání</translation> </message> <message> <source>Timeslot Recordings will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pravidelné časové nahrávání získá tuto dodatečnou hodnotu priority nahrávání. </translation> </message> <message> <source>Channel Recordings Priority</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Priorita nahrávání na stanici</translation> </message> <message> <source>Channel Recordings will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nahrávání na konkrétní stanici získají tuto dodatečnou hodnotu priority nahrávání. </translation> </message> <message> <source>All Recordings Priority</source> @@ -8516,15 +8526,15 @@ </message> <message> <source>The 'All' Recording type will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nahrávka typu "Vše" získá tuto dodatečnou hodnotu priority nahrávání. </translation> </message> <message> <source>Find One Recordings Priority</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Priorita nahrávání "Najdi jeden"</translation> </message> <message> <source>Find One, Find Weekly and Find Daily recording types will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nahrávky typu "Najdi jeden", "Najdi týdně" a "Najdi denně" získají tuto dodatečnou hodnotu priority nahrávání. </translation> </message> <message> <source>Your preferred language for the user interface.</source> @@ -8560,7 +8570,8 @@ </message> <message> <source>Recording Check Frequency</source> - <translation type="unfinished">Frekvence kontroly nahrávání</translation> + <translation type="unfinished"> +Frekvence kontroly nahrávání</translation> </message> <message> <source>This specifies how frequently (in seconds) to check if a recording is in progress in order to update the Xbox LED.</source> @@ -8584,43 +8595,43 @@ </message> <message> <source>Include the 'Watch List' group</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zahrnout skupinu seznamu "K přehrání"</translation> </message> <message> <source>The 'Watch List' is an abbreviated list of recordings sorted to highlight series and shows that need attention in order to keep up to date.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Seznam "K přehrání" je zkrácený seznam nahrávek tříděný k zvýraznění sérií a pořadů které potřebují pozornost k udržení aktuálnosti.</translation> </message> <message> <source>Start from the Watch List view</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Startovat seznamem "K přehrání"</translation> </message> <message> <source>If set, the 'Watch List' will be the initial view each time you enter the Watch Recordings screen</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno, seznam "K přehrání" bude výchozím zobrazením pokaždé když vstoupíte na obrazovku "Nahrané pořady"</translation> </message> <message> <source>Exclude recordings not set for Auto-Expire</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyřadit nahrávky nemající nastavenu automatickou expiraci</translation> </message> <message> <source>Set this if you turn off auto-expire only for recordings that you've seen and intend to keep. This option will exclude these recordings from the 'Watch List'.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto nastavte pokud vypínáte automatickou expiraci pro nahrávky které jste viděl a chcete je zachovat. Tato volba vyjme takové nahrávky ze seznamu "K přehrání".</translation> </message> <message> <source>Maximum days counted in the score</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Maximální počet dní počítaných do skóre</translation> </message> <message> <source>The 'Watch List' scores are based on 1 point equals one day since recording. This option limits the maximum score due to age and affects other weighting factors.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Skóre seznamu "K přehrání je založeno na bodech odpovídajících 1 bodu za každý den od nahrávání. Tato možnost limituje maximální skóre podle věku a ovlivňuje ostatní váhové faktory. </translation> </message> <message> <source>Days to exclude weekly episodes after delete</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Počed dní pro vynechání epizod po smazání</translation> </message> <message> <source>When an episode is deleted or marked as watched, other episodes of the series are excluded from the 'Watch List' for this interval of time. Daily shows also have a smaller interval based on this setting.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Když je epizoda smazána nebo označena jako přehraná, ostatní epizody série jsou vynechány ze seznamu "K přehrání" pro tento časový interval. Denní pořady také mají menší interval založený na tomto nastavení.</translation> </message> <message> <source>Use the PVR-350's TV out / MPEG decoder</source> @@ -8676,15 +8687,15 @@ </message> <message> <source>This setting allows a DataDirect guide data provider to specify the next download time in order to distribute load on their servers. If this setting is enabled, mythfilldatabase Execution Start/End times are ignored.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto nastavení povolí poskytovateli služby DataDirect specifikovat příští čas stahování informací pro rozložení zátěže na jejich serverech. Pokud je toto nastavení povoleno, spouštěcí a ukončovací pro mythfilldatabase jsou ignorovány.</translation> </message> <message> <source>LCD Key order</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pořadí kláves LCD</translation> </message> <message> <source>Enter the 6 Keypad Return Codes for your LCD keypad in the order in which you want the functions up/down/left/right/yes/no to operate. (See lcdproc/server/drivers/hd44780.c/keyMapMatrix[] or the matrix for your display)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zadejte 6 návratových kódů klávesnice pro Vaši LCD klávesnici. (funkční tlačítka) v pořadí v jakém chcete přiřadit funkce nahoru/dolů/vlevo/vpravo/ano/ne. (podívejte se na lcdproc/server/drivers/hd44780.c/keyMapMatrix[] nebo do matice Vašeho displaye.</translation> </message> <message> <source>Enable gamma correction for video</source> @@ -8740,15 +8751,15 @@ </message> <message> <source>Video in the dock</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Video v dokované ikoně</translation> </message> <message> <source>If checked, video will be displayed in the application's dock icon. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, video bude zobrazeno v dokované ikoně aplikace. Pouze validní, pokud "Použít velikost GUI pro přehrávání" a "Spustit frontend v okně" jsou povoleny.</translation> </message> <message> <source>Video in the dock icon will skip this many frames for each frame drawn. Set to 0 to show every frame.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Video v dokovací ikoně přeskočí toto množství snímků na každý zobrazený. nastavte na 0 pro zobrazení všech snímků.</translation> </message> <message> <source>Video on the desktop</source> @@ -9170,7 +9181,7 @@ </message> <message> <source>Backend Idle Before EIT Crawl (seconds)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Délka nečinnosti backendu před načítáním EIT (vteřin)</translation> </message> <message> <source>Length of time the frontend waits between tries to wake up the master backend. This should be the time your masterbackend needs to startup. Set 0 to disable.</source> @@ -9378,7 +9389,7 @@ </message> <message> <source>EIT Scanner Options</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Možnosti scaneru EIT (EPG)</translation> </message> <message> <source>Backend Wakeup settings</source> @@ -9518,19 +9529,19 @@ </message> <message> <source>Greedy HighMotion</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Greedy HighMotion</translation> </message> <message> <source>Greedy HighMotion (2x)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Greedy HighMotion (2x)</translation> </message> <message> <source>Yadif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Yadif</translation> </message> <message> <source>Yadif (2x)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Yadif (2x)</translation> </message> <message> <source>Required fields are marked with an asterisk (*).</source> @@ -9590,157 +9601,159 @@ </message> <message> <source>the recorder failed to record.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nahrávání selhalo.</translation> </message> <message> <source>this recording rule is inactive.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto nahrávací pravidlo je neaktivní.</translation> </message> <message> <source>this rule does not match any showings in the current program listings.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto pravidlo neodpovídá žádným programům v současném TV programu.</translation> </message> <message> <source>this episode will be recorded on a different channel in this time slot.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tato epizoda bude nahrána na jiném programu během tohoto časového okna.</translation> </message> <message> <source>Audio for Hearing Impaired</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zvuk pro sluchově postižené</translation> </message> <message> <source>Audio for Visually Impaired</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zvuk pro zrakově postižené</translation> </message> <message> <source>AVC/H.264</source> - <translation type="unfinished"></translation> + <translation>AVC/H.264</translation> </message> <message> <source>Recorded File Name</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Jméno souboru nahrávky</translation> </message> <message> <source>Frequency (%1)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Frekvence (%1)</translation> </message> <message> <source>Frequency (Option has no default). The frequency for this channel in %1.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Frekvence (není výchozí hodnota). +Frekvence pro tuto stanici v %1.</translation> </message> <message> <source>Symbol Rate (symbols/second). Most dvb-s transponders transmit at 27.5 million symbols per second.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Symbolová rychlost (symbolů/sec). +Většina DVB-S vysílačů přenáší rychlostí 27,5 milionu symbolů za sekundu.</translation> </message> <message> <source>MythTV wants to record these programs in %d seconds:</source> - <translation type="unfinished"></translation> + <translation type="unfinished">MythTv chce začít nahrávat tyto program za %d vteřin:</translation> </message> <message> <source>"%1" on %2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">"%1" na %2</translation> </message> <message> <source>Do you want to:</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Chcete provést:</translation> </message> <message> <source>On known multiplex...</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Na známém multiplexu...</translation> </message> <message> <source>Windows video renderer based on overlays. Not compatible with Vista Aero Glass.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazovač pro Windows založený na překrývání. Není kompatibilní s Vista Aero Glass.</translation> </message> <message> <source>Windows video renderer based on Direct3D. Requires video card compatible with Direct3D 9. This is the preferred renderer for current Windows systems.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazovač pro Windows založený na Direct3D. Vyžaduje video kartu kompatibilní s Direct3D 9. Toto je preferovaný zobrazovač pro současné systémy Windows.</translation> </message> <message> <source>This deinterlacer requires the display to be capable of twice the frame rate as the source video.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tento deinterlacer vyžaduje aby byl display schopen zobrazit dvojnásobný počet snímků než obsahuje zdroj obrazu.</translation> </message> <message> <source>Shows one field of the frame followed by the other field displaced vertically.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Zobrazuje jeden půlsnímek následovaný dalším vertikálně posunutým.</translation> </message> <message> <source>This deinterlacer uses several fields to reduce motion blur. It has increased CPU requirements.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Při použití tohoto odstraňovače prokládání se používá několik políček pro odstranění rozmazání při pohybu. Zvyšuje to nároky na CPU.</translation> </message> <message> <source>Max recordings</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Maximální počet nahrávání</translation> </message> <message> <source>Maximum number of simultaneous recordings this device should make. Some digital transmitters transmit multiple programs on a multiplex, if this is set to a value greater than one MythTV can sometimes take advantage of this.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Maximální počet nahrávek, které je schopné zařízení zaznamenat. Některé digitální vysílače vysílají více programů na jednom multiplexu. Pokud je toto nastaveno na hodnotu větší než jedna, MythTV z toho v některých případech může profitovat.</translation> </message> <message> <source>DVB Device Number</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Číslo zařízení DVB</translation> </message> <message> <source>Warning: already in use</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Varování: již se používá</translation> </message> <message> <source>Input Group</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Skupina vstupů</translation> </message> <message> <source>Leave as 'Generic' unless this input is shared with another device. Only one of the inputs in an input group will be allowed to record at any given time.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ponechte jako "Generic" pokud tento vstup není sdílen s dalším zařízením. Nahrávání bude povoleno v daný čas pouze jednomu vstupu ve skupině vstupů. </translation> </message> <message> <source>Interactions between inputs</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vztah mezi vstupy</translation> </message> <message> <source>Create a New Input Group</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vytvořit novou skupinu vstupů</translation> </message> <message> <source>Input groups are only needed when two or more cards share the same resource such as a firewire card and an analog card input controlling the same set top box.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Skupiny vstupů jsou potřeba pouze pokud dvě nebo více karet sdílí stejné zdroje jako FireWire kartu a analogový vstup ovládá stejný set top box.</translation> </message> <message> <source>Avoid conflicts between live TV and scheduled shows</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vyvarovat se konfliktům mezi živou TV a naplánovanými pořady</translation> </message> <message> <source>Allow live TV to move scheduled shows</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Povolit živé TV přesun naplánovaných pořadů</translation> </message> <message> <source>If enabled, scheduled recordings will be moved to other cards (where possible), so that live TV will not be interrupted.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, naplánovaná nahrávání budou přesunuta na jiné karty (pokud je to možné), takže živá TV nebude přerušena.</translation> </message> <message> <source>Use new media</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Reagovat na nové médium</translation> </message> <message> <source>This will cause MythTV to jump, to an appropriate plugin, when new media is inserted.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto umožní MythTv k přepnutí do příslušného pluginu, pokud je vloženo nové médium.</translation> </message> <message> <source>MythMediaMonitor</source> - <translation type="unfinished"></translation> + <translation type="unfinished">MythMediaMonitor</translation> </message> <message> <source>This recording is not yet available.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tato nahrávka ještě není k dispozici.</translation> </message> <message> <source>Move to Default group</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přesunout do Výchozí skupiny</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Obnovit</translation> </message> <message> <source>Tuner %1 is recording: @@ -9754,23 +9767,23 @@ </message> <message> <source>Use DVB Card for active EIT scan</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Používat DVB kartu pro aktivní vyhledávíní EIT </translation> </message> <message> <source>This option activates the active scan for program data (EIT). With this option enabled the DVB card is constantly in-use.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Tato možnost aktivuje aktivní vyhledávání programových dat (EIT). Pokud se tato volba aktivuje, DVB karta je stále využívána.</translation> </message> <message> <source>Live TV only</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pouze živá TV</translation> </message> <message> <source>If enabled MythTV will tune using only the MPEG program number. The program numbers change more often than DVB or ATSC tuning parameters, so this is slightly less reliable. This will also inhibit EIT gathering during Live TV and recording.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, MythTV bude ladit pouze s použitím programového čísla MPEG. Programová čísla se mění častěji než DVB nebo ATSC ladící parametry, takže to může být méně použitelné. Toto taktéž zabrání načítání programových dat během Živé a nahrávání.</translation> </message> <message> <source>Max Audio Channels</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Max zvukových kanálů</translation> </message> <message> <source>5.1</source> @@ -9778,207 +9791,241 @@ </message> <message> <source>Set the maximum number of audio channels to be decoded. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nastavit maximální počet kanálů k dekódování. Toto je pro přehrávání vícekanálového, prostorového zvuku.</translation> </message> <message> <source>Upmix</source> - <translation type="unfinished"></translation> + <translation type="unfinished">UpMix</translation> </message> <message> <source>Passive</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pasivní</translation> </message> <message> <source>Active Simple</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Aktivní jednoduchý</translation> </message> <message> <source>Active Linear</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Aktivní lineární</translation> </message> <message> <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation type="obsolete">Nastavit typ přepočítávání zvuku z dvoukanálového na šestikanálový. Toto je pro přehrávání vícekanálového, prostorového zvuku.</translation> </message> <message> <source>Extra Disk Space</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Rezervace diskového prostoru</translation> </message> <message> <source>Extra disk space (in Gigabytes) that you want to keep free on the recording file systems beyond what MythTV requires.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Rezervované místo (v GB), které chcete zachovat volné na nahrávacím souborovém systému mimo požadavky MythTV.</translation> </message> <message> <source>Deleted Max Age</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Maximální životnost smazaných</translation> </message> <message> <source>When set to a number greater than zero, AutoExpire will force expiration of Deleted recordings when they are this many days old.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno na hodnotu větší než 0, AutoExpirace vynutí expiraci Smazaných nahrávek pokud jsou v tomto stavu tolik dní.</translation> </message> <message> <source>Expire in deleted order</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Expirovat v smazávaném pořadí</translation> </message> <message> <source>Expire Deleted recordings in the order which they were originally deleted.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nastavit expiraci Smazaných nahrávek v pořadí, v jakém byly originálně smazány.</translation> </message> <message> <source>DeletedExpireOptions</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Možnosti expirace smazaných nahrávek</translation> </message> <message> <source>Watched before UNwatched</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přehrané před nepřehranými</translation> </message> <message> <source>If set, programs that have been marked as watched will be expired before programs that have not been watched.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud nastaveno, nahrávky označené jako přehrané, expirují dříve než nahrávky které přehrány nebyly.</translation> </message> <message> <source>Priority Weight</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Váha priority</translation> </message> <message> <source>When enabled, any new recording schedules will be marked as eligible for Auto-Expiration. Existing schedules will keep their current value.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, jakákoli nová plánovaná nahrávka bude označena jako dostupná pro AutoExpiraci. Existující naplánované nahrávky si zachovají stávající hodnotu.</translation> </message> <message> <source>LiveTV Max Age</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Životnost živé TV</translation> </message> <message> <source>AutoExpire will force expiration of LiveTV recordings when they are this many days old. LiveTV recordings may also be expired early if necessary to free up disk space.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">AutoExpire si vynutí expiraci nahrávek ŽivéTV kdy jsou tolik dní staré. Nahrávky živéTV by měly expirovat brzy pokud je potřeba uvolnit místo na disku.</translation> </message> <message> <source>Re-record Watched</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Znovu nahrát přehrané</translation> </message> <message> <source>For a specific category (e.g. "Sports event"), request that shows be autoextended. Only works if a show's category can be determined.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pro specifické kategorie (např. "Sportovní události"), požadovat aby byl záznam automaticky prodloužen. Toto funguje pouze za předpokladu že kategorie může být zjištěna.</translation> </message> <message> <source>Length of time an on-screen display window will be visible.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Délka zobrazení okna OSD</translation> </message> <message> <source>Length of time the on-screen display will display program information.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Délka zobrazení OSD s informací o programu.</translation> </message> <message> <source>Use this to enlarge or shrink captions.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto použijte pro zvětšení nebo zmenšení titulků.</translation> </message> <message> <source>ATSC Caption Settings</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nastavení titulků ATSC</translation> </message> <message> <source>ATSC %1 closed caption font.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Font ATSC skrytých titulků %1.</translation> </message> <message> <source>ATSC Caption Fonts</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Fonty titulků ATSC</translation> </message> <message> <source>Monospaced Serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Serif (stejná rozteč)</translation> </message> <message> <source>Proportional Serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Serif (proporcionální)</translation> </message> <message> <source>Monospaced Sans Serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Sans Serif (stejná rozteč)</translation> </message> <message> <source>Proportional Sans Serif</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Sans Serif (proporcionální)</translation> </message> <message> <source>Regular Font</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Obvyklý font</translation> </message> <message> <source>Italic Font</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Italic font</translation> </message> <message> <source>Italic</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Italic</translation> </message> <message> <source>Prefer EIA-708 over EIA-608 captions</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Preferovat titulky EIA-708 místo EIA-608</translation> </message> <message> <source>When enabled the new EIA-708 captions will be preferred over the old EIA-608 captions in ATSC streams.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, nové titulky EIA-708 budou preferovány oproti starším EIA-608 v ATSC datech.</translation> </message> <message> <source>This is the default, but as of early 2008 most stations are not broadcasting useable EIA-708 captions.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto je výchozí, ale na začátku roku 2008 většina stanic nevysílá využitelné titulky EIA-708.</translation> </message> <message> <source>If enabled, MythTV will warn you if it can't access the soundcard.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokud povoleno, MythTV zobrazí varování pokud nemůže přistoupit na zvukovou kartu.</translation> </message> <message> <source>Continue Playback When Embedded</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Pokračovat v přehrávání pokud je vložen</translation> </message> <message> <source>This option continues TV playback when the TV window is embedded in the upcoming program list or recorded list. The default is to pause the recorded show when embedded.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto volba povoluje pokračovat v přehrávání když je televizní okno zařazené do seznamu následujících programů nebo seznamu nahrávek. Výchozí je pozastavit nahraný program.</translation> </message> <message> <source>Automatically mark a recording as watched</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Automaticky označovat nahrávky jako přehrané</translation> </message> <message> <source>The aspect ratio of a Xinerama display can not be queried from the display, so it must be specified.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Poměr stran obrazovky Xinerama nemůže být zjištěn automaticky, musí se zadat manuálně.</translation> </message> <message> <source>Horizontal size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Horizontální velikost monitoru nebo TV. Využívá se k vypočítání poměru stran obrazovky. Toto potlačí DisplaySize načítanou ze systému.</translation> </message> <message> <source>Vertical size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Vertikální velikost monitoru nebo TV. Využívá se k vypočítání poměru stran obrazovky. Toto potlačí DisplaySize načítanou ze systému.</translation> </message> <message> <source>Hide Mouse Cursor in MythTV</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Schovat kurzor myši v MythTV</translation> </message> <message> <source>Toggles mouse cursor visibility. Most of the MythTV GUI does not respond to mouse clicks. Use this option to avoid "losing" your mouse cursor.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přepíná viditelnost kurzoru myši. Většina MythTV GUI nereaguje na kliknutí myší. Použíjte tuto možnost pro zabránění "ztracení" kurzoru vaší myši. </translation> </message> <message> <source>This selects what MythTV uses to draw. If you have decent hardware, select OpenGL. Changing this requires a restart.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toto vybírá metodu vykreslování pro MythTV. Pokud máte odpovídající hardware použijte OpenGL. Změna tohoto vyžaduje restart.</translation> </message> <message> <source>Ignore LiveTV Recordings</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Ignorovat nahrávky LiveTV</translation> </message> <message> <source>Recording monitoring will ignore LiveTV recordings.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Monitorování nahrávání bude ignorovat nahrávky pořízené při sledování ŽivéTV. </translation> </message> <message> <source>UDP OSD Notifications</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Upozornění UDP OSD</translation> </message> <message> <source>Analog Closed Captions</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Skryté titulky - analog</translation> + </message> + <message> + <source>CPU++</source> + <comment>Sample: No hardware assist</comment> + <translation type="unfinished">CPU++ (bez HW akcelerace)</translation> + </message> + <message> + <source>CPU+</source> + <comment>Sample: Hardware assist HD only</comment> + <translation type="unfinished">CPU+ (Akcelerace pouze HD)</translation> + </message> + <message> + <source>CPU--</source> + <comment>Sample: Hardware assist all</comment> + <translation type="unfinished">CPU- (Hardware akceleruje vše)</translation> + </message> + <message> + <source>High Quality</source> + <comment>Sample: high quality</comment> + <translation type="unfinished">Vysoká kvalita</translation> + </message> + <message> + <source>Normal</source> + <comment>Sample: average quality</comment> + <translation type="unfinished">Průměrná kvalita</translation> + </message> + <message> + <source>Slim</source> + <comment>Sample: low CPU usage</comment> + <translation type="unfinished">Nízké zatížení CPU</translation> + </message> + <message> + <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback. 'Passive' is the least demanding on the CPU. 'Active Simple' is more demanding and 'Active Linear' is the most demanding (but highest quality).</source> + <translation type="unfinished">Nastavte type přepočítávání zvuku ze dvou na šest kanálů. Toto je pro vícekanálové přehrávání zvuku."Pasivní" nejméně zatěžuje CPU. "Aktivní jednoduché" je náročnější, "Aktivní lineární" je nejnáročnější ale nabízí nejvyšší kvalitu.</translation> </message> </context> <context> @@ -10282,7 +10329,7 @@ </message> <message> <source>%1 recordings consuming %2 are allowed to expire</source> - <translation type="unfinished">%1 nahrávek zabírající %2 mají povolenu AutoExpiraci</translation> + <translation type="unfinished">%1 nahrávek zabírající %2 má povolenu AutoExpiraci</translation> </message> <message> <source>LiveTV</source> @@ -10310,19 +10357,19 @@ </message> <message> <source>marked as HDTV</source> - <translation type="unfinished"></translation> + <translation type="unfinished">označeno jako HDTV</translation> </message> <message> <source>from source</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ze zdroje</translation> </message> <message> <source>on input</source> - <translation type="unfinished"></translation> + <translation type="unfinished">na vstupu</translation> </message> <message> <source>%1 of these are Deleted and consume %2</source> - <translation type="unfinished"></translation> + <translation type="unfinished">%1 z těchto je smazáno a zabírají %2</translation> </message> </context> <context> @@ -11056,23 +11103,23 @@ </message> <message> <source>MythTV wants to record "%1" on %2 in %d seconds. Do you want to:</source> - <translation type="unfinished"></translation> + <translation type="unfinished">MythTv chce nahrávat "%1" na %2 za %d sekund. Chcete:</translation> </message> <message> <source>Let them record and go back to the Main Menu</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Povolit nahrávání a vrátit se zpět do Hlavního menu</translation> </message> <message> <source>Record it later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nahrát později, chci se dívat na živou TV</translation> </message> <message> <source>Record them later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nahrát je později, chci se dívat na živou TV</translation> </message> <message> <source>Don't let them record, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Nepovolit nahrávání, chci se dívat na živou TV</translation> </message> <message> <source>You should have gotten a channel lock by now. You can continue to wait for a signal, or you can change the channels with %1 or %2, change video source (%3), inputs (%4), etc.</source> @@ -11080,25 +11127,33 @@ </message> <message> <source>Switch Input</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přepnout vstup</translation> </message> <message> <source>C</source> <comment>Card</comment> - <translation type="unfinished">C</translation> + <translation type="unfinished">K</translation> </message> <message> <source>I</source> <comment>Input</comment> - <translation type="unfinished"></translation> + <translation type="unfinished">V</translation> </message> <message> <source>Switch Source</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Přepnout zdroj</translation> </message> <message> <source>Upcoming Recordings</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Aktuální nahrávání</translation> + </message> + <message> + <source>MythTV is using all inputs for Live TV?</source> + <translation type="unfinished">MythTV používá všechny vstupy pro živou TV?</translation> + </message> + <message> + <source>MythTV has no capture cards defined. Please run the mythtv-setup program.</source> + <translation type="unfinished">Nejsou definovány žádné zachytávací karty. Spusťte prosím program mythtv-setup.</translation> </message> </context> <context> @@ -11597,7 +11652,7 @@ </message> <message> <source>to</source> - <translation type="unfinished">k</translation> + <translation type="unfinished">až </translation> </message> </context> </TS> Dateien mythtv-0.21/i18n/mythfrontend_de.qm und mythtv/i18n/mythfrontend_de.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_de.ts mythtv/i18n/mythfrontend_de.ts --- mythtv-0.21/i18n/mythfrontend_de.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_de.ts 2009-02-24 19:47:16.000000000 +0100 @@ -1,4 +1,6 @@ -<!DOCTYPE TS><TS> +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS><TS version="1.1" language="de"> +<defaultcodec></defaultcodec> <context> <name>@default</name> <message> @@ -66,19 +68,19 @@ <name>BackendSelect</name> <message> <source>Please select default Myth Backend Server</source> - <translation type="unfinished"></translation> + <translation>Bitte den Myth Backend Server wählen</translation> </message> <message> <source>OK</source> - <translation type="unfinished">Ok</translation> + <translation>Ok</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Abbrechen</translation> + <translation>Abbrechen</translation> </message> <message> <source>Configure Manually</source> - <translation type="unfinished"></translation> + <translation>Manuell konfigurieren</translation> </message> </context> <context> @@ -116,11 +118,11 @@ </message> <message> <source>No, don't</source> - <translation>Nein, nicht</translation> + <translation>Nein</translation> </message> <message> <source>Are you sure you want to delete ALL capture cards?</source> - <translation>Sind Sie sicher, dass Sie alle TV-Karten löschen wollen?</translation> + <translation>Sind Sie sicher, dass Sie ALLE Aufnahmekarten löschen wollen?</translation> </message> <message> <source>Yes, delete capture cards</source> @@ -136,7 +138,7 @@ </message> <message> <source>Unable to delete capturecards for %1</source> - <translation>Kann TV-Karten auf %1 nicht löschen</translation> + <translation>Kann Aufnahmekarten auf %1 nicht löschen</translation> </message> </context> <context> @@ -171,23 +173,23 @@ </message> <message> <source>Create Input Group</source> - <translation type="unfinished"></translation> + <translation>Eingangsgruppe anlegen</translation> </message> <message> <source>Enter new group name</source> - <translation type="unfinished"></translation> + <translation>Neuer Gruppenname</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fehler</translation> </message> <message> <source>Sorry, this Input Group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Der Name darf nicht leer sein!</translation> </message> <message> <source>Sorry, this Input Group name is already in use.</source> - <translation type="unfinished"></translation> + <translation>Dieser Name wird bereits verwendet.</translation> </message> </context> <context> @@ -201,7 +203,7 @@ <name>ChannelEditor</name> <message> <source>Channels</source> - <translation type="unfinished">Sender</translation> + <translation>Sender</translation> </message> <message> <source>Are you sure you would like to delete this channel?</source> @@ -245,35 +247,35 @@ </message> <message> <source>Are you sure you would like to delete ALL channels?</source> - <translation type="unfinished"></translation> + <translation>Sind Sie sicher, dass Sie alle Sender löschen wollen?</translation> </message> <message> <source>Are you sure you would like to delete all unassigned channels?</source> - <translation type="unfinished"></translation> + <translation>Sind Sie sicher, dass Sie alle nicht zugewiesenen Sender löschen wollen?</translation> </message> <message> <source>Are you sure you would like to delete the channels on %1?</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Add some for channels first!</source> - <translation type="unfinished"></translation> + <translation>Sind Sie sicher, dass Sie alle Sender von %1 löschen wollen?</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Abbrechen</translation> + <translation>Abbrechen</translation> </message> <message> <source>Download all icons..</source> - <translation type="unfinished"></translation> + <translation>Alle Icons herunterladen...</translation> </message> <message> <source>Rescan for missing icons..</source> - <translation type="unfinished"></translation> + <translation>Nach fehlenden Icons suchen...</translation> </message> <message> <source>Download icon for </source> - <translation type="unfinished"></translation> + <translation>Lade Icon für </translation> + </message> + <message> + <source>Add some channels first!</source> + <translation>Fügen Sie erst einige Sender hinzu!</translation> </message> </context> <context> @@ -435,7 +437,7 @@ </message> <message> <source>Additional Tables</source> - <translation>Zusatztabellen</translation> + <translation>Weitere Tabellen</translation> </message> <message> <source>Test</source> @@ -447,7 +449,7 @@ </message> <message> <source>Store</source> - <translation type="unfinished">Speichern</translation> + <translation>Speichern</translation> </message> <message> <source>Cancel</source> @@ -467,35 +469,35 @@ </message> <message> <source>First showing of each episode</source> - <translation>Erste Austrahlung jeder Folge</translation> + <translation>Erste Ausstrahlung jeder Folge</translation> </message> <message> <source>Last showing of each episode</source> - <translation>Letzte Austrahlung jeder Folge</translation> + <translation>Letzte Ausstrahlung jeder Folge</translation> </message> <message> <source>stored search</source> - <translation type="unfinished"></translation> + <translation>gespeicherte Suche</translation> </message> <message> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Hinzufügen</translation> </message> <message> <source>Match this series</source> - <translation type="unfinished"></translation> + <translation>Nach einer best. Serie suchen</translation> </message> <message> <source>Match words in the subtitle</source> - <translation type="unfinished"></translation> + <translation>Nach Wörtern im Untertitel suchen</translation> </message> <message> <source>Only shows marked as widescreen</source> - <translation type="unfinished"></translation> + <translation>Nur Sendungen im Breitbildformat</translation> </message> <message> <source>Exclude H.264 encoded streams (EIT only)</source> - <translation type="unfinished"></translation> + <translation>H.264 kodierte Kanäle ausschliessen (nur bei EIT)</translation> </message> </context> <context> @@ -669,11 +671,11 @@ <name>DTVSignalMonitor</name> <message> <source>Seen</source> - <translation>Gesehen</translation> + <translation type="obsolete">Gesehen</translation> </message> <message> <source>Matching</source> - <translation>Übereinstimmend</translation> + <translation type="obsolete">Übereinstimmend</translation> </message> </context> <context> @@ -712,19 +714,19 @@ <name>DVBSignalMonitor</name> <message> <source>Signal To Noise</source> - <translation>Signal/Rauschen</translation> + <translation type="obsolete">Signal/Rauschen</translation> </message> <message> <source>Bit Error Rate</source> - <translation>Bitfehlerrate</translation> + <translation type="obsolete">Bitfehlerrate</translation> </message> <message> <source>Uncorrected Blocks</source> - <translation>Nicht korrigierte Blöcke</translation> + <translation type="obsolete">Nicht korrigierte Blöcke</translation> </message> <message> <source>Rotor Progress</source> - <translation>Rotor-Fortschritt</translation> + <translation type="obsolete">Rotor-Fortschritt</translation> </message> </context> <context> @@ -788,7 +790,7 @@ <name>DeviceTree</name> <message> <source>The Cartesian latitude for your location.</source> - <translation>Der kartesische Breitengrad für Ihr Standort</translation> + <translation>Der kartesische Breitengrad für Ihren Standort</translation> </message> <message> <source>Use negative numbers for southern and western coordinates.</source> @@ -828,8 +830,7 @@ </message> <message> <source>Select the type of switch from the list.</source> - <translation>Select the type of switch from the list. -Wählen sie den Switch-Typen fon dieser Liste.</translation> + <translation>Wählen Sie den Switch-Typen von dieser Liste.</translation> </message> <message> <source>Tone</source> @@ -845,15 +846,15 @@ </message> <message> <source>Legacy SW21</source> - <translation>Altlast SW21</translation> + <translation>SW21 (Veraltet)</translation> </message> <message> <source>Legacy SW42</source> - <translation>Altlast SW42</translation> + <translation>SW42 (Veraltet)</translation> </message> <message> <source>Legacy SW64</source> - <translation>Altlast SW64</translation> + <translation>SW64 (Veraltet)</translation> </message> <message> <source>Number of ports</source> @@ -861,7 +862,7 @@ </message> <message> <source>The number of ports this switch has.</source> - <translation>Anzahl der Ports die dieser Switch hat.</translation> + <translation>Anzahl der Ports, die dieser Switch hat.</translation> </message> <message> <source>Switch Configuration</source> @@ -885,7 +886,7 @@ </message> <message> <source>Rotor Low Speed (deg/sec)</source> - <translation>Rotor niedrige Geschwindigkeit (deg/sek)</translation> + <translation>Rotor niedrige Geschwindigkeit (grad/sek)</translation> </message> <message> <source>To allow the approximate monitoring of rotor movement, enter the rated angular speed of the rotor when powered at 13V.</source> @@ -893,7 +894,7 @@ </message> <message> <source>Rotor High Speed (deg/sec)</source> - <translation>Hohe Rotorgeschwindigkeit (deg/sek)</translation> + <translation>Hohe Rotorgeschwindigkeit (grad/sek)</translation> </message> <message> <source>To allow the approximate monitoring of rotor movement, enter the rated angular speed of the rotor when powered at 18V.</source> @@ -907,7 +908,7 @@ <message> <source>W</source> <comment>Western Hemisphere</comment> - <translation type="unfinished">W</translation> + <translation>W</translation> </message> <message> <source>Position Index %1</source> @@ -1087,7 +1088,15 @@ </message> <message> <source>DiSEqC Device Tree</source> - <translation type="unfinished"></translation> + <translation>DiSEqC Geräte Baum</translation> + </message> + <message> + <source>Voltage</source> + <translation>Spannung</translation> + </message> + <message> + <source>Mini DiSEqC</source> + <translation>Mini DiSEqC</translation> </message> </context> <context> @@ -1251,7 +1260,7 @@ </message> <message> <source>Date or day of the week</source> - <translation>Datum oder Tag der Woche</translation> + <translation>Datum oder Wochentag</translation> </message> <message> <source>minute</source> @@ -1275,7 +1284,7 @@ </message> <message> <source>5 weekdays if daily</source> - <translation>5 Werkstage falls täglich</translation> + <translation>5 Werktage falls täglich</translation> </message> <message> <source>7 days per week if daily</source> @@ -1286,43 +1295,43 @@ <name>MediaMonitor</name> <message> <source>Cancel</source> - <translation type="unfinished">Abbrechen</translation> + <translation>Abbrechen</translation> </message> <message> <source>Select removable media to eject or insert</source> - <translation type="unfinished"></translation> + <translation>Wechselmedium wählen</translation> </message> <message> <source>No devices to eject</source> - <translation type="unfinished"></translation> + <translation>Keine Geräte zum Auswerfen</translation> </message> <message> <source>Failed to unmount %1</source> - <translation type="unfinished"></translation> + <translation>Konnte %1 nicht abmelden</translation> </message> <message> <source>You may safely remove %1</source> - <translation type="unfinished"></translation> + <translation>Sie können nun %1 entfernen</translation> </message> <message> <source>Failed to eject %1</source> - <translation type="unfinished"></translation> + <translation>Konnte %1 nicht auswerfen</translation> </message> <message> <source>Select a CD drive</source> - <translation type="unfinished"></translation> + <translation>CD-Laufwerk wählen</translation> </message> <message> <source>Select a VCD drive</source> - <translation type="unfinished"></translation> + <translation>VCD-Laufwerk wählen</translation> </message> <message> <source>Select a DVD drive</source> - <translation type="unfinished"></translation> + <translation>DVD-Laufwerk wählen</translation> </message> <message> <source>Select a DVD writer</source> - <translation type="unfinished"></translation> + <translation>DVD-Brenner wählen</translation> </message> </context> <context> @@ -1336,49 +1345,51 @@ <name>MythContext</name> <message> <source>Could not connect to the master backend server -- is it running? Is the IP address set for it in the setup program correct?</source> - <translation>Konnte nicht zum Master Backend verbinden -- ist es gestartet? Stimmt seine IP Adresse im Setup?</translation> + <translation>Konnte nicht zum Master-Backend verbinden -- ist es gestartet? Stimmt seine IP Adresse im Setup?</translation> </message> <message> <source>The connection to the master backend server has gone away for some reason.. Is it running?</source> - <translation>Die Verbindung zum Master Backend wurde unterbrochen. Läuft der Server?</translation> + <translation>Die Verbindung zum Master-Backend wurde unterbrochen. Läuft der Server?</translation> </message> <message> <source>There are also other clients using this database. They should be shut down first.</source> - <translation type="unfinished"></translation> + <translation>Andere Programme nutzen diese Datenbank im Moment. Diese Programme sollten zuerst beendet werden.</translation> </message> <message> <source>Error: MythTV cannot upgrade the schema of this datatase because other clients are using it. Please shut them down before upgrading.</source> - <translation type="unfinished"></translation> + <translation>Fehler: MythTV kann das Datenbankschema nicht aktualisieren da noch andere Programme darauf zugreifen. + +Bitte Beenden Sie diese vor dem Upgrade.</translation> </message> <message> <source>Warning: MythTV wants to upgrade your database schema, from %1 to %2.</source> - <translation type="unfinished"></translation> + <translation>Warnung: MythTV möchte das Datenbankschema von %1 auf %2 aktualisieren.</translation> </message> <message> <source>You can try using the old schema, but that may cause problems.</source> - <translation type="unfinished"></translation> + <translation>Sie können versuchen das alte Schema zu behalten, dies kann aber Probleme verursachen.</translation> </message> <message> <source>Warning: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Warnung: MythTV Datenbank hat ein neueres Schema (%1) als erwartet (%2).</translation> </message> <message> <source>Error: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Fehler: MythTV Datenbank hat ein neueres Schema (%1) als erwartet (%2).</translation> </message> <message> <source>MythTV was unable to backup your database.</source> - <translation type="unfinished"></translation> + <translation>MythTV konnte die Datenbank nicht sichern.</translation> </message> <message> <source>If your system becomes unstable, a database backup file called %1 is located in %2.</source> - <translation type="unfinished"></translation> + <translation>Für den Fall, dass Ihr System instabil wird, wurde eine Sicherung der Datenbank (in %1) unter %2 erstellt.</translation> </message> <message> <source>This cannot be un-done, so having a database backup would be a good idea.</source> - <translation type="unfinished"></translation> + <translation>Dies kann nicht rückgängig gemacht werden, daher wäre eine Sicherung der Datenbank keine schlechte Idee.</translation> </message> </context> <context> @@ -1495,7 +1506,7 @@ </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> - <translation>Den Gruppennamen oder nach 'SELECT' den Text über die virtuelle Tastatur eingeben.</translation> + <translation>Gruppennamen eigeben oder nach 'SELECT' den Text über die Bilschirm Tastatur eingeben.</translation> </message> <message> <source>(Create new group)</source> @@ -1514,15 +1525,15 @@ </message> <message> <source>You have finished watching:</source> - <translation type="obsolete">Wiedergabe beendet von:</translation> + <translation type="obsolete">Sie haben gesehen:</translation> </message> <message> <source>Are you sure you want to delete:</source> - <translation>Aufnahme löschen:</translation> + <translation>Die folgende Aufnahme wirklich löschen?</translation> </message> <message> <source>No, keep it, I changed my mind</source> - <translation>Nein. Ich habe meine Meinung geändert.</translation> + <translation>Nein</translation> </message> <message> <source>Allow this program to AutoExpire?</source> @@ -1566,7 +1577,7 @@ </message> <message> <source>Status Icons</source> - <translation>Statusbilder</translation> + <translation>Statussymbole</translation> </message> <message> <source>Commercials are flagged</source> @@ -1590,7 +1601,7 @@ </message> <message> <source>Ok</source> - <translation type="obsolete">Ok</translation> + <translation>Ok</translation> </message> <message> <source>Recording List Menu</source> @@ -1666,7 +1677,7 @@ </message> <message> <source>Yes, and allow re-record</source> - <translation>Ja, erneutes Aufnehmen möglich</translation> + <translation>Ja, erneutes Aufnehmen zulassen</translation> </message> <message> <source>^(The |A |An )</source> @@ -1698,7 +1709,7 @@ </message> <message> <source>Storage Options</source> - <translation>Speicherplatz</translation> + <translation>Speicheroptionen</translation> </message> <message> <source>Recording Options</source> @@ -1902,23 +1913,23 @@ </message> <message> <source>Recording has been transcoded</source> - <translation>Aufnahme wurde umgewandelt</translation> + <translation>Umgewandelt</translation> </message> <message> <source>Recording is in Stereo</source> - <translation>Aufnahme hat Stereo-Ton</translation> + <translation>Stereo</translation> </message> <message> <source>Recording is in High Definition</source> - <translation>Aufnahme ist HDTV (High Definition)</translation> + <translation>HDTV (High Definition)</translation> </message> <message> <source>Recording is Closed Captioned</source> - <translation>Aufnahme hat Untertitel</translation> + <translation>Untertitel</translation> </message> <message> <source>Autodetect</source> - <translation>Auto-Erkennung</translation> + <translation>Automatisch wählen</translation> </message> <message> <source>High Quality</source> @@ -1986,74 +1997,74 @@ </message> <message> <source>_NO_TITLE_</source> - <translation type="unfinished"></translation> + <translation>_KEIN_TITEL_</translation> </message> <message> <source>Unknown</source> - <translation type="unfinished">Unbekannt</translation> + <translation>Unbekannt</translation> </message> <message> <source>Help (Status Icons)</source> - <translation type="unfinished"></translation> + <translation>Symbolerklärung</translation> </message> <message> <source>Delete, and allow re-record</source> - <translation type="unfinished"></translation> + <translation>Löschen, aber wieder aufnehmen</translation> </message> <message> <source>Allow this program to re-record</source> - <translation type="unfinished"></translation> + <translation>Diese Sendung erneut aufnehmen lassen</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Wiederherstellen</translation> </message> <message> <source>Delete Forever</source> - <translation type="unfinished"></translation> + <translation>Für immer löschen</translation> </message> <message> <source>Recording is in Mono</source> - <translation type="unfinished"></translation> + <translation>Mono</translation> </message> <message> <source>Recording is in Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Surround Ton</translation> </message> <message> <source>Recording is in Dolby Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Dolby Surround Ton</translation> </message> <message> <source>Recording has Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Mit Untertitel</translation> </message> <message> <source>Recording is Subtitled</source> - <translation type="unfinished"></translation> + <translation>Untertitelt</translation> </message> <message> <source>Recording is in WideScreen</source> - <translation type="unfinished"></translation> + <translation>Aufnahme ist im Breitbildformat</translation> </message> <message> <source>Recording has been watched</source> - <translation type="unfinished"></translation> + <translation>Wurde schon angesehen</translation> </message> <message> <source>Show LiveTV as a Group</source> - <translation type="unfinished"></translation> + <translation>Zeige LiveTV als Gruppe</translation> </message> <message> <source>Deleted</source> - <translation type="unfinished"></translation> + <translation>Gelöscht</translation> </message> </context> <context> <name>PlaybackProfileItemConfig</name> <message> <source>Match Criteria</source> - <translation type="unfinished"></translation> + <translation>Übereinstimmungs Kriterien</translation> </message> <message> <source>W</source> @@ -2065,51 +2076,51 @@ </message> <message> <source>Decoder</source> - <translation type="unfinished"></translation> + <translation>Dekoder</translation> </message> <message> <source>Max CPUs</source> - <translation type="unfinished"></translation> + <translation>max. CPUs</translation> </message> <message> <source>Video Renderer</source> - <translation type="unfinished"></translation> + <translation>Video Wiedergabe</translation> </message> <message> <source>OSD Renderer</source> - <translation type="unfinished"></translation> + <translation>OSD Wiedergabe</translation> </message> <message> <source>OSD Fade</source> - <translation type="unfinished"></translation> + <translation>OSD Einblenden</translation> </message> <message> <source>Primary Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Erster Deinterlacer</translation> </message> <message> <source>Fallback Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Ersatz Deinterlacer</translation> </message> <message> <source>Custom Filters</source> - <translation type="unfinished">Spezielle Filter</translation> + <translation>Spezielle Filter</translation> </message> <message> <source>Maximum number of CPU cores used for decoding.</source> - <translation type="unfinished"></translation> + <translation>Maximale Anzahl CPU Kerne für Dekodierung verwendet.</translation> </message> <message> <source> Multithreaded decoding disabled-only one CPU will be used, please recompile with --enable-ffmpeg-pthreads to enable.</source> - <translation type="unfinished"></translation> + <translation>Multithreaded Dekodierung deaktiviert - nur eine CPU wird verwendet. Bitte mit --enable-ffmpeg-pthreads neu compilieren um dies zu aktivieren.</translation> </message> <message> <source>When unchecked the OSD will not fade away but instead will disappear abruptly.</source> - <translation type="unfinished"></translation> + <translation>Wenn nicht markiert wird das OSD nicht langsam ausgeblendet sondern verschwindet abrupt.</translation> </message> <message> <source>Uncheck this if the video studders while the OSD is fading away.</source> - <translation type="unfinished"></translation> + <translation>Nicht markieren wenn die Wiedergabe stottert während das OSD ausgeblendet wird.</translation> </message> </context> <context> @@ -2164,11 +2175,11 @@ </message> <message> <source>Time</source> - <translation type="unfinished"></translation> + <translation>Zeit</translation> </message> <message> <source>Title</source> - <translation type="unfinished">Titel</translation> + <translation>Titel</translation> </message> </context> <context> @@ -2385,51 +2396,51 @@ </message> <message> <source>Stored Search</source> - <translation type="unfinished"></translation> + <translation>Gespeicherte Suche</translation> </message> <message> <source>Select a search stored from</source> - <translation type="unfinished"></translation> + <translation>Wählen Sie eine gespeicherte Suche von</translation> </message> <message> <source>Custom Record</source> - <translation type="unfinished"></translation> + <translation>Eigene Aufnahmen</translation> </message> <message> <source>0 .. 9 moves to Nx10 percent in list</source> - <translation type="unfinished"></translation> + <translation>0-9 springt zu N x10% in der Liste</translation> </message> <message> <source>Unrated</source> - <translation type="unfinished"></translation> + <translation>Nicht bewertet</translation> </message> <message> <source>At least ***/</source> - <translation type="unfinished"></translation> + <translation>mind. ***/</translation> </message> <message> <source>At least ***</source> - <translation type="unfinished"></translation> + <translation>mind. ***</translation> </message> <message> <source>At least **/</source> - <translation type="unfinished"></translation> + <translation>mind. **/</translation> </message> <message> <source>At least **</source> - <translation type="unfinished"></translation> + <translation>mind. **</translation> </message> <message> <source>At least */</source> - <translation type="unfinished"></translation> + <translation>mind. */</translation> </message> <message> <source>At least *</source> - <translation type="unfinished"></translation> + <translation>mind. *</translation> </message> <message> <source>At least /</source> - <translation type="unfinished"></translation> + <translation>mind. /</translation> </message> </context> <context> @@ -2507,6 +2518,10 @@ <translation>Lösche Regel '%1' %2? </translation> </message> + <message> + <source> + %1 automatic priority (%2hr)</source> + <translation>+ %1 automatische Priorität (%2 Std)</translation> + </message> </context> <context> <name>QObject</name> @@ -2648,7 +2663,7 @@ </message> <message> <source>Changing the volume adjusts the selected mixer.</source> - <translation>Eine Änderung der Lautstärke regelt den gewählten Mixer.</translation> + <translation>Die Lautstärkeregelung verwendet den gewählten Mixer.</translation> </message> <message> <source>Master Mixer Volume</source> @@ -2692,7 +2707,7 @@ </message> <message> <source>Commercial Skip Method</source> - <translation>Suchmethode</translation> + <translation type="obsolete">Suchmethode</translation> </message> <message> <source>Blank Frame Detection (default)</source> @@ -2700,11 +2715,11 @@ </message> <message> <source>Blank Frame + Scene Change</source> - <translation>Dunkle Frames und Szenenwechsel</translation> + <translation type="obsolete">Dunkle Frames und Szenenwechsel</translation> </message> <message> <source>Scene Change Detection</source> - <translation>Szenenwechsel</translation> + <translation type="obsolete">Szenenwechsel</translation> </message> <message> <source>Automatically Skip Commercials</source> @@ -2752,7 +2767,7 @@ </message> <message> <source>Setup Pin Code</source> - <translation>Setup-Pin-Code</translation> + <translation>Setup PIN-Code</translation> </message> <message> <source>Require Setup PIN</source> @@ -2792,7 +2807,7 @@ </message> <message> <source>channel name</source> - <translation>Sendername</translation> + <translation type="obsolete">Sendername</translation> </message> <message> <source>Vertical over/underscan percentage</source> @@ -2832,11 +2847,11 @@ </message> <message> <source>Clear Saved Position on playback</source> - <translation>Bei der Wiedergabe die gespeicherte Position löschen</translation> + <translation>gespeicherte Position löschen</translation> </message> <message> <source>Alternate Clear Saved Position</source> - <translation>Abwechselnd löschen/speichern der akt. Position</translation> + <translation>Position abwechselnd löschen/speichern</translation> </message> <message> <source>Action on playback exit</source> @@ -2860,11 +2875,11 @@ </message> <message> <source>Prompt at end of recording</source> - <translation>Am Ende der Aufnahme nachfragen</translation> + <translation>Menü bei Wiedergabeende einblenden</translation> </message> <message> <source>If set, a menu will be displayed allowing you to delete the recording when it has finished playing.</source> - <translation>Falls gesetzt, wird am Ende einer Aufnahme ein Menü eingeblendet.</translation> + <translation>Falls gesetzt, wird am Ende der Wiedergabe einer Aufnahme ein Menü eingeblendet, womit die Aufnahme gelöscht werden kann.</translation> </message> <message> <source>Display live preview of recordings</source> @@ -2920,7 +2935,7 @@ </message> <message> <source>Xinerama screen</source> - <translation>Xinerama Bildschirm</translation> + <translation type="obsolete">Xinerama Bildschirm</translation> </message> <message> <source>The width of the GUI. Do not make the GUI wider than your actual screen resolution. Set to 0 to automatically scale to fullscreen.</source> @@ -2952,7 +2967,7 @@ </message> <message> <source>Use a random theme each time MythTV is started.</source> - <translation>Bei jedem Programmstart ein GUI-Thema zufällig auswählen.</translation> + <translation>Bei jedem Programmstart ein zufällig gewähltes GUI-Thema verwenden.</translation> </message> <message> <source>Date format</source> @@ -3529,11 +3544,11 @@ </message> <message> <source>Monitor CD/DVD</source> - <translation>CD/DVD-LW beobachten</translation> + <translation>CD-/DVD-LW überwachen</translation> </message> <message> <source>This enables support for monitoring your CD/DVD drives for new disks and launching the proper plugin to handle them.</source> - <translation>Aktiviert die Unterstützung zur Überwachung Ihrer CD/DVD Laufwerke für neue Medien und den Start passender Plugins für deren Handhabung.</translation> + <translation>Aktiviert die Unterstützung zur Überwachung Ihrer CD-/DVD-Laufwerke für neue Medien und den Start passender Plugins für deren Handhabung.</translation> </message> <message> <source>Hardware Decoding Settings</source> @@ -3657,7 +3672,7 @@ </message> <message> <source>Channel Options</source> - <translation type="unfinished">Senderoptionen</translation> + <translation>Senderoptionen</translation> </message> <message> <source>Video Source</source> @@ -3785,19 +3800,19 @@ </message> <message> <source>LP Coderate</source> - <translation type="unfinished"></translation> + <translation type="unfinished">LP Coderate</translation> </message> <message> <source>HP Coderate</source> - <translation type="unfinished"></translation> + <translation type="unfinished">HP Coderate</translation> </message> <message> <source>Guard Interval</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Guard Interval</translation> </message> <message> <source>Trans. Mode</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Hierarchy</source> @@ -4040,7 +4055,7 @@ </message> <message> <source>Master Backend Override</source> - <translation>Hauptbackend übersteuern</translation> + <translation>Master-Backend übersteuern</translation> </message> <message> <source>Reconnect wait time (secs)</source> @@ -4080,7 +4095,7 @@ </message> <message> <source>The amount of time the master backend idles before it shuts down all backends. Set to 0 to disable auto shutdown.</source> - <translation>Wie lange der Master Rechner wartet, bis er alle Backend Rechner herunterfährt. "0" verhindert das automatische Abschalten.</translation> + <translation>Wie lange das Master-Backend wartet, bis er alle Backend Rechner herunterfährt. "0" verhindert das automatische Abschalten.</translation> </message> <message> <source>Max. wait for recording (min)</source> @@ -4088,7 +4103,7 @@ </message> <message> <source>The amount of time the master backend waits for a recording. If it's idle but a recording starts within this time period, the backends won't shut down.</source> - <translation>Wie lange der Master Rechner bis zur nächsten Aufnahme wartet. Falls die Leerlaufzeit abgelaufen ist, aber die nächste Aufnahme innerhalb dieser Zeit beginnt, werden die Backend Rechner nicht herunter gefahren.</translation> + <translation>Wie lange das Master-Backend bis zur nächsten Aufnahme wartet. Falls die Leerlaufzeit abgelaufen ist, aber die nächste Aufnahme innerhalb dieser Zeit beginnt, werden die Backend Rechner nicht herunter gefahren.</translation> </message> <message> <source>Startup before rec. (secs)</source> @@ -4232,7 +4247,7 @@ </message> <message> <source>Logo Detection</source> - <translation>Logo-Erkennung</translation> + <translation type="obsolete">Logo-Erkennung</translation> </message> <message> <source>Unable to create AudioOutput.</source> @@ -4240,11 +4255,11 @@ </message> <message> <source>Continue WITHOUT AUDIO!</source> - <translation>Ohne Audio fortsetzen!</translation> + <translation type="obsolete">Ohne Audio fortsetzen!</translation> </message> <message> <source>Return to menu.</source> - <translation>Zurück ins Menü.</translation> + <translation type="obsolete">Zurück ins Menü.</translation> </message> <message> <source>Earlier Showing</source> @@ -4268,11 +4283,11 @@ </message> <message> <source>1h</source> - <translation>1 Std</translation> + <translation>1 Std.</translation> </message> <message> <source>1h30m</source> - <translation>1,5 Std</translation> + <translation>1,5 Std.</translation> </message> <message> <source>2h</source> @@ -4420,7 +4435,7 @@ </message> <message> <source>Any arguments you want passed to the mythfilldatabase program.</source> - <translation>Alle Optionen die an mythfilldatabase übergeben werden sollen.</translation> + <translation>Alle Optionen die dem mythfilldatabase Programm übergeben werden sollen.</translation> </message> <message> <source>mythfilldatabase Log Path</source> @@ -4472,7 +4487,7 @@ </message> <message> <source>Enable interlaced motion estimation</source> - <translation>Interlaced motion estimation</translation> + <translation>Zeilensprungbewegungsvorhersage</translation> </message> <message> <source>If set, the MPEG4 encoder will use interlaced motion estimation. You probably want this when encoding interlaced video.</source> @@ -4660,7 +4675,7 @@ </message> <message> <source>This PIN is used to control access to the setup menus. If you want to use this feature, then setting the value to all numbers will make your life much easier. Set it to blank to disable.</source> - <translation>Dieser PIN Code gewährt Zugang zu den Konfigurationsmenüs. Für eine einfachere Handhabung verwenden Sie für diesen Code bitte nur Ziffern. Ein leeres Feld schaltet die Abfrage aus.</translation> + <translation>Dieser PIN-Code gewährt Zugang zu den Konfigurationsmenüs. Für eine einfachere Handhabung verwenden Sie für diesen Code bitte nur Ziffern. Ein leeres Feld schaltet die Abfrage aus.</translation> </message> <message> <source>Separate video modes for GUI and TV playback</source> @@ -4692,7 +4707,7 @@ </message> <message> <source>Commercial Free</source> - <translation>Ohne Werbung</translation> + <translation type="obsolete">Ohne Werbung</translation> </message> <message> <source>Startup command</source> @@ -4811,11 +4826,11 @@ </message> <message> <source>Initial volume for PCM output. Using the volume keys in MythTV will adjust this parameter.</source> - <translation>Anfangslautstärke des PCM Ausgangs. Die Lautstärkeregler in MythTV verändern diese Einstellung.</translation> + <translation>Anfangslautstärke des PCM-Ausgangs. Die Lautstärkeregler in MythTV verändern diese Einstellung.</translation> </message> <message> <source>Enable sending AC3 audio directly to your sound card's SPDIF output, on sources which contain AC3 soundtracks (usually digital TV). Requires that the audio output device be set to something suitable.</source> - <translation>AC3-Audio am SPDIF Ausgang der Soundkarte bereitstellen. Dies funktioniert nur falls eine AC3-Tonspur verfügbar ist (wie beim Digitalfernsehen). Das 'Audio Ausgabegerät' muss dazu entsprechend konfiguriert sein.</translation> + <translation>AC3-Ton am SPDIF-Ausgang der Soundkarte bereitstellen. Dies funktioniert nur falls eine AC3-Tonspur verfügbar ist (wie beim Digitalfernsehen). Das 'Audio-Ausgabegerät' muss dazu entsprechend konfiguriert sein.</translation> </message> <message> <source>Make the video look normal on a progressive display (i.e. monitor).</source> @@ -4895,7 +4910,7 @@ </message> <message> <source>If set, MythTV will act like a commercial begins this many seconds early. This can be useful when commercial notification is used in place of automatic skipping.</source> - <translation>Wenn gesetzt, wird MythTV so tun, als ob die Werbung einige Sekunden früher beginnen würde. Diese Einstellung kann sinnvoll sein, wenn Werbebenachrichtignung statt dem Überspringen benutzt wird.</translation> + <translation>Falls gesetzt, wird MythTV so tun, als ob die Werbung einige Sekunden früher beginnen würde. Diese Einstellung kann sinnvoll sein, wenn auf Werbung hingewiesen statt übersprungen wird.</translation> </message> <message> <source>When enabled, any newly recorded programs will be marked as eligible for Auto-Expiration. Existing recordings will keep their current value.</source> @@ -4911,7 +4926,7 @@ </message> <message> <source>If enabled, pressing the sticky rewind key in fast forward mode switches to rewind mode, and vice versa. If disabled, it will decrease the current speed or switch to play mode if the speed can't be decreased further.</source> - <translation>Fals gesetzt, wird beim drücken der klebrigen Rückspultaste währen des Vorspulens auf Rückspulen wächseln und umgekehrt. Falls nicht gesetzt wird es die Geschwindigkeit reduzieren oder wenn zu langsam in den Wiedergabemodus wächseln.</translation> + <translation>Falls gesetzt, wird beim Drücken der klebrigen Rückspultaste währen des Vorspulens auf Rückspulen gewechselt und umgekehrt. Falls nicht gesetzt wird die Geschwindigkeit reduziert bzw. in den Wiedergabemodus gewechselt.</translation> </message> <message> <source>Always display Closed Captioning</source> @@ -4967,11 +4982,11 @@ </message> <message> <source>Confirm Exit</source> - <translation>Bestätige Beenden</translation> + <translation>Nachfrage bei Beenden</translation> </message> <message> <source>When enabled, MythTV will prompt for confirmation when you press the System Exit key.</source> - <translation>Falls gesetzt, wird MythTV beim Drücken der Beenden-Taste nachfragen.</translation> + <translation>Falls gesetzt, wird MythTV beim Drücken der 'Beenden'-Taste nachfragen.</translation> </message> <message> <source>If you have configured an exit key using the System Shutdown option, you will be given the opportunity to exit MythTV or halt the system completely. Another possibility for this field is "poweroff"</source> @@ -4979,7 +4994,7 @@ </message> <message> <source>Use Arrow Key Accelerators</source> - <translation>Navigation mit Pfeiltasten erlauben</translation> + <translation>Navigation mit Pfeiltasten</translation> </message> <message> <source>If enabled, Arrow key accelerators will be used, with LEFT performing an exit action and RIGHT selecting the current item.</source> @@ -5003,7 +5018,7 @@ </message> <message> <source>If enabled, use the above size for TV, otherwise use full screen.</source> - <translation>Falls gesetzt, wird das Fernsehbild auf GUI Größe angepasst, ansonsten auf Vollbildgröße.</translation> + <translation>Falls gesetzt, wird das Fernsehbild auf GUI-Größe angepasst, ansonsten auf Vollbildgröße.</translation> </message> <message> <source>Switch X Window video modes for TV. Requires "xrandr" support.</source> @@ -5095,7 +5110,7 @@ </message> <message> <source>If enabled, MythTV modules will send event details to the database, where they can be viewed with MythLog or periodically emailed to the administrator.</source> - <translation>Falls aktiviert, werden die MythTV Module Meldungen in der Datenbank speichern. Sie können mittels MythLog kontrolliert oder regelmäßig per e-mail an den Verwalter geschickt werden.</translation> + <translation>Falls gesetzt, werden die MythTV Module Meldungen in der Datenbank speichern. Sie können mittels MythLog kontrolliert oder regelmäßig per e-mail an den Verwalter geschickt werden.</translation> </message> <message> <source>Maximum Number of Entries per Module</source> @@ -5411,7 +5426,7 @@ </message> <message> <source>The horizontal offset the GUI will be displayed at. May only work if run in a window.</source> - <translation>Der hoizontale Versatz mit dem die GUI angezeigt wird. Könnte nur funktionieren falls MythTV im Fenster gestartet wird.</translation> + <translation>Der horizontale Versatz mit dem die GUI angezeigt wird. Könnte nur funktionieren falls MythTV im Fenster gestartet wird.</translation> </message> <message> <source>Default size is 12.</source> @@ -5793,7 +5808,7 @@ </message> <message> <source>Use custom identifier for frontend preferences</source> - <translation>Nutze einen selbstgewählten Namen für dieses Frontend</translation> + <translation>für dieses Frontend einen eigenen Namen verwenden</translation> </message> <message> <source>Wake-On-LAN settings</source> @@ -5833,7 +5848,7 @@ </message> <message> <source>The user name to use while connecting to the database. This information is required.</source> - <translation>Der Benutzername für die Anmeldung am Datenbankserver.</translation> + <translation>Der Benutzername für die Anmeldung am Datenbankserver. Diese Information ist verpflichtend.</translation> </message> <message> <source>The password to use while connecting to the database. This information is required.</source> @@ -5877,7 +5892,7 @@ </message> <message> <source>The time in seconds to wait for the server to wake up.</source> - <translation>Wie lange auf den Start des Servers gewartet wird.</translation> + <translation>Wie lange auf den Start des Servers gewartet wird (in Sek.).</translation> </message> <message> <source>Retry attempts</source> @@ -5885,7 +5900,7 @@ </message> <message> <source>The number of retries to wake the server before the frontend gives up.</source> - <translation>Wie oft soll versucht werden, den Server zu starten.</translation> + <translation>Wie oft versucht werden soll, den Server zu starten.</translation> </message> <message> <source>Wake command</source> @@ -5925,15 +5940,15 @@ </message> <message> <source>Unable to initialize video.</source> - <translation>Kann den Videomodus nicht initialisieren.</translation> + <translation type="obsolete">Kann den Videomodus nicht initialisieren.</translation> </message> <message> <source>Error was encountered while displaying video.</source> - <translation>Während der Videoanzeige ist ein Fehler aufgetreten.</translation> + <translation type="obsolete">Während der Videoanzeige ist ein Fehler aufgetreten.</translation> </message> <message> <source>Return to Menu</source> - <translation>Zurück ins Menü</translation> + <translation type="obsolete">Zurück ins Menü</translation> </message> <message> <source>Single Record</source> @@ -6045,7 +6060,7 @@ </message> <message> <source>Sort Episodes</source> - <translation>Folgen sortieren</translation> + <translation>Sortiere Folgen nach</translation> </message> <message> <source>Record date</source> @@ -6053,7 +6068,7 @@ </message> <message> <source>Selects how to sort a shows episodes</source> - <translation>Bestimmt, wie die einzelnen Folgen einer Serie sortiert werden.</translation> + <translation>Bestimmt, wie die einzelnen Folgen der gleichen Serie sortiert werden.</translation> </message> <message> <source>S</source> @@ -6317,7 +6332,7 @@ </message> <message> <source>Guard Interval (Default: Auto)</source> - <translation type="unfinished"></translation> + <translation>Guard Intervall (Standard: Auto)</translation> </message> <message> <source>Transmission Mode (Default: Auto)</source> @@ -6425,7 +6440,7 @@ </message> <message> <source>This is the default value used for the Auto-Commercial Flagging setting when a new scheduled recording is created.</source> - <translation>Falls gesetzt, wird für neue Aufnahmen die 'Werbung markieren' Funktion standardmäßig aktiviert sein.</translation> + <translation>Falls gesetzt, wird für neu geplante Aufnahmen die 'Werbung markieren' Option aktiviert sein.</translation> </message> <message> <source>Run on the specified screen or spanning all screens.</source> @@ -6551,7 +6566,7 @@ </message> <message> <source>DVB Transport</source> - <translation type="unfinished">DVB Transponder</translation> + <translation>DVB Transponder</translation> </message> <message> <source>Transport Options</source> @@ -6559,7 +6574,7 @@ </message> <message> <source>Signal Lock</source> - <translation>Signal-Lock</translation> + <translation>Signalverriegelung</translation> </message> <message> <source>Signal Power</source> @@ -6567,15 +6582,15 @@ </message> <message> <source>Failed to Reinit Video.</source> - <translation>Konnte den Videomodus nicht neu initialisieren.</translation> + <translation type="obsolete">Konnte den Videomodus nicht neu initialisieren.</translation> </message> <message> <source>And, never ask again.</source> - <translation>Nie wieder fragen.</translation> + <translation type="obsolete">Nie wieder fragen.</translation> </message> <message> <source>And, don't ask again in this session.</source> - <translation>Nicht während dieser Sitzung fragen.</translation> + <translation type="obsolete">Nicht während dieser Sitzung fragen.</translation> </message> <message> <source>c</source> @@ -6689,51 +6704,51 @@ </message> <message> <source>Default group filter to apply on the View Recordings screen.</source> - <translation type="unfinished">Standard Gruppenfilter, der benutzt werden soll in "Aufnahmen ansehen".</translation> + <translation>Vorgegebener Gruppenfilter der im "Aufnahmen ansehen" Menü benutzt werden soll.</translation> </message> <message> <source>Save current group filter when changed</source> - <translation>Derzeitige Gruppe speichern falls geändert</translation> + <translation>Aktuellen Gruppenfilter merken</translation> </message> <message> <source>Remember the last selected filter instead of displaying the default filter whenever you enter the playback screen.</source> - <translation>Die letzte gewählte Gruppe merken statt immer die Standard-Gruppe zu benutzen.</translation> + <translation>Den zuletzt gewählten Gruppenfilter merken, anstatt immer den vorgegebenen Gruppenfilter zu verwenden.</translation> </message> <message> <source>Default View</source> - <translation type="unfinished">Standardansicht</translation> + <translation>Standardansicht</translation> </message> <message> <source>Show Titles only</source> - <translation type="unfinished">Nur Titel zeigen</translation> + <translation>Nur Titel zeigen</translation> </message> <message> <source>Show Titles and Categories</source> - <translation type="unfinished">Titel und Kategorien zeigen</translation> + <translation>Titel und Kategorien zeigen</translation> </message> <message> <source>Show Titles, Categories, and Recording Groups</source> - <translation type="unfinished">Titel, Kategorien und Aufnahmegruppen zeigen</translation> + <translation>Titel, Kategorien und Aufnahmegruppen zeigen</translation> </message> <message> <source>Show Titles and Recording Groups</source> - <translation type="unfinished">Titel und Aufnahmegruppen zeigen</translation> + <translation>Titel und Aufnahmegruppen zeigen</translation> </message> <message> <source>Show Categories only</source> - <translation type="unfinished">Nur Kategorien zeigen</translation> + <translation>Nur Kategorien zeigen</translation> </message> <message> <source>Show Categories and Recording Groups</source> - <translation type="unfinished">Kategorien und Aufnahmegruppen zeigen</translation> + <translation>Kategorien und Aufnahmegruppen zeigen</translation> </message> <message> <source>Show Recording Groups only</source> - <translation type="unfinished">Nur Aufnahmegruppen zeigen</translation> + <translation>Nur Aufnahmegruppen zeigen</translation> </message> <message> <source>Select what type of grouping to show on the Watch Recordings screen by default.</source> - <translation type="unfinished">Wählen Sie die Aufnahmegruppe aus, die im 'Aufnahmen ansehen' Menü standardmäßig angezeigt werden soll.</translation> + <translation>Wählen Sie die Gruppenfilter aus, die im "Aufnahmen ansehen" Menü standardmäßig angezeigt werden soll.</translation> </message> <message> <source>Show filter name instead of "All Programs"</source> @@ -6741,7 +6756,7 @@ </message> <message> <source>Use the name of the display filter currently applied in place of the term "All Programs" in the playback screen.</source> - <translation>Zeige den name der Gruppe anstatt von "Alle Sendungen" bei der Wiedergabe</translation> + <translation>Zeigt im "Aufnahmen ansehen" Menü den Namen der Gruppe anstatt "Alle Sendungen".</translation> </message> <message> <source>Commercial Flag New Recordings</source> @@ -6753,7 +6768,7 @@ </message> <message> <source>This is the default value used for the Auto-Transcode setting when a new scheduled recording is created.</source> - <translation>Die Standardeinstellung des autom. Umwandlers bei neuen Aufnahmen.</translation> + <translation>Falls gesetzt, wird für neu geplante Aufnahmen die 'Umwandler' Option aktiviert sein.</translation> </message> <message> <source>Default Transcoder</source> @@ -6761,7 +6776,7 @@ </message> <message> <source>This is the default value used for the transcoder setting when a new scheduled recording is created.</source> - <translation>Die Standardeinstellung des Umwandlers für neue Aufnahmen.</translation> + <translation>Die Voreinstellung des Umwandlers für neue Aufnahmen.</translation> </message> <message> <source>Run User Job #%1 On New Recordings</source> @@ -6785,7 +6800,7 @@ </message> <message> <source>category name</source> - <translation>Kategorie</translation> + <translation type="obsolete">Kategorie</translation> </message> <message> <source>For a specific category (e.g. "Sports event"), request that shows be autoextended. Only works if a show's category can be determined.</source> @@ -6889,7 +6904,7 @@ </message> <message> <source>Use an LCD display to view MythTV status information.</source> - <translation>MythTV kann verschiedene Statusinformationen auf einem LCD-Display ausgeben.</translation> + <translation>MythTV kann auf einem LCD-Display verschiedene Statusinformationen anzeigen.</translation> </message> <message> <source>General (Basic)</source> @@ -7007,7 +7022,7 @@ </message> <message> <source>If this is the master backend server, please run 'mythfilldatabase' to populate the database with channel information.</source> - <translation>Falls dies der Master Backend Rechner ist, starten Sie nun 'mythfilldatabase' um die Sender zu konfigurieren.</translation> + <translation>Falls dies der Master-Backend Rechner ist, starten Sie nun 'mythfilldatabase' um die Sender zu konfigurieren.</translation> </message> <message> <source>CC/TXT enabled</source> @@ -7068,7 +7083,7 @@ </message> <message> <source>Auto Expire Default</source> - <translation>Autom. Löschen bei neuen Aufnahmen aktivieren</translation> + <translation>neue Aufnahmen autom. Löschen</translation> </message> <message> <source>Turn on the LCD heartbeat.</source> @@ -7076,7 +7091,7 @@ </message> <message> <source>A command executed before the backend would shutdown. The return value determines if the backend can shutdown. 0 - yes, 1 - restart idleing, 2 - reset the backend to wait for a frontend.</source> - <translation>Dieses Kommando wird vor dem Herunterfahren ausgeführt. Der Rückgabewert bestimmt ob der Rechner herunter gefahren werden kann. 0 - Ja; 1 - Leerlaufzeit zurücksetzen; 2 - auf Frontend warten.</translation> + <translation type="obsolete">Dieses Kommando wird vor dem Herunterfahren ausgeführt. Der Rückgabewert bestimmt ob der Rechner herunter gefahren werden kann. 0 - Ja; 1 - Leerlaufzeit zurücksetzen; 2 - auf Frontend warten.</translation> </message> <message> <source>Number of bonus points to be added to any recording on this channel during scheduling.</source> @@ -7154,7 +7169,7 @@ </message> <message> <source>Always prompt the user for the initial filter to apply when entering the Watch Recordings screen.</source> - <translation>Wird bei jedem öffnen des "Aufnahmen ansehen" Fensters nach der gewünschten Gruppe fragen.</translation> + <translation>Falls gesetzt, wird bei jedem öffnen des "Aufnahmen ansehen" Menüs nach der gewünschten Gruppe gefragt.</translation> </message> <message> <source>Lowest Priority First</source> @@ -7234,11 +7249,11 @@ </message> <message> <source>LCD Key order</source> - <translation>LCD Tastenreihenfolge</translation> + <translation>LCD-Tastenanordnung</translation> </message> <message> <source>Enter the 6 Keypad Return Codes for your LCD keypad in the order in which you want the functions up/down/left/right/yes/no to operate. (See lcdproc/server/drivers/hd44780.c/keyMapMatrix[] or the matrix for your display)</source> - <translation>Geben Sie die 6 Tastatur Eingabekode für Ihre LCD Tastatur, in der Reihenflolge in der Sie die Funktionen hoch/runter/links/rechts/ja/nein betätigen wollen, ein. (Schlagen Sie lcdproc/server/drivers/hd44780.c/keyMapMatrix[] oder die Matrix Ihres Displays nach)</translation> + <translation>Geben Sie die sechs Tastaturrückgabewerte der LCD-Tastatur in der Reihenfolge ein, in der Sie die Funktionen auf/ab/links/rechts/ja/nein betätigen wollen. (Siehe lcdproc/server/drivers/hd44780.c/keyMapMatrix[] oder die Matrix Ihres Displays)</translation> </message> <message> <source>Save original files after transcoding (globally)</source> @@ -7426,7 +7441,7 @@ </message> <message> <source>Set to a value less than or equal to the number of processors on the backend that will be doing the encoding.</source> - <translation>Geben Sie hier eine Zahl <= der Anzahl der CPUs des Backends ein, das die Umwandlung vornehmen wird.</translation> + <translation>Geben Sie hier eine Zahl ≤ der Anzahl der CPUs des Backends ein, das die Umwandlung vornehmen wird.</translation> </message> <message> <source>MPEG-2 Parameters</source> @@ -7498,11 +7513,11 @@ </message> <message> <source>Could not query inputs.</source> - <translation type="unfinished">Konnte nicht die verfügbaren Eingange ermitteln.</translation> + <translation>Konnte die verfügbaren Eingange nicht ermitteln.</translation> </message> <message> <source>ERROR, Compile with V4L support to query inputs</source> - <translation type="unfinished">FEHLER: Video4Linux Unterstützung fehlt, kann die verfügbaren Eingänge nicht ermitteln.</translation> + <translation>FEHLER: Video4Linux Unterstützung fehlt, kann die verfügbaren Eingänge nicht ermitteln.</translation> </message> <message> <source>Subtype</source> @@ -7534,11 +7549,11 @@ </message> <message> <source>Could not open '%1' to probe its inputs.</source> - <translation type="unfinished">Konnte '%1' nicht ansprechen um die Eingänge zu ermitteln.</translation> + <translation>Konnte '%1' nicht ansprechen um die Eingänge zu ermitteln.</translation> </message> <message> <source>ERROR, Compile with DVB support to query inputs</source> - <translation type="unfinished">FEHLER: DVB Unterstützung fehlt, kann die verfügbaren Eingänge nicht ermitteln.</translation> + <translation>FEHLER: DVB Unterstützung fehlt, kann die verfügbaren Eingänge nicht ermitteln.</translation> </message> <message> <source>Deinterlace algorithm.</source> @@ -7670,7 +7685,7 @@ </message> <message> <source>CC font</source> - <translation>Schriftart füt Teletext</translation> + <translation>Schriftart für Untertitel</translation> </message> <message> <source>Recording Available</source> @@ -7750,7 +7765,7 @@ </message> <message> <source>Automatically set new recording rules to use this group if the title matches this regular expression. For example, "(News|CNN)" would match any title in which "News" or "CNN" appears.</source> - <translation>Weise allen neuen Aufnameregel diese Gruppe zu falls der Titel diesen regulären Ausdruck entsprechen. Beispiel: "(News|CNN)" würde alle Titel mit "News" oder "CNN" erkennen.</translation> + <translation>Weise allen neuen Aufnameregeln diese Gruppe zu, falls der Titel diesem regulären Ausdruck entspricht. Beispiel: "(News|CNN)" würde alle Titel mit "News" oder "CNN" erkennen.</translation> </message> <message> <source>Skip ahead (seconds)</source> @@ -7786,7 +7801,7 @@ </message> <message> <source>If set, MythTV will automatically rewind this many seconds after performing a commercial skip.</source> - <translation>Falls gesetzt, wird MythTV autom. so viele Sekunden zurück springen nachdem ein Werbeblock übersprungen wurde.</translation> + <translation>Falls gesetzt, wird MythTV autom. um so viele Sekunden zurück springen nachdem ein Werbeblock übersprungen wurde.</translation> </message> <message> <source>Title Pronounce</source> @@ -7814,7 +7829,7 @@ </message> <message> <source>Adapter</source> - <translation type="unfinished"></translation> + <translation>Adapter</translation> </message> <message> <source>Presenter</source> @@ -7874,7 +7889,7 @@ </message> <message> <source>Enable sending DTS audio directly to your sound card's SPDIF output, on sources which contain DTS soundtracks (usually DVDs). Requires that the audio output device be set to something suitable.</source> - <translation>DTS-Audio am SPDIF Ausgang der Soundkarte bereitstellen. Dies funktioniert nur falls eine DTS Tonspur verfügbar ist (wie bei DVDs). Das 'Audio Ausgabegerät' muss dazu entsprechend konfiguriert sein.</translation> + <translation>DTS-Audio am SPDIF-Ausgang der Soundkarte bereitstellen. Dies funktioniert nur falls eine DTS-Tonspur verfügbar ist (wie bei DVDs). Das 'Audio-Ausgabegerät' muss dazu entsprechend konfiguriert sein.</translation> </message> <message> <source>Show 'LiveTV' recordings when using "All Programs" filter</source> @@ -7918,7 +7933,7 @@ </message> <message> <source>AutoExpire List</source> - <translation>Autom. Verfallliste</translation> + <translation>Autom. Löschen</translation> </message> <message> <source>The AutoExpire List shows all recordings which may be expired and the order of their expiration. Recordings at the top of the list will be expired first.</source> @@ -7954,15 +7969,15 @@ </message> <message> <source>Defines a period the master backend should be awake</source> - <translation>Bestimmt ein Zeitfenster in dem das Master Backend läuft</translation> + <translation>Bestimmt das Zeitfenster in dem das Master-Backend laufen soll</translation> </message> <message> <source>Shutdown with Master Backend</source> - <translation>Mit dem Master Backend herunterfahren</translation> + <translation>Mit dem Master-Backend herunterfahren</translation> </message> <message> <source>Mythwelcome will automatically shutdown this computer when the master backend shuts down. Should only be set on frontend only machines</source> - <translation>MythWelcome wird diesen Rechner zusammen mit dem Master Backend herunterfahren. Dies sollte nur bei reinen Frontend-Rechnern aktiviert sein.</translation> + <translation>MythWelcome wird diesen Rechner zusammen mit dem Master-Backend herunterfahren. Dies sollte nur bei reinen Frontend-Rechnern aktiviert sein.</translation> </message> <message> <source>Command to run to start the Frontend</source> @@ -8042,11 +8057,11 @@ </message> <message> <source>All Available Methods</source> - <translation>Alle möglichen Methoden</translation> + <translation type="obsolete">Alle möglichen Methoden</translation> </message> <message> <source>Blank Frame Detection</source> - <translation>Dunkle Bilder Erkennung</translation> + <translation type="obsolete">Dunkle Bilder Erkennung</translation> </message> <message> <source>This determines the method used by MythTV to detect when commercials start and end.</source> @@ -8054,7 +8069,7 @@ </message> <message> <source>Maximum commercial skip (in seconds)</source> - <translation>Maximale Werbeblock Sprunglänge (in Sekunden)</translation> + <translation>Maximale Werbeblock Sprunglänge (in Sek.)</translation> </message> <message> <source>Weighted Time/Priority Combination</source> @@ -8066,7 +8081,7 @@ </message> <message> <source>The number of days bonus a program gets for each priority point. This is only used when the Weighted Time/Priority Auto Expire Method is selected.</source> - <translation>Die anzahl der Tage die eine Sendung für jeden Prioritätspunkt zusätzlich erhalten bleibt. Diese Funktion wird nur genutzt wen die Gewichtete Zeit/Priorität Kombination ausgewähtl wurde.</translation> + <translation>Für wieviele Tage eine Sendung für jeden Prioritätspunkt zusätzlich erhalten bleibt. Diese Funktion wird nur genutzt wenn die Gewichtete Zeit/Priorität Kombination ausgewählt wurde.</translation> </message> <message> <source>Mac hardware acceleration</source> @@ -8095,20 +8110,20 @@ <message> <source>F</source> <comment>RecStatusChar rsOffLine</comment> - <translation type="unfinished">F</translation> + <translation>F</translation> </message> <message> <source>Recorder Off-Line</source> - <translation>Recorder nicht angeschlossen</translation> + <translation>Rekorder nicht angeschlossen</translation> </message> <message> <source>the backend recorder is off-line.</source> - <translation>der Backendrecorder ist nicht angeschlossen.</translation> + <translation>der Backend-Rekorder ist nicht aktiv.</translation> </message> <message> <source>CC</source> <comment>Closed Captioned</comment> - <translation type="unfinished">CC</translation> + <translation>UT</translation> </message> <message> <source>Use DishNet Long-term EIT Data</source> @@ -8496,7 +8511,7 @@ </message> <message> <source>DataDirect</source> - <translation type="unfinished"></translation> + <translation>DataDirect</translation> </message> <message> <source>Time Offset</source> @@ -8549,22 +8564,22 @@ <message> <source>CC</source> <comment>EIA-608 closed captions</comment> - <translation type="unfinished">CC</translation> + <translation>UT</translation> </message> <message> <source>ATSC CC</source> <comment>EIA-708 closed captions</comment> - <translation type="unfinished"></translation> + <translation>ATSC UT</translation> </message> <message> <source>TT CC</source> <comment>Teletext closed captions</comment> - <translation type="unfinished"></translation> + <translation>TT UT</translation> </message> <message> <source>TT Menu</source> <comment>Teletext Menu</comment> - <translation type="unfinished"></translation> + <translation>TT Menü</translation> </message> <message> <source>TXT CAP</source> @@ -8621,7 +8636,7 @@ </message> <message> <source>Use any available input</source> - <translation>Verfügbare Anschlüsse nutzen</translation> + <translation>Einen beliebigen Eingang verwenden</translation> </message> <message> <source>Prefer input %1</source> @@ -8634,7 +8649,7 @@ <message> <source>UNKNOWN%1</source> <comment>Synthesized callsign</comment> - <translation type="unfinished">UNBEKANNT%1</translation> + <translation>UNBEKANNT%1</translation> </message> <message> <source>DVB Tuning Delay (msec)</source> @@ -8642,11 +8657,11 @@ </message> <message> <source>Some Linux DVB drivers, in particular for the Hauppauge Nova-T, require that we slow down the tuning process.</source> - <translation type="unfinished">Einige Linux DVB-Treiber, ins besondere Hauppauge Nova-T sind beim Tuning etwas langsam.</translation> + <translation>Einige Linux DVB-Treiber, insbesondere Hauppauge Nova-T sind beim Tuning etwas langsam.</translation> </message> <message> <source>Device ID</source> - <translation>Gerät ID</translation> + <translation>Geräte ID</translation> </message> <message> <source>Tuner</source> @@ -8666,23 +8681,23 @@ </message> <message> <source>(Delete all capture cards on %1)</source> - <translation>(Lösche alle Aufnahegeräte von %1)</translation> + <translation>(Lösche alle Aufnahmegeräte von %1)</translation> </message> <message> <source>Passthrough output device</source> - <translation>Durchgangs Ausgangsgerät</translation> + <translation>Ton bereitstellen an</translation> </message> <message> <source>Audio output device to use for AC3 and DTS passthrough. Default is the same as Audio output device. This value is currently only used with ALSA sound output.</source> - <translation>Audioausgangsgerät um AC3 und DTS durchzuleiten. Standard ist das selbe Audiogerät. Dieser Wert kann nur in Verbindung mit der ALSA Tonausgabe genutzt werden.</translation> + <translation>Das Audio-Ausgabegerät um AC3- und DTS-Ton durchzuleiten. Bei 'Standard' wird das 'Audio-Ausgabegerät' verwendet. Diese Einstellung kann momentan nur bei Tonausgabe über ALSA genutzt werden.</translation> </message> <message> <source>MythTV will discourage long manual commercial skips. Skips which are longer than this will require the user to hit the SKIP key twice. Automatic commercial skipping is not affected by this limit.</source> - <translation>MythTV wird vor langen manuellen Werbeblocksprüngen abstand nehmen. Werbesprünge, die länger sind als dieser Wert sind müssen mit einem weiteren Knopfdruck wiederholt werden. Automatische Werbesprünge sind hiervon nicht betroffen.</translation> + <translation>MythTV wird von langen manuellen Werbeblocksprüngen Abstand nehmen. Werbesprünge, die länger als dieser Wert sind, müssen mit einem weiteren Tastendruck (SKIP-Taste) wiederholt werden. Automatische Werbesprünge sind hiervon nicht betroffen.</translation> </message> <message> <source>Text zoom percentage</source> - <translation>Textvergrößerungsprozent</translation> + <translation>Textvergrößerung (%)</translation> </message> <message> <source>Use this to enlage or shrink captions.</source> @@ -8694,23 +8709,23 @@ </message> <message> <source>This allows you to set which font type to use when the broadcaster does not specify a font.</source> - <translation>Hier können Sie den Schrifttypen festlegen falls der Sender diesen nicht festgelegt hat.</translation> + <translation>Hier können Sie den Zeichensatz festlegen falls der Sender ihn nicht vorgibt.</translation> </message> <message> <source>Monospaced serif</source> - <translation>Serife mit feste Leerzeichen</translation> + <translation>Serife mit festen Abständen</translation> </message> <message> <source>Proportional serif</source> - <translation>Serife mit variablen Leerzeichen</translation> + <translation>Serife mit variablen Abständen</translation> </message> <message> <source>Monospaced sans serif</source> - <translation>Serifenlos mit feste Leerzeichen</translation> + <translation>Serifenlos mit feste Abständen</translation> </message> <message> <source>Proportional sans serif</source> - <translation>Serifenlos mit variablen Leerzeichen</translation> + <translation>Serifenlos mit variablen Abständen</translation> </message> <message> <source>Casual</source> @@ -8738,15 +8753,15 @@ </message> <message> <source>Black background for analog closed captioning</source> - <translation>Schwarzter Hintergrund für analoge Hörbehinderteuntertitel</translation> + <translation>Schwarzer Hintergrund für analoge Untertitel</translation> </message> <message> <source>If enabled, analog captions will be displayed over a black space for maximum contrast. Otherwise, captions will use outlined text over the picture.</source> - <translation>Falls gesetzt, werden analoge Untertitel mit einem Schwarzen Hintergrund belegt um den Kontrast zu erhähen. Sonnst erhalten die Untertitel nur eine Umrandung.</translation> + <translation>Falls gesetzt, werden analoge Untertitel mit einem Schwarzen Hintergrund belegt um den Kontrast zu erhöhen. Sonst erhalten die Untertitel nur eine Umrandung.</translation> </message> <message> <source>Always display closed captioning or subtitles</source> - <translation>Immer Untertitel anzeigen</translation> + <translation>Untertitel permanent anzeigen</translation> </message> <message> <source>Enable Interactive TV</source> @@ -8758,15 +8773,15 @@ </message> <message> <source>Paint Engine</source> - <translation>Zeichenengine</translation> + <translation>Zeichenmethode</translation> </message> <message> <source>Qt</source> - <translation type="unfinished"></translation> + <translation>Qt</translation> </message> <message> <source>OpenGL</source> - <translation type="unfinished"></translation> + <translation>OpenGL</translation> </message> <message> <source>This selects what Myth uses to draw. If you have decent hardware, select OpenGL. Changing this requires a restart.</source> @@ -8802,7 +8817,7 @@ </message> <message> <source>Additional priority when a showing matches the preferred input selected in the 'Scheduling Options' section of the recording rule.</source> - <translation>Zusätzliche Priorität die dann greift wenn eine Austrahlung dem gewählen präferierten Eingang bei der Regelerstellung übereinstimmt.</translation> + <translation>Zusätzliche Priorität die dann greift, wenn eine Ausstrahlung mit dem unter 'Aufnahmeoptionen' gewählten bevorzugten Eingang einer Aufnahmeregel übereinstimmt.</translation> </message> <message> <source>HDTV Recording Priority</source> @@ -8850,11 +8865,11 @@ </message> <message> <source>Disable AutoExpire</source> - <translation>Autoverfall Abschalten</translation> + <translation>Autom. Löschen abschalten</translation> </message> <message> <source>AutoExpire Actions:</source> - <translation>Autoverfall Aktionen:</translation> + <translation>Autom. Löschen Aktionen:</translation> </message> <message> <source>Time offset for EIT listings</source> @@ -8870,11 +8885,11 @@ </message> <message> <source>If enabled, listings data collected on one Video Source will be applied to the first matching DVB channel on any Video Source. This is sometimes useful for DVB-S, but may insert bogus data into any ATSC listings stored in the same database.</source> - <translation>Falls gesetzt, werden die Programmdaten die von einer Quelle gesammelt werden auf alle passenden DVB Sender unabhängig von der Quelle. Dies ist manchmal bei DVB-S nützlich, kann aber auch zu Eingabe von falschen Daten führen.</translation> + <translation>Falls gesetzt, werden die Programmdaten die von einer Quelle gesammelt werden auf alle passenden DVB-Sender, unabhängig von der Quelle, verteilt. Dies ist manchmal bei DVB-S nützlich, kann aber auch zu falschen Programmdaten führen.</translation> </message> <message> <source>Backend Idle Before EIT Crawl (seconds)</source> - <translation>Backend Untätigkeit vor EIT Bezug (Sekunden)</translation> + <translation>Backend Untätigkeit vor EIT Bezug (Sek.)</translation> </message> <message> <source>The minimum number of seconds after a recorder becomes idle to wait before MythTV begins collecting EIT listings data.</source> @@ -8882,7 +8897,7 @@ </message> <message> <source>Length of time the frontend waits between tries to wake up the master backend. This should be the time your masterbackend needs to startup. Set 0 to disable.</source> - <translation>Wiederholungrytmus des frontends um den Masterbackend zu wecken. Dies sollte mindestens die Zeit sein die das Masterbackend brauch um zu starten. Auf '0' setzten um es abzuschalten.</translation> + <translation type="obsolete">Wiederholungsrhythmus des Frontends um das Master-Backend zu wecken. Dies sollte mindestens die Zeit sein die das Master-Backend braucht um zu starten. Auf '0' setzen um es abzuschalten.</translation> </message> <message> <source>EIT Scanner Options</source> @@ -8895,7 +8910,7 @@ </message> <message> <source>Choose the model that most closely resembles your set top box. Depending on firmware revision SA4200HD may work better for a SA3250HD box.</source> - <translation>Wählen sie das Modell was am ehesten das Ihrige trifft. Je nach firmware kann SA42200HD besser als SA3250HD funktionieren.</translation> + <translation>Wählen sie das Modell das Ihrem am ähnlichsten ist. Je nach Firmware kann SA42200HD besser für eine SA3250HD Box funktionieren.</translation> </message> <message> <source>channel number</source> @@ -8911,11 +8926,11 @@ </message> <message> <source>Display Large Clock</source> - <translation>Zeige große Uhr</translation> + <translation>große Uhr anzeigen</translation> </message> <message> <source>On multiline displays try and display the time as large as possible.</source> - <translation>Auf Mehrzeilendisplays versuche die Zeit so groß wie möglich darzustellen.</translation> + <translation>Zeigt bei mehrzeiligen Displays die Uhrzeit so gross wie möglich an.</translation> </message> <message> <source>If set, the MPEG4 encoder will use interlaced DCT encoding. You may want this when encoding interlaced video, however, this is experimental and may cause damaged video.</source> @@ -8931,15 +8946,15 @@ </message> <message> <source>Upcoming episodes for this title</source> - <translation>Zukünftige Folgen dieses Titels</translation> + <translation>Kommende Sendetermine dieses Titels</translation> </message> <message> <source>Upcoming episodes for this rule</source> - <translation>Zukünftige Folgen dieses Regel</translation> + <translation>Kommende Sendetermine dieser Aufnahmeregel</translation> </message> <message> <source>Previously scheduled episodes</source> - <translation>Vorherig geplante Folgen</translation> + <translation>Frühere Sendetermine</translation> </message> <message> <source>(CH)</source> @@ -8947,7 +8962,7 @@ </message> <message> <source>(REC)</source> - <translation type="unfinished">(REC)</translation> + <translation>(REC)</translation> </message> <message> <source>Adjust Playback</source> @@ -8979,23 +8994,24 @@ </message> <message> <source>This option makes the backend dvb-recorder only open the card when it is actually in-use, leaving it free for other programs at other times.</source> - <translation>Diese Option zwingt das Backend bei DVB-Aufnahmen die Karte nur dann zu belegen wenn sie gebraucht wird, so dass sie sonnst für andere Programme zu Verfügung steht.</translation> + <translation>Diese Option zwingt das Backend bei DVB-Aufnahmen die Karte nur dann zu belegen wenn sie gebraucht wird, so dass sie sonst für andere Programme zu Verfügung steht.</translation> </message> <message> <source>Experimental</source> - <translation>Experimentell</translation> + <translation type="obsolete">Experimentell</translation> </message> <message> <source>General (AutoExpire)</source> - <translation>Standard (Autoverfall)</translation> + <translation>Allgemeines (Automatisches Löschen)</translation> </message> <message> <source>Failed to open '%1' in %2 Check if the video exists</source> - <translation>Scheiterte beim öffnen von - '%1' in %2 -Prüfen Sie ob das Video existiert.</translation> + <translation>Konnte + '%1' in %2 +nicht öffnen. +Prüfen Sie ob die Videodatei existiert.</translation> </message> <message> <source>Delete files slowly</source> @@ -9015,15 +9031,15 @@ </message> <message> <source>This section lists each transport that MythTV currently knows about. The display fields are video source, modulation, frequency, and when relevant symbol rate, network id, and transport id.</source> - <translation type="unfinished">Diese Liste zeigt die Transporte die MythTV z.Z. kennt.</translation> + <translation>Diese Liste zeigt die Transporte, die MythTV momentan kennt.</translation> </message> <message> <source>Sorry, the Transport Editor can only be used to edit transports which are connected to a card input.</source> - <translation>Entschuldigung, der Transporteditor kann nur Trnsports editieren die an eine Eingangsquelle verbunden sind.</translation> + <translation>Entschuldigung, der Transporteditor kann nur Transports bearbeiten die an eine Eingangsquelle gebunden sind.</translation> </message> <message> <source>Failed to probe a capture card connected to this transport's video source. Please make sure the backend is not running.</source> - <translation>Konnte die Aufnamekarte des zu dieser Eingangsquelle zugehörenden Transport nicht testen. Prüfen Sie ob das Backend läuft.</translation> + <translation>Konnte die Aufnahmekarte des zu dieser Eingangsquelle gehörenden Transport nicht testen. Prüfen Sie ob das Backend läuft.</translation> </message> <message> <source>The Video Sources to which this Transport is connected are incompatible, please create seperate video sources for these cards. </source> @@ -9035,15 +9051,15 @@ </message> <message> <source>Guiding standard to use for making sense of the data streams after they have been demodulated, error corrected and demultiplexed.</source> - <translation type="unfinished">TV Standard zur korrekten erkennung der Datenströme nach dem diese Demoduliert, Fehlerkorrigiert und Demultiplexed wurden.</translation> + <translation>TV Standard zur korrekten Erkennung der Datenströme nach dem diese Demoduliert, Fehlerkorrigiert und Demultiplexed wurden.</translation> </message> <message> <source>OpenCable</source> - <translation type="unfinished"></translation> + <translation>OpenCable</translation> </message> <message> <source>MPEG</source> - <translation type="unfinished"></translation> + <translation>MPEG</translation> </message> <message> <source>Frequency (Option has no default). @@ -9057,7 +9073,7 @@ </message> <message> <source>QAM Auto</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>seconds</source> @@ -9078,7 +9094,7 @@ <message> <source>Group</source> <comment>Play Group</comment> - <translation type="unfinished">Gruppe</translation> + <translation>Gruppe</translation> </message> <message> <source>f</source> @@ -9120,7 +9136,7 @@ </message> <message> <source>Auto-expire off</source> - <translation>Autoverfall aus</translation> + <translation>Autom. Löschen aus</translation> </message> <message> <source>Marked as 'watched'</source> @@ -9176,7 +9192,7 @@ </message> <message> <source>Modulation, 8-VSB, QAM-256, etc.</source> - <translation type="unfinished"></translation> + <translation>Modulation, 8-VSB, QAM-256, etc.</translation> </message> <message> <source>ATSC Channel Separator</source> @@ -9184,7 +9200,7 @@ </message> <message> <source>Include in the "%1" recording group</source> - <translation>Der "%1" Aufnahmegruppe hinzufügen.</translation> + <translation>Der "%1" Aufnahmegruppe hinzufügen</translation> </message> <message> <source>Exclude unidentified episodes</source> @@ -9196,11 +9212,11 @@ </message> <message> <source>Select Storage Group</source> - <translation>Speichgergruppe auswählen</translation> + <translation>Speichergruppe auswählen</translation> </message> <message> <source>Store in the "%1" storage group</source> - <translation>Der "%1" Speichergruppe hinzufügen.</translation> + <translation>Der "%1" Speichergruppe hinzufügen</translation> </message> <message> <source>LiveTV</source> @@ -9212,7 +9228,7 @@ </message> <message> <source>GUID</source> - <translation type="unfinished"></translation> + <translation>GUID</translation> </message> <message> <source>Generic</source> @@ -9220,7 +9236,7 @@ </message> <message> <source>800Mbps</source> - <translation type="unfinished">800 Mbps</translation> + <translation>800 Mbps</translation> </message> <message> <source>IP address or Device ID from the bottom of the HDHomeRun. You may use 'FFFFFFFF' if there is only one unit on your your network.</source> @@ -9228,7 +9244,7 @@ </message> <message> <source>M3U URL</source> - <translation type="unfinished"></translation> + <translation>M3U URL</translation> </message> <message> <source>URL of M3U containing IPTV channel URLs.</source> @@ -9288,7 +9304,7 @@ </message> <message> <source>If set, programs that have been marked as watched and are auto-expired will be re-recorded if they are shown again.</source> - <translation>Falls gesetzt, werden als gesehen markierte Aufnahmen die durch die Autoverfallfunktion gelöscht wurden sobald wie möglich wieder aufgenommen.</translation> + <translation>Falls gesetzt, werden als gesehen markierte Aufnahmen, die automatisch gelöscht wurden, sobald wie möglich wieder aufgenommen.</translation> </message> <message> <source>Sort all sub-titles/multi-titles Ascending</source> @@ -9308,11 +9324,11 @@ </message> <message> <source>Selects how to sort show episodes. Sub-titles refers to the episodes listed under a specific show title. Multi-title refers to sections (e.g. "All Programs") which list multiple titles. Sections in parentheses are not affected.</source> - <translation>Einstellung der Sortierung von Folgen. Untertitel werden unter dem normalen Titel gezeigt. Multititel sind die speziellen Listen (z.B. "Alle Sendungen"</translation> + <translation>Bestimmt die Sortierung einzelner Folgen. 'Untertitel' meint alle Folgen einer Serie, Multititel sind Abschnitte (z.B. "Alle Sendungen") die mehrere Sendungen zeigen. Abschnitte in Klammern sind davon nicht betroffen.</translation> </message> <message> <source>Episode sort orderings</source> - <translation>Folgensortierung</translation> + <translation>Seriensortierung</translation> </message> <message> <source>Theme cache size</source> @@ -9324,11 +9340,11 @@ </message> <message> <source>Always stream recordings from the backend</source> - <translation>Immer Aufnahmen vom Backend streamen</translation> + <translation>Aufnahmen immer vom Backend streamen</translation> </message> <message> <source>Enable this setting if you want MythTV to always stream files from a remote backend instead of directly reading a recording file if it is accessible locally.</source> - <translation>Falls gesetzt, werden die Aufnahmen immer vom Backend gestreamed und nicht direkt vom Dateiverzeichniss gelesen.</translation> + <translation>Falls gesetzt, werden die Aufnahmen immer vom Backend gestreamed und nicht direkt vom Dateiverzeichnis gelesen.</translation> </message> <message> <source>Jump to Program OSD</source> @@ -9336,7 +9352,7 @@ </message> <message> <source>Set the choice between viewing the current recording group in the OSD, or showing the 'Watch Recording' screen when 'Jump to Program' is activated. If set, the recordings are shown in the OSD</source> - <translation>Wählen Sie zwischen der möglichkeit die eingestellte Aufnahmegruppe im OSD zu zeigen oder nicht. Wenn gesetzt werden die Aufnahmen im OSD gezeigt.</translation> + <translation>Wählen Sie ob die aktuelle Aufnahmegruppe im OSD oder der 'Aufnahmen ansehen' Bildschirm angezeigt werden soll, falls 'Springe zur Sendung' aktiviert ist. Falls gesetzt, werden die Aufnahmen im OSD gezeigt.</translation> </message> <message> <source>Automatically mark a record watched</source> @@ -9344,19 +9360,19 @@ </message> <message> <source>If set, when you exit near the end of a recording it will be marked as watched. The automatic detection is not foolproof, so do not enable this setting if you don't want an unwatched recording marked as watched.</source> - <translation>Falls gesezt, wird die Aufnahme dann als gesehen markiert wenn Sie diese fast am Ende verlassen. Diese Erkennung ist nicht perfekt.</translation> + <translation>Falls gesetzt, wird die Aufnahme dann als gesehen markiert wenn Sie diese fast am Ende verlassen. Diese Erkennung ist nicht perfekt.</translation> </message> <message> <source>Sets the Title sorting order when the view is set to Titles only.</source> - <translation>Definiert die Titelsortierung wenn die Nur Titel Ansicht gewählt wurde.</translation> + <translation>Bestimmt die Titelsortierung wenn 'Nur Titel zeigen' gewählt wurde.</translation> </message> <message> <source>Include the 'Watch List' group</source> - <translation>Mit 'Beobachtungsliste' Gruppe</translation> + <translation>Mit 'Beobachtungsliste'</translation> </message> <message> <source>The 'Watch List' is an abbreviated list of recordings sorted to highlight series and shows that need attention in order to keep up to date.</source> - <translation>Die 'Beobachtungsliste' beinhaltet die Sendungen, die Ihre besondere Aufmerksamkeit brauchen.</translation> + <translation>Die 'Beobachtungsliste' beinhaltet alle Sendungen, die Ihre besondere Aufmerksamkeit brauchen um auf dem laufenden zu bleiben (z.B. Daily Soaps).</translation> </message> <message> <source>Start from the Watch List view</source> @@ -9364,23 +9380,23 @@ </message> <message> <source>If set, the 'Watch List' will be the initial view each time you enter the Watch Recordings screen</source> - <translation>Falls gesetzt, wird die 'Beobachtungsliste' als erstes angezeigt wenn sie die 'Aufnahmen Ansehen' betreten.</translation> + <translation>Falls gesetzt, wird im 'Aufnahmen Ansehen' Menü zuerst die 'Beobachtungsliste' angezeigt.</translation> </message> <message> <source>Exclude recordings not set for Auto-Expire</source> - <translation>Blende die Aufnahmen aus die nicht Autoverfallen</translation> + <translation>nur Aufnahmen zeigen die autom. gelöscht werden</translation> </message> <message> <source>Set this if you turn off auto-expire only for recordings that you've seen and intend to keep. This option will exclude these recordings from the 'Watch List'.</source> - <translation>Diese Option ist dann nützlich wenn man Autoverfall grundsätzlich an hat und nur bei Sendungen die man behalten möchte deaktiviert. Diese werden dann in der 'Beobachtungsliste' nicht beachtet.</translation> + <translation>Diese Option ist dann nützlich wenn man Autom. Löschen grundsätzlich an hat, und nur bei Sendungen die man behalten möchte deaktiviert. Solche Aufnahmen werden dann nicht in der 'Beobachtungsliste' aufgeführt.</translation> </message> <message> <source>Maximum days counted in the score</source> - <translation>Maximale gezählte Tage</translation> + <translation>max. Tage für Bewertung</translation> </message> <message> <source>The 'Watch List' scores are based on 1 point equals one day since recording. This option limits the maximum score due to age and affects other weighting factors.</source> - <translation>Zur Bewertung der Sendungen in der 'Beobachtungsliste' wird für jeden Tag nach der Aufnahme ein Punkt vergeben. Hier können Sie ein Maximum eingeben falls erwünscht.</translation> + <translation>Zur Bewertung der Sendungen in der 'Beobachtungsliste' wird für jeden Tag nach der Aufnahme ein Punkt vergeben. Hier können Sie die max. Punktezahl aufgrund des Alters einer Aufnahme begrenzen. Dies beeinflusst auch andere Gewichtungsfaktoren.</translation> </message> <message> <source>Days to exclude weekly episodes after delete</source> @@ -9388,7 +9404,7 @@ </message> <message> <source>When an episode is deleted or marked as watched, other episodes of the series are excluded from the 'Watch List' for this interval of time. Daily shows also have a smaller interval based on this setting.</source> - <translation>Wenn eine Folge gelöscht oder als gesehen markiert wurde werden andere Folgen dieses Typs nicht in der 'Beobachtungsliste' berücksichtigt. Tägliche sendungen haben einen kleineren Wert, der aber ein Faktor des Wöchentlichen ist.</translation> + <translation>Wenn eine Folge gelöscht oder als gesehen markiert wurde, werden andere Folgen einer Serie für die angegebene Zeitspanne nicht in der 'Beobachtungsliste' berücksichtigt. Tägliche Sendungen haben einen kleineren Wert, basierend auf diesem Wert.</translation> </message> <message> <source>This setting and the following one define a time period when the mythfilldatabase process is allowed to run. For example, setting Start to 11 and End to 13 would mean that the process would only run between 11 AM and 1 PM.</source> @@ -9400,11 +9416,11 @@ </message> <message> <source>mythfilldatabase Program</source> - <translation type="unfinished"></translation> + <translation>mythfilldatabase Programm</translation> </message> <message> <source>Use 'mythfilldatabase' or the name of a custom script that will populate the program guide info for all your video sources.</source> - <translation>Nutzen Sie 'mythfilldatabase' oder ein eigegenen Skript, der die Datenbank mit Programmdaten füllt. In Deutschland üblicherweise tvm2xml oder xmltv.</translation> + <translation>Nutzen Sie 'mythfilldatabase' oder ein eigenes Skript, das die Datenbank mit Programmdaten füllt. In Deutschland üblicherweise tvm2xml oder xmltv.</translation> </message> <message> <source>View Recordings (Views)</source> @@ -9416,15 +9432,15 @@ </message> <message> <source>Schedule Status</source> - <translation>Programmdaten Status</translation> + <translation>Planung</translation> </message> <message> <source>Schedule Status shows current statistics from the scheduler.</source> - <translation>Das Programmdaten Status zeigt die Statistiken des Programmplans</translation> + <translation>Planungsstatus zeigt Informationen zum Aufnahmeplaner.</translation> </message> <message> <source>Total Disk Space:</source> - <translation>Gesamte Speicherplatz:</translation> + <translation>Gesamter Speicherplatz:</translation> </message> <message> <source>MythTV Drive #%1:</source> @@ -9448,7 +9464,7 @@ </message> <message> <source>No Storage Group directories are defined. You must add at least one directory to the Default Storage Group where new recordings will be stored.</source> - <translation>Keine Verzeichnisse für Speichergruppen sind definiert. Sie müssen mindestens ein Verzeichniss als Standardspeichergruppe festlegen. Dort werden Ihre Aufnahmen gespeichert.</translation> + <translation>Keine Verzeichnisse für Speichergruppen definiert. Sie müssen mindestens ein Verzeichnis als Standardspeichergruppe festlegen. Dort werden Ihre Aufnahmen gespeichert.</translation> </message> <message> <source>Command to Set Wakeup Time</source> @@ -9472,7 +9488,7 @@ </message> <message> <source>Use Global Setting</source> - <translation>Nutze allgemeine Einstellungen</translation> + <translation type="obsolete">Nutze allgemeine Einstellungen</translation> </message> <message> <source>Channel Options - Filters</source> @@ -9480,225 +9496,225 @@ </message> <message> <source>Aspect ratio when watching a video at a specific resolution.</source> - <translation>Seitenverhältniss einer Aufnahme bei einer speziefischen Auflösung</translation> + <translation>Seitenverhältnis einer Aufnahme bei einer spezifischen Auflösung.</translation> </message> <message> <source>Backend Server Wakeup settings</source> - <translation type="unfinished"></translation> + <translation>Backend Server Weckeinstellungen</translation> </message> <message> <source>Database Server Settings</source> - <translation type="unfinished"></translation> + <translation>Datenbankserver Einstellungen</translation> </message> <message> <source>Ping test server?</source> - <translation type="unfinished"></translation> + <translation>Ereichbarkeit testen?</translation> </message> <message> <source>Test basic host connectivity using the ping command. Turn off if your host or network don't support ping (ICMP ECHO) packets</source> - <translation type="unfinished"></translation> + <translation>Prüft ob der Rechner auf 'ping' antwortet. Bitte abwählen falls Ihr Rechner oder Netzwerk keine ping (ICMP Echo) Pakete unterstützt.</translation> </message> <message> <source>Port</source> - <translation type="unfinished"></translation> + <translation>Port</translation> </message> <message> <source>The port number the database is running on. Leave blank if using the default port (3306).</source> - <translation type="unfinished"></translation> + <translation>Der Port auf dem die Datenbank läuft. Für den Standard Port (3306) bitte leer lassen.</translation> </message> <message> <source>Database name</source> - <translation type="unfinished"></translation> + <translation>Name der Datenbank</translation> </message> <message> <source>Enable Database Server Wakeup</source> - <translation type="unfinished"></translation> + <translation>Datenbankserver aufwecken</translation> </message> <message> <source>If checked, the frontend will use database wakeup parameters to reconnect to the database server.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, wird das Frontend den Datenbankserver mit den angegebenen Parametern aufwecken (Wake-On-Lan).</translation> </message> <message> <source>The command executed on this frontend to wake up the database server (eg. sudo /etc/init.d/mysql restart).</source> - <translation type="unfinished"></translation> + <translation>Der Befehl mit dem dieses Frontend den Datenbankserver startet. (z.B. sudo /etc/init.d/mysql restart).</translation> </message> <message> <source>Required fields are marked with an asterisk (*).</source> - <translation type="unfinished"></translation> + <translation>Vorgeschriebene Felder sind mit einem * gekennzeichnet.</translation> </message> <message> <source>Cannot find (ping) database host %1 on the network</source> - <translation type="unfinished"></translation> + <translation>Kann den Datenbankserver %1 nicht mittels 'ping' erreichen.</translation> </message> <message> <source>Cannot connect to port %1 on database host %2</source> - <translation type="unfinished"></translation> + <translation>Kann nicht zum Datenbankserver %2 auf Port %1 verbinden</translation> </message> <message> <source>Save database details</source> - <translation type="unfinished"></translation> + <translation>Angaben zur Datenbank speichern</translation> </message> <message> <source>Save backend details</source> - <translation type="unfinished"></translation> + <translation>Angaben zum Backend speichern</translation> </message> <message> <source>Don't Save</source> - <translation type="unfinished"></translation> + <translation>Nicht speichern</translation> </message> <message> <source>Save that backend or database as the default?</source> - <translation type="unfinished"></translation> + <translation>Diese Datenbank bzw. Backend als Standard speichern?</translation> </message> <message> <source>Upgrade</source> - <translation type="unfinished"></translation> + <translation>Aktualisierung</translation> </message> <message> <source>Use current schema</source> - <translation type="unfinished"></translation> + <translation>Aktuelles Schema verwenden</translation> </message> <message> <source>Subtitle</source> - <translation type="unfinished">Untertitel</translation> + <translation>Untertitel</translation> </message> <message> <source>New Input</source> - <translation type="unfinished"></translation> + <translation>Neuer Eingang</translation> </message> <message> <source>Icon Download</source> - <translation type="unfinished"></translation> + <translation>Symbol Download</translation> </message> <message> <source>Starts the icon downloader</source> - <translation type="unfinished"></translation> + <translation>Startet den Symbol Downloader</translation> </message> <message> <source>as a search</source> - <translation type="unfinished"></translation> + <translation>als eine Suche</translation> </message> <message> <source>as an example</source> - <translation type="unfinished"></translation> + <translation>als ein Beispiel</translation> </message> <message> <source>Title %1 chapter %2</source> - <translation type="unfinished"></translation> + <translation>Titel %1 Kapitel %2</translation> </message> <message> <source>%1 of %2 (%3 behind)</source> - <translation type="unfinished"></translation> + <translation>%1 von %2 (%3 zurück)</translation> </message> <message> <source>%1 of %2 (%3 remaining)</source> - <translation type="unfinished"></translation> + <translation>%1 von %2 (%3 übrig)</translation> </message> <message> <source>The theme you are using does not contain the %1 element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Escape out of it to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Das Thema das sie beutzen enthält das Element %1 nicht. Bitte kontaktieren sie den Themen Author und bitten sie um eine Aktualisierung.<br><br>Der nächste Bildschirm wird leer sein. Brechen sie ab um ins Hauptmenü zu gelangen.</translation> </message> <message> <source>the recorder failed to record.</source> - <translation type="unfinished"></translation> + <translation>der Rekorder konnte nicht aufnehmen.</translation> </message> <message> <source>this rule does not match any showings in the current program listings.</source> - <translation type="unfinished"></translation> + <translation>diese Regel auf keine Sendung im aktuellen TV Programm zutrifft.</translation> </message> <message> <source>this episode will be recorded on a different channel in this time slot.</source> - <translation type="unfinished"></translation> + <translation>diese Folge zu dieser Zeit auf einem anderen Sender aufgenommen wird.</translation> </message> <message> <source>Mono</source> - <translation type="unfinished"></translation> + <translation>Mono</translation> </message> <message> <source>Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Surround Klang</translation> </message> <message> <source>Dolby Sound</source> - <translation type="unfinished"></translation> + <translation>Dolby Klang</translation> </message> <message> <source>Audio for Hearing Impaired</source> - <translation type="unfinished"></translation> + <translation>Ton für Hörgeschädigte</translation> </message> <message> <source>Audio for Visually Impaired</source> - <translation type="unfinished"></translation> + <translation>Ton für Sehgeschädigte</translation> </message> <message> <source>Widescreen</source> - <translation type="unfinished"></translation> + <translation>Breitbild</translation> </message> <message> <source>AVC/H.264</source> - <translation type="unfinished"></translation> + <translation>AVC/H.264</translation> </message> <message> <source>Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Untertitel verfügbar</translation> </message> <message> <source>Deaf Signing</source> - <translation type="unfinished"></translation> + <translation>Gebärdensprache</translation> </message> <message> <source>Average Time Shift</source> - <translation type="unfinished"></translation> + <translation>ø Zeitversatz</translation> </message> <message> <source>hours</source> - <translation type="unfinished"></translation> + <translation>Stunden</translation> </message> <message> <source>Recorded File Name</source> - <translation type="unfinished"></translation> + <translation>Dateiname</translation> </message> <message> <source>If set, the bitrate specified will be used for 640x480. If other resolutions are used, the bitrate will be scaled appropriately.</source> - <translation type="unfinished"></translation> + <translation>Wenn gesetzt wird diese Bitrate für 640x480 verwendet. Bei anderen Auflösungen wird die Bitrate entsprechend skaliert.</translation> </message> <message> <source>Frequency (%1)</source> - <translation type="unfinished"></translation> + <translation>Frequenz (%1)</translation> </message> <message> <source>Frequency (Option has no default). The frequency for this channel in %1.</source> - <translation type="unfinished"></translation> + <translation>Frequenz (Option hat keinen Standardwert).Die Frequenz für diesen Kanal in %1.</translation> </message> <message> <source>Symbol Rate (symbols/second). Most dvb-s transponders transmit at 27.5 million symbols per second.</source> - <translation type="unfinished"></translation> + <translation>Symbolrate (Symbole/Sekunde).Die meisten DVB-S Transponder senden mit 27.5 Millionen Symbolen pro Sekunde.</translation> </message> <message> <source>Could not open tuner device</source> - <translation type="unfinished"></translation> + <translation>Konnte das Empfangsgerät nicht öffnen</translation> </message> <message> <source>Bad connection to backend</source> - <translation type="unfinished"></translation> + <translation>Schlechte Verbindung zum Backend</translation> </message> <message> <source> offset %2</source> - <translation type="unfinished"></translation> + <translation>Abweichung %2</translation> </message> <message> <source>Timeout Scanning %1 -- no tables</source> - <translation type="unfinished"></translation> + <translation>Timeout beim Scannen von %1 -- keine Tabellen</translation> </message> <message> <source>Timeout Scanning %1 -- no signal</source> - <translation type="unfinished"></translation> + <translation>Timeout beim Scannen von %1 -- kein Signal</translation> </message> <message> <source>Tuning to %1 mplexid(%2)</source> - <translation type="unfinished"></translation> + <translation>Einstellen auf %1 mplexid(%2)</translation> </message> <message> <source>Record new episode first showings</source> @@ -9706,19 +9722,19 @@ </message> <message> <source>MythTV wants to record these programs in %d seconds:</source> - <translation type="unfinished"></translation> + <translation>MythTV möchte diese Sendungen in %d Sek. aufnehmen:</translation> </message> <message> <source>"%1" on %2</source> - <translation type="unfinished"></translation> + <translation>"%1" auf %2</translation> </message> <message> <source>Do you want to:</source> - <translation type="unfinished"></translation> + <translation>Möchten Sie:</translation> </message> <message> <source>Mythtv has been idle for %1 minutes and will exit in %2 seconds. Are you still watching?</source> - <translation type="unfinished"></translation> + <translation>MythTV war für %1 Minuten untätig und wird in %2 Sekunden beendet. Schauen Sie noch zu?</translation> </message> <message> <source>On known multiplex...</source> @@ -9726,1353 +9742,1494 @@ </message> <message> <source>PVR-350 decoder</source> - <translation type="unfinished"></translation> + <translation>PVR-350 Dekoder</translation> </message> <message> <source>libmpeg2 will use mpeg2 library; this is faster on some 32 bit AMD processors.</source> - <translation type="unfinished"></translation> + <translation>libmpeg2 wird die mpeg2 Bibliothek verwenden; das ist auf einigen 32 bit AMD Prozessoren schneller.</translation> </message> <message> <source>Note: Closed caption decoding will not work with libmpeg2.</source> - <translation type="unfinished"></translation> + <translation>Anmerkung: Untertitel Dekodierung wird mit libmpeg2 nicht funktionieren.</translation> </message> <message> <source>Kernel</source> - <translation type="unfinished"></translation> + <translation>Kernel</translation> </message> <message> <source>Greedy HighMotion</source> - <translation type="unfinished"></translation> + <translation>Greedy HighMotion</translation> </message> <message> <source>Greedy HighMotion (2x)</source> - <translation type="unfinished"></translation> + <translation>Greedy HighMotion (2x)</translation> </message> <message> <source>Yadif</source> - <translation type="unfinished"></translation> + <translation>Yadif</translation> </message> <message> <source>Yadif (2x)</source> - <translation type="unfinished"></translation> + <translation>Yadif (2x)</translation> </message> <message> <source>Bob (2x)</source> - <translation type="unfinished"></translation> + <translation>Bob (2x)</translation> </message> <message> <source>Linear blend (HW)</source> - <translation type="unfinished"></translation> + <translation>Lineare Überblendung (HW)</translation> </message> <message> <source>Kernel (HW)</source> - <translation type="unfinished"></translation> + <translation>Kernel (HW)</translation> </message> <message> <source>Bob (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Bob (2x, HW)</translation> </message> <message> <source>One field (HW)</source> - <translation type="unfinished"></translation> + <translation>Ein Feld (HW)</translation> </message> <message> <source>One Field (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Ein Feld (2x, HW)</translation> </message> <message> <source>Kernel (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Kernel (2x, HW)</translation> </message> <message> <source>Linear blend (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Lineare Überblendung (2x, HW)</translation> </message> <message> <source>Interlaced (2x, Hw)</source> - <translation type="unfinished"></translation> + <translation>Interlaced (2x, Hw)</translation> </message> <message> <source>Video rendering method</source> - <translation type="unfinished"></translation> + <translation>Video Darstellungs Methode</translation> </message> <message> <source>Render video offscreen. Used internally.</source> - <translation type="unfinished"></translation> + <translation>Video außerhalb vom Schirm erzeugen. Intern verwendet.</translation> </message> <message> <source>Use X11 pixel copy to render video. This is not recommended if any other option is available. The video will not be scaled to fit the screen. This will work with all X11 servers, local and remote.</source> - <translation type="unfinished"></translation> + <translation>Verwende X11 Pixelkopie um das Video darzustellen. Dies ist nicht zu empfehlen, falls irgendeine andere Option möglich ist. Das Video wird nicht auf die Bildschirmgröße skaliert. Diese Methode funktioniert mit allen X11 Servern, lokal sowie entfernt.</translation> </message> <message> <source>Use X11 shared memory pixel transfer to render video. This is only recommended over the X11 pixel copy renderer. The video will not be scaled to fit the screen. This works with most local X11 servers.</source> - <translation type="unfinished"></translation> + <translation>Verwende X11 shared memory Pixel Transfer um das Video zu erzeugen. Dies ist nur anstat dem X11 Pixelkopie Verfahren zu empfehlen. Das Video wird nicht auf die Bildschirmgröße skaliert. Diese Methode funktioniert mit den meisten lokalen X11 Servern.</translation> </message> <message> <source>This is the standard video renderer for X11 systems. It uses XVideo hardware assist for scaling, color conversion. If the hardware offers picture controls the renderer supports them.</source> - <translation type="unfinished"></translation> + <translation>Dies ist der Standard für X11 Systeme. Es verwendet XVideo Hardware Unterstützung für das Skalieren und die Farbkonvertierung. Wenn die Hardware Bildkontrolle unterstützt, wird dieses Verfahren dies verwenden.</translation> </message> <message> <source>This is the standard video renderer for XvMC decoders. It uses XVideo hardware assist for scaling, color conversion and when available offers XVideo picture controls.</source> - <translation type="unfinished"></translation> + <translation>Dies ist der Standard für XvMC Dekoder. Es verwendet XVideo Hardware Unterstützung für das Skalieren, Farbkonvertierung und, wenn verfügbar, XVideo Bildkontrolle.</translation> </message> <message> <source>This video renderer for XvMC on nVidia cards uses XVideo for color conversion and OpenGL for scaling. The main benefit of this renderer is that it allows OpenGL OSD rendering, which frees two XvMC buffers for decoding. It requires a reasonably fast nVidia card.</source> - <translation type="unfinished"></translation> + <translation>Dieses Verfahren für XvMC auf nVidia Karten verwendet XVideo für die Farbkonvertierung und OpenGL für das Skalieren. Der Hauptvorteil dieses Verfahrens ist die Verwendung der OpenGL OSD Darstellung, welche zwei XvMC Puffer für das Dekodieren einspart. Es benötigt eine halbwegs schnelle nVidia Karte.</translation> </message> <message> <source>This video renderer uses DirectFB for scaling and color conversion. It is not as feature rich as the standard video renderer, but can run on Linux hardware without an X11 server.</source> - <translation type="unfinished"></translation> + <translation>Dieses Verfahren verwendet DirectFB für das Skalieren und die Farbkonvertierung. Es bietet weniger Funktionalitäten als das Standard Verfahren, aber es kann auf Linux Hardware ohne einen X11 Server verwendet werden.</translation> </message> <message> <source>Windows video renderer based on overlays. Not compatible with Vista Aero Glass.</source> - <translation type="unfinished"></translation> + <translation>Windows Video Darstellung basierend auf Overlays. Nicht kompatibel mit Vista Aero Glass.</translation> </message> <message> <source>Windows video renderer based on Direct3D. Requires video card compatible with Direct3D 9. This is the preferred renderer for current Windows systems.</source> - <translation type="unfinished"></translation> + <translation>Windows Video Darstellung basierend auf Direct3D. Benötigt eine Videokarte die mit Direct3D 9 kompatibel ist. Dies ist das bevorzugte Verfahren auf aktuellen Windows Systemen.</translation> </message> <message> <source>This is the standard video render for Macintosh OS X systems.</source> - <translation type="unfinished"></translation> + <translation>Dies ist das Standardverfahren für Macintosh OS X Systeme.</translation> </message> <message> <source>This is the only video renderer for the MacAccel decoder.</source> - <translation type="unfinished"></translation> + <translation>Dies ist das einzige Verfahren für den MacAccel Dekoder.</translation> </message> <message> <source>This is only video renderer for the PVR-350 decoder.</source> - <translation type="unfinished"></translation> + <translation>Dies ist das einzige Verfahren für den PVR-350 Dekoder.</translation> </message> <message> <source>This video renderer uses OpenGL for scaling and color conversion and can offer limited picture contols. This requires a faster GPU than XVideo. Also, when enabled, picture controls consume additional resources.</source> - <translation type="unfinished"></translation> + <translation>Dieses Verfahren verwendet OpenGL für das Skalieren und die Farbkonvertierung und bietet eingeschränkte Bildkontrolle. Es benötigt eine schnellere GPU als XVideo. Wenn aktiviert benötigt die Bildkontrolle zusätzliche Resourcen.</translation> </message> <message> <source>This deinterlacer requires the display to be capable of twice the frame rate as the source video.</source> - <translation type="unfinished"></translation> + <translation>Dieser Deinterlacer benötigt ein Display welches die doppelte Bildrate des Videos anzeigen kann.</translation> </message> <message> <source>Perform no deinterlacing.</source> - <translation type="unfinished"></translation> + <translation>Kein Deinterlacing anwenden.</translation> </message> <message> <source>Use this with an interlaced display whose resolution exactly matches the video size. This is incompatible with MythTV zoom modes.</source> - <translation type="unfinished"></translation> + <translation>Verwenden sie dies mit einem interlaced Display dessen Auflösung exakt zur Videogröße paßt. Dies ist mit den MythTV Zoom Modi nicht kompatibel.</translation> </message> <message> <source>Shows only one of the two fields in the frame. This looks good when displaying a high motion 1080i video on a 720p display.</source> - <translation type="unfinished"></translation> + <translation>Zeigt nur eines der beiden Felder im Bild. Dies schaut gut aus, wenn ein high motion 1080i Video auf einem 720p Display angezeigt wird.</translation> </message> <message> <source>Shows one field of the frame followed by the other field displaced vertically.</source> - <translation type="unfinished"></translation> + <translation>Zeigt ein Feld des Bildes gefolgt vom anderen Feld vertikal dargestellt.</translation> </message> <message> <source>Blends the odd and even fields linearly into one frame.</source> - <translation type="unfinished"></translation> + <translation>Überblendet die ungeraden und geraden Felder linear in ein Bild.</translation> </message> <message> <source>This filter disables deinterlacing when the two fields are similar, and performs linear deinterlacing otherwise.</source> - <translation type="unfinished"></translation> + <translation>Dieser Filter deaktiviert Deinterlacing wenn die beiden Felder ähnlich sind und verwendet ansonsten lineares Deinterlacing.</translation> </message> <message> <source>(Hardware Accelerated)</source> - <translation type="unfinished"></translation> + <translation>(Hardware beschleunigt)</translation> </message> <message> <source>With workaround for broken interlaced modelines.</source> - <translation type="unfinished"></translation> + <translation>Mit Umgehung für unkorrekte interlaced modelines.</translation> </message> <message> <source>This deinterlacer uses several fields to reduce motion blur. It has increased CPU requirements.</source> - <translation type="unfinished"></translation> + <translation>Dieser Deinterlacer verwendet mehrere Felder um die Bewegungsunschärfe zu reduzieren. Er benötigt dafür mehr CPU Leistung.</translation> </message> <message> <source>'%1' has not been documented yet.</source> - <translation type="unfinished"></translation> + <translation>'%1' wurde noch nicht dokumentiert.</translation> </message> <message> <source>OSD rendering method</source> - <translation type="unfinished"></translation> + <translation>OSD Zeichenmethode</translation> </message> <message> <source>Render the OSD using the XVideo chromakey feature.This renderer does not alpha blend. But it is the fastest OSD renderer; and is particularly efficient compared to the ia44blend OSD renderer for XvMC.</source> - <translation type="unfinished"></translation> + <translation>Zeichne das OSD mit dem XVideo chromakey feature. Diese Art verwendet keine Teiltransparenz, aber es ist die schnellste Art zu zeichnen, und ist besonders effizient verglichen mit dem ia44blend OSD renderer for XvMC.</translation> </message> <message> <source>Note: nVidia hardware after the 5xxx series does not have XVideo chromakey support.</source> - <translation type="unfinished"></translation> + <translation>Anmerkung: nVidia hardware nach der 5xxx Serie hat keine XVideo chromakey Unterstützung.</translation> </message> <message> <source>Software OSD rendering uses your CPU to alpha blend the OSD.</source> - <translation type="unfinished"></translation> + <translation>Software OSD rendering verwendet ihre CPU im die Teiltransparenz darzustellen.</translation> </message> <message> <source>Uses hardware support for 16 color alpha-blend surfaces for rendering the OSD. Because of the limited color range, MythTV renders the OSD in 16 level grayscale.</source> - <translation type="unfinished"></translation> + <translation>Verwendet Hardware Unterstützung für 16 Farben alpha-blend Oberflächen für die Darstellung des OSD. Wegen der eingeschränkten Farbanzahl zeichnet MythTV das OSD in 16 Graustufen.</translation> </message> <message> <source>Note: Not recommended for nVidia or Intel chipsets. This removes two of the limited XvMC buffers from decoding duty.</source> - <translation type="unfinished"></translation> + <translation>Anmerkung: Nicht empfohlen für nVidia oder Intel Chipsätze. Dies befreit zwei der limitierten XvMC Puffer von deren Dekodier Aufgabe.</translation> </message> <message> <source>Renders the OSD using the PVR-350 chromakey feature.</source> - <translation type="unfinished"></translation> + <translation>Zeichnet das OSD durch die PVR-350 chromakey Funktionalität.</translation> </message> <message> <source>Uses OpenGL to alpha blend the OSD onto the video.</source> - <translation type="unfinished"></translation> + <translation>Verwendet OpenGL um das OSD über das Video einzublenden.</translation> </message> <message> <source>Max recordings</source> - <translation type="unfinished"></translation> + <translation>max. gleichz. Aufnahmen</translation> </message> <message> <source>Maximum number of simultaneous recordings this device should make. Some digital transmitters transmit multiple programs on a multiplex, if this is set to a value greater than one MythTV can sometimes take advantage of this.</source> - <translation type="unfinished"></translation> + <translation>Die Maximalzahl der gleichzeitig laufenden Aufnahmen für dieses Gerät. Einige digitale Sender übertragen mehrere Kanäle auf einem Multiplex, die dadurch evtl. gleichzeitig aufgezeichnet werden können.</translation> </message> <message> <source>Searching for installed XMLTV grabbers</source> - <translation type="unfinished"></translation> + <translation>Suche nach installierten XMLTV Grabbern</translation> </message> <message> <source>DVB Device Number</source> - <translation type="unfinished"></translation> + <translation>DVB Gerätenummer</translation> </message> <message> <source>Warning: already in use</source> - <translation type="unfinished"></translation> + <translation>Warnung: bereits belegt</translation> </message> <message> <source>Use DVB Card for active EIT scan</source> - <translation type="unfinished"></translation> + <translation>DVB-Karte für EIT-Scan verwenden</translation> </message> <message> <source>This option activates the active scan for program data (EIT). With this option enabled the DVB card is constantly in-use.</source> - <translation type="unfinished"></translation> + <translation>Aktiviert die aktive Suche nach Programmdaten (EIT). Falls gesetzt, ist die DVB-Karte durchgehend belegt.</translation> </message> <message> <source>Input Group</source> - <translation type="unfinished"></translation> + <translation>Eingangsgruppe</translation> </message> <message> <source>Leave as 'Generic' unless this input is shared with another device. Only one of the inputs in an input group will be allowed to record at any given time.</source> - <translation type="unfinished"></translation> + <translation>Auf 'Generisch' belassen, ausser dieser Eingang wird mit anderen Geräten geteilt. Nur einer der Eingänge einer Eingangsgruppe kann eine Aufnahme zu einem Zeitpunkt durchführen.</translation> </message> <message> <source>Live TV only</source> - <translation type="unfinished"></translation> + <translation>nur LiveTV</translation> </message> <message> <source>If enabled MythTV will tune using only the MPEG program number. The program numbers change more often than DVB or ATSC tuning parameters, so this is slightly less reliable. This will also inhibit EIT gathering during Live TV and recording.</source> - <translation type="unfinished"></translation> + <translation>Wenn aktiviert wird MythTV nur aufgrund der MPEG Programm Nummer einstellen. Die Programm Nummern ändern sich öfter als DVB oder ATSC Einstellungs Parameter, daher ist dies weniger zuverlässig. Dies verhindert auch die Programmdaten Suche (EIT) während Live TV und Aufnahme.</translation> </message> <message> <source>Interactions between inputs</source> - <translation type="unfinished"></translation> + <translation>Interaktionen zwischen Eingängen</translation> </message> <message> <source>Create a New Input Group</source> - <translation type="unfinished"></translation> + <translation>Neue Eingangsgruppe anlegen</translation> </message> <message> <source>Input groups are only needed when two or more cards share the same resource such as a firewire card and an analog card input controlling the same set top box.</source> - <translation type="unfinished"></translation> + <translation>Eingangsgruppen werden nur benötigt wenn sich mehrere TV-Karten die gleiche Resource teilen (z.B. eine FireWire-Karte oder Set-Top Box).</translation> </message> <message> <source>Ignore</source> - <translation type="unfinished"></translation> + <translation>Ignorieren</translation> </message> <message> <source>Detect</source> - <translation type="unfinished">Erkenne</translation> + <translation>Erkenne</translation> </message> <message> <source>Interlaced</source> - <translation type="unfinished"></translation> + <translation>Zwischenzeilenabtastung</translation> </message> <message> <source>Interlaced (Normal)</source> - <translation type="unfinished">Zwischenzeilenabtastung (normal)</translation> + <translation>Zwischenzeilenabtastung (normal)</translation> </message> <message> <source>Interlaced (Reversed)</source> - <translation type="unfinished">Zwischenzeilenabtastung (umgekehrt)</translation> + <translation>Zwischenzeilenabtastung (umgekehrt)</translation> </message> <message> <source>Progressive</source> - <translation type="unfinished">Progressiv</translation> + <translation>Progressiv</translation> </message> <message> <source>14:9</source> - <translation type="unfinished">14:9</translation> + <translation>14:9</translation> </message> <message> <source>Black</source> - <translation type="unfinished"></translation> + <translation>Schwarz</translation> </message> <message> <source>Gray</source> - <translation type="unfinished"></translation> + <translation>Grau</translation> </message> <message> <source>Half</source> - <translation type="unfinished"></translation> + <translation>Halb</translation> </message> <message> <source>Full</source> - <translation type="unfinished"></translation> + <translation>Voll</translation> </message> <message> <source>Stretch</source> - <translation type="unfinished"></translation> + <translation>Gedehnt</translation> </message> <message> <source>[Reserved]</source> - <translation type="unfinished"></translation> + <translation>[Reserviert]</translation> </message> <message> <source>SCTE mode 1</source> - <translation type="unfinished"></translation> + <translation>SCTE Modus 1</translation> </message> <message> <source>SCTE mode 2</source> - <translation type="unfinished"></translation> + <translation>SCTE Modus 2</translation> </message> <message> <source>ATSC 8-VSB</source> - <translation type="unfinished"></translation> + <translation>ATSC 8-VSB</translation> </message> <message> <source>ATSC 16-VSB</source> - <translation type="unfinished"></translation> + <translation>ATSC 16-VSB</translation> </message> <message> <source>Detective/Thriller</source> - <translation type="unfinished"></translation> + <translation>Detektiv/Thriller</translation> </message> <message> <source>Adventure/Western/War</source> - <translation type="unfinished"></translation> + <translation>Abenteuer/Western/Krieg</translation> </message> <message> <source>Science Fiction/Fantasy/Horror</source> - <translation type="unfinished"></translation> + <translation>Science Fiction/Fantasy/Horror</translation> </message> <message> <source>Soap/melodrama/folkloric</source> - <translation type="unfinished"></translation> + <translation>Soap/Melodrama/Folklore</translation> </message> <message> <source>Serious/Classical/Religious/Historical Movie/Drama</source> - <translation type="unfinished"></translation> + <translation>Seriös/Klassik/Religion/Historisch/Drama</translation> </message> <message> <source>Adult</source> <comment>Adult Movie</comment> - <translation type="unfinished"></translation> + <translation>Film für Erwachsene</translation> </message> <message> <source>News/weather report</source> - <translation type="unfinished"></translation> + <translation>Nachrichten/Wetterbericht</translation> </message> <message> <source>News magazine</source> - <translation type="unfinished"></translation> + <translation>Nachrichtenmagazin</translation> </message> <message> <source>Intelligent Programmes</source> - <translation type="unfinished"></translation> + <translation>Intelligente Programme</translation> </message> <message> <source>Game Show</source> - <translation type="unfinished"></translation> + <translation>Spiele Show</translation> </message> <message> <source>Variety Show</source> - <translation type="unfinished"></translation> + <translation>Varieté Show</translation> </message> <message> <source>Talk Show</source> - <translation type="unfinished"></translation> + <translation>Talkshow</translation> </message> <message> <source>Special Events (World Cup, World Series..)</source> - <translation type="unfinished"></translation> + <translation>Spezielle Veranstaltungen (Weltmeisterschaft, ...)</translation> </message> <message> <source>Sports Magazines</source> - <translation type="unfinished"></translation> + <translation>Sportmagazine</translation> </message> <message> <source>Football (Soccer)</source> - <translation type="unfinished"></translation> + <translation>Fußball</translation> </message> <message> <source>Tennis/Squash</source> - <translation type="unfinished"></translation> + <translation>Tennis/Squash</translation> </message> <message> <source>Misc. Team Sports</source> - <translation type="unfinished"></translation> + <translation>Div. Team Sportarten</translation> </message> <message> <source>Athletics</source> - <translation type="unfinished"></translation> + <translation>Athletik</translation> </message> <message> <source>Motor Sport</source> - <translation type="unfinished"></translation> + <translation>Motorsport</translation> </message> <message> <source>Water Sport</source> - <translation type="unfinished"></translation> + <translation>Wassersport</translation> </message> <message> <source>Winter Sports</source> - <translation type="unfinished"></translation> + <translation>Wintersport</translation> </message> <message> <source>Equestrian</source> - <translation type="unfinished"></translation> + <translation>Reiter</translation> </message> <message> <source>Martial Sports</source> - <translation type="unfinished"></translation> + <translation>Kampfsport</translation> </message> <message> <source>Kids</source> - <translation type="unfinished"></translation> + <translation>Kinder</translation> </message> <message> <source>Pre-School Children's Programmes</source> - <translation type="unfinished"></translation> + <translation>Vorschul Programm</translation> </message> <message> <source>Entertainment Programmes for 6 to 14</source> - <translation type="unfinished"></translation> + <translation>Unterhaltung für 6 bis 14 jährige</translation> </message> <message> <source>Entertainment Programmes for 10 to 16</source> - <translation type="unfinished"></translation> + <translation>Unterhaltung für 10 bis 16 jährige</translation> </message> <message> <source>Informational/Educational</source> - <translation type="unfinished"></translation> + <translation>Information/Bildung</translation> </message> <message> <source>Cartoons/Puppets</source> - <translation type="unfinished"></translation> + <translation>Zeichentrick/Puppen</translation> </message> <message> <source>Music/Ballet/Dance</source> - <translation type="unfinished"></translation> + <translation>Musik/Ballett/Tanz</translation> </message> <message> <source>Rock/Pop</source> - <translation type="unfinished"></translation> + <translation>Rock/Pop</translation> </message> <message> <source>Classical Music</source> - <translation type="unfinished"></translation> + <translation>Klassische Musik</translation> </message> <message> <source>Folk Music</source> - <translation type="unfinished"></translation> + <translation>Volksmusik</translation> </message> <message> <source>Jazz</source> - <translation type="unfinished"></translation> + <translation>Jazz</translation> </message> <message> <source>Musical/Opera</source> - <translation type="unfinished"></translation> + <translation>Musical/Oper</translation> </message> <message> <source>Ballet</source> - <translation type="unfinished"></translation> + <translation>Ballet</translation> </message> <message> <source>Arts/Culture</source> - <translation type="unfinished"></translation> + <translation>Kunst/Kultur</translation> </message> <message> <source>Performing Arts</source> - <translation type="unfinished"></translation> + <translation>Angewandte Kunst</translation> </message> <message> <source>Fine Arts</source> - <translation type="unfinished"></translation> + <translation>Bildende Kunst</translation> </message> <message> <source>Religion</source> - <translation type="unfinished"></translation> + <translation>Religion</translation> </message> <message> <source>Popular Culture/Traditional Arts</source> - <translation type="unfinished"></translation> + <translation>Populäre Kultur/Traditionelle Kunst</translation> </message> <message> <source>Literature</source> - <translation type="unfinished"></translation> + <translation>Literatur</translation> </message> <message> <source>Film/Cinema</source> - <translation type="unfinished"></translation> + <translation>Film/Kino</translation> </message> <message> <source>Experimental Film/Video</source> - <translation type="unfinished"></translation> + <translation>Experimenteller Film/Video</translation> </message> <message> <source>Broadcasting/Press</source> - <translation type="unfinished"></translation> + <translation>Rundfunk/Presse</translation> </message> <message> <source>New Media</source> - <translation type="unfinished"></translation> + <translation>Neue Medien</translation> </message> <message> <source>Arts/Culture Magazines</source> - <translation type="unfinished"></translation> + <translation>Kunst/Kulturmagazin</translation> </message> <message> <source>Social/Policical/Economics</source> - <translation type="unfinished"></translation> + <translation>gesellschaftlich/politisch/wirtschaftlich</translation> </message> <message> <source>Magazines/Reports/Documentary</source> - <translation type="unfinished"></translation> + <translation>Magazin/Dokumentation</translation> </message> <message> <source>Economics/Social Advisory</source> - <translation type="unfinished"></translation> + <translation>Wirtschaft/Gesellschafts Beratung</translation> </message> <message> <source>Remarkable People</source> - <translation type="unfinished"></translation> + <translation>Bemerkenswerte Personen</translation> </message> <message> <source>Education/Science/Factual</source> - <translation type="unfinished"></translation> + <translation>Erziehung/Wissenschaft/Tatsachen</translation> </message> <message> <source>Nature/animals/Environment</source> - <translation type="unfinished"></translation> + <translation>Natur/Tiere/Umwelt</translation> </message> <message> <source>Technology/Natural Sciences</source> - <translation type="unfinished"></translation> + <translation>Technologie/Naturwissenschaften</translation> </message> <message> <source>Medicine/Physiology/Psychology</source> - <translation type="unfinished"></translation> + <translation>Medizin/Physiologie/Psychologie</translation> </message> <message> <source>Foreign Countries/Expeditions</source> - <translation type="unfinished"></translation> + <translation>Fremde Länder/Expeditionen</translation> </message> <message> <source>Social/Spiritual Sciences</source> - <translation type="unfinished"></translation> + <translation>Gesellschaftliche/Spirituelle Wissenschaften</translation> </message> <message> <source>Further Education</source> - <translation type="unfinished"></translation> + <translation>Weiterbildung</translation> </message> <message> <source>Languages</source> - <translation type="unfinished"></translation> + <translation>Sprachen</translation> </message> <message> <source>Leisure/Hobbies</source> - <translation type="unfinished"></translation> + <translation>Freizeit/Hobby</translation> </message> <message> <source>Tourism/Travel</source> - <translation type="unfinished"></translation> + <translation>Tourismus/Reisen</translation> </message> <message> <source>Handicraft</source> - <translation type="unfinished"></translation> + <translation>Handwerk</translation> </message> <message> <source>Motoring</source> - <translation type="unfinished"></translation> + <translation>Motorsport</translation> </message> <message> <source>Fitness & Health</source> - <translation type="unfinished"></translation> + <translation>Fitness & Gesundheit</translation> </message> <message> <source>Cooking</source> - <translation type="unfinished"></translation> + <translation>Kochen</translation> </message> <message> <source>Advertizement/Shopping</source> - <translation type="unfinished"></translation> + <translation>Werbung/Einkaufen</translation> </message> <message> <source>Gardening</source> - <translation type="unfinished"></translation> + <translation>Gartenarbeit</translation> </message> <message> <source>Original Language</source> - <translation type="unfinished"></translation> + <translation>Originalsprache</translation> </message> <message> <source>Black & White</source> - <translation type="unfinished"></translation> + <translation>Schwarz/Weiss</translation> </message> <message> <source>"Unpublished" Programmes</source> - <translation type="unfinished"></translation> + <translation>Unveröffentlichte Programme</translation> </message> <message> <source>Live Broadcast</source> - <translation type="unfinished"></translation> + <translation>Live-Übertragung</translation> </message> <message> <source>currently running.</source> - <translation type="unfinished"></translation> + <translation>läuft derzeit.</translation> </message> <message> <source>Successful.</source> - <translation type="unfinished"></translation> + <translation>Erfolgreich.</translation> </message> <message> <source>FAILED: xmltv ran but was interrupted.</source> - <translation type="unfinished"></translation> + <translation>FEHLER: xmltv lief, wurde aber unterbrochen.</translation> </message> <message> <source>FAILED: xmltv returned error code %1.</source> - <translation type="unfinished"></translation> + <translation>FEHLER: xmltv gab Fehlercode %1 zurück.</translation> </message> <message> <source>mythfilldatabase ran, but did not insert any new data into the Guide for %1 of %2 sources. This can indicate a potential grabber failure.</source> - <translation type="unfinished"></translation> + <translation>mythfilldatabase lief zwar, hat aber für %1 von %2 Quellen keine neuen Daten für das EPG geliefert. Dies kann ein Hinweis auf einen fehlerhaften Grabber sein.</translation> </message> <message> <source>Max Audio Channels</source> - <translation type="unfinished"></translation> + <translation>max. Tonkanäle</translation> </message> <message> <source>5.1</source> - <translation type="unfinished">5.1</translation> + <translation>5.1</translation> </message> <message> <source>Set the maximum number of audio channels to be decoded. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation>Bestimmt die maximale Anzahl an Tonkanälen die dekodiert werden. Dies betrifft die Wiedergabe von Mehrkanal/Surround-Ton.</translation> </message> <message> <source>Upmix</source> - <translation type="unfinished"></translation> + <translation>Upmix</translation> </message> <message> <source>Passive</source> - <translation type="unfinished"></translation> + <translation>Passiv</translation> </message> <message> <source>Active Simple</source> - <translation type="unfinished"></translation> + <translation>Aktiv, einfach</translation> </message> <message> <source>Active Linear</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation>Aktiv, linear</translation> </message> <message> <source>Run commercial flagger</source> - <translation type="unfinished"></translation> + <translation>Werbungserkennung</translation> </message> <message> <source>Run transcoder</source> - <translation type="unfinished"></translation> + <translation>Umwandler</translation> </message> <message> <source>Deferral days for Auto-Transcode jobs</source> - <translation type="unfinished"></translation> + <translation>Verschiebungstage für automatische Umwandlungs Aufträge</translation> </message> <message> <source>If non-zero, Auto-Transcode jobs will be scheduled to run this many days after a recording completes instead of immediately afterwards.</source> - <translation type="unfinished"></translation> + <translation>Wenn nicht null werden die automatischen Umwandlungsaufträge so viele Tage nach der beendeten Aufnahme ablaufen anstatt sofort nach der Aufnahme.</translation> </message> <message> <source>Run User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Typ %1</translation> </message> <message> <source>This is the default value used for the 'Run %1' setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, wird für neu geplante Aufnahmen der Benutzerauftrag 'Typ %1' aktiviert sein.</translation> </message> <message> <source>Merge short commercial breaks (in seconds)</source> - <translation type="unfinished"></translation> + <translation>Kurze Werbeblöcke verbinden (in Sek.)</translation> </message> <message> <source>Treat consecutive commercial breaks shorter than this as one break when skipping forward. Useful if you have to skip a few times during breaks. Applies to automatic skipping as well. Set to 0 to disable.</source> - <translation type="unfinished"></translation> + <translation>Behandelt aufeinanderfolgende Werbeblöcke, die kürzer als dieser Wert sind, als einen. Nützlich falls Sie in Werbeblöcken noch vorwärts springen müssen. Gilt auch bei 'Autom. überspringen'. Mit '0' deaktivieren.</translation> </message> <message> <source>Extra Disk Space</source> - <translation type="unfinished"></translation> + <translation>Zusätzlicher Speicherplatz (in GB)</translation> </message> <message> <source>Extra disk space (in Gigabytes) that you want to keep free on the recording file systems beyond what MythTV requires.</source> - <translation type="unfinished"></translation> + <translation>Wieviele GB Speicherplatz zusätzlich auf dem für Aufnahmen verwendeten Dateisystem frei gehalten werden soll.</translation> </message> <message> <source>Auto Expire Instead of Delete Recording</source> - <translation type="unfinished"></translation> + <translation>Autom. Löschen statt direktes löschen</translation> </message> <message> <source>Instead of deleting a recording, move recording to the 'Deleted' recgroup and turn on autoexpire.</source> - <translation type="unfinished"></translation> + <translation>Anstatt eine Aufnahme sofort zu löschen, wird sie in die 'Gelöscht' Aufnahmegruppe verschoben und Autom. Löschen aktiviert.</translation> </message> <message> <source>Deleted Max Age</source> - <translation type="unfinished"></translation> + <translation>Gelöscht Maximales Alter</translation> </message> <message> <source>When set to a number greater than zero, AutoExpire will force expiration of Deleted recordings when they are this many days old.</source> - <translation type="unfinished"></translation> + <translation>Wenn auf eine Zahl größer Null eingestellt, wird AutoExpire den Verfall von gelöschten Aufnahmen erzwingen wenn diese die eingestellte Anzahl Tage alt sind.</translation> </message> <message> <source>Expire in deleted order</source> - <translation type="unfinished"></translation> + <translation>Verfall in Löschreihenfolge</translation> </message> <message> <source>Expire Deleted recordings in the order which they were originally deleted.</source> - <translation type="unfinished"></translation> + <translation>Gelöschte Aufnahmen verfallen in der Reihenfolge in welcher sie ursprünglich gelöscht wurden.</translation> </message> <message> <source>DeletedExpireOptions</source> - <translation type="unfinished"></translation> + <translation>Gelöschte Verfall Einstellungen</translation> </message> <message> <source>Watched before UNwatched</source> - <translation type="unfinished"></translation> + <translation>Gesehenes zuerst löschen</translation> </message> <message> <source>If set, programs that have been marked as watched will be expired before programs that have not been watched.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, werden Sendungen, die als gesehen markiert sind, vor noch nicht gesehenen Sendungen gelöscht.</translation> </message> <message> <source>Priority Weight</source> - <translation type="unfinished"></translation> + <translation>Prioritätsgewichtung</translation> </message> <message> <source>When enabled, any new recording schedules will be marked as eligible for Auto-Expiration. Existing schedules will keep their current value.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, wird bei neuen Aufnahmeregeln die Autom. Löschen Funktion aktiviert sein. Bestehende Aufnahmeregeln behalten ihre aktuelle Einstellung.</translation> </message> <message> <source>LiveTV Max Age</source> - <translation type="unfinished"></translation> + <translation>LiveTV max. Alter</translation> </message> <message> <source>AutoExpire will force expiration of LiveTV recordings when they are this many days old. LiveTV recordings may also be expired early if necessary to free up disk space.</source> - <translation type="unfinished"></translation> + <translation>Automatisches Löschen wird LiveTV Aufnahmen löschen, wenn Sie so viele Tage alt sind. LiveTV Aufnahmen werden aber auch früher gelöscht, falls der Speicherplatz knapp wird.</translation> </message> <message> <source>Re-record Watched</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>For a specific category (e.g. "Sports event"), request that shows be autoextended. Only works if a show's category can be determined.</source> - <translation type="unfinished"></translation> + <translation>Gesehenes erneut aufnehmen</translation> </message> <message> <source>Profile Item</source> - <translation type="unfinished"></translation> + <translation>Profil Element</translation> </message> <message> <source>Example Custom filter list: 'ivtc,denoise3d'</source> - <translation type="unfinished"></translation> + <translation>Beispiel für eigene Filter Liste: 'ivtc,denoise3d'</translation> </message> <message> <source>Main deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation>Haupt Deinterlacing Methode.</translation> </message> <message> <source>Fallback deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation>Ersatz Deinterlacing Methode.</translation> </message> <message> <source>&</source> <comment>and</comment> - <translation type="unfinished"></translation> + <translation>&</translation> </message> <message> <source>if rez</source> - <translation type="unfinished"></translation> + <translation>Bei Auflösung</translation> </message> <message> <source>Edit</source> - <translation type="unfinished">Bearbeiten</translation> + <translation>Bearbeiten</translation> </message> <message> <source>Add New Entry</source> - <translation type="unfinished"></translation> + <translation>Neuen EIntrag hinzufügen</translation> </message> <message> <source>Playback Profiles</source> - <translation type="unfinished"></translation> + <translation>Wiedergabeprofile</translation> </message> <message> <source>Current Video Playback Profile</source> - <translation type="unfinished"></translation> + <translation>Aktuelles Video Wiedergabeprofil</translation> </message> <message> <source>Add New</source> - <translation type="unfinished"></translation> + <translation>Neues Profil</translation> </message> <message> <source>Enter Playback Group Name</source> - <translation type="unfinished"></translation> + <translation>Name der Wiedergabegruppe eingeben</translation> </message> <message> <source>Sorry, playback group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Der Wiedergabegruppenname kann nicht leer sein.</translation> </message> <message> <source>Sorry, playback group name '%1' is already being used.</source> - <translation type="unfinished"></translation> + <translation>Der Wiedergabegruppenname + '%1' wird schon verwendet.</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fehler</translation> </message> <message> <source>Length of time an on-screen display window will be visible.</source> - <translation type="unfinished"></translation> + <translation>Für wieviele Sekunden das OSD angezeigt wird.</translation> </message> <message> <source>Length of time the on-screen display will display program information.</source> - <translation type="unfinished"></translation> + <translation>Für wieviele Sekunden das OSD mit weiteren Informationen zur aktuellen Sendung angezeigt wird.</translation> </message> <message> <source>Use this to enlarge or shrink captions.</source> - <translation type="unfinished"></translation> + <translation>Die Größe der Untertitel ändern.</translation> </message> <message> <source>ATSC Caption Settings</source> - <translation type="unfinished"></translation> + <translation>ATSC Untertitel Einstellungen</translation> </message> <message> <source>ATSC %1 closed caption font.</source> - <translation type="unfinished"></translation> + <translation>ATSC '%1' Untertitel Zeichensatz</translation> </message> <message> <source>ATSC Caption Fonts</source> - <translation type="unfinished"></translation> + <translation>ATSC Untertitel Zeichensätze</translation> </message> <message> <source>Monospaced Serif</source> - <translation type="unfinished"></translation> + <translation>Serife mit festen Abständen</translation> </message> <message> <source>Proportional Serif</source> - <translation type="unfinished"></translation> + <translation>Serife mit variablen Abständen</translation> </message> <message> <source>Monospaced Sans Serif</source> - <translation type="unfinished"></translation> + <translation>Serifenlos mit feste Abständen</translation> </message> <message> <source>Proportional Sans Serif</source> - <translation type="unfinished"></translation> + <translation>Serifenlos mit variablen Abständen</translation> </message> <message> <source>Regular Font</source> - <translation type="unfinished"></translation> + <translation>Normaler Zeichensatz</translation> </message> <message> <source>Italic Font</source> - <translation type="unfinished"></translation> + <translation>Kursiver Zeichensatz</translation> </message> <message> <source>Italic</source> - <translation type="unfinished"></translation> + <translation>Kursiv</translation> </message> <message> <source>Vertical scaling</source> - <translation type="unfinished"></translation> + <translation>Vertikale Skalierung</translation> </message> <message> <source>Adjust this if the image does not fill your screen vertically. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation>Hier können Sie die vertikale Bildgröße einstellen. Erlaubter Bereich: -100% bis +100%</translation> </message> <message> <source>Horizontal scaling</source> - <translation type="unfinished"></translation> + <translation>Horizontale Skalierung</translation> </message> <message> <source>Adjust this if the image does not fill your screen horizontally. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation>Hier können Sie die horizontale Bildgröße einstellen. Erlaubter Bereich: -100% bis +100%</translation> </message> <message> <source>Prefer EIA-708 over EIA-608 captions</source> - <translation type="unfinished"></translation> + <translation>EIA-708 Untertitel bevorzugen</translation> </message> <message> <source>When enabled the new EIA-708 captions will be preferred over the old EIA-608 captions in ATSC streams.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, werden bei ATSC neue EIA-708 Untertitel den alten EIA-608 Untertiteln bevorzugt.</translation> </message> <message> <source>This is the default, but as of early 2008 most stations are not broadcasting useable EIA-708 captions.</source> - <translation type="unfinished"></translation> + <translation>Dies ist die Vorgabe, wobei zum Anfang des Jahres 2008 noch kaum ein Sender brauchbare EIA-708 Untertitel ausstrahlt.</translation> </message> <message> <source>Enable picture controls</source> - <translation type="unfinished"></translation> + <translation>Nutze Bildregler</translation> </message> <message> <source>If enabled, MythTV attempts to initialize picture controls (brightness, contrast, etc.) that are applied during playback.</source> - <translation type="unfinished"></translation> + <translation>Wenn aktiviert versucht MythTV die Bildkontrolle (Helligkeit, Kontrast, etc.) so einzustellen wie diese während der Wiedergabe verwendet wurden.</translation> </message> <message> <source>Warn on no audio output</source> - <translation type="unfinished"></translation> + <translation>Bei fehlendem Ton warnen</translation> </message> <message> <source>If enabled, MythTV will warn you if it can't access the soundcard.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, wird bei Problemen mit der Soundkarte eine Warnung angezeigt.</translation> </message> <message> <source>Always prompt (excluding Live TV)</source> - <translation type="unfinished"></translation> + <translation>Immer nachfragen (ausser LiveTV)</translation> </message> <message> <source>Always prompt (including Live TV)</source> - <translation type="unfinished"></translation> + <translation>Immer nachfragen (auch bei LiveTV)</translation> </message> <message> <source>Prompt for Live TV only</source> - <translation type="unfinished"></translation> + <translation>Nur bei LiveTV nachfragen</translation> </message> <message> <source>Continue Playback When Embedded</source> - <translation type="unfinished"></translation> + <translation>Wiedergabe auch im kleinen Fenster</translation> </message> <message> <source>This option continues TV playback when the TV window is embedded in the upcoming program list or recorded list. The default is to pause the recorded show when embedded.</source> - <translation type="unfinished"></translation> + <translation>Setzt die TV-Wiedergabe auch dann fort, wenn das TV-Bild im EPG oder im 'Aufnahmen ansehen' Menü angezeigt wird. Die Vorgabe ist, die WIedergabe anzuhalten.</translation> </message> <message> <source>Automatically mark a recording as watched</source> - <translation type="unfinished"></translation> + <translation>Aufnahmen autom. als 'Gesehen' markieren</translation> </message> <message> <source>Customise exit menu options</source> - <translation type="unfinished"></translation> + <translation>'Beenden'-Menü anpassen</translation> </message> <message> <source>Show quit</source> - <translation type="unfinished"></translation> + <translation>Zeige 'Beenden'</translation> </message> <message> <source>Show quit and shutdown</source> - <translation type="unfinished"></translation> + <translation>Zeige 'Beenden' und 'Abschalten'</translation> </message> <message> <source>Show quit, reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>Zeige 'Beenden', 'Neustart' und 'Abschalten'</translation> </message> <message> <source>Show shutdown</source> - <translation type="unfinished"></translation> + <translation>Zeige 'Abschalten'</translation> </message> <message> <source>Show reboot</source> - <translation type="unfinished"></translation> + <translation>Zeige 'Neustart'</translation> </message> <message> <source>Show reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>Zeige 'Neustart' und 'Abschalten'</translation> </message> <message> <source>By default, only remote frontends are shown the shutdown option on the exit menu. Here you can force specific shutdown and reboot options to be displayed.</source> - <translation type="unfinished"></translation> + <translation>Standardmässig werden nur bei enfernten Frontends die 'Abschalten'-Optionen im 'Beenden'-Menü angezeigt. Hier können Sie bestimmen, welche Optionen angezeigt werden.</translation> </message> <message> <source>Reboot command</source> - <translation type="unfinished"></translation> + <translation>'Neustart'-Befehl</translation> </message> <message> <source>Command or script to run if you select the reboot option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source> - <translation type="unfinished"></translation> + <translation>Der Befehl, der ausgeführt wird, wenn im 'Beenden'-Menü die 'Neustart'-Option gewählt wird. Um das 'Beenden'-Menü zu sehen, müssen Sie eine 'Beenden'-Taste festlegen.</translation> </message> <message> <source>Command or script to run if you select the shutdown option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source> - <translation type="unfinished"></translation> + <translation>Der Befehl, der ausgeführt wird, wenn im 'Beenden'-Menü die 'Abschalten'-Option gewählt wird. Um das 'Beenden'-Menü zu sehen, müssen Sie eine 'Beenden'-Taste festlegen.</translation> </message> <message> <source>The aspect ratio of a Xinerama display can not be queried from the display, so it must be specified.</source> - <translation type="unfinished"></translation> + <translation>Das Seitenverhältnis eines Xinerama-Bildschirms kann nicht autom. ermittelt werden, es muss daher hier angegeben werden.</translation> </message> <message> <source>Letterboxing Color</source> - <translation type="unfinished"></translation> + <translation>Letterbox Farbe</translation> </message> <message> <source>By default MythTV uses black letterboxing to match broadcaster letterboxing, but those with plasma screens may prefer gray to minimize burn-in.</source> - <translation type="unfinished"></translation> + <translation>Grundsätzlich benutzt MythTV schwarze Balken um das passende Bildformat zu erhalten. Bei Plasmabildschirmen kann Grau die Einbrenneffekte reduzieren. </translation> </message> <message> <source>Currently only works with XVideo video renderer.</source> - <translation type="unfinished"></translation> + <translation>Funktioniert momentan nur mit dem XVideo Video-Renderer.</translation> </message> <message> <source>Video Aspect Override</source> - <translation type="unfinished"></translation> + <translation>Seitenverhältnis festlegen</translation> </message> <message> <source>When enabled, these will override the aspect ratio specified by any broadcaster for all video streams.</source> - <translation type="unfinished"></translation> + <translation>Legt das Seitenverhältnis abweichend vom tatsächlichen Seitenverhältnis der Videodaten fest.</translation> </message> <message> <source>Zoom</source> - <translation type="unfinished"></translation> + <translation>Zoom</translation> </message> <message> <source>When enabled, these will apply a predefined zoom to all video playback in MythTV.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, wird der definierte Zoomfaktor bei jeder Wiedergabe berücksichtigt.</translation> </message> <message> <source>Horizontal size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation>Horizontale Größe des Monitors oder Fernsehers. Damit wird das tatsächliche Seitenverhältnis berechnet und überstimmt die DisplaySize Einstellung des X Window Systems.</translation> </message> <message> <source>Vertical size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation>Vertikale Größe des Monitors oder Fernsehers. Damit wird das tatsächliche Seitenverhältnis berechnet und überstimmt die DisplaySize Einstellung des X Window Systems.</translation> </message> <message> <source>Hide Mouse Cursor in MythTV</source> - <translation type="unfinished"></translation> + <translation>Mauszeiger verstecken</translation> </message> <message> <source>Toggles mouse cursor visibility. Most of the MythTV GUI does not respond to mouse clicks. Use this option to avoid "losing" your mouse cursor.</source> - <translation type="unfinished"></translation> + <translation>Bestimmt, ob in MythTV der Mauzeiger sichtbar ist. Diese Option steuert nur die Sichtbarkeit des Mauszeigers, da MythTV nicht für die Bedienung mit einer Maus ausgelegt ist.</translation> </message> <message> <source>This selects what MythTV uses to draw. If you have decent hardware, select OpenGL. Changing this requires a restart.</source> - <translation type="unfinished"></translation> + <translation>Bestimmt mit welcher Methode Grafiken dargestellt werden. Bei moderner Hardware wählen Sie OpenGL. Eine Änderung wird erst nach dem Neustart des Programms berücksichtigt.</translation> </message> <message> <source>UI Theme</source> - <translation type="unfinished"></translation> + <translation>UI Thema</translation> </message> <message> <source>OSD Theme</source> - <translation type="unfinished"></translation> + <translation>OSD Thema</translation> </message> <message> <source>Menu Theme</source> - <translation type="unfinished"></translation> + <translation>Menüthema</translation> </message> <message> <source>Avoid conflicts between live TV and scheduled shows</source> - <translation type="unfinished"></translation> + <translation>Konflikte zwischen LiveTV und geplanten Aufnahmen vermeiden</translation> </message> <message> <source>Allow live TV to move scheduled shows</source> - <translation type="unfinished"></translation> + <translation>Erlaube LiveTV geplante Aufnahmen zu verschieben</translation> </message> <message> <source>If enabled, scheduled recordings will be moved to other cards (where possible), so that live TV will not be interrupted.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, können geplante Aufnahmen auf andere TV-Karten verschoben werden, um LiveTV nicht zu unterbrechen.</translation> </message> <message> <source>Fine tune font size (%)</source> - <translation type="unfinished"></translation> + <translation>Anpassung der Zeichensatzgrösse (in %)</translation> </message> <message> <source>Fine tune all font sizes by this percentage. Font sizes should be the correct relative size if the X11 DPI (dots per inch) is set to 100.</source> - <translation type="unfinished"></translation> + <translation>Alle Zeichensätze werden um diesen Faktor skaliert. Die Zeichensatzgrösse sollte korrekt sein, wenn das X Window System auf 100 dpi konfiguriert ist.</translation> </message> <message> <source>Display the channel icons</source> - <translation type="unfinished"></translation> + <translation>Senderlogos anzeigen</translation> </message> <message> <source>Display the icons/logos for the channels in the guide. See section 9.5 of the Installation Guide for how to grab icons.</source> - <translation type="unfinished"></translation> + <translation>Zeigt die Senderlogos in der Programmüberischt an. Siehe Abschnitt 9.5 der Installationsanleitung woher die Logos zu beziehen sind.</translation> </message> <message> <source>Avoid back to back recordings from different channels</source> - <translation type="unfinished"></translation> + <translation>Vermeide unmittelbar aufeinanderfolgende Aufnahmen auf versch. Sendern</translation> </message> <message> <source>If set, the scheduler will avoid assigning shows from different channels to the same card if their end time and start time match. This will be allowed when necessary in order to resolve conflicts.</source> - <translation type="unfinished"></translation> + <translation>Wenn aktiviert wird die Zeitsteuerung die Zuweisung von Programmen verschiedener Kanäle auf die selbe Karte verhindern, falls deren Start- und Endzeit übereinstimmen. Um Konflikte zu lösen wird dies bei Bedarf erlaubt.</translation> </message> <message> <source>The 'All' Recording type will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation>Der 'Alle' Aufnahmetyp wird diesen zusätzlichen Aufnahme-Prioritätswert erhalten.</translation> </message> <message> <source>Ignore LiveTV Recordings</source> - <translation type="unfinished"></translation> + <translation>Ignoriere LiveTV Aufnahmen</translation> </message> <message> <source>Recording monitoring will ignore LiveTV recordings.</source> - <translation type="unfinished"></translation> + <translation>Die Aufnahmenüberwachung wird LiveTV Aufnahmen ignorieren.</translation> </message> <message> <source> (and other removable devices)</source> - <translation type="unfinished"></translation> + <translation> (und andere Wechselmedien)</translation> </message> <message> <source>Use new media</source> - <translation type="unfinished"></translation> + <translation>neue Medien nutzen</translation> </message> <message> <source>This will cause MythTV to jump, to an appropriate plugin, when new media is inserted.</source> - <translation type="unfinished"></translation> + <translation>Falls gesetzt, wird MythTV beim Einlegen neuer Medien das passende Plugin starten.</translation> </message> <message> <source>Ignore Devices</source> - <translation type="unfinished"></translation> + <translation>folgende Geräte ignorieren</translation> </message> <message> <source>If there are any devices that you do not want to be monitored, list them here with commas in-between. The plugins will ignore them</source> - <translation type="unfinished"></translation> + <translation>Geben Sie hier alle Geräte (z.B. /dev/cdrom2) durch Komma getrennt an, die nicht beobachtet werden sollen. Plugins werden diese Geräte ignorieren.</translation> </message> <message> <source>MythMediaMonitor</source> - <translation type="unfinished"></translation> + <translation>MythMediaMonitor</translation> </message> <message> <source>PVR-350 Hardware Decoder Settings</source> - <translation type="unfinished"></translation> + <translation>PVR-350 Hardware Dekoder</translation> </message> <message> <source>This setting allows a DataDirect guide data provider to specify the next download time in order to distribute load on their servers. If this setting is enabled, mythfilldatabase Execution Start/End times are ignored.</source> - <translation type="unfinished"></translation> + <translation>Erlaubt es einem DataDirect-Anbieter den nächsten Termin für den Download der EPG-Daten vorzugeben, um die Belastung seiner Server zu verringern. Falls gesetzt, werden die mythfilldatabase Start/Ende-Zeiten ignoriert.</translation> </message> <message> <source>File or directory to use for logging output from the mythfilldatabase program. Leave blank to disable logging.</source> - <translation type="unfinished"></translation> + <translation>Datei oder Verzeichnis für die Meldungen des mythfilldatabase Programms. Leer lassen um die Protokollierung auszuschalten.</translation> </message> <message> <source>Miscellaneous</source> - <translation type="unfinished"></translation> + <translation>Verschiedenes</translation> </message> <message> <source>Settings Access</source> - <translation type="unfinished"></translation> + <translation>Zugangseinstellungen</translation> </message> <message> <source>Shutdown/Reboot Settings</source> - <translation type="unfinished"></translation> + <translation>Abschalten/Neustart Einstellungen</translation> </message> <message> <source>General Playback</source> - <translation type="unfinished"></translation> + <translation>Allgemeines Wiedergabe</translation> </message> <message> <source>Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Aufnahmegruppen</translation> </message> <message> <source>UDP OSD Notifications</source> - <translation type="unfinished"></translation> + <translation>UDP-OSD Benachrichtigung</translation> </message> <message> <source>Analog Closed Captions</source> - <translation type="unfinished"></translation> + <translation>Analoge Untertitel</translation> </message> <message> <source>Default JobQueue settings for new scheduled recordings</source> - <translation type="unfinished"></translation> + <translation>Voreinstellungen der Auftragsliste für neu geplante Aufnahmen</translation> </message> <message> <source>Yes, Exit and Reboot</source> - <translation type="unfinished"></translation> + <translation>Ja, beenden und Rechner neustarten</translation> </message> <message> <source>DVD contains a bookmark</source> - <translation type="unfinished"></translation> + <translation>DVD hat Position gesetzt</translation> </message> <message> <source>Play from bookmark</source> - <translation type="unfinished">Wiedergabe ab Position</translation> + <translation>Wiedergabe ab Position</translation> </message> <message> <source>Play from beginning</source> - <translation type="unfinished">Wiedergabe von Anfang an</translation> + <translation>Wiedergabe von Anfang an</translation> </message> <message> <source>The file for this recording is empty.</source> - <translation type="unfinished"></translation> + <translation>Die Datei zu dieser Aufnahme ist leer.</translation> </message> <message> <source>This recording is not yet available.</source> - <translation type="unfinished"></translation> + <translation>Diese Aufnahme ist noch nicht verfügbar.</translation> </message> <message> <source>Move to Default group</source> - <translation type="unfinished"></translation> + <translation>Zur Standardgruppe verschieben</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Wiederherstellen</translation> </message> <message> <source>IP address</source> - <translation type="unfinished"></translation> + <translation>IP Adresse</translation> </message> <message> <source>Status Port</source> - <translation type="unfinished"></translation> + <translation>Status Port</translation> </message> <message> <source>Security Pin (Required)</source> - <translation type="unfinished"></translation> + <translation>Sicherheitscode (Benötigt)</translation> </message> <message> <source>Pin code required for a frontend to connect to the backend. Blank prevents all connections, 0000 allows any client to connect.</source> - <translation type="unfinished"></translation> + <translation>Benötigter Sicherheitscode damit ein Frontend sich zum Backend verbinden kann. Leer verhindert alle Verbindungen, 0000 erlaubt alle Verbindungen.</translation> </message> <message> <source>Disable Firewire Reset</source> - <translation type="unfinished"></translation> + <translation>FireWire Reset deakt.</translation> </message> <message> <source>By default MythTV will reset the firewire bus when a firewire recorder stops responding to commands. But if this causes problems you can disable this here for Linux firewire recorders.</source> - <translation type="unfinished"></translation> + <translation>Im Normalfall wird MythTV den Firewire Bus zurücksetzen wenn ein Firewire Rekorder nicht mehr auf Kommandos reagiert. Wenn dies Probleme verursachen sollte können sie dieses Verhalten für Linux Firewire Rekorder ausschalten.</translation> </message> <message> <source>Miscellaneous Status Application</source> - <translation type="unfinished"></translation> + <translation>Verschiedene Status Anwendungen</translation> </message> <message> <source>External application or script that outputs extra information for inclusion in the backend status page. See contrib/misc_status_info/README</source> - <translation type="unfinished"></translation> + <translation>Externe Anwendung oder Script welches extra Informationen für die Backend Status Seite erzeugt. Siehe contrib/misc_status_info/README</translation> </message> <message> <source>Your Local Timezone (for XMLTV)</source> - <translation type="unfinished"></translation> + <translation>Ihre lokale Zeitzone (für XMLTV)</translation> </message> <message> <source>Used if the XMLTV data comes from a different timezone than your own. This adjust the times in the XMLTV EPG data to compensate. 'Auto' converts the XMLTV time to local time using your computer's timezone. 'None' ignores the XMLTV timezone, interpreting times as local.</source> - <translation type="unfinished"></translation> + <translation>Verwendet falls die XMLTV Daten aus einer anderen als der eigenen Zeitzone stammen. Dies paßt die Zeiten in den XMLTV EPG Daten an. 'Auto' konvertiert die XMLTV Zeit auf die Lokalzeit unter Verwendung der Zeitzone des Computers. 'Keine' ignoriert die XMLTV Zeitzone und interpretiert Zeiten als Lokalzeit.</translation> </message> <message> <source>Delay between wake attempts (secs)</source> - <translation type="unfinished"></translation> + <translation>Pause zwischen Weckversuchen (Sek.)</translation> </message> <message> <source>Wake Attempts</source> - <translation type="unfinished"></translation> + <translation>Weckversuche</translation> </message> <message> <source>The command used to wake up your master backend server (eg. sudo /etc/init.d/mythtv-backend restart).</source> - <translation type="unfinished"></translation> + <translation>Der Befehl mit dem das Master-Backend gestartet wird +(z.B. sudo /etc/init.d/mythtv-backend restart).</translation> </message> <message> <source>Idle shutdown timeout (secs)</source> - <translation type="unfinished"></translation> + <translation>Leerlauf Abschaltzeit (Sekunden)</translation> </message> <message> <source>Command to set Wakeup Time</source> - <translation type="unfinished"></translation> + <translation>Kommando um die Aufweckzeit zu setzen</translation> </message> <message> <source>The command used to set the wakeup time (passed as $time) for the Master Backend</source> - <translation type="unfinished"></translation> + <translation>Das Kommando um die Aufweckzeit für das Master-Backend zu setzen (übergeben als $time)</translation> </message> <message> <source>Run Jobs only on original recording backend</source> - <translation type="unfinished"></translation> + <translation>Starte Aufträge nur auf dem ursprünglichen Aufnahme Backend</translation> </message> <message> <source>User Job #%1 Command</source> - <translation type="unfinished"></translation> + <translation>Typ %1 Befehl</translation> </message> <message> <source>User Job #%1 Description</source> - <translation type="unfinished"></translation> + <translation>Typ %1 Beschreibung</translation> </message> <message> <source>User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Typ %1</translation> </message> <message> <source>Allow %1 jobs</source> - <translation type="unfinished"></translation> + <translation>Erlaube %1 Aufträge</translation> </message> <message> <source>Master Backend</source> - <translation type="unfinished"></translation> + <translation>Master-Backend</translation> </message> <message> <source>Locale Settings</source> - <translation type="unfinished"></translation> + <translation>Lokale Einstellungen</translation> </message> <message> <source>Miscellaneous Settings</source> - <translation type="unfinished"></translation> + <translation>Verschiedenes</translation> </message> <message> <source>File Management Settings</source> - <translation type="unfinished"></translation> + <translation>Dateiverwaltung Einstellungen</translation> </message> <message> <source>Backend Wakeup settings</source> - <translation type="unfinished"></translation> + <translation>Backend Aufwach-Einstellungen</translation> </message> <message> <source>Slave Backends</source> - <translation type="unfinished"></translation> + <translation>Slave-Backends</translation> </message> <message> <source>Job Queue (Backend-Specific)</source> - <translation type="unfinished"></translation> + <translation>Auftragsliste (Backend spezifisch)</translation> </message> <message> <source>Tuner %1 is recording: </source> - <translation type="unfinished">Tuner %1 nimmt auf: + <translation>Tuner %1 nimmt auf: </translation> </message> <message> <source>Tuner %1 is not recording</source> - <translation type="unfinished">Tuner %1 nimmt nicht auf</translation> + <translation>Tuner %1 nimmt nicht auf</translation> </message> <message> <source>Date Format</source> - <translation type="unfinished"></translation> + <translation>Datumsformat</translation> </message> <message> <source>This is the format to use to display the date. See http://doc.trolltech.com/3.3/qdate.html#toString for a list of valid format specifiers.</source> + <translation>Das Format für die Datumsanzeige. Siehe http://doc.trolltech.com/3.3/qdate.html#toString für eine Liste gültiger Angaben.</translation> + </message> + <message> + <source>Seen</source> + <translation>Gesehen</translation> + </message> + <message> + <source>Matching</source> + <translation>Übereinstimmend</translation> + </message> + <message> + <source>Signal To Noise</source> + <translation>Signal/Rauschen</translation> + </message> + <message> + <source>Bit Error Rate</source> + <translation>Bitfehlerrate</translation> + </message> + <message> + <source>Uncorrected Blocks</source> + <translation>Nicht korrigierte Blöcke</translation> + </message> + <message> + <source>Rotor Progress</source> + <translation>Rotor-Fortschritt</translation> + </message> + <message> + <source>New Zealand</source> + <translation>Neuseeland</translation> + </message> + <message> + <source>Mythtv has was set to sleep for %1 minutes and will exit in %2 seconds. +Do you wish to continue watching?</source> + <translation>MythTV wurde eingestellt um %1 Minuten zu schlafen und wird sich in %2 Sekunden beenden.Wollen sie weiter schauen ?</translation> + </message> + <message> + <source>CPU++</source> + <comment>Sample: No hardware assist</comment> + <translation>CPU++</translation> + </message> + <message> + <source>CPU+</source> + <comment>Sample: Hardware assist HD only</comment> + <translation>CPU+</translation> + </message> + <message> + <source>CPU--</source> + <comment>Sample: Hardware assist all</comment> + <translation>CPU--</translation> + </message> + <message> + <source>High Quality</source> + <comment>Sample: high quality</comment> + <translation>Hohe Qualität</translation> + </message> + <message> + <source>Normal</source> + <comment>Sample: average quality</comment> + <translation>Standard</translation> + </message> + <message> + <source>Slim</source> + <comment>Sample: low CPU usage</comment> + <translation>Kompakt</translation> + </message> + <message> + <source>If other than None, override the audio sampling rate in the recording profile when this card is used. Use this if your capture card does not support all of the standard rates.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback. 'Passive' is the least demanding on the CPU. 'Active Simple' is more demanding and 'Active Linear' is the most demanding (but highest quality).</source> + <translation>Bestimmt, wie Stereo-Ton in Mehrkanalton konvertiert wird. Dies betrifft die Mehrkanal/Surround-Ton Wiedergabe. Von 'Passiv' über 'Aktiv simpel' nach 'Aktiv linear' (höchste Qualität) steigt die CPU-Belastung.</translation> + </message> + <message> + <source>For a special category (e.g. "Sports event"), request that shows be autoextended. Only works if a show's category can be determined.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>ScreenShotPath</source> + <translation>ScreenShotPath</translation> + </message> + <message> + <source>Path to screenshot storage location. Should be writable by the frontend</source> + <translation>Pfad zur Bildschirm Foto Ablage. Sollte vom Frontend beschrieben werden können.</translation> + </message> + <message> + <source>Display on screen</source> + <translation>Anzeige am Schirm</translation> + </message> + <message> + <source>Automatic Priority Range (+/-)</source> + <translation>Automatischer Prioritätsbereich (+/-)</translation> + </message> + <message> + <source>Up to this number of priority points may be added for titles that are usually watched soon after recording or subtracted for titles that are often watched several days or weeks later.</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>MythTV Frontend</source> + <translation>MythTV Frontend</translation> + </message> + <message> + <source>Length of time the frontend waits between tries to wake up the master backend. This should be the time your master backend needs to startup. Set 0 to disable.</source> + <translation>Zeitspanne die das Frontend zwischen den Versuchen das Master-Backend aufzuwecken wartet. Dies sollte der Zeit entsprechen, die das Master-Backend benötigt um zu starten. Zum Deaktivieren 0 setzen.</translation> + </message> + <message> + <source>A command executed before the backend would shutdown. The return value determines if the backend can shutdown. 0 - yes, 1 - restart idling, 2 - reset the backend to wait for a frontend.</source> + <translation>Ein Kommando welches ausgeführt wird bevor das Backend abgeschaltet würde. Der Rückgabewert definiert ob das Backend abgeschaltet werden darf. 0 - Ja, 1 - Warten neu starten, 2 - Backend rücksetzen um auf ein Frontend zu warten.</translation> + </message> + <message> + <source>Include Recordings in Video List</source> + <translation>Inkludiere Aufnahmen in Video Liste</translation> + </message> + <message> + <source>If enabled, the master backend will include the list of recorded shows in the list of videos This is mainly to accommodate UPnP players which do not allow more than 1 video section.</source> <translation type="unfinished"></translation> </message> + <message> + <source>Upnp Media Update Time</source> + <translation>Upnp Medien Aktualisierungs Zeit</translation> + </message> + <message> + <source>The number of minutes between mythbackend checking for new videos to serve via upnp. 0 = Off. </source> + <translation>Minutenintervall in dem mythbackend nach neuen Videos prüft, die via UPNP bereitgestellt werden. 0 = Aus.</translation> + </message> + <message> + <source>Video content to show a WMP Client</source> + <translation>Video Inhalt der einem WMP Client gezeigt wird</translation> + </message> + <message> + <source>Recordings</source> + <translation>Aufnahmen</translation> + </message> + <message> + <source>Videos</source> + <translation>Videos</translation> + </message> + <message> + <source>This lets decided to map a WMP client to the Recordings tree or to the Video tree when it requests a list of videos </source> + <translation type="unfinished"></translation> + </message> + <message> + <source>UPNP Server Settings</source> + <translation>UPNP Server Einstellungen</translation> + </message> + <message> + <source>MythTV Setup</source> + <translation>MythTV Einstellungen</translation> + </message> </context> <context> <name>RecOptDialog</name> <message> <source>Missing Element</source> - <translation type="unfinished"></translation> + <translation>Fehlendes Element</translation> </message> <message> <source>The theme you are using does not contain a 'recording_options' element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Press EXIT to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Das Thema welches sie benutzen enthält kein ''recording_options' Element. Bitte kontaktieren sie den Themen Autor und bitten sie um eine Aktualisierung.<br><br>Der nächste Schirm wird leer sein. Drücken sie EXIT um zum Menü zu gelangen.</translation> </message> <message> <source>Unknown Element</source> - <translation type="unfinished"></translation> + <translation>Unbekanntes Element</translation> </message> <message> <source>The theme you are using contains an unknown element ('%1'). It will be ignored</source> - <translation type="unfinished">Das verwendete Thema enthält ein unbekanntes Element '%1'. Es wird ignoriert.</translation> + <translation>Das verwendete Thema enthält ein unbekanntes Element ('%1'). Es wird ignoriert.</translation> </message> </context> <context> @@ -11090,91 +11247,91 @@ <name>SIScan</name> <message> <source>Updated Channel %1</source> - <translation type="unfinished"></translation> + <translation>Sender %1 aktualisiert</translation> </message> <message> <source>Added Channel %1</source> - <translation type="unfinished"></translation> + <translation>Sender %1 hinzugefügt</translation> </message> <message> <source>Failed to add channel %1</source> - <translation type="unfinished"></translation> + <translation>Konnte Sender %1 nicht hinzufügen</translation> </message> <message> <source>Network %1 Processing</source> - <translation type="unfinished"></translation> + <translation>Netzwerk %1 Verarbeitung</translation> </message> <message> <source>Finished processing Transport List</source> - <translation type="unfinished"></translation> + <translation>Transportliste fertig abgearbeitet</translation> </message> <message> <source>Updating Services</source> - <translation type="unfinished"></translation> + <translation>Dienste werden aktualisiert</translation> </message> <message> <source>Finished processing Services</source> - <translation type="unfinished"></translation> + <translation>Dienste fertig abgearbeitet</translation> </message> <message> <source>Frequency %1</source> - <translation type="unfinished"></translation> + <translation>Frequenz %1</translation> </message> <message> <source>as</source> - <translation type="unfinished"></translation> + <translation>als</translation> </message> <message> <source>Skipping %1, not in imported channel map</source> - <translation type="unfinished"></translation> + <translation>Überspringe %1, nicht in importierter Kanaltabelle</translation> </message> <message> <source>%1%2%3 on %4 (%5)</source> - <translation type="unfinished"></translation> + <translation>%1%2%3 auf %4 (%5)</translation> </message> <message> <source>Adding %1</source> - <translation type="unfinished"></translation> + <translation>Füge %1 hinzu</translation> </message> <message> <source>Updating %1</source> - <translation type="unfinished"></translation> + <translation>Aktualisiere %1</translation> </message> <message> <source>Skipping %1</source> - <translation type="unfinished"></translation> + <translation>Überspringe %1</translation> </message> <message> <source>on %1</source> - <translation type="unfinished"></translation> + <translation>auf %1</translation> </message> <message> <source>Data Only Channel (off-air?)</source> - <translation type="unfinished"></translation> + <translation>Nur Datenkanal (nicht in Betrieb?)</translation> </message> <message> <source>Empty Channel (off-air?)</source> - <translation type="unfinished"></translation> + <translation>Leerer Kanal (nicht in Betrieb?)</translation> </message> <message> <source>Audio Only Channel</source> - <translation type="unfinished"></translation> + <translation>Nur Tonkanal</translation> </message> <message> <source>Encrypted Channel</source> - <translation type="unfinished"></translation> + <translation>Verschlüsselter Kanal</translation> </message> <message> <source>%1 %2-%3 as %4 on %5 (%6)</source> - <translation type="unfinished"></translation> + <translation>%1 %2-%3 als %4 auf %5 (%6)</translation> </message> <message> <source>Found channel, but it doesn't match existing tsid. You may wish to delete existing channels and do a full scan.</source> - <translation type="unfinished"></translation> + <translation>Kanal gefunden, aber er paßt nicht zur existierenden TSID. Eventuell sollten sie die existierenden Kanäle löschen und eine vollständinge Suche durchführen.</translation> </message> <message> <source>Skipping %1 - already in DB, and we don't have better data.</source> - <translation type="unfinished"></translation> + <translation>Überspringe %1 - schon vorhanden und wir haben keine besseren Daten.</translation> </message> </context> <context> @@ -11208,7 +11365,7 @@ </message> <message> <source>Tuning</source> - <translation type="unfinished"></translation> + <translation>Einstellen</translation> </message> <message> <source>Scan</source> @@ -11412,94 +11569,95 @@ </message> <message> <source>marked as HDTV</source> - <translation type="unfinished"></translation> + <translation>als HDTV markiert</translation> </message> <message> <source>from source</source> - <translation type="unfinished"></translation> + <translation>von Quelle</translation> </message> <message> <source>on input</source> - <translation type="unfinished"></translation> + <translation>auf Eingang</translation> </message> <message> <source>%1 of these are Deleted and consume %2</source> - <translation type="unfinished"></translation> + <translation>%1 davon sind gelöscht und belegen %2</translation> </message> </context> <context> <name>StorageGroupEditor</name> <message> <source>'%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>'%1' Speichergruppen Verzeichnisse</translation> </message> <message> <source>Local '%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>Lokale '%1' Speichergruppen Verzeichnisse</translation> </message> <message> <source>Add Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>neues Verzeichnis für Speichergruppe</translation> </message> <message> <source>Enter directory name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished"></translation> + <translation>Verzeichnis eingeben oder SELECT drücken um Text mit der Bildschirm Tastatur einzugeben</translation> </message> <message> <source>Edit Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>Verzeichnis f. Speichergruppen bearbeiten</translation> </message> <message> <source>Remove '%1' Directory From Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Verzeichnis '%1' +aus der Speichergruppe entfernen?</translation> </message> <message> <source>Yes, remove directory</source> - <translation type="unfinished"></translation> + <translation>Ja, Verzeichnis entfernen</translation> </message> <message> <source>No, Don't remove directory</source> - <translation type="unfinished"></translation> + <translation>Nein, Verzeichnis nicht entfernen</translation> </message> <message> <source>(Add New Directory)</source> - <translation type="unfinished"></translation> + <translation>(Neues Verzeichnis hinzu)</translation> </message> </context> <context> <name>StorageGroupListEditor</name> <message> <source>Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Speichergruppen (Verzeichnisse für neue Aufnahmen)</translation> </message> <message> <source>Local Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Lokale Speichergruppen (Verzeichnisse für neue Aufnahmen)</translation> </message> <message> <source>Create New Storage Group</source> - <translation type="unfinished"></translation> + <translation>Neue Speichergruppe anlegen</translation> </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished"></translation> + <translation>Gruppenname eingeben oder SELECT drücken um Text mit der Bildschirm Tastatur einzugeben</translation> </message> <message> <source>Delete '%1' Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Lösche Speichergruppe '%1'?</translation> </message> <message> <source>Yes, delete group</source> - <translation type="unfinished">Ja, Gruppe löschen</translation> + <translation>Ja, Gruppe löschen</translation> </message> <message> <source>No, Don't delete group</source> - <translation type="unfinished">Nein, Gruppe nicht löschen</translation> + <translation>Nein, Gruppe nicht löschen</translation> </message> <message> <source>(Create %1 group)</source> - <translation type="unfinished"></translation> + <translation>(Erzeuge %1 Gruppen)</translation> </message> </context> <context> @@ -11586,7 +11744,7 @@ </message> <message> <source>Adjust Volume</source> - <translation>Lautstärke</translation> + <translation>Lautstärke anpassen</translation> </message> <message> <source>Mute On</source> @@ -11746,7 +11904,7 @@ </message> <message> <source>Sleep </source> - <translation>Schlaf</translation> + <translation>Abschalttimer</translation> </message> <message> <source>16:9 Stretch</source> @@ -12080,7 +12238,7 @@ </message> <message> <source>DVD Root Menu</source> - <translation>DVD Haupt Menü</translation> + <translation>DVD Hauptmenü</translation> </message> <message> <source>Schedule Recordings</source> @@ -12128,7 +12286,7 @@ </message> <message> <source>[O]k</source> - <translation type="unfinished"></translation> + <translation>[O]k</translation> </message> <message> <source>Jump to Program</source> @@ -12144,7 +12302,7 @@ </message> <message> <source>Autodetect</source> - <translation>Auto-Erkennung</translation> + <translation>Automatisch</translation> </message> <message> <source>High Quality</source> @@ -12160,15 +12318,15 @@ </message> <message> <source>Toggle Teletext Captions</source> - <translation>Teletextuntertitel An-Aus</translation> + <translation>Teletext Untertitel Ein/Aus</translation> </message> <message> <source>Toggle Teletext Menu</source> - <translation>Teletext Menü An-Aus</translation> + <translation>Teletext Menü Ein/Aus</translation> </message> <message> <source>Toggle</source> - <translation>An-Aus</translation> + <translation>Ein/Aus</translation> </message> <message> <source>(I)</source> @@ -12183,11 +12341,11 @@ <message> <source>(P)</source> <comment>Progressive</comment> - <translation type="unfinished">Progressiv</translation> + <translation>(P)</translation> </message> <message> <source>Video Scan</source> - <translation type="unfinished"></translation> + <translation>Video Scan</translation> </message> <message> <source>Detect</source> @@ -12254,7 +12412,7 @@ </message> <message> <source>DVD</source> - <translation type="unfinished"></translation> + <translation>DVD</translation> </message> <message> <source>Menu</source> @@ -12262,7 +12420,7 @@ </message> <message> <source>Still Frame</source> - <translation type="unfinished"></translation> + <translation>Standbild</translation> </message> <message> <source>Title: %1 (%2)</source> @@ -12270,11 +12428,11 @@ </message> <message> <source>Chapter: %1/%2</source> - <translation>Kapittel: %1/%2</translation> + <translation>Kapitel: %1/%2</translation> </message> <message> <source>DVD Chapter Menu</source> - <translation>DVD Kapittel Menü</translation> + <translation>DVD Kapitelmenü</translation> </message> <message> <source>You are exiting this %1</source> @@ -12306,43 +12464,43 @@ </message> <message> <source>Exit</source> - <translation type="unfinished">Beenden</translation> + <translation>Beenden</translation> </message> <message> <source>MythTV wants to record "%1" on %2 in %d seconds. Do you want to:</source> - <translation type="unfinished"></translation> + <translation>MythTV wird "%1" auf %2 in %d Sekunden aufnehmen. Was möchten Sie tun?</translation> </message> <message> <source>Let them record and go back to the Main Menu</source> - <translation type="unfinished"></translation> + <translation>Aufnehmen und ins Hauptmenü springen</translation> </message> <message> <source>Record it later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Später aufnehmen, Ich möchte fernsehen</translation> </message> <message> <source>Record them later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Später aufnehmen, Ich möchte fernsehen</translation> </message> <message> <source>Don't let them record, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Nicht aufnehmen, Ich möchte fernsehen</translation> </message> <message> <source>You should have gotten a channel lock by now. You can continue to wait for a signal, or you can change the channels with %1 or %2, change video source (%3), inputs (%4), etc.</source> - <translation type="unfinished"></translation> + <translation>Sie sollten schon eine Kanalverriegelung bekommen haben. Sie können weiter auf ein Signal warten oder sie können den Kanal mit %1 oder %2 wechseln, die Video Quelle wechseln (%3), Eingänge wechseln (%4), etc.</translation> </message> <message> <source>Yes</source> - <translation type="unfinished">Ja</translation> + <translation>Ja</translation> </message> <message> <source>Adjust Fill</source> - <translation type="unfinished"></translation> + <translation>Füllung Einstellen</translation> </message> <message> <source>Switch Input</source> - <translation type="unfinished"></translation> + <translation>Eingang wechseln</translation> </message> <message> <source>C</source> @@ -12356,23 +12514,35 @@ </message> <message> <source>Switch Source</source> - <translation type="unfinished"></translation> + <translation>Quelle wechseln</translation> </message> <message> <source>Upcoming Recordings</source> - <translation type="unfinished"></translation> + <translation>Nächste Aufnahmen</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fehler</translation> </message> <message> <source>You are exiting %1</source> - <translation type="unfinished"></translation> + <translation>Sie verlassen %1</translation> </message> <message> <source>Exit %1</source> - <translation type="unfinished"></translation> + <translation>Beende %1</translation> + </message> + <message> + <source>No</source> + <translation>Nein</translation> + </message> + <message> + <source>MythTV is using all inputs for Live TV?</source> + <translation>MythTV benutzt alle Eingänge für LiveTV?</translation> + </message> + <message> + <source>MythTV has no capture cards defined. Please run the mythtv-setup program.</source> + <translation>MythTV hat keine TV-Karten definiert. Bitte starten Sie das mythtv-setup Programm.</translation> </message> </context> <context> @@ -12495,23 +12665,23 @@ </message> <message> <source>Select a recording to permanently erase</source> - <translation>Welche Aufnahme soll gelöscht werden</translation> + <translation>Wählen Sie die Aufnahme, die gelöscht werden soll</translation> </message> <message> <source>Select a recording to watch</source> - <translation>Welche Aufnahme möchten Sie sehen</translation> + <translation>Wählen Sie eine Aufnahme</translation> </message> <message> <source>Select a recording to permanently erase:</source> - <translation>Welche Aufnahme soll gelöscht werden:</translation> + <translation>Wählen Sie die Aufnahme, die gelöscht werden soll:</translation> </message> <message> <source>Select a recording to permanently erase.</source> - <translation>Welche Aufnahme soll gelöscht werden:</translation> + <translation>Wählen Sie die Aufnahme, die gelöscht werden soll.</translation> </message> <message> <source>Select a recording to watch.</source> - <translation>Welche Aufnahme möchten Sie sehen.</translation> + <translation>Wählen Sie eine Aufnahme.</translation> </message> <message> <source>Description:</source> @@ -12578,7 +12748,7 @@ <name>TransportList</name> <message> <source>New Transport</source> - <translation>Neuer Transport</translation> + <translation>Neuer Transponder</translation> </message> </context> <context> @@ -12609,26 +12779,26 @@ </message> <message> <source>Multiplex Editor</source> - <translation type="unfinished"></translation> + <translation>Multiplex Editor</translation> </message> </context> <context> <name>UIListBtnType</name> <message> <source>Search</source> - <translation type="unfinished">Suche</translation> + <translation>Suche</translation> </message> <message> <source>Starts with text</source> - <translation type="unfinished">Beginnt mit</translation> + <translation>Beginnt mit</translation> </message> <message> <source>Contains text</source> - <translation type="unfinished">Enthält</translation> + <translation>Enthält</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Abbrechen</translation> + <translation>Abbrechen</translation> </message> </context> <context> @@ -12750,18 +12920,18 @@ </message> <message> <source>Conflict Today</source> - <translation type="unfinished"></translation> + <translation>Überschneidung Heute</translation> </message> <message> <source>Conflict </source> - <translation type="unfinished"></translation> + <translation>Überschneidung </translation> </message> </context> <context> <name>WelcomeDialog</name> <message> <source>Start Frontend</source> - <translation>Frontend starten</translation> + <translation>Hauptmenü anzeigen</translation> </message> <message> <source>Cannot connect to server!</source> @@ -12791,7 +12961,7 @@ </message> <message> <source>MythTV is about to start recording.</source> - <translation>MythTV wird bald eine Aufnahme starten.</translation> + <translation>MythTV wird gleich eine Aufnahme starten.</translation> </message> <message> <source>MythTV is busy recording.</source> @@ -12827,15 +12997,15 @@ </message> <message> <source>Menu</source> - <translation>Menu</translation> + <translation>Menü</translation> </message> <message> <source>Unlock Shutdown</source> - <translation>Runterfahren erlauben</translation> + <translation>Ausschalten erlauben</translation> </message> <message> <source>Lock Shutdown</source> - <translation>Runterfahren verhindern</translation> + <translation>Ausschalten verhindern</translation> </message> <message> <source>Run mythfilldatabase</source> @@ -12843,7 +13013,7 @@ </message> <message> <source>Shutdown Now</source> - <translation>Jetzt herunterfahren</translation> + <translation>Jetzt ausschalten</translation> </message> <message> <source>Exit</source> @@ -12859,7 +13029,7 @@ </message> <message> <source>Cannot shutdown because MythTV is about to start recording</source> - <translation>Kein Herunterfahren möglich, da MythTV bald eine Aufnahme beginnt.</translation> + <translation>Kein Herunterfahren möglich, da MythTV gleich eine Aufnahme beginnt.</translation> </message> <message> <source>Cannot shutdown because MythTV is about to start a wakeup/shutdown period.</source> @@ -12871,11 +13041,11 @@ </message> <message> <source>to</source> - <translation type="unfinished"></translation> + <translation>bis</translation> </message> <message> <source>MythTV has running or pending jobs.</source> - <translation type="unfinished"></translation> + <translation>MythTV hat anstehende Aufgaben.</translation> </message> </context> <context> Dateien mythtv-0.21/i18n/mythfrontend_dk.qm und mythtv/i18n/mythfrontend_dk.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_dk.ts mythtv/i18n/mythfrontend_dk.ts --- mythtv-0.21/i18n/mythfrontend_dk.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_dk.ts 2008-04-20 03:22:32.000000000 +0200 @@ -1500,7 +1500,7 @@ </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> - <translation>Indtast gruppenavn eller tryk SELECT for at indtaste teksten vha. On-Screen-Tastaturet</translation> + <translation>Indtast gruppenavn eller tryk SELECT for at indtaste teksten vha. On-Screen-tastaturet</translation> </message> <message> <source>(Create new group)</source> @@ -1603,11 +1603,11 @@ </message> <message> <source>Change Group View</source> - <translation>Ændre gruppe Visning</translation> + <translation>Ændre gruppevisning</translation> </message> <message> <source>Change Group Password</source> - <translation>Ændre gruppe password</translation> + <translation>Ændre gruppekodeord</translation> </message> <message> <source>Change Recording Group</source> @@ -1627,11 +1627,11 @@ </message> <message> <source>Old Password:</source> - <translation>Gammelt password:</translation> + <translation>Gammelt kodeord:</translation> </message> <message> <source>New Password:</source> - <translation>Nyt password:</translation> + <translation>Nyt kodeord:</translation> </message> <message> <source>, %1 GB free</source> @@ -1707,7 +1707,7 @@ </message> <message> <source>Job Options</source> - <translation>Job muligheder</translation> + <translation>Jobmuligheder</translation> </message> <message> <source>Shuffle Play</source> @@ -1739,7 +1739,7 @@ </message> <message> <source>Toggle playlist for this Recording Group</source> - <translation>Skift playliste for denne optage gruppe</translation> + <translation>Skift playliste for denne optagegruppe</translation> </message> <message> <source>Toggle playlist for this recording</source> @@ -1787,7 +1787,7 @@ </message> <message> <source>Change Group Filter</source> - <translation>Ændre gruppe filtre</translation> + <translation>Ændre gruppefilter</translation> </message> <message> <source>Add this Group to Playlist</source> @@ -1827,7 +1827,7 @@ </message> <message> <source>Select Group Filter</source> - <translation>Vælg gruppe filter</translation> + <translation>Vælg gruppefilter</translation> </message> <message> <source>item</source> @@ -1835,7 +1835,7 @@ </message> <message> <source>items</source> - <translation>punkter</translation> + <translation>poster</translation> </message> <message> <source>Groups</source> @@ -1875,11 +1875,11 @@ </message> <message> <source>Change Playback Group</source> - <translation>Ændre afspilnings gruppe</translation> + <translation>Ændre afspilningsgruppe</translation> </message> <message> <source>Group View</source> - <translation>Gruppe visning</translation> + <translation>Gruppevisning</translation> </message> <message> <source>Recording Group</source> @@ -1887,7 +1887,7 @@ </message> <message> <source>Playback Group</source> - <translation>Afspilnings gruppe</translation> + <translation>Afspilningsgruppe</translation> </message> <message> <source>Recording Title</source> @@ -1895,7 +1895,7 @@ </message> <message> <source>Group Password</source> - <translation>Gruppe kode</translation> + <translation>Gruppekodeord</translation> </message> <message> <source>Show Program Details</source> @@ -1935,7 +1935,7 @@ </message> <message> <source>Watch List</source> - <translation type="unfinished"></translation> + <translation>Endnu ikke set</translation> </message> <message> <source>There are no recordings in your current view</source> @@ -1971,7 +1971,7 @@ </message> <message> <source>Show Watch List</source> - <translation type="unfinished"></translation> + <translation>Vis 'Endnu ikke set'-liste</translation> </message> <message> <source>Show Searches</source> @@ -2047,14 +2047,14 @@ </message> <message> <source>Allow this program to re-record</source> - <translation type="unfinished"></translation> + <translation>Tillad at dette program optages igen</translation> </message> </context> <context> <name>PlaybackProfileItemConfig</name> <message> <source>Match Criteria</source> - <translation type="unfinished"></translation> + <translation>Søgekriterier</translation> </message> <message> <source>W</source> @@ -2098,7 +2098,7 @@ </message> <message> <source>Max CPUs</source> - <translation type="unfinished"></translation> + <translation>Max cpu'er</translation> </message> <message> <source>Fallback Deinterlacer</source> @@ -2106,11 +2106,11 @@ </message> <message> <source>Maximum number of CPU cores used for decoding.</source> - <translation type="unfinished"></translation> + <translation>Maksimalt antal cpu cores der kan bruges til dekodning.</translation> </message> <message> <source> Multithreaded decoding disabled-only one CPU will be used, please recompile with --enable-ffmpeg-pthreads to enable.</source> - <translation type="unfinished"></translation> + <translation> Multitråded dekodning er deaktiveret - kun en cpu bliver brugt; vær venlig at rekompilere med --enable-ffmpeg-threads for at aktivere.</translation> </message> </context> <context> @@ -3172,7 +3172,7 @@ </message> <message> <source>Luma filter</source> - <translation>Luma filter</translation> + <translation>Luma-filter</translation> </message> <message> <source>Lower is better.</source> @@ -3324,7 +3324,7 @@ </message> <message> <source>Custom Filters</source> - <translation>Bruger filtre</translation> + <translation>Brugerfiltre</translation> </message> <message> <source>Advanced Filter configuration, format: @@ -3614,7 +3614,7 @@ </message> <message> <source>ProfileGroup</source> - <translation>Profil gruppe</translation> + <translation>Profilgruppe</translation> </message> <message> <source>Transcoders</source> @@ -3722,7 +3722,7 @@ </message> <message> <source>Hue</source> - <translation>Hue</translation> + <translation>Lød</translation> </message> <message> <source>Frequency</source> @@ -3810,7 +3810,7 @@ </message> <message> <source>Profile Group Name</source> - <translation>Profil gruppe navn</translation> + <translation>Navn på profilgruppe</translation> </message> <message> <source>Hostname</source> @@ -3962,7 +3962,7 @@ </message> <message> <source>External channel change command</source> - <translation>Ekstern kommando til kanalskift$</translation> + <translation>Ekstern kommando til kanalskift</translation> </message> <message> <source>Preset tuner to channel</source> @@ -4110,7 +4110,7 @@ </message> <message> <source>Wakeup time format</source> - <translation>Startop tidsformatet.</translation> + <translation>Tidsformat for opvågning</translation> </message> <message> <source>The format of the time string passed to the 'setWakeuptime Command' as $time. See QT::QDateTime.toString() for details. Set to 'time_t' for seconds since epoch.</source> @@ -4166,7 +4166,7 @@ </message> <message> <source>Pre Shutdown check-command</source> - <translation type="unfinished"></translation> + <translation>Check-kommando før nedlukning</translation> </message> <message> <source>Block shutdown before client connected</source> @@ -4202,11 +4202,11 @@ </message> <message> <source>Password required to view all recordings</source> - <translation>Password som skal bruges til at vise optagelser</translation> + <translation>Kodeord som skal bruges til at vise optagelser</translation> </message> <message> <source>If given, a password must be entered to view the complete list of all recordings.</source> - <translation>Hvis der er et password, så skal det tastes for at se hele listen med optagelser.</translation> + <translation>Hvis der er et kodeord, så skal det indtastes for at se hele listen med optagelser.</translation> </message> <message> <source>View Recordings</source> @@ -4310,7 +4310,7 @@ </message> <message> <source>If there are more than this number of entries for a module, the oldest log entries will be deleted to reduce the count to this number. Set to 0 to disable.</source> - <translation type="unfinished"></translation> + <translation>Hvis der er flere log-linier for et modul end angivet her, vil de ældste linier blive slettet så antallet af linier ikke er større end den angivne værdi. Sæt til 0 for at deaktivere.</translation> </message> <message> <source>Automatic Log Cleaning Enabled</source> @@ -4490,7 +4490,7 @@ </message> <message> <source>Password</source> - <translation>Kode</translation> + <translation>Kodeord</translation> </message> <message> <source>Do not adjust volume</source> @@ -4602,15 +4602,15 @@ </message> <message> <source>Filters to be used when recording from this channel. Not used with hardware encoding cards.</source> - <translation>Filtre som kan bruges når der optages fra denne kanal. Brugt ikke ved hardware enkodnings kort.</translation> + <translation>Filtre til brug ved optagelse fra denne kanal. Bruges ikke ved kort der har hardware-enkodning.</translation> </message> <message> <source>Playback filters</source> - <translation>Afspilnings filtre</translation> + <translation>Afspilningsfiltre</translation> </message> <message> <source>Filters to be used when recordings from this channel are viewed. Start with a plus to append to the global playback filters.</source> - <translation>Filtre som skal bruges når der vises optagelser fra denne kanal. Start med et plus for tilføje til de globale afspilnings filtre.</translation> + <translation>Filtre som skal bruges når der vises optagelser fra denne kanal. Start med et plus for at tilføje til de globale afspilningsfiltre.</translation> </message> <message> <source>Override Recording</source> @@ -4694,7 +4694,7 @@ </message> <message> <source>This command is executed right after starting the BE. As a parameter '$status' is replaced by either 'auto' if the machine was started automatically or 'user' if a user switched it on.</source> - <translation>Den kommando udføres umiddelbart efter start af backend. Parameteren '$status' erstattes af enten 'auto' hvis maskinen blev startet automatisk or 'user' hvis en bruger tændte den.</translation> + <translation>Denne kommando udføres umiddelbart efter start af backend. Parameteren '$status' erstattes af enten 'auto' hvis maskinen blev startet automatisk or 'user' hvis en bruger tændte den.</translation> </message> <message> <source>Title Search</source> @@ -4765,7 +4765,7 @@ </message> <message> <source>Create New Recording Group</source> - <translation>Opret ny optage gruppe</translation> + <translation>Opret ny optagegruppe</translation> </message> <message> <source>Store in the "%1" recording group</source> @@ -4777,11 +4777,11 @@ </message> <message> <source>Select Recording Group</source> - <translation>Vælg optage gruppe</translation> + <translation>Vælg optagegruppe</translation> </message> <message> <source>Create a new recording group</source> - <translation>Opret ny optage gruppe</translation> + <translation>Opret ny optagegruppe</translation> </message> <message> <source>Program details</source> @@ -4845,15 +4845,15 @@ </message> <message> <source>Start in Title section</source> - <translation>Start i title sektionen</translation> + <translation>Start i titel-sektionen</translation> </message> <message> <source>If enabled, the selector highlight will start on the Program titles window, otherwise the selector will default to the recordings.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil markøren starte i Titel-vinduet, ellers vil den starte i optagelserne.</translation> </message> <message> <source>Show group summary</source> - <translation>Vis gruppe total</translation> + <translation>Vis gruppetotal</translation> </message> <message> <source>This determines the method used by MythTV to detect when commercials start and end. You must have 'Automatically Flag Commercials' enabled to use anything other than 'Blank Frame'.</source> @@ -4877,7 +4877,7 @@ </message> <message> <source>Enable stricter Commercial Detection code. Disable if some commercials are not being detected.</source> - <translation>Aktivér strengere Reklame sporings kode. Slå den fra hvis nogle reklamer ikke bliver sporet.</translation> + <translation>Aktivér strengere reklamedetektions-kode. Slå den fra hvis nogle reklamer ikke bliver fundet.</translation> </message> <message> <source>When using Blank Frame Detection and Auto-Flagging, include blank frames following commercial breaks as part of the commercial break.</source> @@ -4889,7 +4889,7 @@ </message> <message> <source>If set, MythTV will act like a commercial begins this many seconds early. This can be useful when commercial notification is used in place of automatic skipping.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil MythTV opføre sig som om reklamer starter dette antal sekunder for tidligt. Dette kan være nyttigt hvis du bruger notifikation af reklamer i stedet for automatisk overspringning.</translation> </message> <message> <source>When enabled, any newly recorded programs will be marked as eligible for Auto-Expiration. Existing recordings will keep their current value.</source> @@ -4901,11 +4901,11 @@ </message> <message> <source>If enabled, fast forward and rewind continue after the key is released. Pressing the key again increases the fast forward or rewind speed. The alternate fast forward and rewind keys always behave in this way.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil frem- og tilbagespoling fortsætte efter at tasten er sluppet. Ved at trykke på tasten igen øges frem- eller tilbagespolingshastigheden. De alternative frem- og tilbagespolingstaster opfører sig altid på denne måde.</translation> </message> <message> <source>If enabled, pressing the sticky rewind key in fast forward mode switches to rewind mode, and vice versa. If disabled, it will decrease the current speed or switch to play mode if the speed can't be decreased further.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil et tryk på en 'sticky' tilbagespolingsknap mens der spoles fremad skifte til tilbagespoling, og omvendt. Hvis dette er deaktiveret, vil et tryk reducere hastigheden eller skifte til afspilning hvis hastigheden ikke kan reduceres yderligere.</translation> </message> <message> <source>Always display Closed Captioning</source> @@ -4913,7 +4913,7 @@ </message> <message> <source>If enabled, captions will be displayed when playing back recordings or watching live TV. Closed Captioning can be turned on or off by pressing "T" during playback.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vises undertekster ved afspilning af optagelser samt i LiveTV. Undertekster kan slås til og fra ved at trykke 'T' under afspilning.</translation> </message> <message> <source>If enabled, Browse mode will automatically be activated whenever you use Channel UP/DOWN while watching Live TV.</source> @@ -4921,15 +4921,15 @@ </message> <message> <source>Automatically clear saved position on a recording when the recording is played back. If disabled, you can mark the beginning with rewind then save position.</source> - <translation type="unfinished"></translation> + <translation>Slet automatisk den gemte position i en optagelse når optagelsen afspilles. Hvis dette er deaktiveret, kan du markere begyndelsen med tilbagespolingsknappen og derefter gemme positionen.</translation> </message> <message> <source>During playback the Select key (Enter or Space) will alternate between "Position Saved" and "Position Cleared". If disabled, the Select key will save the current position for each keypress.</source> - <translation type="unfinished"></translation> + <translation>Under afspilning vil Vælg (Enter eller mellemrum) skifte mellem "Gem position" og "Slet position". Hvis dette er deaktiveret, vil Vælg gemme den aktuelle position ved hvert tastetryk.</translation> </message> <message> <source>During playback, MythTV will listen for connections from the "mythtvosd" or "mythudprelay" programs on this port. See the README in contrib/mythnotify/ for additional information.</source> - <translation type="unfinished"></translation> + <translation>Under afspilning vil MythTV lytte efter forbindelse fra "mythtvosd" or "mythudprelay" programmerne på denne port. See README-filen i contrib/mythnotify/ for yderligere information.</translation> </message> <message> <source>Display thumbnail preview images of recordings</source> @@ -4945,11 +4945,11 @@ </message> <message> <source>If enabled, the Watch Recording and Delete Recording screens will use transparency. Disable if selecting the recordings is slow due to high CPU usage.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil 'Vis optagelse' og 'Slet optagelse' skærmbillederne bruge transparens. Deaktiver hvis valg af optagelse er langsomt pga. højt CPU-forbrug.</translation> </message> <message> <source>"Fill" is the quickest shading method. "Image" is somewhat slow, but has a higher visual quality. No shading will be the fastest.</source> - <translation type="unfinished"></translation> + <translation>'Udfyld' er den hurtigste metode. 'Billede' er forholdsvis langsom, men giver en høj visuel kvalitet. Ingen skygger er det hurtigste.</translation> </message> <message> <source>System Exit key</source> @@ -4993,7 +4993,7 @@ </message> <message> <source>At startup, MythTV will change the Qt widget style to this setting. If "Desktop Style" is selected, MythTV will use the existing desktop setting.</source> - <translation type="unfinished"></translation> + <translation>MythTV vil ændre Qt "widget style" til dette ved start. Hvis "Skrivebord" er valgt, vil MythTV bruge den aktuelle skrivebordsindstilling.</translation> </message> <message> <source>Time limit for ATSC signal lock (msec)</source> @@ -5029,11 +5029,11 @@ </message> <message> <source>Move higher priority programs to other cards and showings when resolving conflicts. This can be used to record lower priority programs that would otherwise not be recorded, but risks missing a higher priority program if the schedule changes.</source> - <translation type="unfinished"></translation> + <translation>Flyt højprioritetsprogrammer til andre kort og visninger under løsning af konflikter. Dette kan bruges til at optage programmer med lavere prioritet som måske ellers ikke ville blive optaget, men giver risiko for at misse et program med højere prioritet hvis programoversigten ændres.</translation> </message> <message> <source>If enabled, the Select key will change the channel while using the program guide during live TV. If disabled, the select key will bring up the recording options screen.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil Vælg-tasten ændre kanal når du bruger programoversigten i LiveTV. Hvis dette er deaktiveret, vil Vælg vise indstillinger for optagelse.</translation> </message> <message> <source>If the option to use Select to change the channel is on, pressing Select on a show that is at least this many minutes into the future will schedule a recording.</source> @@ -5073,7 +5073,7 @@ </message> <message> <source>This enables the periodic cleanup of the events stored in the Myth database (see "Log MythTV events to database" on the previous page).</source> - <translation type="unfinished"></translation> + <translation>Dette aktiverer regelmæssig oprydning af hændelser gemt i MythTV-databasen (se "Skriv MythTV loglinier i databasen" på den foregående side).</translation> </message> <message> <source>The number of days between log cleanup runs.</source> @@ -5081,7 +5081,7 @@ </message> <message> <source>This starts the program guide immediately upon starting to watch Live TV.</source> - <translation>Hvis aktiv, startes program guiden med det samme at der startes for Live TV.</translation> + <translation>Hvis aktiv, startes program guiden med det samme der startes for Live TV.</translation> </message> <message> <source>Directed By</source> @@ -5405,7 +5405,7 @@ </message> <message> <source>When looking for new jobs to process, the Job Queue will wait this long between checks.</source> - <translation>Når der kigges efter nye jobs, vil der ventes dette antal senkunder mellem hver check.</translation> + <translation>Når der ledes efter nye jobs, vil jobkøen vente dette antal sekunder mellem hvert check.</translation> </message> <message> <source>This setting controls approximately how much CPU jobs in the queue may consume. On 'High', all available CPU time may be used which could cause problems on slower systems.</source> @@ -5619,7 +5619,7 @@ </message> <message> <source>Video in the main window will skip this many frames for each frame drawn. Set to 0 to show every frame.</source> - <translation type="unfinished"></translation> + <translation>Video i hovedvinduet vil skippe dette antal rammer for hver ramme der vises. Sæt til 0 for at vise alle rammer.</translation> </message> <message> <source>Opacity</source> @@ -5627,35 +5627,35 @@ </message> <message> <source>The opacity of the main window. Set to 100 for completely opaque, set to 0 for completely transparent.</source> - <translation type="unfinished"></translation> + <translation>Gennemsigtigheden af hovedvinduet. Sæt til 100 for ingen gennemsigtighed og til 0 for helt gennemsigtigt.</translation> </message> <message> <source>Video in floating window</source> - <translation type="unfinished"></translation> + <translation>Video i flydende vindue</translation> </message> <message> <source>If checked, video will be displayed in a floating window. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil video blive vist i et flydende vindue. Kun gyldig hvis "Brug GUI-størrelse for TV-afspilning" og "Kør frontend i et vindue" er aktiveret.</translation> </message> <message> <source>Video in the floating window will skip this many frames for each frame drawn. Set to 0 to show every frame.</source> - <translation type="unfinished"></translation> + <translation>Video i det flydende vindue vil skippe dette antal rammer for hver ramme der vises. Sæt til 0 for at vise alle rammer.</translation> </message> <message> <source>The opacity of the floating window. Set to 100 for completely opaque, set to 0 for completely transparent.</source> - <translation type="unfinished"></translation> + <translation>Gennemsigtigheden af det flydende vindue. Sæt til 100 for ingen gennemsigtighed og til 0 for helt gennemsigtigt.</translation> </message> <message> <source>Video in the dock</source> - <translation type="unfinished"></translation> + <translation>Video i dokken</translation> </message> <message> <source>If checked, video will be displayed in the application's dock icon. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil video blive vist i applikationens dok-ikon. Kun gyldig hvis "Brug GUI-størrelse for TV-afspilning" og "Kør frontend i et vindue" er aktiveret.</translation> </message> <message> <source>Video in the dock icon will skip this many frames for each frame drawn. Set to 0 to show every frame.</source> - <translation type="unfinished"></translation> + <translation>Video i dok-ikonet vil skippe dette antal rammer for hver ramme der vises. Sæt til 0 for at vise alle rammer.</translation> </message> <message> <source>Video on the desktop</source> @@ -5663,11 +5663,11 @@ </message> <message> <source>If checked, video will be displayed on the desktop, behind the Finder icons. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil video blive vist på skrivebordet, bag Finder-ikonerne. Kun gyldig hvis "Brug GUI-størrelse for TV-afspilning" og "Kør frontend i et vindue" er aktiveret.</translation> </message> <message> <source>Video on the desktop will skip this many frames for each frame drawn. Set to 0 to show every frame.</source> - <translation type="unfinished"></translation> + <translation>Video på skrivebordet vil skippe dette antal rammer for hver ramme der vises. Sæt til 0 for at vise alle rammer.</translation> </message> <message> <source>Mac OS X video settings</source> @@ -5699,7 +5699,7 @@ </message> <message> <source>Job Queue Actions:</source> - <translation>Job kø muligheder:</translation> + <translation type="unfinished">Valg for jobkø:</translation> </message> <message> <source>Resume</source> @@ -5843,7 +5843,7 @@ </message> <message> <source>The number of retries to wake the server before the frontend gives up.</source> - <translation type="unfinished">Antal forsøg på at vække serveren inden frontenden giver op.</translation> + <translation>Antal forsøg på at vække serveren inden frontenden giver op.</translation> </message> <message> <source>Wake command</source> @@ -5859,7 +5859,7 @@ </message> <message> <source>If checked, QuickTime will correct the gamma of the video to match your monitor. Turning this off can save some CPU cycles.</source> - <translation type="unfinished">Hvis aktiveret, vil QuickTime korrigere videoens gammaværdi så den matcher din monitor. At deaktivere dette kan reducere CPU-belastningen.</translation> + <translation>Hvis aktiveret, vil QuickTime korrigere videoens gammaværdi så den matcher din monitor. At deaktivere dette kan reducere CPU-belastningen.</translation> </message> <message> <source>Recording Host</source> @@ -5931,7 +5931,7 @@ </message> <message> <source>this recording rule is inactive.</source> - <translation type="unfinished">denne optagelse er ikke aktiv.</translation> + <translation>denne optagelsesregel er ikke aktiv.</translation> </message> <message> <source>Find ID</source> @@ -6023,11 +6023,11 @@ </message> <message> <source>The HD device ringbuffer allows the backend to weather moments of stress. The larger the ringbuffer, the longer the moments of stress can be. However, setting the size too large can cause swapping, which is detrimental.</source> - <translation type="unfinished"></translation> + <translation>HD-ringbufferen tillader backend at håndtere stor spidsbelastning. Jo større buffer, jo længere tids spidsbelastning kan håndteres. Imidlertid kan en for stor buffer give anledning til swapping, som giver dårligere performance.</translation> </message> <message> <source>Find One, Find Weekly and Find Daily recording types will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation>Find Enkelt, Find Ugentlig og Find Daglig optagelsestyper vil få denne yderligere prioritetsværdi.</translation> </message> <message> <source>Follow symbolic links when deleting files</source> @@ -6184,7 +6184,7 @@ </message> <message> <source>If enabled, you will be able to press numbers and jump the selection to whatever channel you enter.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, kan du indtaste tal og hoppe til en vilkårlig kanal.</translation> </message> <message> <source>Select your preferred language</source> @@ -6198,12 +6198,13 @@ </message> <message> <source>Polarity (Option has no default)</source> - <translation type="unfinished"></translation> + <translation>Polaritet (ingen standardværdi)</translation> </message> <message> <source>Inversion (Default: Auto): Most cards can autodetect this now, so leave it at Auto unless it won't work.</source> - <translation type="unfinished"></translation> + <translation>Inversion (Standard: Auto): +De fleste kort kan autodetektere dette, så vælg Auto medmindre det ikke virker.</translation> </message> <message> <source>Bandwidth (Default: Auto) @@ -6217,7 +6218,7 @@ </message> <message> <source>Constellation (Default: Auto)</source> - <translation type="unfinished"></translation> + <translation>Konstellation (Standard: Auto)</translation> </message> <message> <source>Forward Error Correction (Default: Auto)</source> @@ -6241,7 +6242,7 @@ </message> <message> <source>Hierarchy (Default: Auto)</source> - <translation type="unfinished"></translation> + <translation>Hierarki (Standard: Auto)</translation> </message> <message> <source>CPU friendly preview of recordings</source> @@ -6257,7 +6258,7 @@ </message> <message> <source>The time (in seconds) that the menu will remain visible after navigation.</source> - <translation type="unfinished"></translation> + <translation>Den tid (i sekunder) som menuen forbliver synlig efter navigation.</translation> </message> <message> <source>Enable realtime priority threads</source> @@ -6265,7 +6266,7 @@ </message> <message> <source>When running mythfrontend with root privileges, some threads can be given enhanced priority. Disable this if mythfrontend freezes during video playback.</source> - <translation type="unfinished"></translation> + <translation>Når mythfrontend køres med root-privilegier, kan nogle tråde tildeles forjhøjet prioritet. Deaktiver dette hvis frontend fryser under afspilning.</translation> </message> <message> <source>Enable LCD device</source> @@ -6273,11 +6274,11 @@ </message> <message> <source>This global setting allows the recorder to start before the scheduled start time. It does not affect the scheduler. It is ignored when two shows have been scheduled without enough time in between.</source> - <translation type="unfinished"></translation> + <translation>Denne globale indstilling tillader optageren at begynde før den planlagte starttid. Den påvirker ikke planlægningen. Den ignoreres når to udsendelser er planlagt uden tilstrækkelig tid imellem dem.</translation> </message> <message> <source>This global setting allows the recorder to record beyond the scheduled end time. It does not affect the scheduler. It is ignored when two shows have been scheduled without enough time in between.</source> - <translation type="unfinished"></translation> + <translation>Denne globale indstilling tillader optageren at optage efter den planlagte sluttid. Den påvirker ikke planlægningen. Den ignoreres når to udsendelser er planlagt uden tilstrækkelig tid imellem dem.</translation> </message> <message> <source>Resize Video while transcoding</source> @@ -6357,7 +6358,7 @@ </message> <message> <source>Standard</source> - <translation type="unfinished">Standard</translation> + <translation>Standard</translation> </message> <message> <source>Digital TV standard. @@ -6395,7 +6396,7 @@ </message> <message> <source>DVB Transport</source> - <translation type="unfinished">DVB Transport</translation> + <translation>DVB-transport</translation> </message> <message> <source>Transport Options</source> @@ -6411,7 +6412,7 @@ </message> <message> <source>Run on the specified screen or spanning all screens.</source> - <translation type="unfinished"></translation> + <translation>Kør på den angivne skærm eller brug alle skærme.</translation> </message> <message> <source>In X</source> @@ -6419,7 +6420,7 @@ </message> <message> <source>Horizontal resolution of video which needs a special output resolution.</source> - <translation type="unfinished"></translation> + <translation>Horisontal opløsning når der vises video med en bestemt opløsning.</translation> </message> <message> <source>In Y</source> @@ -6427,7 +6428,7 @@ </message> <message> <source>Vertical resolution of video which needs a special output resolution.</source> - <translation type="unfinished"></translation> + <translation>Vertikal opløsning når der vises video med en bestemt opløsning.</translation> </message> <message> <source>GUI</source> @@ -6435,7 +6436,7 @@ </message> <message> <source>Resolution of screen when not watching a video.</source> - <translation>Skærmopløsning når ikke ses video.</translation> + <translation>Skærmopløsning når der ikke ses video.</translation> </message> <message> <source>Default screen resolution when watching a video.</source> @@ -6443,7 +6444,7 @@ </message> <message> <source>Screen resolution when watching a video at a specific resolution.</source> - <translation>Opløsning når der vises video med en bestem opløsning.</translation> + <translation>Opløsning når der vises video med en bestemt opløsning.</translation> </message> <message> <source>Video Output</source> @@ -6455,11 +6456,11 @@ </message> <message> <source>Default refresh rate when watching a video.</source> - <translation>Standard opdatering frekvens når der vises video.</translation> + <translation>Standard opdateringsfrekvens når der vises video.</translation> </message> <message> <source>Refresh rate when watching a video at a specific resolution.</source> - <translation>Opdatering frekvens når en video vises i en bestemt opsløsning.</translation> + <translation>Opdateringsfrekvens når video vises i en bestemt opløsning.</translation> </message> <message> <source>Rate</source> @@ -6467,7 +6468,7 @@ </message> <message> <source>Aspect ratio when watching a video.</source> - <translation>Aspekt når der vises en video.</translation> + <translation>Aspektforhold når der vises en video.</translation> </message> <message> <source>Aspect Ratio when watching a video at a specific resolution.</source> @@ -6491,11 +6492,11 @@ </message> <message> <source>Failed to Reinit Video.</source> - <translation type="unfinished"></translation> + <translation>Kunne ikke geninitialisere video.</translation> </message> <message> <source>And, never ask again.</source> - <translation type="unfinished">og spørg aldrig igen.</translation> + <translation>og spørg aldrig igen.</translation> </message> <message> <source>And, don't ask again in this session.</source> @@ -6609,51 +6610,51 @@ </message> <message> <source>Default group filter to apply on the View Recordings screen.</source> - <translation type="unfinished">Standard filter som skal bruges på Afspil Optagelse skærmen.</translation> + <translation>Standard-filter som skal bruges på Afspil Optagelse skærmen.</translation> </message> <message> <source>Save current group filter when changed</source> - <translation>Husk det aktive gruppe filter når det ændres</translation> + <translation>Gem det aktive gruppefilter når det ændres</translation> </message> <message> <source>Remember the last selected filter instead of displaying the default filter whenever you enter the playback screen.</source> - <translation>Husk det sidst brugte filter i stedet for altid at starte med standard filteret.</translation> + <translation>Husk det sidst brugte filter i stedet for altid at starte med standardfilteret.</translation> </message> <message> <source>Default View</source> - <translation type="unfinished">Standard visning></translation> + <translation>Standard visning</translation> </message> <message> <source>Show Titles only</source> - <translation type="unfinished">Vis kun titler</translation> + <translation>Vis kun titler</translation> </message> <message> <source>Show Titles and Categories</source> - <translation type="unfinished">Vis titler og kategorier</translation> + <translation>Vis titler og kategorier</translation> </message> <message> <source>Show Titles, Categories, and Recording Groups</source> - <translation type="unfinished">Vis titler, kategorier og optagelses grupper</translation> + <translation>Vis titler, kategorier og optagelsesgrupper</translation> </message> <message> <source>Show Titles and Recording Groups</source> - <translation type="unfinished">Vis titler og optagelses grupper</translation> + <translation>Vis titler og optagelsesgrupper</translation> </message> <message> <source>Show Categories only</source> - <translation type="unfinished">Vis kun kategorier</translation> + <translation>Vis kun kategorier</translation> </message> <message> <source>Show Categories and Recording Groups</source> - <translation type="unfinished">Vis kategorier og optagelses grupper</translation> + <translation>Vis kategorier og optagelsesgrupper</translation> </message> <message> <source>Show Recording Groups only</source> - <translation type="unfinished">Vis kun optagelses grupper</translation> + <translation>Vis kun optagelsesgrupper</translation> </message> <message> <source>Select what type of grouping to show on the Watch Recordings screen by default.</source> - <translation type="unfinished">Vælg grupperingen der skal vises som standard på Afspil optagelser skærmen.</translation> + <translation>Vælg grupperingen der skal vises som standard på Afspil optagelser skærmen.</translation> </message> <message> <source>Show filter name instead of "All Programs"</source> @@ -6661,7 +6662,7 @@ </message> <message> <source>Use the name of the display filter currently applied in place of the term "All Programs" in the playback screen.</source> - <translation>Brug navnet på det aktive filteret alle steder hvor der ellers ville stå "Alle programmer" på afspilningsskærmen.</translation> + <translation>Brug navnet på det aktive filter alle steder hvor der ellers ville stå "Alle programmer" på afspilningsskærmen.</translation> </message> <message> <source>Commercial Flag New Recordings</source> @@ -6673,7 +6674,7 @@ </message> <message> <source>This is the default value used for the Auto-Transcode setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation>Dette er standardværdien for Automatisk Transkodning-indstillingen når en ny optagelsesregel oprettes.</translation> </message> <message> <source>Default Transcoder</source> @@ -6681,7 +6682,7 @@ </message> <message> <source>This is the default value used for the transcoder setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation>Dette er standardværdien for Transkoder-indstillingen når en ny optagelsesregel oprettes.</translation> </message> <message> <source>Run User Job #%1 On New Recordings</source> @@ -6753,7 +6754,7 @@ </message> <message> <source>MythTV can use the PVR-350's TV out and MPEG decoder for high quality playback. This requires that the ivtv-fb kernel module is also loaded and configured properly.</source> - <translation type="unfinished"></translation> + <translation>MythTV kan bruge TV out og MPEG-dekoderen på et PVR-350 kort for højkvalitets afspilning. Dette kræver yderligere at ivtv-fb kerne-modulet er indlæst og konfigureret korrekt.</translation> </message> <message> <source>Normally, PVR-350 audio is looped into a sound card; here you can indicate when that is not the case. MythTV cannot control TV volume when this option is checked.</source> @@ -6820,7 +6821,10 @@ Please make sure that your ui.xml is valid. Myth will now exit.</source> - <translation type="unfinished"></translation> + <translation>MythTV kunne ikke finde selector-objektet i dit tema. +Sørg venligst for at din ui.xml er gyldig. + +MythTV vil nu afslutte.</translation> </message> <message> <source>Recording Unavailable</source> @@ -7035,7 +7039,7 @@ </message> <message> <source>Always prompt for initial group filter</source> - <translation>Spørg altid efter start gruppe filter</translation> + <translation>Spørg altid efter initielt gruppefilter</translation> </message> <message> <source>Always prompt the user for the initial filter to apply when entering the Watch Recordings screen.</source> @@ -7239,7 +7243,7 @@ </message> <message> <source>How to treat existing channels.</source> - <translation type="unfinished"></translation> + <translation>Hvordan eksisterende kanaler skal behandles.</translation> </message> <message> <source>Analog V4L capture card</source> @@ -7295,7 +7299,7 @@ </message> <message> <source>Set to a value less than or equal to the number of processors on the backend that will be doing the encoding.</source> - <translation type="unfinished"></translation> + <translation>Sæt til en værdi der er mindre end eller lig med det antal processorer på backenden der vil udføre enkodningen.</translation> </message> <message> <source>MPEG-2 Parameters</source> @@ -7307,23 +7311,23 @@ </message> <message> <source>libmpeg2</source> - <translation type="unfinished">libmpeg2</translation> + <translation>libmpeg2</translation> </message> <message> <source>Standard XvMC</source> - <translation type="unfinished">Stardard XvMC</translation> + <translation>Standard XvMC</translation> </message> <message> <source>VIA XvMC</source> - <translation type="unfinished">VIA XvMC</translation> + <translation>VIA XvMC</translation> </message> <message> <source>Decoder to use to play back MPEG2 video.</source> - <translation type="unfinished">Dekoder som bruges til afspilning af MPEG2 video.</translation> + <translation>Dekoder som bruges til afspilning af MPEG2 video.</translation> </message> <message> <source>Standard will use ffmpeg library.</source> - <translation type="unfinished">ffmpeg bruges som standard.</translation> + <translation>ffmpeg bruges som standard.</translation> </message> <message> <source>libmpeg2 will use mpeg2 library; this is faster on some AMD processors.</source> @@ -7331,7 +7335,7 @@ </message> <message> <source>VIA XvMC will use the VIA VLD XvMC extension.</source> - <translation type="unfinished">VIA XvMC vil bruge VIA VLD XvMC udvidelsen.</translation> + <translation>VIA XvMC vil bruge VIA VLD XvMC-udvidelsen.</translation> </message> <message> <source>Cable HRC</source> @@ -7347,7 +7351,7 @@ </message> <message> <source>Most cable systems in the United States use QAM-256 or QAM-64, but some mixed systems may use 8-VSB for over-the-air channels.</source> - <translation type="unfinished"></translation> + <translation>De fleste kabelTV-systemer i USA bruger QAM-256 or QAM-64, men nogle blandede systemer bruger 8-VSB for OTA kanaler.</translation> </message> <message> <source>Subtype</source> @@ -7511,7 +7515,7 @@ </message> <message> <source>Recording Available</source> - <translation type="unfinished"></translation> + <translation>Optagelse tilgængelig</translation> </message> <message> <source>Maximum time MythTV waits for any signal when scanning for channels.</source> @@ -7527,7 +7531,7 @@ </message> <message> <source>Period</source> - <translation type="unfinished"></translation> + <translation>Periode</translation> </message> <message> <source>start time</source> @@ -7583,7 +7587,7 @@ </message> <message> <source>Automatically set new recording rules to use this group if the title matches this regular expression. For example, "(News|CNN)" would match any title in which "News" or "CNN" appears.</source> - <translation type="unfinished"></translation> + <translation>Lad automatisk nye optagelsesregler bruge denne gruppe hvis titlen matcher dette regulære udtryk. For eksempel ville "(Nyheder|CNN)" matche enhver titel hvor "Nyheder" eller "CNN" forekommer.</translation> </message> <message> <source>Skip ahead (seconds)</source> @@ -7603,7 +7607,7 @@ </message> <message> <source>Playback Group</source> - <translation>Afspilnings gruppe</translation> + <translation>Afspilningsgruppe</translation> </message> <message> <source>Select Playback Group</source> @@ -7615,7 +7619,7 @@ </message> <message> <source>Use "%1" playback group settings</source> - <translation>Brug "%1" afspilningsgruppe opsætning</translation> + <translation>Brug opsætning fra afspilningsgruppe "%1"</translation> </message> <message> <source>If set, MythTV will automatically rewind this many seconds after performing a commercial skip.</source> @@ -7647,7 +7651,7 @@ </message> <message> <source>Adapter</source> - <translation type="unfinished"></translation> + <translation>Adapter</translation> </message> <message> <source>Presenter</source> @@ -7731,11 +7735,11 @@ </message> <message> <source>Samples are shown using today's date.</source> - <translation type="unfinished"></translation> + <translation>Prøver vises med datoen i dag.</translation> </message> <message> <source>Samples are shown using tomorrow's date.</source> - <translation type="unfinished"></translation> + <translation>Prøver vises med datoen i morgen.</translation> </message> <message> <source>Your preferred time format. You must choose a format with "AM" or "PM" in it, otherwise your time display will be 24-hour or "military" time.</source> @@ -7759,7 +7763,7 @@ </message> <message> <source>Suggested Next: </source> - <translation type="unfinished"></translation> + <translation>Foreslået næste: </translation> </message> <message> <source>, using your %1 rate of %2 Kb/sec</source> @@ -7787,7 +7791,7 @@ </message> <message> <source>Defines a period the master backend should be awake</source> - <translation type="unfinished"></translation> + <translation>Definerer en periode hvor master backend skal være vågen</translation> </message> <message> <source>Shutdown with Master Backend</source> @@ -7815,11 +7819,11 @@ </message> <message> <source>Specify either the exact frequency in kHz or a valid channel for your 'TV Format'.</source> - <translation type="unfinished"></translation> + <translation>Angiv enten den nøjagtige frekvens i kHz eller en gyldig kanal for dit "TV-format".</translation> </message> <message> <source>Value to be added to your desired frequency in kHz, for 'fine tuning'.</source> - <translation type="unfinished"></translation> + <translation>Den værdi der skal lægges til den angivne frekvens i kHz, for finindstilling.</translation> </message> <message> <source>Spain</source> @@ -7879,7 +7883,7 @@ </message> <message> <source>This determines the method used by MythTV to detect when commercials start and end.</source> - <translation type="unfinished"></translation> + <translation>Dette angiver den metode som MythTV anvender for at detektere hvor reklamer begynder og slutter.</translation> </message> <message> <source>Maximum commercial skip (in seconds)</source> @@ -7895,11 +7899,11 @@ </message> <message> <source>The number of days bonus a program gets for each priority point. This is only used when the Weighted Time/Priority Auto Expire Method is selected.</source> - <translation type="unfinished"></translation> + <translation>Antallet af bonusdage der tildeles et program for hvert prioritetspoint. Dette bruges kun når autoudløbsmetoden Vægtet tid/Prioritet er valgt.</translation> </message> <message> <source>Mac hardware acceleration</source> - <translation type="unfinished">Mac hardware acceleration</translation> + <translation>Mac hardware-acceleration</translation> </message> <message> <source>Transcoder command</source> @@ -7945,7 +7949,7 @@ </message> <message> <source>Command to run if your bios requires you to reboot to allow nvram-wakeup settings to take effect. Leave blank if your bios does not require a reboot. See the README file for more examples.</source> - <translation type="unfinished"></translation> + <translation>Kommando der køres hvis dit BIOS kræver en genstart før nvram-wakeup indstillingerne slår igennem. Lad forblive blank hvis dit BIOS ikke kræver en genstart. Se README-filen for flere eksempler.</translation> </message> <message> <source>Single LNB / Input</source> @@ -7993,7 +7997,7 @@ </message> <message> <source>Anthology</source> - <translation type="unfinished"></translation> + <translation>Antologi</translation> </message> <message> <source>Automobile</source> @@ -8017,7 +8021,7 @@ </message> <message> <source>Business</source> - <translation type="unfinished"></translation> + <translation>Forretning</translation> </message> <message> <source>Classical</source> @@ -8025,7 +8029,7 @@ </message> <message> <source>College</source> - <translation type="unfinished"></translation> + <translation>Universitet</translation> </message> <message> <source>Combat</source> @@ -8037,7 +8041,7 @@ </message> <message> <source>Commentary</source> - <translation type="unfinished"></translation> + <translation>Kommentar</translation> </message> <message> <source>Concert</source> @@ -8049,7 +8053,7 @@ </message> <message> <source>Contemporary</source> - <translation type="unfinished"></translation> + <translation>Samtid</translation> </message> <message> <source>Crime</source> @@ -8069,7 +8073,7 @@ </message> <message> <source>Elementary</source> - <translation type="unfinished"></translation> + <translation>Grundlæggende</translation> </message> <message> <source>Erotica</source> @@ -8133,7 +8137,7 @@ </message> <message> <source>High School</source> - <translation type="unfinished"></translation> + <translation>Gymnasium</translation> </message> <message> <source>History</source> @@ -8149,7 +8153,7 @@ </message> <message> <source>Home</source> - <translation type="unfinished"></translation> + <translation>Hjemmet</translation> </message> <message> <source>Horror</source> @@ -8157,11 +8161,11 @@ </message> <message> <source>Information</source> - <translation type="unfinished"></translation> + <translation>Information</translation> </message> <message> <source>Instruction</source> - <translation type="unfinished"></translation> + <translation>Instruktion</translation> </message> <message> <source>International</source> @@ -8189,7 +8193,7 @@ </message> <message> <source>Medical</source> - <translation type="unfinished"></translation> + <translation>Medicinsk</translation> </message> <message> <source>Meeting</source> @@ -8209,11 +8213,11 @@ </message> <message> <source>Mystery</source> - <translation type="unfinished"></translation> + <translation>Mysterium</translation> </message> <message> <source>National</source> - <translation type="unfinished"></translation> + <translation>Nationalt</translation> </message> <message> <source>Nature</source> @@ -8233,7 +8237,7 @@ </message> <message> <source>Prerecorded</source> - <translation type="unfinished"></translation> + <translation>Forud optaget</translation> </message> <message> <source>Product</source> @@ -8253,15 +8257,15 @@ </message> <message> <source>Reading</source> - <translation type="unfinished"></translation> + <translation>Læsning</translation> </message> <message> <source>Repair</source> - <translation type="unfinished"></translation> + <translation>Reparation</translation> </message> <message> <source>Review</source> - <translation type="unfinished"></translation> + <translation>Anmeldelse</translation> </message> <message> <source>Romance</source> @@ -8277,7 +8281,7 @@ </message> <message> <source>Service</source> - <translation type="unfinished"></translation> + <translation>Service</translation> </message> <message> <source>Shopping</source> @@ -8285,23 +8289,23 @@ </message> <message> <source>Soap Opera</source> - <translation type="unfinished"></translation> + <translation>Serie</translation> </message> <message> <source>Special</source> - <translation type="unfinished"></translation> + <translation>Speciel</translation> </message> <message> <source>Suspense</source> - <translation type="unfinished"></translation> + <translation>Spænding</translation> </message> <message> <source>Talk</source> - <translation type="unfinished"></translation> + <translation>Talkshow</translation> </message> <message> <source>Technical</source> - <translation type="unfinished"></translation> + <translation>Teknisk</translation> </message> <message> <source>Tennis</source> @@ -8309,15 +8313,15 @@ </message> <message> <source>Travel</source> - <translation type="unfinished"></translation> + <translation>Rejser</translation> </message> <message> <source>Variety</source> - <translation type="unfinished"></translation> + <translation>Varieté</translation> </message> <message> <source>Video</source> - <translation type="unfinished"></translation> + <translation>Video</translation> </message> <message> <source>Weather</source> @@ -8325,11 +8329,11 @@ </message> <message> <source>Western</source> - <translation type="unfinished">Vestlig</translation> + <translation>Western</translation> </message> <message> <source>DataDirect</source> - <translation type="unfinished"></translation> + <translation>DataDirect</translation> </message> <message> <source>Time Offset</source> @@ -8341,7 +8345,7 @@ </message> <message> <source>(Works for DataDirect listings only.)</source> - <translation type="unfinished"></translation> + <translation>(Virker kun for DataDirect-listninger.)</translation> </message> <message> <source>Priority</source> @@ -8357,7 +8361,7 @@ </message> <message> <source>Current Example</source> - <translation type="unfinished"></translation> + <translation>Aktuelt eksempel</translation> </message> <message> <source>Store</source> @@ -8392,12 +8396,12 @@ <message> <source>TT CC</source> <comment>Teletext closed captions</comment> - <translation type="unfinished"></translation> + <translation>TT UT</translation> </message> <message> <source>TT Menu</source> <comment>Teletext Menu</comment> - <translation type="unfinished"></translation> + <translation>TT-menu</translation> </message> <message> <source>TXT CAP</source> @@ -8414,7 +8418,7 @@ <message> <source>No captions</source> <comment>CC/Teletext/Subtitle text not available</comment> - <translation type="unfinished"></translation> + <translation>Ingen undertekster</translation> </message> <message> <source>Position</source> @@ -8422,16 +8426,16 @@ </message> <message> <source>No Seektable</source> - <translation type="unfinished"></translation> + <translation>Ingen søgetabel</translation> </message> <message> <source>Page Not Available</source> <comment>Requested Teletext page not available</comment> - <translation type="unfinished"></translation> + <translation>Siden findes ikke</translation> </message> <message> <source>Recording Type</source> - <translation type="unfinished"></translation> + <translation>Optagelsestype</translation> </message> <message> <source>This option allows you to filter out unwanted streams. 'Normal' will record all relevant streams including interactive television data. 'TV Only' will record only audio, video and subtitle streams. </source> @@ -8439,19 +8443,19 @@ </message> <message> <source>Normal</source> - <translation type="unfinished"></translation> + <translation>Normal</translation> </message> <message> <source>TV Only</source> - <translation type="unfinished"></translation> + <translation>Kun TV</translation> </message> <message> <source>Audio Only</source> - <translation type="unfinished"></translation> + <translation>Kun lyd</translation> </message> <message> <source>Filters used when transcoding with this profile. This value must be blank to perform lossless transcoding. Format: [[<filter>=<options>,]...]</source> - <translation type="unfinished"></translation> + <translation>Hvis aktiv, vil MPEG4 koderen bruge 'high-quality' kodnings-opsætning. Dette tager lang tid, men kan give bedre video kvalitet. Format: [[<filter>=<options>,]...]</translation> </message> <message> <source>Cable IRC</source> @@ -8504,11 +8508,11 @@ </message> <message> <source>Device ID</source> - <translation type="unfinished"></translation> + <translation>Enheds-ID</translation> </message> <message> <source>Tuner</source> - <translation type="unfinished"></translation> + <translation>Tuner</translation> </message> <message> <source>HDHomeRun DTV tuner box</source> @@ -8516,7 +8520,7 @@ </message> <message> <source>Input priority</source> - <translation type="unfinished"></translation> + <translation>Indgangs-prioritet</translation> </message> <message> <source>If the input priority is not equal for all inputs, the scheduler may choose to record a show at a later time so that it can record on an input with a higher value.</source> @@ -8584,7 +8588,7 @@ </message> <message> <source>Black background for analog closed captioning</source> - <translation type="unfinished"></translation> + <translation>Sort baggrund for analoge undertekster</translation> </message> <message> <source>If enabled, analog captions will be displayed over a black space for maximum contrast. Otherwise, captions will use outlined text over the picture.</source> @@ -8592,7 +8596,7 @@ </message> <message> <source>Always display closed captioning or subtitles</source> - <translation type="unfinished"></translation> + <translation>Vis altid undertekster</translation> </message> <message> <source>Enable Interactive TV</source> @@ -8686,11 +8690,13 @@ <source>Failed to open '%1' in %2 Check if the video exists</source> - <translation type="unfinished"></translation> + <translation>Kunne ikke åbne + '%1' i %2 +Kontrollér at videoen findes</translation> </message> <message> <source>^(The |A |An )</source> - <translation type="unfinished">^(Den |Det |En |Et )</translation> + <translation>^(Den |Det |En |Et )</translation> </message> <message> <source>Delete Now</source> @@ -8698,7 +8704,7 @@ </message> <message> <source>Disable AutoExpire</source> - <translation type="unfinished"></translation> + <translation>Deaktivér Autoudløb</translation> </message> <message> <source>AutoExpire Actions:</source> @@ -8706,7 +8712,7 @@ </message> <message> <source>Time offset for EIT listings</source> - <translation type="unfinished">Tids offset for EIT listinger</translation> + <translation>Tids-offset for EIT listinger</translation> </message> <message> <source>Adjust the relative timezone of the EIT EPG data. 'Auto' converts the EIT time to local time using your computer's timezone. 'None' ignores the EIT timezone, interpreting times as local.</source> @@ -8750,7 +8756,7 @@ </message> <message> <source>(REC)</source> - <translation type="unfinished">(OPTAG)</translation> + <translation>(OPTAG)</translation> </message> <message> <source>Adjust Playback</source> @@ -8766,7 +8772,7 @@ </message> <message> <source>Volume</source> - <translation type="unfinished">Lydstyrke</translation> + <translation>Lydstyrke</translation> </message> <message> <source>Enable this option for budget BT878 based DVB-T cards such as the AverTV DVB-T which require the audio volume to be left alone.</source> @@ -8790,11 +8796,11 @@ </message> <message> <source>Delete files slowly</source> - <translation type="unfinished"></translation> + <translation>Slet filer langsomt</translation> </message> <message> <source>Analog</source> - <translation type="unfinished"></translation> + <translation>Analog</translation> </message> <message> <source>This section lists each transport that MythTV currently knows about. The display fields are video source, modulation, frequency, and when relevant symbol rate, network id, and transport id.</source> @@ -8826,7 +8832,7 @@ </message> <message> <source>MPEG</source> - <translation type="unfinished"></translation> + <translation>MPEG</translation> </message> <message> <source>Frequency (Option has no default). @@ -8843,26 +8849,26 @@ </message> <message> <source>seconds</source> - <translation type="unfinished"></translation> + <translation>sekunder</translation> </message> <message> <source>DVD Menu Not Available</source> - <translation type="unfinished"></translation> + <translation>DVD-menu ikke tilgængelig</translation> </message> <message> <source>Group</source> <comment>Play Group</comment> - <translation type="unfinished">Gruppe</translation> + <translation>Gruppe</translation> </message> <message> <source>f</source> <comment>RecStatusChar rsFailed</comment> - <translation type="unfinished"></translation> + <translation>f</translation> </message> <message> <source>O</source> <comment>RecStatusChar rsOtherShowing</comment> - <translation type="unfinished">O</translation> + <translation>A</translation> </message> <message> <source>Recorder Failed</source> @@ -8874,35 +8880,35 @@ </message> <message> <source>Last Recorded</source> - <translation type="unfinished"></translation> + <translation>Sidst optaget</translation> </message> <message> <source>Next Recording</source> - <translation type="unfinished"></translation> + <translation>Næste optagelse</translation> </message> <message> <source>Watch List Score</source> - <translation type="unfinished"></translation> + <translation>Score for 'Endnu ikke set'</translation> </message> <message> <source>Auto-expire off</source> - <translation type="unfinished"></translation> + <translation>Autoudløb fra</translation> </message> <message> <source>Marked as 'watched'</source> - <translation type="unfinished"></translation> + <translation>Markeret som 'set'</translation> </message> <message> <source>Not the earliest episode</source> - <translation type="unfinished"></translation> + <translation>Ikke den tidligste episode</translation> </message> <message> <source>Recently deleted episode</source> - <translation type="unfinished"></translation> + <translation>Episode slettet for nylig</translation> </message> <message> <source>Watch List Status</source> - <translation type="unfinished"></translation> + <translation>Status for 'Endnu ikke set'</translation> </message> <message> <source>Storage Group</source> @@ -8914,7 +8920,7 @@ </message> <message> <source>Main Language</source> - <translation type="unfinished"></translation> + <translation>Hovedsprog</translation> </message> <message> <source>SAP Language</source> @@ -8922,11 +8928,11 @@ </message> <message> <source>Dual</source> - <translation type="unfinished"></translation> + <translation>Begge</translation> </message> <message> <source>Chooses the language(s) to record when two languages are broadcast. Only Layer II supports the recording of two languages (Dual).Requires ivtv 0.4.0 or later.</source> - <translation type="unfinished"></translation> + <translation>Vælg hvilke(t) sprog der skal optages når der udsendes to sprog. Kun Lag II understøtter optagelsen af to sprog (Begge).</translation> </message> <message> <source>Automatically transcode when a recording is made using this profile and the recording's schedule is configured to allow transcoding.</source> @@ -8970,7 +8976,7 @@ </message> <message> <source>LiveTV</source> - <translation type="unfinished">LiveTV</translation> + <translation>LiveTV</translation> </message> <message> <source>Listings grabber</source> @@ -8978,19 +8984,19 @@ </message> <message> <source>GUID</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Generic</source> - <translation type="unfinished"></translation> + <translation>Generisk</translation> </message> <message> <source>800Mbps</source> - <translation type="unfinished">800Mbps</translation> + <translation>800Mbps</translation> </message> <message> <source>IP address or Device ID from the bottom of the HDHomeRun. You may use 'FFFFFFFF' if there is only one unit on your your network.</source> - <translation type="unfinished"></translation> + <translation>IP-adresse eller Device ID angivet på bunden af din HDHomeRun. Du kan bruge "FFFFFFFF" hvis der kun er én enhed på dit netværk.</translation> </message> <message> <source>M3U URL</source> @@ -9006,7 +9012,7 @@ </message> <message> <source>Unencrypted channels only</source> - <translation type="unfinished"></translation> + <translation>Kun ikke-krypterede kanaler</translation> </message> <message> <source>If set, only unencrypted channels will be tuned to by MythTV or not be ignored by the MythTV channel scanner.</source> @@ -9014,7 +9020,7 @@ </message> <message> <source>Allow audio only channels</source> - <translation type="unfinished"></translation> + <translation>Tillad kanaler kun med lyd</translation> </message> <message> <source>If set, audio only channels will not be ignored by the MythTV channel scanner.</source> @@ -9026,15 +9032,15 @@ </message> <message> <source>Never</source> - <translation type="unfinished"></translation> + <translation>Aldrig</translation> </message> <message> <source>Always</source> - <translation type="unfinished"></translation> + <translation>Altid</translation> </message> <message> <source>If set, programs that have been marked as watched and are auto-expired will be re-recorded if they are shown again.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er valgt, vil programmer der er markeret som set og er auto-udløbet blive optaget igen hvis de vises igen.</translation> </message> <message> <source>Sort all sub-titles/multi-titles Ascending</source> @@ -9066,7 +9072,7 @@ </message> <message> <source>Maximum number of prescaled themes to cache.</source> - <translation type="unfinished"></translation> + <translation>Maksimalt antal preskalerede temaer der skal gemmes i cachen.</translation> </message> <message> <source>Always stream recordings from the backend</source> @@ -9094,27 +9100,27 @@ </message> <message> <source>Include the 'Watch List' group</source> - <translation type="unfinished"></translation> + <translation>Inkluder 'Endnu ikke set' gruppen</translation> </message> <message> <source>The 'Watch List' is an abbreviated list of recordings sorted to highlight series and shows that need attention in order to keep up to date.</source> - <translation type="unfinished"></translation> + <translation>'Endnu ikke set' er en kort liste af optagelser sorteret for at fremhæve serier og udsendelser som kræver opmærksomhed for at holde sig ajour.</translation> </message> <message> <source>Start from the Watch List view</source> - <translation type="unfinished"></translation> + <translation>Start med 'Endnu ikke set' visning</translation> </message> <message> <source>If set, the 'Watch List' will be the initial view each time you enter the Watch Recordings screen</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er aktiveret, vil 'Endnu ikke set' visningen blive valgt hver gang du åbner Se Optagelser menuen</translation> </message> <message> <source>Exclude recordings not set for Auto-Expire</source> - <translation type="unfinished"></translation> + <translation>Vis ikke optagelser der ikke er sat til autoudløb</translation> </message> <message> <source>Set this if you turn off auto-expire only for recordings that you've seen and intend to keep. This option will exclude these recordings from the 'Watch List'.</source> - <translation type="unfinished"></translation> + <translation>Marker dette hvis du deaktiverer autoudløb for optagelser du har set og vil beholde. Dette vil ekskludere disse optagelser fra 'Endnu ikke set' listen.</translation> </message> <message> <source>Maximum days counted in the score</source> @@ -9122,23 +9128,23 @@ </message> <message> <source>The 'Watch List' scores are based on 1 point equals one day since recording. This option limits the maximum score due to age and affects other weighting factors.</source> - <translation type="unfinished"></translation> + <translation>Scores i 'Endnu ikke set' er baseret på at 1 point svarer til 1 dag siden optagelse. Denne indstilling begrænser den maksimale score baseret på alder og påvirker andre vægtningsfaktorer.</translation> </message> <message> <source>Days to exclude weekly episodes after delete</source> - <translation type="unfinished"></translation> + <translation>Antal dage ugentlige episoder skal ekskluderes efter sletning</translation> </message> <message> <source>When an episode is deleted or marked as watched, other episodes of the series are excluded from the 'Watch List' for this interval of time. Daily shows also have a smaller interval based on this setting.</source> - <translation type="unfinished"></translation> + <translation>Når en episode slettes eller markeres som set, bliver andre episoder af den samme serie ekskluderet fra 'Endnu ikke set' listen for dette tidsinterval. Daglige visninger har også et mindre interval baseret på denne indstilling.</translation> </message> <message> <source>mythfilldatabase Program</source> - <translation type="unfinished"></translation> + <translation>mythfilldatabase-program</translation> </message> <message> <source>Use 'mythfilldatabase' or the name of a custom script that will populate the program guide info for all your video sources.</source> - <translation type="unfinished"></translation> + <translation>Brug 'mythfilldatabase' eller navnet på et brugerdefineret script som vil befolke programoversigten for alle dine videokilder.</translation> </message> <message> <source>Schedule Status</source> @@ -9150,7 +9156,7 @@ </message> <message> <source>Total Disk Space:</source> - <translation type="unfinished"></translation> + <translation>Total diskplads:</translation> </message> <message> <source>MythTV Drive #%1:</source> @@ -9158,15 +9164,15 @@ </message> <message> <source>Directories:</source> - <translation type="unfinished"></translation> + <translation>Mapper:</translation> </message> <message> <source>Directory:</source> - <translation type="unfinished"></translation> + <translation>Mappe:</translation> </message> <message> <source>Some filesystems use a lot of resources when deleting large recording files. This option makes Myth delete the file slowly on this backend to lessen the impact.</source> - <translation type="unfinished"></translation> + <translation>Nogle filsystemer bruger mange ressourcer ved sletning af store optagelsersfiler. Denne indstilling får MythTV til at slette filen langsomt på denne backend for at begrænse ressourceforbruget.</translation> </message> <message> <source>No Storage Group directories are defined. You must add at least one directory to the Default Storage Group where new recordings will be stored.</source> @@ -9210,7 +9216,7 @@ </message> <message> <source>Aspect ratio when watching a video at a specific resolution.</source> - <translation type="unfinished"></translation> + <translation>Aspektforhold når video vises i en bestemt opløsning.</translation> </message> <message> <source>Backend Server Wakeup settings</source> @@ -9218,7 +9224,7 @@ </message> <message> <source>Database Server Settings</source> - <translation type="unfinished"></translation> + <translation>Database-server-indstillinger</translation> </message> <message> <source>Ping test server?</source> @@ -9230,15 +9236,15 @@ </message> <message> <source>Port</source> - <translation type="unfinished"></translation> + <translation>Port</translation> </message> <message> <source>The port number the database is running on. Leave blank if using the default port (3306).</source> - <translation type="unfinished"></translation> + <translation>Portnummeret databasen bruger. Lad være blank hvis standardporten (3306) bruges.</translation> </message> <message> <source>Database name</source> - <translation type="unfinished"></translation> + <translation>Database-navn</translation> </message> <message> <source>Enable Database Server Wakeup</source> @@ -9254,39 +9260,39 @@ </message> <message> <source>Upgrade</source> - <translation type="unfinished"></translation> + <translation>Opgradér</translation> </message> <message> <source>Use current schema</source> - <translation type="unfinished"></translation> + <translation>Brug aktuelle skema</translation> </message> <message> <source>as a search</source> - <translation type="unfinished"></translation> + <translation>som en søgning</translation> </message> <message> <source>as an example</source> - <translation type="unfinished"></translation> + <translation>som et eksempel</translation> </message> <message> <source>Mono</source> - <translation type="unfinished"></translation> + <translation>Mono</translation> </message> <message> <source>Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Surround-lyd</translation> </message> <message> <source>Dolby Sound</source> - <translation type="unfinished"></translation> + <translation>Dolby-lyd</translation> </message> <message> <source>Widescreen</source> - <translation type="unfinished"></translation> + <translation>Widescreen</translation> </message> <message> <source>Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Undertekster tilgængelige</translation> </message> <message> <source>Average Time Shift</source> @@ -9294,7 +9300,7 @@ </message> <message> <source>hours</source> - <translation type="unfinished"></translation> + <translation>timer</translation> </message> <message> <source>If set, the bitrate specified will be used for 640x480. If other resolutions are used, the bitrate will be scaled appropriately.</source> @@ -9306,27 +9312,27 @@ </message> <message> <source>Mythtv has been idle for %1 minutes and will exit in %2 seconds. Are you still watching?</source> - <translation type="unfinished"></translation> + <translation>MythTV har været ledig i %1 minutter og vil lukke ned om %2 sekunder. Ser du stadig noget?</translation> </message> <message> <source>Searching for installed XMLTV grabbers</source> - <translation type="unfinished"></translation> + <translation>Søger efter installerede XMLTV grabbere</translation> </message> <message> <source>Ignore</source> - <translation type="unfinished"></translation> + <translation>Ignorér</translation> </message> <message> <source>Detect</source> - <translation type="unfinished">Detektér</translation> + <translation>Detektér</translation> </message> <message> <source>Interlaced</source> - <translation type="unfinished"></translation> + <translation>Interlaced</translation> </message> <message> <source>Interlaced (Normal)</source> - <translation type="unfinished">Interlaced (Normal)</translation> + <translation>Interlaced (Normal)</translation> </message> <message> <source>Interlaced (Reversed)</source> @@ -9334,23 +9340,23 @@ </message> <message> <source>Progressive</source> - <translation type="unfinished">Progressive</translation> + <translation>Progressiv</translation> </message> <message> <source>14:9</source> - <translation type="unfinished">14:9</translation> + <translation>14:9</translation> </message> <message> <source>Half</source> - <translation type="unfinished"></translation> + <translation>Halv</translation> </message> <message> <source>Full</source> - <translation type="unfinished"></translation> + <translation>Fuld</translation> </message> <message> <source>Stretch</source> - <translation type="unfinished"></translation> + <translation>Stræk</translation> </message> <message> <source>currently running.</source> @@ -9362,11 +9368,11 @@ </message> <message> <source>FAILED: xmltv ran but was interrupted.</source> - <translation type="unfinished"></translation> + <translation>FEJL: xmltv kørte, men blev afbrudt.</translation> </message> <message> <source>FAILED: xmltv returned error code %1.</source> - <translation type="unfinished"></translation> + <translation>FEJL: xmltv kørte, men returnerede fejlkode %1.</translation> </message> <message> <source>mythfilldatabase ran, but did not insert any new data into the Guide for %1 of %2 sources. This can indicate a potential grabber failure.</source> @@ -9390,7 +9396,7 @@ </message> <message> <source>Run User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Kør brugerjob #%1</translation> </message> <message> <source>This is the default value used for the 'Run %1' setting when a new scheduled recording is created.</source> @@ -9406,11 +9412,11 @@ </message> <message> <source>Auto Expire Instead of Delete Recording</source> - <translation type="unfinished"></translation> + <translation>Autoudløb i stedet for Slet optagelse</translation> </message> <message> <source>Instead of deleting a recording, move recording to the 'Deleted' recgroup and turn on autoexpire.</source> - <translation type="unfinished"></translation> + <translation>I stedet for at slette en optagelse, flyt den til 'Slettet' gruppen og slå Autoudløb til.</translation> </message> <message> <source>Profile Item</source> @@ -9423,7 +9429,7 @@ <message> <source>&</source> <comment>and</comment> - <translation type="unfinished"></translation> + <translation>&</translation> </message> <message> <source>if rez</source> @@ -9431,11 +9437,11 @@ </message> <message> <source>Edit</source> - <translation type="unfinished">Ændre</translation> + <translation>Redigér</translation> </message> <message> <source>Add New Entry</source> - <translation type="unfinished"></translation> + <translation>Tilføj ny</translation> </message> <message> <source>Playback Profiles</source> @@ -9447,29 +9453,31 @@ </message> <message> <source>Add New</source> - <translation type="unfinished"></translation> + <translation>Tilføj ny</translation> </message> <message> <source>Enter Playback Group Name</source> - <translation type="unfinished"></translation> + <translation>Indtast navn på afspilningsgruppe</translation> </message> <message> <source>Sorry, playback group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Beklager, navnet på afspilningsgruppen +må ikke være tomt.</translation> </message> <message> <source>Sorry, playback group name '%1' is already being used.</source> - <translation type="unfinished"></translation> + <translation>Beklager, afspilningsgruppen +'%1' er allerede i brug.</translation> </message> <message> <source>Error</source> - <translation type="unfinished">Fejl</translation> + <translation>Fejl</translation> </message> <message> <source>Vertical scaling</source> - <translation type="unfinished"></translation> + <translation>Lodret skalering</translation> </message> <message> <source>Adjust this if the image does not fill your screen vertically. Range -100% to 100%</source> @@ -9477,7 +9485,7 @@ </message> <message> <source>Horizontal scaling</source> - <translation type="unfinished"></translation> + <translation>Vandret skalering</translation> </message> <message> <source>Adjust this if the image does not fill your screen horizontally. Range -100% to 100%</source> @@ -9493,7 +9501,7 @@ </message> <message> <source>Warn on no audio output</source> - <translation type="unfinished"></translation> + <translation>Advar hvis ingen lyd</translation> </message> <message> <source>Always prompt (excluding Live TV)</source> @@ -9513,35 +9521,35 @@ </message> <message> <source>Show quit</source> - <translation type="unfinished"></translation> + <translation>Vis "Afslut"</translation> </message> <message> <source>Show quit and shutdown</source> - <translation type="unfinished"></translation> + <translation>Vis "Afslut" og "Luk ned"</translation> </message> <message> <source>Show quit, reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>Vis "Afslut", "Genstart", og "Luk ned"</translation> </message> <message> <source>Show shutdown</source> - <translation type="unfinished"></translation> + <translation>Vis "Luk ned"</translation> </message> <message> <source>Show reboot</source> - <translation type="unfinished"></translation> + <translation>Vis "Genstart"</translation> </message> <message> <source>Show reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>Vis "Genstart", og "Luk ned"</translation> </message> <message> <source>By default, only remote frontends are shown the shutdown option on the exit menu. Here you can force specific shutdown and reboot options to be displayed.</source> - <translation type="unfinished"></translation> + <translation>Som standard er det kun remote frontends der viser nedlukningsmulighederne i menuen. Her kan du tvinge bestemte muligheder til at blive vist.</translation> </message> <message> <source>Reboot command</source> - <translation type="unfinished"></translation> + <translation>Genstart-kommandoe</translation> </message> <message> <source>Command or script to run if you select the reboot option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source> @@ -9561,7 +9569,7 @@ </message> <message> <source>Zoom</source> - <translation type="unfinished"></translation> + <translation>Zoom</translation> </message> <message> <source>When enabled, these will apply a predefined zoom to all video playback in MythTV.</source> @@ -9569,23 +9577,23 @@ </message> <message> <source>UI Theme</source> - <translation type="unfinished"></translation> + <translation>UI-tema</translation> </message> <message> <source>OSD Theme</source> - <translation type="unfinished"></translation> + <translation>OSD-tema</translation> </message> <message> <source>Menu Theme</source> - <translation type="unfinished"></translation> + <translation>Menu-tema</translation> </message> <message> <source>Fine tune font size (%)</source> - <translation type="unfinished"></translation> + <translation>Finindstil fontstørrelse (%)</translation> </message> <message> <source>Fine tune all font sizes by this percentage. Font sizes should be the correct relative size if the X11 DPI (dots per inch) is set to 100.</source> - <translation type="unfinished"></translation> + <translation>Finindstil alle fontstørrelser med denne procentsats. Relative fontstørrelser burde være korrekte hvis DPI (pixels pr. tomme) er sat til 100 i X11.</translation> </message> <message> <source>Avoid back to back recordings from different channels</source> @@ -9601,11 +9609,11 @@ </message> <message> <source> (and other removable devices)</source> - <translation type="unfinished"></translation> + <translation> (og andre flytbare enheder)</translation> </message> <message> <source>Ignore Devices</source> - <translation type="unfinished"></translation> + <translation>Ignorér enheder</translation> </message> <message> <source>If there are any devices that you do not want to be monitored, list them here with commas in-between. The plugins will ignore them</source> @@ -9613,7 +9621,7 @@ </message> <message> <source>PVR-350 Hardware Decoder Settings</source> - <translation type="unfinished"></translation> + <translation>PVR-350 Hardware-dekoder indstillinger</translation> </message> <message> <source>This setting allows a DataDirect guide data provider to specify the next download time in order to distribute load on their servers. If this setting is enabled, mythfilldatabase Execution Start/End times are ignored.</source> @@ -9625,7 +9633,7 @@ </message> <message> <source>Miscellaneous</source> - <translation type="unfinished"></translation> + <translation>Diverse</translation> </message> <message> <source>Settings Access</source> @@ -9633,7 +9641,7 @@ </message> <message> <source>Shutdown/Reboot Settings</source> - <translation type="unfinished"></translation> + <translation>Indstillinger for nedlukning/genstart</translation> </message> <message> <source>General Playback</source> @@ -9641,7 +9649,7 @@ </message> <message> <source>Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Optagelsesgrupper</translation> </message> <message> <source>Default JobQueue settings for new scheduled recordings</source> @@ -9649,31 +9657,31 @@ </message> <message> <source>Yes, Exit and Reboot</source> - <translation type="unfinished"></translation> + <translation>Ja, afslut og genstart</translation> </message> <message> <source>The file for this recording is empty.</source> - <translation type="unfinished"></translation> + <translation>Filen for denne optagelse er tom.</translation> </message> <message> <source>IP address</source> - <translation type="unfinished"></translation> + <translation>IP-adresse</translation> </message> <message> <source>Status Port</source> - <translation type="unfinished"></translation> + <translation>Status-port</translation> </message> <message> <source>Security Pin (Required)</source> - <translation type="unfinished"></translation> + <translation>Sikkerheds-PIN-kode (krævet)</translation> </message> <message> <source>Pin code required for a frontend to connect to the backend. Blank prevents all connections, 0000 allows any client to connect.</source> - <translation type="unfinished"></translation> + <translation>Den PIN-kode der kræves for at en frontend kan forbinde til denne backend. Tom forhindrer alle forbindelser. 0000 tillader alle frontends at forbinde.</translation> </message> <message> <source>Your Local Timezone (for XMLTV)</source> - <translation type="unfinished"></translation> + <translation>Din lokale tidszone (for XMLTV)</translation> </message> <message> <source>Used if the XMLTV data comes from a different timezone than your own. This adjust the times in the XMLTV EPG data to compensate. 'Auto' converts the XMLTV time to local time using your computer's timezone. 'None' ignores the XMLTV timezone, interpreting times as local.</source> @@ -10659,11 +10667,11 @@ </message> <message> <source>Watched before UNwatched</source> - <translation type="unfinished"></translation> + <translation>Set før ikke set</translation> </message> <message> <source>If set, programs that have been marked as watched will be expired before programs that have not been watched.</source> - <translation type="unfinished"></translation> + <translation>Hvis dette er valgt, vil programmer der er markeret som set udløbe før programmer der ikke er markeret som set.</translation> </message> <message> <source>Priority Weight</source> @@ -10767,7 +10775,7 @@ </message> <message> <source>Automatically mark a recording as watched</source> - <translation type="unfinished"></translation> + <translation>Marker automatisk optagelser som set</translation> </message> <message> <source>The aspect ratio of a Xinerama display can not be queried from the display, so it must be specified.</source> @@ -10818,7 +10826,7 @@ </message> <message> <source>The theme you are using does not contain a 'recording_options' element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Press EXIT to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Det tema du bruger indeholder ikke et 'recording_options' element. Kontakt ophavsmanden til temaet og bed dem om at opdatere det.<br><br>Det næste skærmbillede vil være tomt. Tryk på EXIT for at komme tilbage til menuen.</translation> </message> <message> <source>Unknown Element</source> @@ -10826,7 +10834,7 @@ </message> <message> <source>The theme you are using contains an unknown element ('%1'). It will be ignored</source> - <translation type="unfinished">Det tema du bruger indeholder et ukendt element (%1). Dette vil blive ignoreret</translation> + <translation>Det tema du bruger indeholder et ukendt element (%1). Elementet vil blive ignoreret</translation> </message> </context> <context> @@ -11713,7 +11721,7 @@ </message> <message> <source>MythTV is already using all available inputs for the channel you selected. If you want to watch an in-progress recording, select one from the playback menu. If you want to watch live TV, cancel one of the in-progress recordings from the delete menu.</source> - <translation>MythTV bruger allerede alle tilgængelige inputs til at optage med. Hvis du ønsker at se en udsendelse, der er i færd med at blive optaget, så vel et fra afspilnings menuen. Hvis du ønsker at se direkte TV må du stoppe en af optagelserne fra sletnings menuen.</translation> + <translation>MythTV bruger allerede alle tilgængelige inputs til at optage med. Hvis du ønsker at se en udsendelse, der er i færd med at blive optaget, så vælg en fra afspilningsmenuen. Hvis du ønsker at se direkte TV, må du stoppe en af optagelserne fra slet-menuen.</translation> </message> <message> <source>No Lock</source> @@ -12114,7 +12122,7 @@ </message> <message> <source>Upcoming Recordings</source> - <translation type="unfinished"></translation> + <translation>Kommende optagelser</translation> </message> </context> <context> Dateien mythtv-0.21/i18n/mythfrontend_fi.qm und mythtv/i18n/mythfrontend_fi.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_fi.ts mythtv/i18n/mythfrontend_fi.ts --- mythtv-0.21/i18n/mythfrontend_fi.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_fi.ts 2008-04-04 01:47:54.000000000 +0200 @@ -66,19 +66,19 @@ <name>BackendSelect</name> <message> <source>Please select default Myth Backend Server</source> - <translation type="unfinished"></translation> + <translation>Valitse oletus palvelin</translation> </message> <message> <source>OK</source> - <translation type="unfinished">OK</translation> + <translation>OK</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Peruuta</translation> + <translation>Peruuta</translation> </message> <message> <source>Configure Manually</source> - <translation type="unfinished"></translation> + <translation>Manuaalinen asetus</translation> </message> </context> <context> @@ -121,7 +121,7 @@ </message> <message> <source>Are you sure you want to delete ALL capture cards on %1?</source> - <translation type="unfinished"></translation> + <translation>Poistetaanko KAIKKIEN TV-korttien asetukset %1:lla?</translation> </message> <message> <source>Error getting list of cards for this host</source> @@ -156,37 +156,37 @@ </message> <message> <source>Create Input Group</source> - <translation type="unfinished"></translation> + <translation>Luo Sisääntulo-ryhmä</translation> </message> <message> <source>Enter new group name</source> - <translation type="unfinished"></translation> + <translation>Uuden ryhmän nimi</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Virhe</translation> </message> <message> <source>Sorry, this Input Group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Sisääntuloryhmän nimi ei voi olla tyhjä.</translation> </message> <message> <source>Sorry, this Input Group name is already in use.</source> - <translation type="unfinished"></translation> + <translation>Tämä nimi on jo käytössä.</translation> </message> </context> <context> <name>CardInputEditor</name> <message> <source>Input connections</source> - <translation type="unfinished">Sisääntuloliitännät</translation> + <translation>Sisääntuloliitännät</translation> </message> </context> <context> <name>ChannelEditor</name> <message> <source>Channels</source> - <translation type="unfinished">Kanavat</translation> + <translation>Kanavat</translation> </message> <message> <source>Are you sure you would like to delete this channel?</source> @@ -230,27 +230,27 @@ </message> <message> <source>Are you sure you would like to delete ALL channels?</source> - <translation type="unfinished"></translation> + <translation>Poistetaanko KAIKKIEN kanavien asetukset?</translation> </message> <message> <source>Are you sure you would like to delete all unassigned channels?</source> - <translation type="unfinished"></translation> + <translation>Poistetaanko KAIKKIEN käyttämättömien kanavien asetukset?</translation> </message> <message> <source>Are you sure you would like to delete the channels on %1?</source> - <translation type="unfinished"></translation> + <translation>Poistetaanko kaikki kanavat %1:lla?</translation> </message> <message> <source>Add some for channels first!</source> - <translation type="unfinished"></translation> + <translation>Lisää ensin jokunen kanava!</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Peruuta</translation> + <translation>Peruuta</translation> </message> <message> <source>Download all icons..</source> - <translation type="unfinished"></translation> + <translation>Lataa kaikki ikonit..</translation> </message> <message> <source>Rescan for missing icons..</source> @@ -276,143 +276,143 @@ <name>CustomEdit</name> <message> <source>stored example</source> - <translation type="unfinished"></translation> + <translation>tallennettu esimerkki</translation> </message> <message> <source>Edit Rule</source> - <translation type="unfinished">Muokkaa Ehtoa</translation> + <translation>Muokkaa Ehtoa</translation> </message> <message> <source><New rule></source> - <translation type="unfinished"><Uusi Ehto></translation> + <translation><Uusi Ehto></translation> </message> <message> <source>Rule Name</source> - <translation type="unfinished">Säännön Nimi</translation> + <translation>Säännön Nimi</translation> </message> <message> <source>Match an exact title</source> - <translation type="unfinished">Vain täsmällinen sopivuus nimikkeille</translation> + <translation>Vain täsmällinen sopivuus nimikkeille</translation> </message> <message> <source>Match an exact episode</source> - <translation type="unfinished">Vain täsmällinen sopivuus jaksolle</translation> + <translation>Vain täsmällinen sopivuus jaksolle</translation> </message> <message> <source>Match words in the title</source> - <translation type="unfinished">Yhtälaisuudet nimikkeissä</translation> + <translation>Yhtälaisuudet nimikkeissä</translation> </message> <message> <source>Match in any descriptive field</source> - <translation type="unfinished">Yhtälaisuudet missä tahansa kentässä</translation> + <translation>Yhtälaisuudet missä tahansa kentässä</translation> </message> <message> <source>Limit by category</source> - <translation type="unfinished">Rajoita kategoriaan</translation> + <translation>Rajoita kategoriaan</translation> </message> <message> <source>All matches for a genre (Data Direct)</source> - <translation type="unfinished">Kaikki tämän lajin ohjelmat</translation> + <translation>Kaikki tämän lajin ohjelmat</translation> </message> <message> <source>Limit by MPAA or VCHIP rating (Data Direct)</source> - <translation type="unfinished"></translation> + <translation>Rajoita MPAA tai VCHIP-arvostelulle</translation> </message> <message> <source>New episodes only</source> - <translation type="unfinished">Vain uudet jaksot</translation> + <translation>Vain uudet jaksot</translation> </message> <message> <source>Exclude unidentified episodes</source> - <translation type="unfinished">Poissulje tuntemattomat jaksot</translation> + <translation>Poissulje tuntemattomat jaksot</translation> </message> <message> <source>Category type</source> - <translation type="unfinished">Kategoriatyyppi</translation> + <translation>Kategoriatyyppi</translation> </message> <message> <source>or</source> - <translation type="unfinished">tai</translation> + <translation>tai</translation> </message> <message> <source>Limit movies by the year of release</source> - <translation type="unfinished">Rajoita elokuvan tuotantovuoteen</translation> + <translation>Rajoita elokuvan tuotantovuoteen</translation> </message> <message> <source>Minimum star rating (0.0 to 1.0 for movies only)</source> - <translation type="unfinished">Minimi arvostusaste (0.0 - 1.0, vain elokuville)</translation> + <translation>Minimi arvostusaste (0.0 - 1.0, vain elokuville)</translation> </message> <message> <source>Person named in the credits (Data Direct)</source> - <translation type="unfinished"></translation> + <translation>Henkilö, joka nimetty elokuvan lopputeksteissä</translation> </message> <message> <source>Only on a specific station</source> - <translation type="unfinished">Vain tietty asema</translation> + <translation>Vain tietty asema</translation> </message> <message> <source>Exclude one station</source> - <translation type="unfinished">Älä sisällytä jotain tv-asemaa</translation> + <translation>Älä sisällytä jotain tv-asemaa</translation> </message> <message> <source>Match related callsigns</source> - <translation type="unfinished">Yhtälaisuudet nimikkeissä</translation> + <translation>Yhtälaisuudet nimikkeissä</translation> </message> <message> <source>Only on channels marked as favorites</source> - <translation type="unfinished">Vain suosikkikanavat</translation> + <translation>Vain suosikkikanavat</translation> </message> <message> <source>Only channels from a specific video source</source> - <translation type="unfinished">Sisällytä kanavat ainoastaan tietyistä videolähteistä</translation> + <translation>Sisällytä kanavat ainoastaan tietyistä videolähteistä</translation> </message> <message> <source>Only channels marked as commercial free</source> - <translation type="unfinished">Ainoastaan kanavat, jotka merkitty mainosvapaiksi</translation> + <translation>Ainoastaan kanavat, jotka merkitty mainosvapaiksi</translation> </message> <message> <source>Only shows marked as HDTV</source> - <translation type="unfinished">Vain HDTV-ohjelmat</translation> + <translation>Vain HDTV-ohjelmat</translation> </message> <message> <source>Anytime on a specific day of the week</source> - <translation type="unfinished">Mihin tahansa aikaan tietyllä viikonpäivällä</translation> + <translation>Mihin tahansa aikaan tietyllä viikonpäivällä</translation> </message> <message> <source>Only on weekdays (Monday through Friday)</source> - <translation type="unfinished">Vain arkipäivinä</translation> + <translation>Vain arkipäivinä</translation> </message> <message> <source>Only on weekends</source> - <translation type="unfinished">Vain viikonloppuisin</translation> + <translation>Vain viikonloppuisin</translation> </message> <message> <source>Only in primetime</source> - <translation type="unfinished">Vain parhaaseen katseluaikaan</translation> + <translation>Vain parhaaseen katseluaikaan</translation> </message> <message> <source>Not in primetime</source> - <translation type="unfinished">Ei parhaana katseluaikana</translation> + <translation>Ei parhaana katseluaikana</translation> </message> <message> <source>Multiple sports teams (complete example)</source> - <translation type="unfinished">Useat urheilujoukkueet</translation> + <translation>Useat urheilujoukkueet</translation> </message> <message> <source>Sci-fi B-movies (complete example)</source> - <translation type="unfinished">Sci-fi B-luokka</translation> + <translation>Sci-fi B-luokka</translation> </message> <message> <source>SportsCenter Overnight (complete example - use FindDaily)</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Movie of the Week (complete example - use FindWeekly)</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>First Episodes (complete example for Data Direct)</source> - <translation type="unfinished">Ensimmäiset jaksot (esimerkki)</translation> + <translation>Ensimmäiset jaksot (esimerkki)</translation> </message> <message> <source>Add this example clause</source> @@ -420,67 +420,67 @@ </message> <message> <source>Additional Tables</source> - <translation type="unfinished">Lisävaihtoehdot</translation> + <translation>Lisävaihtoehdot</translation> </message> <message> <source>Test</source> - <translation type="unfinished">Kokeile</translation> + <translation>Kokeile</translation> </message> <message> <source>Record</source> - <translation type="unfinished">Nauhoita</translation> + <translation>Nauhoita</translation> </message> <message> <source>Store</source> - <translation type="unfinished"></translation> + <translation>Tallenna</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Peruuta</translation> + <translation>Peruuta</translation> </message> <message> <source>An error was found when checking</source> - <translation type="unfinished">Virhe selatessa</translation> + <translation>Virhe selatessa</translation> </message> <message> <source>The database error was</source> - <translation type="unfinished">Tietokannassa tapahtunut virhe</translation> + <translation>Tietokannassa tapahtunut virhe </translation> </message> <message> <source>Match this episode</source> - <translation type="unfinished"></translation> + <translation>Vastaa tätä jaksoa</translation> </message> <message> <source>First showing of each episode</source> - <translation type="unfinished"></translation> + <translation>Jokaisen jakson ensimmäinen esitys</translation> </message> <message> <source>Last showing of each episode</source> - <translation type="unfinished"></translation> + <translation>Jokaisen jakson viimeinen esitys</translation> </message> <message> <source>stored search</source> - <translation type="unfinished"></translation> + <translation>tallennettu haku</translation> </message> <message> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Lisää</translation> </message> <message> <source>Match this series</source> - <translation type="unfinished"></translation> + <translation>Vastaa tätä sarjaa</translation> </message> <message> <source>Match words in the subtitle</source> - <translation type="unfinished"></translation> + <translation>Vastaa sanoja nimikkeessä</translation> </message> <message> <source>Only shows marked as widescreen</source> - <translation type="unfinished"></translation> + <translation>Vain laajakuvaksi merkityt lähetykset</translation> </message> <message> <source>Exclude H.264 encoded streams (EIT only)</source> - <translation type="unfinished"></translation> + <translation>Poissulje h.264-pakatut lähetykset (EIT)</translation> </message> </context> <context> @@ -726,11 +726,11 @@ <name>DVBUtilsImportPane</name> <message> <source>File location</source> - <translation type="unfinished">Tiedoston sijainti</translation> + <translation>Tiedoston sijainti</translation> </message> <message> <source>Location of the channels.conf file.</source> - <translation type="unfinished">Sijainti channels.conf-tiedostolle.</translation> + <translation>Sijainti channels.conf-tiedostolle.</translation> </message> </context> <context> @@ -1057,7 +1057,7 @@ <name>FirewireDesc</name> <message> <source>Description</source> - <translation type="unfinished">Kuvaus</translation> + <translation>Kuvaus</translation> </message> </context> <context> @@ -1122,7 +1122,7 @@ <name>InputSelector</name> <message> <source>Input</source> - <translation type="unfinished">Sisääntulo</translation> + <translation>Sisääntulo</translation> </message> </context> <context> @@ -1148,15 +1148,15 @@ <name>MPEGConfigurationGroup</name> <message> <source>Probed info</source> - <translation type="unfinished"></translation> + <translation>Haettu tieto</translation> </message> <message> <source>Failed to open</source> - <translation type="unfinished"></translation> + <translation>Ei saatu avattua</translation> </message> <message> <source>Failed to probe</source> - <translation type="unfinished"></translation> + <translation>Ei saatu haettua</translation> </message> </context> <context> @@ -1238,61 +1238,61 @@ </message> <message> <source>5 weekdays if daily</source> - <translation type="unfinished"></translation> + <translation>5 kertaa viikossa, jos päivittäinen</translation> </message> <message> <source>7 days per week if daily</source> - <translation type="unfinished"></translation> + <translation>7 kertaa viikossa, jos päivittäinen</translation> </message> </context> <context> <name>MediaMonitor</name> <message> <source>Cancel</source> - <translation type="unfinished">Peruuta</translation> + <translation>Peruuta</translation> </message> <message> <source>Select removable media to eject or insert</source> - <translation type="unfinished"></translation> + <translation>Valitse poistettava/ladattava media</translation> </message> <message> <source>No devices to eject</source> - <translation type="unfinished"></translation> + <translation>Ei laitteita poistettavaksi</translation> </message> <message> <source>Failed to unmount %1</source> - <translation type="unfinished"></translation> + <translation>Ei saatu irroitettua %1:stä</translation> </message> <message> <source>You may safely remove %1</source> - <translation type="unfinished"></translation> + <translation>Nyt %1 voidaan poistaa</translation> </message> <message> <source>Failed to eject %1</source> - <translation type="unfinished"></translation> + <translation>Ei saatu poistettua %1:stä</translation> </message> <message> <source>Select a CD drive</source> - <translation type="unfinished"></translation> + <translation>Valitse CD-asema</translation> </message> <message> <source>Select a VCD drive</source> - <translation type="unfinished"></translation> + <translation>Valitse VCD-asema</translation> </message> <message> <source>Select a DVD drive</source> - <translation type="unfinished"></translation> + <translation>Valitse DVD-asema</translation> </message> <message> <source>Select a DVD writer</source> - <translation type="unfinished"></translation> + <translation>Valitse DVD-kirjoitinasema</translation> </message> </context> <context> <name>MultiplexSetting</name> <message> <source>Transport</source> - <translation type="unfinished">Lähetysvirta</translation> + <translation>Lähetysvirta</translation> </message> </context> <context> @@ -1307,33 +1307,34 @@ </message> <message> <source>There are also other clients using this database. They should be shut down first.</source> - <translation type="unfinished"></translation> + <translation>Myös muita asiakkaita on tämän tietokannan asiakkaina. Ne tulisi sulkea ensin.</translation> </message> <message> <source>Error: MythTV cannot upgrade the schema of this datatase because other clients are using it. Please shut them down before upgrading.</source> - <translation type="unfinished"></translation> + <translation>Virhe: MythTV ei voi päivittää tämän tietokannan teemaa koska muut asiakkaat käyttävät sitä. +</translation> </message> <message> <source>Warning: MythTV wants to upgrade your database schema, from %1 to %2.</source> - <translation type="unfinished"></translation> + <translation>Varoitus: MythTV haluaa päivittää tietokannan teeman, %1:stä %2:een.</translation> </message> <message> <source>You can try using the old schema, but that may cause problems.</source> - <translation type="unfinished"></translation> + <translation>Voidaan käyttää vanhaa teemaa, mutta se voi aiheuttaa ongelmia.</translation> </message> <message> <source>Warning: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Varoitus: MythTV tietokannasta on uudempi teema (%1) kuin odotettu (%2).</translation> </message> <message> <source>Error: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Virhe: MythTV tietokannasta on uudempi teema (%1) kuin odotettu (%2).</translation> </message> <message> <source>MythTV was unable to backup your database.</source> - <translation type="unfinished"></translation> + <translation>MythTV ei saanut kopioitua tietokantaa.</translation> </message> <message> <source>If your system becomes unstable, a database backup file called %1 is located in %2.</source> @@ -1866,158 +1867,158 @@ </message> <message> <source>Recording has been transcoded</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on jälkikäsitelty</translation> </message> <message> <source>Recording is in Stereo</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on Stereo</translation> </message> <message> <source>Recording is in High Definition</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on HD</translation> </message> <message> <source>Recording is Closed Captioned</source> - <translation type="unfinished"></translation> + <translation>Nauhoituksella on tekstitys</translation> </message> <message> <source>Autodetect</source> - <translation type="unfinished">Havaitse automaattisesti</translation> + <translation>Havaitse automaattisesti</translation> </message> <message> <source>High Quality</source> - <translation type="unfinished"></translation> + <translation>Korkea Laatu</translation> </message> <message> <source>Medium Quality</source> - <translation type="unfinished"></translation> + <translation>Keskimääräinen Laatu</translation> </message> <message> <source>Low Quality</source> - <translation type="unfinished"></translation> + <translation>Alhainen Laatu</translation> </message> <message> <source>Watch List</source> - <translation type="unfinished"></translation> + <translation>Katselulista</translation> </message> <message> <source>There are no recordings in your current view</source> - <translation type="unfinished"></translation> + <translation>Ei nauhoituksia nykyisessä näkymässä</translation> </message> <message> <source>There are no recordings available</source> - <translation type="unfinished"></translation> + <translation>Ei nauhoituksia saatavilla</translation> </message> <message> <source>Mark as Unwatched</source> - <translation type="unfinished"></translation> + <translation>Merkitse Katsomattomaksi</translation> </message> <message> <source>Mark as Watched</source> - <translation type="unfinished"></translation> + <translation>Merkitse katsotuksi</translation> </message> <message> <source>Recording is preserved</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus säilytetään</translation> </message> <message> <source>Show Titles</source> - <translation type="unfinished"></translation> + <translation>Näytä Nimikkeet</translation> </message> <message> <source>Show Categories</source> - <translation type="unfinished"></translation> + <translation>Näytä Kategoriat</translation> </message> <message> <source>Show Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Näytä Nauhoitusryhmät</translation> </message> <message> <source>Show Watch List</source> - <translation type="unfinished"></translation> + <translation>Näytä Katselulista</translation> </message> <message> <source>Show Searches</source> - <translation type="unfinished"></translation> + <translation>Näytä Haut</translation> </message> <message> <source>Save Current View</source> - <translation type="unfinished"></translation> + <translation>Tallenna Nykyinen Näkymä</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Peruuta</translation> + <translation>Peruuta</translation> </message> <message> <source>_NO_TITLE_</source> - <translation type="unfinished"></translation> + <translation>_EI_NIMIKETTÄ_</translation> </message> <message> <source>Unknown</source> - <translation type="unfinished">Tuntematon</translation> + <translation>Tuntematon</translation> </message> <message> <source>Help (Status Icons)</source> - <translation type="unfinished"></translation> + <translation>Apua (Tilaikoneista)</translation> </message> <message> <source>Delete, and allow re-record</source> - <translation type="unfinished"></translation> + <translation>Poista, ja salli uudelleennauhoitus</translation> </message> <message> <source>Allow this program to re-record</source> - <translation type="unfinished"></translation> + <translation>Salli tämän ohjelman uudelleennauhoitus</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Palauta</translation> </message> <message> <source>Delete Forever</source> - <translation type="unfinished"></translation> + <translation>Poista Pysyvästi</translation> </message> <message> <source>Recording is in Mono</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on Mono</translation> </message> <message> <source>Recording is in Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on Surround Sound</translation> </message> <message> <source>Recording is in Dolby Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on Dolby Surround Sound</translation> </message> <message> <source>Recording has Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Nauhoituksella on Tekstitys</translation> </message> <message> <source>Recording is Subtitled</source> - <translation type="unfinished"></translation> + <translation>Nauhoituksella on Tekstitys</translation> </message> <message> <source>Recording is in WideScreen</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on Laajakuva</translation> </message> <message> <source>Recording has been watched</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus on katsottu</translation> </message> <message> <source>Show LiveTV as a Group</source> - <translation type="unfinished"></translation> + <translation>Näytä LiveTV Ryhmänä</translation> </message> <message> <source>Deleted</source> - <translation type="unfinished"></translation> + <translation>Poistettu</translation> </message> </context> <context> <name>PlaybackProfileItemConfig</name> <message> <source>Match Criteria</source> - <translation type="unfinished"></translation> + <translation>Vastaa Kriteriaa</translation> </message> <message> <source>W</source> @@ -2029,39 +2030,39 @@ </message> <message> <source>Decoder</source> - <translation type="unfinished"></translation> + <translation>Viritin</translation> </message> <message> <source>Max CPUs</source> - <translation type="unfinished"></translation> + <translation>Suoritinmäärä (Max)</translation> </message> <message> <source>Video Renderer</source> - <translation type="unfinished"></translation> + <translation>Videon Kuvantamiskeino</translation> </message> <message> <source>OSD Renderer</source> - <translation type="unfinished"></translation> + <translation>OSD Kuvantamiskeino</translation> </message> <message> <source>OSD Fade</source> - <translation type="unfinished"></translation> + <translation>OSD Häivyttäminen</translation> </message> <message> <source>Primary Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Ensisijainen Lomituksenpoistaja</translation> </message> <message> <source>Fallback Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Varmistus Lomituksenpoistaja</translation> </message> <message> <source>Custom Filters</source> - <translation type="unfinished">Muokatut Suodattimet</translation> + <translation>Muokatut Suodattimet</translation> </message> <message> <source>Maximum number of CPU cores used for decoding.</source> - <translation type="unfinished"></translation> + <translation>Max. määrä suoritinytimiä, joita käytetään purkamiseen.</translation> </message> <message> <source> Multithreaded decoding disabled-only one CPU will be used, please recompile with --enable-ffmpeg-pthreads to enable.</source> @@ -2128,11 +2129,11 @@ </message> <message> <source>Time</source> - <translation type="unfinished"></translation> + <translation>Aika</translation> </message> <message> <source>Title</source> - <translation type="unfinished"></translation> + <translation>Nimike</translation> </message> </context> <context> @@ -2337,63 +2338,63 @@ </message> <message> <source>Rule Search</source> - <translation type="unfinished"></translation> + <translation>Säännönmukainen Haku</translation> </message> <message> <source>(Any Genre)</source> - <translation type="unfinished"></translation> + <translation>(Mikä Tahansa Laji)</translation> </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>Poista '%1' %2 sääntö?</translation> </message> <message> <source>Stored Search</source> - <translation type="unfinished"></translation> + <translation>Tallennettu Haku</translation> </message> <message> <source>Select a search stored from</source> - <translation type="unfinished"></translation> + <translation>Valitse tallennettu haku </translation> </message> <message> <source>Custom Record</source> - <translation type="unfinished"></translation> + <translation>Muokattu Ajastus</translation> </message> <message> <source>0 .. 9 moves to Nx10 percent in list</source> - <translation type="unfinished"></translation> + <translation>0 .. 9 siirtää Nx10 prosenttia listassa</translation> </message> <message> <source>Unrated</source> - <translation type="unfinished"></translation> + <translation>Ei Arvosteltu</translation> </message> <message> <source>At least ***/</source> - <translation type="unfinished"></translation> + <translation>Ainakin ***/</translation> </message> <message> <source>At least ***</source> - <translation type="unfinished"></translation> + <translation>Ainakin ***</translation> </message> <message> <source>At least **/</source> - <translation type="unfinished"></translation> + <translation>Ainakin **/</translation> </message> <message> <source>At least **</source> - <translation type="unfinished"></translation> + <translation>Ainakin **</translation> </message> <message> <source>At least */</source> - <translation type="unfinished"></translation> + <translation>Ainakin */</translation> </message> <message> <source>At least *</source> - <translation type="unfinished"></translation> + <translation>Ainakin *</translation> </message> <message> <source>At least /</source> - <translation type="unfinished"></translation> + <translation>Ainakin /</translation> </message> </context> <context> @@ -2468,7 +2469,7 @@ </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>Poista '%1' %2 sääntö?</translation> </message> </context> <context> @@ -3620,7 +3621,7 @@ </message> <message> <source>Channel Options</source> - <translation type="unfinished">Kanavan Asetukset</translation> + <translation>Kanavan Asetukset</translation> </message> <message> <source>Video Source</source> @@ -4221,11 +4222,11 @@ </message> <message> <source>Earlier Showing</source> - <translation>Aikaisempi Ohjelma</translation> + <translation>aikaisempi ohjelma</translation> </message> <message> <source>Later Showing</source> - <translation>Myöhempi Ohjelma</translation> + <translation>myöhempi ohjelma</translation> </message> <message> <source>this episode will be recorded at an earlier time instead.</source> @@ -4916,7 +4917,7 @@ </message> <message> <source>Display thumbnail preview images of recordings</source> - <translation type="unfinished">Tee nauhoituksista esikatselukuvat</translation> + <translation>Tee nauhoituksista esikatselukuvat</translation> </message> <message> <source>If enabled, a static image of the recording will be displayed on the "Watch a Recording" menu.</source> @@ -5084,11 +5085,11 @@ </message> <message> <source>This setting and the following one define a time period when the mythfilldatabase process is allowed to run. For example, setting Start to 11 and End to 13 would mean that the process would only run between 11:00 AM and 1:59 PM.</source> - <translation type="unfinished">Määrittävät kellonajan ja päivät jolloin mythfilldatabase hakee ohjelmatiedot. Esimerkiksi Min. 11 ja Max. 13 tarkoittaa, että suoritus tapahtuu kello 11 ja 13 välillä.</translation> + <translation>Määrittävät kellonajan ja päivät jolloin mythfilldatabase hakee ohjelmatiedot. Esimerkiksi Min. 11 ja Max. 13 tarkoittaa, että suoritus tapahtuu kello 11 ja 13 välillä.</translation> </message> <message> <source>This setting and the preceding one define a time period when the mythfilldatabase process is allowed to run. For example, setting Start to 11 and End to 13 would mean that the process would only run between 11:00 AM and 1:59 PM.</source> - <translation type="unfinished">Määrittävät kellonajan ja päivät jolloin mythfilldatabase hakee ohjelmatiedot. Esimerkiksi Min. 11 ja Max. 13 tarkoittaa, että suoritus tapahtuu kello 11 ja 13 välillä.</translation> + <translation>Määrittävät kellonajan ja päivät jolloin mythfilldatabase hakee ohjelmatiedot. Esimerkiksi Min. 11 ja Max. 13 tarkoittaa, että suoritus tapahtuu kello 11 ja 13 välillä.</translation> </message> <message> <source>This starts the program guide immediately upon starting to watch Live TV.</source> @@ -6403,7 +6404,7 @@ </message> <message> <source>DVB Transport</source> - <translation type="unfinished">DVB Lähetysvirta</translation> + <translation>DVB Lähetysvirta</translation> </message> <message> <source>Transport Options</source> @@ -6521,7 +6522,7 @@ </message> <message> <source>Not Listed</source> - <translation>Ei Listattuna</translation> + <translation>ei listattuna</translation> </message> <message> <source>this show does not match the current program listings.</source> @@ -6625,35 +6626,35 @@ </message> <message> <source>Default View</source> - <translation type="unfinished">Oletus Näkymä</translation> + <translation>Oletus Näkymä</translation> </message> <message> <source>Show Titles only</source> - <translation type="unfinished">Näyttää Vain Nimikkeet</translation> + <translation>Näyttää Vain Nimikkeet</translation> </message> <message> <source>Show Titles and Categories</source> - <translation type="unfinished">Näyttää Nimikkeet ja Kategoriat</translation> + <translation>Näyttää Nimikkeet ja Kategoriat</translation> </message> <message> <source>Show Titles, Categories, and Recording Groups</source> - <translation type="unfinished">Näyttää Nimikkeet, Kategoriat ja Nauhoitusryhmät</translation> + <translation>Näyttää Nimikkeet, Kategoriat ja Nauhoitusryhmät</translation> </message> <message> <source>Show Titles and Recording Groups</source> - <translation type="unfinished">Näyttää Nimikkeet ja Nauhoitusryhmät</translation> + <translation>Näyttää Nimikkeet ja Nauhoitusryhmät</translation> </message> <message> <source>Show Categories only</source> - <translation type="unfinished">Näyttää Vain Kategoriat</translation> + <translation>Näyttää Vain Kategoriat</translation> </message> <message> <source>Show Categories and Recording Groups</source> - <translation type="unfinished">Näyttää Kategoriat ja Nauhoitusryhmät</translation> + <translation>Näyttää Kategoriat ja Nauhoitusryhmät</translation> </message> <message> <source>Show Recording Groups only</source> - <translation type="unfinished">Näyttää Vain Nauhoitusryhmät</translation> + <translation>Näyttää Vain Nauhoitusryhmät</translation> </message> <message> <source>Show filter name instead of "All Programs"</source> @@ -7362,11 +7363,11 @@ </message> <message> <source>Could not query inputs.</source> - <translation type="unfinished">Sisääntuloja ei voitu tiedustella.</translation> + <translation>Sisääntuloja ei voitu tiedustella.</translation> </message> <message> <source>ERROR, Compile with V4L support to query inputs</source> - <translation type="unfinished">VIRHE, Käännä uudestaan käyttäen V4L-tukea</translation> + <translation>VIRHE, Käännä uudestaan käyttäen V4L-tukea</translation> </message> <message> <source>Subtype</source> @@ -7374,7 +7375,7 @@ </message> <message> <source>Frontend ID</source> - <translation type="unfinished"></translation> + <translation>Palvelin ID</translation> </message> <message> <source>Cable box model</source> @@ -7398,11 +7399,11 @@ </message> <message> <source>Could not open '%1' to probe its inputs.</source> - <translation type="unfinished">Ei saatu avattua '%1':sta sisääntulojen koettamiseksi.</translation> + <translation>Ei saatu avattua '%1':sta sisääntulojen koettamiseksi.</translation> </message> <message> <source>ERROR, Compile with DVB support to query inputs</source> - <translation type="unfinished">VIRHE, Käännä uudestaan käyttäen DVB-tukea</translation> + <translation>VIRHE, Käännä uudestaan käyttäen DVB-tukea</translation> </message> <message> <source>Deinterlace algorithm.</source> @@ -7715,7 +7716,7 @@ </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished">Anna ryhmän nimi tai paina SELECT antaaksesi sen virtuaalisen näppäimistön kautta</translation> + <translation>Anna ryhmän nimi tai paina SELECT antaaksesi sen virtuaalisen näppäimistön kautta</translation> </message> <message> <source>Display Name (optional)</source> @@ -7751,11 +7752,11 @@ </message> <message> <source>Samples are shown using today's date.</source> - <translation type="unfinished"></translation> + <translation>Esimerkit näytetään tämän päivän mukaisesti.</translation> </message> <message> <source>Samples are shown using tomorrow's date.</source> - <translation type="unfinished"></translation> + <translation>Esimerkit näytetään huomisen mukaisesti.</translation> </message> <message> <source>Your preferred time format. You must choose a format with "AM" or "PM" in it, otherwise your time display will be 24-hour or "military" time.</source> @@ -7771,7 +7772,7 @@ </message> <message> <source>The AutoExpire List shows all recordings which may be expired and the order of their expiration. Recordings at the top of the list will be expired first.</source> - <translation type="unfinished"></translation> + <translation>Automaattisen Vanhentumisen lista näyttää kaikki nauhoitukset, jotka voidaan poistaa niiden vanhentumisjärjestyksessä. Ylimmäiset poistetaan ensimmäiseksi.</translation> </message> <message> <source>Suggested Next: </source> @@ -7839,7 +7840,7 @@ </message> <message> <source>Spain</source> - <translation type="unfinished"></translation> + <translation>Espanja</translation> </message> <message> <source>Enable Network Remote Control interface</source> @@ -7851,7 +7852,7 @@ </message> <message> <source>Network Remote Control Port</source> - <translation type="unfinished"></translation> + <translation>Verkkopohjaisen kauko-ohjaimen portti</translation> </message> <message> <source>This specifies what port the Network Remote Control interface will listen on for new connections.</source> @@ -7859,15 +7860,15 @@ </message> <message> <source>You are close to an existing cut point. Would you like to:</source> - <translation type="unfinished"></translation> + <translation>Olet lähellä olemassaolevaa leikkauskohtaa. Haluatko:</translation> </message> <message> <source>Insert a new cut point</source> - <translation type="unfinished"></translation> + <translation>Lisätä uuden leikkauskohdan</translation> </message> <message> <source>Too Far %1</source> - <translation type="unfinished"></translation> + <translation>Liian kaukana %1</translation> </message> <message> <source>If the width is set to 'Auto', the width will be calculated based on the height and the recording's physical aspect ratio.</source> @@ -7879,11 +7880,11 @@ </message> <message> <source>All Available Methods</source> - <translation type="unfinished"></translation> + <translation>Kaikki mahdolliset metodit</translation> </message> <message> <source>Blank Frame Detection</source> - <translation type="unfinished"></translation> + <translation>Tyhjän ruudun havaitseminen</translation> </message> <message> <source>This determines the method used by MythTV to detect when commercials start and end.</source> @@ -7891,11 +7892,11 @@ </message> <message> <source>Maximum commercial skip (in seconds)</source> - <translation type="unfinished"></translation> + <translation>Mainosten Ohituksen Automaattisenkelauksen Määrä (sekuntia)</translation> </message> <message> <source>Weighted Time/Priority Combination</source> - <translation type="unfinished"></translation> + <translation>Painotettu Aika/Prioriteetti</translation> </message> <message> <source>The number of days bonus a program gets for each priority point. This is only used when the Weighted Time/Priority Auto Expire Method is selected.</source> @@ -7911,7 +7912,7 @@ </message> <message> <source>Transcoder command</source> - <translation type="unfinished"></translation> + <translation>Jälleenkäsittelykomento</translation> </message> <message> <source>The program used to transcode recordings. The default is 'mythtranscode' if this setting is empty.</source> @@ -7932,7 +7933,7 @@ </message> <message> <source>Recorder Off-Line</source> - <translation type="unfinished"></translation> + <translation>Nauhoittaja ei verkossa</translation> </message> <message> <source>the backend recorder is off-line.</source> @@ -7957,39 +7958,39 @@ </message> <message> <source>Education</source> - <translation type="unfinished"></translation> + <translation>Opetus</translation> </message> <message> <source>Entertainment</source> - <translation type="unfinished"></translation> + <translation>Viihde</translation> </message> <message> <source>Movie</source> - <translation type="unfinished"></translation> + <translation>Elokuva</translation> </message> <message> <source>News</source> - <translation type="unfinished"></translation> + <translation>Uutis</translation> </message> <message> <source>Religious</source> - <translation type="unfinished"></translation> + <translation>Uskonnollinen</translation> </message> <message> <source>Sports</source> - <translation type="unfinished">Urheilu</translation> + <translation>Urheilu</translation> </message> <message> <source>Action</source> - <translation type="unfinished"></translation> + <translation>Toiminta</translation> </message> <message> <source>Advertisement</source> - <translation type="unfinished"></translation> + <translation>Mainos</translation> </message> <message> <source>Animated</source> - <translation type="unfinished"></translation> + <translation>Animaatio</translation> </message> <message> <source>Anthology</source> @@ -7997,11 +7998,11 @@ </message> <message> <source>Automobile</source> - <translation type="unfinished"></translation> + <translation>Autot</translation> </message> <message> <source>Awards</source> - <translation type="unfinished"></translation> + <translation>Palkinnot</translation> </message> <message> <source>Baseball</source> @@ -8013,59 +8014,59 @@ </message> <message> <source>Bulletin</source> - <translation type="unfinished"></translation> + <translation>Tiedotus</translation> </message> <message> <source>Business</source> - <translation type="unfinished"></translation> + <translation>Kaupallinen</translation> </message> <message> <source>Classical</source> - <translation type="unfinished"></translation> + <translation>Klassinen</translation> </message> <message> <source>College</source> - <translation type="unfinished"></translation> + <translation>Yliopisto</translation> </message> <message> <source>Combat</source> - <translation type="unfinished"></translation> + <translation>Taistelu</translation> </message> <message> <source>Comedy</source> - <translation type="unfinished"></translation> + <translation>Komedia</translation> </message> <message> <source>Commentary</source> - <translation type="unfinished"></translation> + <translation>Kommentatoorinen</translation> </message> <message> <source>Concert</source> - <translation type="unfinished"></translation> + <translation>Konsertti</translation> </message> <message> <source>Consumer</source> - <translation type="unfinished"></translation> + <translation>Kaupallinen</translation> </message> <message> <source>Contemporary</source> - <translation type="unfinished"></translation> + <translation>Nykyaikainen</translation> </message> <message> <source>Crime</source> - <translation type="unfinished"></translation> + <translation>Rikos</translation> </message> <message> <source>Dance</source> - <translation type="unfinished"></translation> + <translation>Tanssi</translation> </message> <message> <source>Documentary</source> - <translation type="unfinished"></translation> + <translation>Dokumentti</translation> </message> <message> <source>Drama</source> - <translation type="unfinished"></translation> + <translation>Draama</translation> </message> <message> <source>Elementary</source> @@ -8073,39 +8074,39 @@ </message> <message> <source>Erotica</source> - <translation type="unfinished"></translation> + <translation>Erotiikka</translation> </message> <message> <source>Exercise</source> - <translation type="unfinished"></translation> + <translation>Harjoitus</translation> </message> <message> <source>Fantasy</source> - <translation type="unfinished"></translation> + <translation>Fantasia</translation> </message> <message> <source>Farm</source> - <translation type="unfinished"></translation> + <translation>Maanviljely</translation> </message> <message> <source>Fashion</source> - <translation type="unfinished"></translation> + <translation>Muoti</translation> </message> <message> <source>Fiction</source> - <translation type="unfinished"></translation> + <translation>Fiktio</translation> </message> <message> <source>Food</source> - <translation type="unfinished"></translation> + <translation>Ruoka</translation> </message> <message> <source>Football</source> - <translation type="unfinished"></translation> + <translation>Jalkapallo</translation> </message> <message> <source>Foreign</source> - <translation type="unfinished"></translation> + <translation>Ulkomainen</translation> </message> <message> <source>Fund Raiser</source> @@ -8113,151 +8114,151 @@ </message> <message> <source>Game/Quiz</source> - <translation type="unfinished"></translation> + <translation>Tietokilpailu</translation> </message> <message> <source>Garden</source> - <translation type="unfinished"></translation> + <translation>Puutarha</translation> </message> <message> <source>Golf</source> - <translation type="unfinished"></translation> + <translation>Golf</translation> </message> <message> <source>Government</source> - <translation type="unfinished"></translation> + <translation>Hallitus</translation> </message> <message> <source>Health</source> - <translation type="unfinished"></translation> + <translation>Terveys</translation> </message> <message> <source>High School</source> - <translation type="unfinished"></translation> + <translation>Koulu</translation> </message> <message> <source>History</source> - <translation type="unfinished"></translation> + <translation>Historia</translation> </message> <message> <source>Hobby</source> - <translation type="unfinished"></translation> + <translation>Harrastus</translation> </message> <message> <source>Hockey</source> - <translation type="unfinished"></translation> + <translation>Jääkiekko</translation> </message> <message> <source>Home</source> - <translation type="unfinished"></translation> + <translation>Koti</translation> </message> <message> <source>Horror</source> - <translation type="unfinished"></translation> + <translation>Kauhu</translation> </message> <message> <source>Information</source> - <translation type="unfinished"></translation> + <translation>Tiedotus</translation> </message> <message> <source>Instruction</source> - <translation type="unfinished"></translation> + <translation>Ohjeet</translation> </message> <message> <source>International</source> - <translation type="unfinished"></translation> + <translation>Yleismaailmallinen</translation> </message> <message> <source>Interview</source> - <translation type="unfinished"></translation> + <translation>Haastattelu</translation> </message> <message> <source>Legal</source> - <translation type="unfinished"></translation> + <translation>Laki</translation> </message> <message> <source>Live</source> - <translation type="unfinished"></translation> + <translation>Suora</translation> </message> <message> <source>Local</source> - <translation type="unfinished"></translation> + <translation>Paikallinen</translation> </message> <message> <source>Math</source> - <translation type="unfinished"></translation> + <translation>Matematiikka</translation> </message> <message> <source>Medical</source> - <translation type="unfinished"></translation> + <translation>Lääketiede</translation> </message> <message> <source>Meeting</source> - <translation type="unfinished"></translation> + <translation>Tapaaminen</translation> </message> <message> <source>Military</source> - <translation type="unfinished"></translation> + <translation>Sota</translation> </message> <message> <source>Miniseries</source> - <translation type="unfinished"></translation> + <translation>Sarja</translation> </message> <message> <source>Music</source> - <translation type="unfinished"></translation> + <translation>Musiikki</translation> </message> <message> <source>Mystery</source> - <translation type="unfinished"></translation> + <translation>Mysteeri</translation> </message> <message> <source>National</source> - <translation type="unfinished"></translation> + <translation>Kansallinen</translation> </message> <message> <source>Nature</source> - <translation type="unfinished"></translation> + <translation>Luonto</translation> </message> <message> <source>Police</source> - <translation type="unfinished"></translation> + <translation>Poliisi</translation> </message> <message> <source>Politics</source> - <translation type="unfinished"></translation> + <translation>Politiikka</translation> </message> <message> <source>Premiere</source> - <translation type="unfinished"></translation> + <translation>Ensi-ilta</translation> </message> <message> <source>Prerecorded</source> - <translation type="unfinished"></translation> + <translation>Nauhoitettu</translation> </message> <message> <source>Product</source> - <translation type="unfinished"></translation> + <translation>Tuontanto</translation> </message> <message> <source>Professional</source> - <translation type="unfinished"></translation> + <translation>Ammatillinen</translation> </message> <message> <source>Public</source> - <translation type="unfinished"></translation> + <translation>Yleisö</translation> </message> <message> <source>Racing</source> - <translation type="unfinished"></translation> + <translation>Kilpa</translation> </message> <message> <source>Reading</source> - <translation type="unfinished"></translation> + <translation>Luku</translation> </message> <message> <source>Repair</source> - <translation type="unfinished"></translation> + <translation>Korjaus</translation> </message> <message> <source>Review</source> @@ -8265,67 +8266,67 @@ </message> <message> <source>Romance</source> - <translation type="unfinished"></translation> + <translation>Romantiikka</translation> </message> <message> <source>Science</source> - <translation type="unfinished"></translation> + <translation>Tiede</translation> </message> <message> <source>Series</source> - <translation type="unfinished">Sarjat</translation> + <translation>Sarjat</translation> </message> <message> <source>Service</source> - <translation type="unfinished"></translation> + <translation>Huolto</translation> </message> <message> <source>Shopping</source> - <translation type="unfinished"></translation> + <translation>Ostos</translation> </message> <message> <source>Soap Opera</source> - <translation type="unfinished"></translation> + <translation>Saippua</translation> </message> <message> <source>Special</source> - <translation type="unfinished"></translation> + <translation>Erikoinen</translation> </message> <message> <source>Suspense</source> - <translation type="unfinished"></translation> + <translation>Jännitys</translation> </message> <message> <source>Talk</source> - <translation type="unfinished"></translation> + <translation>Keskustelu</translation> </message> <message> <source>Technical</source> - <translation type="unfinished"></translation> + <translation>Tekninen</translation> </message> <message> <source>Tennis</source> - <translation type="unfinished"></translation> + <translation>Tennis</translation> </message> <message> <source>Travel</source> - <translation type="unfinished"></translation> + <translation>Matkailu</translation> </message> <message> <source>Variety</source> - <translation type="unfinished"></translation> + <translation>Varietee</translation> </message> <message> <source>Video</source> - <translation type="unfinished"></translation> + <translation>Video</translation> </message> <message> <source>Weather</source> - <translation type="unfinished"></translation> + <translation>Sää</translation> </message> <message> <source>Western</source> - <translation type="unfinished"></translation> + <translation>Lännen</translation> </message> <message> <source>DataDirect</source> @@ -8333,7 +8334,7 @@ </message> <message> <source>Time Offset</source> - <translation type="unfinished"></translation> + <translation>Aikasiirros</translation> </message> <message> <source>Offset (in minutes) to apply to the program guide data during import. This can be used when the listings for a particular channel are in a different time zone.</source> @@ -8345,7 +8346,7 @@ </message> <message> <source>Priority</source> - <translation type="unfinished">Ohjelma</translation> + <translation>Prioriteetti</translation> </message> <message> <source>Number of priority points to be added to any recording on this channel during scheduling.</source> @@ -8357,27 +8358,27 @@ </message> <message> <source>Current Example</source> - <translation type="unfinished"></translation> + <translation>Esimerkki</translation> </message> <message> <source>Store</source> - <translation type="unfinished"></translation> + <translation>Tallenna</translation> </message> <message> <source>Replace</source> - <translation type="unfinished"></translation> + <translation>Korvaa</translation> </message> <message> <source>Track</source> - <translation type="unfinished"></translation> + <translation>Seuraa</translation> </message> <message> <source>Audio track</source> - <translation type="unfinished">Ääniraita</translation> + <translation>Ääniraita</translation> </message> <message> <source>Subtitle track</source> - <translation type="unfinished">Tekstitysvaihtoehto</translation> + <translation>Tekstitysvaihtoehto</translation> </message> <message> <source>CC</source> @@ -8392,12 +8393,12 @@ <message> <source>TT CC</source> <comment>Teletext closed captions</comment> - <translation type="unfinished"></translation> + <translation>Tekstitv tekstitys</translation> </message> <message> <source>TT Menu</source> <comment>Teletext Menu</comment> - <translation type="unfinished"></translation> + <translation>Tekstitv valikko</translation> </message> <message> <source>TXT CAP</source> @@ -8405,28 +8406,28 @@ </message> <message> <source>Text subtitles</source> - <translation type="unfinished"></translation> + <translation>Tekstitys</translation> </message> <message> <source>Text Subtitles</source> - <translation type="unfinished"></translation> + <translation>Tekstitys</translation> </message> <message> <source>No captions</source> <comment>CC/Teletext/Subtitle text not available</comment> - <translation type="unfinished"></translation> + <translation>Ei Tekstitystä</translation> </message> <message> <source>Position</source> - <translation type="unfinished">Nauhoitusta Toistettu</translation> + <translation>Nauhoitusta Toistettu</translation> </message> <message> <source>No Seektable</source> - <translation type="unfinished"></translation> + <translation>Ei hakutaulukkoa</translation> </message> <message> <source>Recording Type</source> - <translation type="unfinished"></translation> + <translation>Nauhoitustyyppi</translation> </message> <message> <source>This option allows you to filter out unwanted streams. 'Normal' will record all relevant streams including interactive television data. 'TV Only' will record only audio, video and subtitle streams. </source> @@ -8434,15 +8435,15 @@ </message> <message> <source>Normal</source> - <translation type="unfinished"></translation> + <translation>Normaali</translation> </message> <message> <source>TV Only</source> - <translation type="unfinished"></translation> + <translation>Vain TV</translation> </message> <message> <source>Audio Only</source> - <translation type="unfinished"></translation> + <translation>Vain Ääni</translation> </message> <message> <source>Filters used when transcoding with this profile. This value must be blank to perform lossless transcoding. Format: [[<filter>=<options>,]...]</source> @@ -8450,28 +8451,28 @@ </message> <message> <source>Cable IRC</source> - <translation type="unfinished"></translation> + <translation>Kaapeli IRC</translation> </message> <message> <source>Use any available input</source> - <translation type="unfinished"></translation> + <translation>Mikä Tahansa Sisääntulo</translation> </message> <message> <source>Prefer input %1</source> - <translation type="unfinished"></translation> + <translation>Ensisijaisesti sisääntulo %1</translation> </message> <message> <source>Select Preferred Input</source> - <translation type="unfinished"></translation> + <translation>Valitse ensisijainen sisääntulo</translation> </message> <message> <source>UNKNOWN%1</source> <comment>Synthesized callsign</comment> - <translation type="unfinished"></translation> + <translation>TUNTEMATON%1</translation> </message> <message> <source>DVB Tuning Delay (msec)</source> - <translation type="unfinished"></translation> + <translation>DVB Viritysviive (msec)</translation> </message> <message> <source>Some Linux DVB drivers, in particular for the Hauppauge Nova-T, require that we slow down the tuning process.</source> @@ -8479,11 +8480,11 @@ </message> <message> <source>Device ID</source> - <translation type="unfinished"></translation> + <translation>Laite ID</translation> </message> <message> <source>Tuner</source> - <translation type="unfinished"></translation> + <translation>Viritin</translation> </message> <message> <source>HDHomeRun DTV tuner box</source> @@ -8639,7 +8640,7 @@ </message> <message> <source>Scheduler Options</source> - <translation type="unfinished"></translation> + <translation>Ajastetun Nauhoituksen Valinnat</translation> </message> <message> <source>Recording Type Priority Settings</source> @@ -8651,15 +8652,15 @@ </message> <message> <source>Delete Now</source> - <translation type="unfinished"></translation> + <translation>Poista Nyt</translation> </message> <message> <source>Disable AutoExpire</source> - <translation type="unfinished"></translation> + <translation>Ei Automaattista Vanhentumista</translation> </message> <message> <source>AutoExpire Actions:</source> - <translation type="unfinished"></translation> + <translation>Aut. Vanhentumisen Toiminnot:</translation> </message> <message> <source>Time offset for EIT listings</source> @@ -8704,15 +8705,15 @@ </message> <message> <source>Upcoming episodes for this title</source> - <translation type="unfinished"></translation> + <translation>Tulevat jaksot tälle nimikkeelle</translation> </message> <message> <source>Upcoming episodes for this rule</source> - <translation type="unfinished"></translation> + <translation>Tulevat jaksot tälle säännölle</translation> </message> <message> <source>Previously scheduled episodes</source> - <translation type="unfinished"></translation> + <translation>Aikaisemmin nauhoitetut jaksot</translation> </message> <message> <source>Choose the model that most closely resembles your set top box. Depending on firmware revision SA4200HD may work better for a SA3250HD box.</source> @@ -8720,7 +8721,7 @@ </message> <message> <source>channel number</source> - <translation type="unfinished"></translation> + <translation>kanavanumero</translation> </message> <message> <source>Display Large Clock</source> @@ -8734,7 +8735,8 @@ <source>Failed to open '%1' in %2 Check if the video exists</source> - <translation type="unfinished"></translation> + <translation>Ei saatu avattua + '%1' %2:ssa </translation> </message> <message> <source>If set, the MPEG4 encoder will use interlaced DCT encoding. You may want this when encoding interlaced video, however, this is experimental and may cause damaged video.</source> @@ -8746,19 +8748,19 @@ </message> <message> <source>(CH)</source> - <translation type="unfinished"></translation> + <translation>(Kanava)</translation> </message> <message> <source>(REC)</source> - <translation type="unfinished">(Nauhoitus)</translation> + <translation>(Nauhoitus)</translation> </message> <message> <source>Adjust Playback</source> - <translation type="unfinished"></translation> + <translation>Säädä Toistoa</translation> </message> <message> <source>Adjust Recorder</source> - <translation type="unfinished"></translation> + <translation>Säädä Nauhoittajaa</translation> </message> <message> <source>Colour</source> @@ -8766,7 +8768,7 @@ </message> <message> <source>Volume</source> - <translation type="unfinished">Äänenvoimakkuus</translation> + <translation>Äänenvoimakkuus</translation> </message> <message> <source>Enable this option for budget BT878 based DVB-T cards such as the AverTV DVB-T which require the audio volume to be left alone.</source> @@ -8843,16 +8845,16 @@ </message> <message> <source>seconds</source> - <translation type="unfinished"></translation> + <translation>sekuntia</translation> </message> <message> <source>DVD Menu Not Available</source> - <translation type="unfinished"></translation> + <translation>DVD-valikko ei saatavilla</translation> </message> <message> <source>Group</source> <comment>Play Group</comment> - <translation type="unfinished">Ryhmä</translation> + <translation>Ryhmä</translation> </message> <message> <source>f</source> @@ -8866,59 +8868,59 @@ </message> <message> <source>Recorder Failed</source> - <translation type="unfinished"></translation> + <translation>Nauhoittajavirhe</translation> </message> <message> <source>Other Showing</source> - <translation type="unfinished"></translation> + <translation>Toiset Näytökset</translation> </message> <message> <source>Last Recorded</source> - <translation type="unfinished"></translation> + <translation>Viimeisin Nauhoitus</translation> </message> <message> <source>Next Recording</source> - <translation type="unfinished"></translation> + <translation>Seuraava Nauhoitus</translation> </message> <message> <source>Watch List Score</source> - <translation type="unfinished"></translation> + <translation>Katselulistan Pisteet</translation> </message> <message> <source>Auto-expire off</source> - <translation type="unfinished"></translation> + <translation>Automaattinen Vanhentuminen Pois</translation> </message> <message> <source>Marked as 'watched'</source> - <translation type="unfinished"></translation> + <translation>Merkitty Katsotuksi</translation> </message> <message> <source>Not the earliest episode</source> - <translation type="unfinished"></translation> + <translation>Ei Aikaisin Lähetys</translation> </message> <message> <source>Recently deleted episode</source> - <translation type="unfinished"></translation> + <translation>Viimeiseksi Poistettu Jakso</translation> </message> <message> <source>Watch List Status</source> - <translation type="unfinished"></translation> + <translation>Katselulistan Tila</translation> </message> <message> <source>Storage Group</source> - <translation type="unfinished"></translation> + <translation>Tallennusryhmä</translation> </message> <message> <source>SAP/Bilingual</source> - <translation type="unfinished"></translation> + <translation>SAP/Monikielinen</translation> </message> <message> <source>Main Language</source> - <translation type="unfinished"></translation> + <translation>Pääkieli</translation> </message> <message> <source>SAP Language</source> - <translation type="unfinished"></translation> + <translation>SAP Kieli</translation> </message> <message> <source>Dual</source> @@ -8950,31 +8952,31 @@ </message> <message> <source>Include in the "%1" recording group</source> - <translation type="unfinished"></translation> + <translation>Sisällytä "%1" nauhoitusryhmä</translation> </message> <message> <source>Exclude unidentified episodes</source> - <translation type="unfinished">Poissulje tuntemattomat jaksot</translation> + <translation>Poissulje tuntemattomat jaksot</translation> </message> <message> <source>Exclude old episodes</source> - <translation type="unfinished"></translation> + <translation>Poissulje vanhat jaksot</translation> </message> <message> <source>Select Storage Group</source> - <translation type="unfinished"></translation> + <translation>Valitse Tallennusryhmä</translation> </message> <message> <source>Store in the "%1" storage group</source> - <translation type="unfinished"></translation> + <translation>Tallenna "%1" Tallennusryhmään</translation> </message> <message> <source>LiveTV</source> - <translation type="unfinished">LiveTV</translation> + <translation>LiveTV</translation> </message> <message> <source>Listings grabber</source> - <translation type="unfinished"></translation> + <translation>Ohjelmatietojen Kaappaaja</translation> </message> <message> <source>GUID</source> @@ -8982,7 +8984,7 @@ </message> <message> <source>Generic</source> - <translation type="unfinished"></translation> + <translation>Yleinen</translation> </message> <message> <source>800Mbps</source> @@ -9014,7 +9016,7 @@ </message> <message> <source>Allow audio only channels</source> - <translation type="unfinished"></translation> + <translation>Salli Audiokanavat</translation> </message> <message> <source>If set, audio only channels will not be ignored by the MythTV channel scanner.</source> @@ -9026,11 +9028,11 @@ </message> <message> <source>Never</source> - <translation type="unfinished"></translation> + <translation>Ei Koskaan</translation> </message> <message> <source>Always</source> - <translation type="unfinished"></translation> + <translation>Aina</translation> </message> <message> <source>If set, programs that have been marked as watched and are auto-expired will be re-recorded if they are shown again.</source> @@ -9150,27 +9152,27 @@ </message> <message> <source>Schedule Status</source> - <translation type="unfinished"></translation> + <translation>Ajoitustilanne</translation> </message> <message> <source>Schedule Status shows current statistics from the scheduler.</source> - <translation type="unfinished"></translation> + <translation>Nauhoittajan ajoitustilanne, tulevat nauhoitukset.</translation> </message> <message> <source>Total Disk Space:</source> - <translation type="unfinished"></translation> + <translation>Levytila:</translation> </message> <message> <source>MythTV Drive #%1:</source> - <translation type="unfinished"></translation> + <translation>MythTV Levy #%1:</translation> </message> <message> <source>Directories:</source> - <translation type="unfinished"></translation> + <translation>Kansiot:</translation> </message> <message> <source>Directory:</source> - <translation type="unfinished"></translation> + <translation>Kansio:</translation> </message> <message> <source>Some filesystems use a lot of resources when deleting large recording files. This option makes Myth delete the file slowly on this backend to lessen the impact.</source> @@ -9190,11 +9192,11 @@ </message> <message> <source>Match duplicates using subtitle then description</source> - <translation type="unfinished"></translation> + <translation>Sovita kaksoiskappaleet ohjelman nimikkeellä ja kuvauksella</translation> </message> <message> <source>Commercial Flagging Method</source> - <translation type="unfinished"></translation> + <translation>Mainosten Merkkausmetodi</translation> </message> <message> <source>Changes the method of commercial detection used for recordings on this channel or skips detection by marking the channel as Commercial Free.</source> @@ -9202,11 +9204,11 @@ </message> <message> <source>Use Global Setting</source> - <translation type="unfinished"></translation> + <translation>Käytä yleisiä asetuksia</translation> </message> <message> <source>Channel Options - Filters</source> - <translation type="unfinished"></translation> + <translation>Kanava-asetukset - Suodattimet</translation> </message> <message> <source>Aspect ratio when watching a video at a specific resolution.</source> @@ -9230,7 +9232,7 @@ </message> <message> <source>Port</source> - <translation type="unfinished"></translation> + <translation>Portti</translation> </message> <message> <source>The port number the database is running on. Leave blank if using the default port (3306).</source> @@ -9290,7 +9292,7 @@ </message> <message> <source>Subtitle</source> - <translation type="unfinished">Jakson Kuvaus</translation> + <translation>Jakson Kuvaus</translation> </message> <message> <source>New Input</source> @@ -9306,23 +9308,23 @@ </message> <message> <source>as a search</source> - <translation type="unfinished"></translation> + <translation>niinkuin hakuna</translation> </message> <message> <source>as an example</source> - <translation type="unfinished"></translation> + <translation>niinkuin esimerkkinä</translation> </message> <message> <source>Title %1 chapter %2</source> - <translation type="unfinished"></translation> + <translation>Nimike %1 kappale %2</translation> </message> <message> <source>%1 of %2 (%3 behind)</source> - <translation type="unfinished"></translation> + <translation>%1 %2:sta (%3 jäljessä)</translation> </message> <message> <source>%1 of %2 (%3 remaining)</source> - <translation type="unfinished"></translation> + <translation>%1 %2:sta (%3 jäljellä)</translation> </message> <message> <source>The theme you are using does not contain the %1 element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Escape out of it to return to the menu.</source> @@ -9330,15 +9332,15 @@ </message> <message> <source>the recorder failed to record.</source> - <translation type="unfinished"></translation> + <translation>nauhoittaja ei onnistunut nauhoittamaan.</translation> </message> <message> <source>this rule does not match any showings in the current program listings.</source> - <translation type="unfinished"></translation> + <translation>tämä sääntö ei vastaa yhtään esitystä nykyisissä ohjelmatiedoissa.</translation> </message> <message> <source>this episode will be recorded on a different channel in this time slot.</source> - <translation type="unfinished"></translation> + <translation>tämä jakso tullaan nauhoittamaan eri kanavalla.</translation> </message> <message> <source>Mono</source> @@ -9354,15 +9356,15 @@ </message> <message> <source>Audio for Hearing Impaired</source> - <translation type="unfinished"></translation> + <translation>Ääni huonokuuloisille</translation> </message> <message> <source>Audio for Visually Impaired</source> - <translation type="unfinished"></translation> + <translation>Ääni huononäköisille</translation> </message> <message> <source>Widescreen</source> - <translation type="unfinished"></translation> + <translation>Laajakuva</translation> </message> <message> <source>AVC/H.264</source> @@ -9370,7 +9372,7 @@ </message> <message> <source>Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Tekstitys Saatavilla</translation> </message> <message> <source>Deaf Signing</source> @@ -9378,15 +9380,15 @@ </message> <message> <source>Average Time Shift</source> - <translation type="unfinished"></translation> + <translation>Keskimääräinen Aikasiirtymä</translation> </message> <message> <source>hours</source> - <translation type="unfinished"></translation> + <translation>tuntia</translation> </message> <message> <source>Recorded File Name</source> - <translation type="unfinished"></translation> + <translation>Nauhoituksen Nimi</translation> </message> <message> <source>If set, the bitrate specified will be used for 640x480. If other resolutions are used, the bitrate will be scaled appropriately.</source> @@ -9408,15 +9410,15 @@ </message> <message> <source>Could not open tuner device</source> - <translation type="unfinished"></translation> + <translation>Ei saatu avattua viritinlaitetta</translation> </message> <message> <source>Bad connection to backend</source> - <translation type="unfinished"></translation> + <translation>Huono liitäntä palvelimelle</translation> </message> <message> <source> offset %2</source> - <translation type="unfinished"></translation> + <translation> siirtymä %2</translation> </message> <message> <source>Timeout Scanning %1 -- no tables</source> @@ -9428,31 +9430,31 @@ </message> <message> <source>Tuning to %1 mplexid(%2)</source> - <translation type="unfinished"></translation> + <translation>Virittäytyy %1 mplexid(%2)</translation> </message> <message> <source>Record new episode first showings</source> - <translation type="unfinished"></translation> + <translation>Nauhoita uuden jakson ensiesitys</translation> </message> <message> <source>MythTV wants to record these programs in %d seconds:</source> - <translation type="unfinished"></translation> + <translation>MythTV nauhoittaa nämä nauhoitukset %d sekunnin kuluttua:</translation> </message> <message> <source>"%1" on %2</source> - <translation type="unfinished"></translation> + <translation>"%1" %2:lla</translation> </message> <message> <source>Do you want to:</source> - <translation type="unfinished"></translation> + <translation>Haluatko:</translation> </message> <message> <source>Mythtv has been idle for %1 minutes and will exit in %2 seconds. Are you still watching?</source> - <translation type="unfinished"></translation> + <translation>MythTV on ollut toimeton %1 minuuttia ja sammuu %2 sekunnin kuluttua. Haluatko jatkaa katsomista?</translation> </message> <message> <source>On known multiplex...</source> - <translation type="unfinished"></translation> + <translation>Tunnetulla multiplexilla...</translation> </message> <message> <source>PVR-350 decoder</source> @@ -9668,11 +9670,11 @@ </message> <message> <source>DVB Device Number</source> - <translation type="unfinished"></translation> + <translation>DVB Laitenumero</translation> </message> <message> <source>Warning: already in use</source> - <translation type="unfinished"></translation> + <translation>Varoitus: Jo käytössä</translation> </message> <message> <source>Use DVB Card for active EIT scan</source> @@ -9712,51 +9714,51 @@ </message> <message> <source>Ignore</source> - <translation type="unfinished"></translation> + <translation>Ohita</translation> </message> <message> <source>Detect</source> - <translation type="unfinished"></translation> + <translation>Havaitse</translation> </message> <message> <source>Interlaced</source> - <translation type="unfinished"></translation> + <translation>Lomitettu</translation> </message> <message> <source>Interlaced (Normal)</source> - <translation type="unfinished"></translation> + <translation>Lomitettu (Normaali)</translation> </message> <message> <source>Interlaced (Reversed)</source> - <translation type="unfinished"></translation> + <translation>Lomitettu (Käänteinen)</translation> </message> <message> <source>Progressive</source> - <translation type="unfinished"></translation> + <translation>Progressiivinen</translation> </message> <message> <source>14:9</source> - <translation type="unfinished">14:9</translation> + <translation>14:9</translation> </message> <message> <source>Black</source> - <translation type="unfinished"></translation> + <translation>Musta</translation> </message> <message> <source>Gray</source> - <translation type="unfinished"></translation> + <translation>Harmaa</translation> </message> <message> <source>Half</source> - <translation type="unfinished"></translation> + <translation>Puolikas</translation> </message> <message> <source>Full</source> - <translation type="unfinished"></translation> + <translation>Täysi</translation> </message> <message> <source>Stretch</source> - <translation type="unfinished"></translation> + <translation>Venytetty</translation> </message> <message> <source>[Reserved]</source> @@ -9780,36 +9782,36 @@ </message> <message> <source>Detective/Thriller</source> - <translation type="unfinished"></translation> + <translation>Etsivä/Trilleri</translation> </message> <message> <source>Adventure/Western/War</source> - <translation type="unfinished"></translation> + <translation>Seikkailu/Lännen/Sota</translation> </message> <message> <source>Science Fiction/Fantasy/Horror</source> - <translation type="unfinished"></translation> + <translation>Scifi/Fantasia/Kauhu</translation> </message> <message> <source>Soap/melodrama/folkloric</source> - <translation type="unfinished"></translation> + <translation>Saippua/Melodraama/Taru</translation> </message> <message> <source>Serious/Classical/Religious/Historical Movie/Drama</source> - <translation type="unfinished"></translation> + <translation>Vakava/Klassinen/Uskonnollinen/Historiallinen Elokuva/Draama</translation> </message> <message> <source>Adult</source> <comment>Adult Movie</comment> - <translation type="unfinished"></translation> + <translation>Aikuisten Elokuva</translation> </message> <message> <source>News/weather report</source> - <translation type="unfinished"></translation> + <translation>Uutis/Sää</translation> </message> <message> <source>News magazine</source> - <translation type="unfinished"></translation> + <translation>Uutisohjelma</translation> </message> <message> <source>Intelligent Programmes</source> @@ -9817,51 +9819,51 @@ </message> <message> <source>Game Show</source> - <translation type="unfinished"></translation> + <translation>Tietokilpailu</translation> </message> <message> <source>Variety Show</source> - <translation type="unfinished"></translation> + <translation>Varietee</translation> </message> <message> <source>Talk Show</source> - <translation type="unfinished"></translation> + <translation>Keskustelu</translation> </message> <message> <source>Special Events (World Cup, World Series..)</source> - <translation type="unfinished"></translation> + <translation>Erikoisraportti</translation> </message> <message> <source>Sports Magazines</source> - <translation type="unfinished"></translation> + <translation>Urheiluohjelma</translation> </message> <message> <source>Football (Soccer)</source> - <translation type="unfinished"></translation> + <translation>Jalkapallo</translation> </message> <message> <source>Tennis/Squash</source> - <translation type="unfinished"></translation> + <translation>Tennis</translation> </message> <message> <source>Misc. Team Sports</source> - <translation type="unfinished"></translation> + <translation>Joukkueurheilu</translation> </message> <message> <source>Athletics</source> - <translation type="unfinished"></translation> + <translation>Urheilu</translation> </message> <message> <source>Motor Sport</source> - <translation type="unfinished"></translation> + <translation>Moottoriurheilu</translation> </message> <message> <source>Water Sport</source> - <translation type="unfinished"></translation> + <translation>Vesiurheilu</translation> </message> <message> <source>Winter Sports</source> - <translation type="unfinished"></translation> + <translation>Talviurheilu</translation> </message> <message> <source>Equestrian</source> @@ -9869,11 +9871,11 @@ </message> <message> <source>Martial Sports</source> - <translation type="unfinished"></translation> + <translation>Taistelulajit</translation> </message> <message> <source>Kids</source> - <translation type="unfinished"></translation> + <translation>Lasten</translation> </message> <message> <source>Pre-School Children's Programmes</source> @@ -9889,15 +9891,15 @@ </message> <message> <source>Informational/Educational</source> - <translation type="unfinished"></translation> + <translation>Tiedotus/Koulutus</translation> </message> <message> <source>Cartoons/Puppets</source> - <translation type="unfinished"></translation> + <translation>Piirretty</translation> </message> <message> <source>Music/Ballet/Dance</source> - <translation type="unfinished"></translation> + <translation>Musiikki/Baletti/Tanssi</translation> </message> <message> <source>Rock/Pop</source> @@ -9905,11 +9907,11 @@ </message> <message> <source>Classical Music</source> - <translation type="unfinished"></translation> + <translation>Klassinen Musiikki</translation> </message> <message> <source>Folk Music</source> - <translation type="unfinished"></translation> + <translation>Kansanmusiikki</translation> </message> <message> <source>Jazz</source> @@ -9917,39 +9919,39 @@ </message> <message> <source>Musical/Opera</source> - <translation type="unfinished"></translation> + <translation>Musikaali/Ooppera</translation> </message> <message> <source>Ballet</source> - <translation type="unfinished"></translation> + <translation>Baletti</translation> </message> <message> <source>Arts/Culture</source> - <translation type="unfinished"></translation> + <translation>Taide/Kulttuuri</translation> </message> <message> <source>Performing Arts</source> - <translation type="unfinished"></translation> + <translation>Esitystaide</translation> </message> <message> <source>Fine Arts</source> - <translation type="unfinished"></translation> + <translation>Taide</translation> </message> <message> <source>Religion</source> - <translation type="unfinished"></translation> + <translation>Uskonnollinen</translation> </message> <message> <source>Popular Culture/Traditional Arts</source> - <translation type="unfinished"></translation> + <translation>Populäärikulttuuri</translation> </message> <message> <source>Literature</source> - <translation type="unfinished"></translation> + <translation>Kirjallisuus</translation> </message> <message> <source>Film/Cinema</source> - <translation type="unfinished"></translation> + <translation>Elokuva</translation> </message> <message> <source>Experimental Film/Video</source> @@ -9957,135 +9959,135 @@ </message> <message> <source>Broadcasting/Press</source> - <translation type="unfinished"></translation> + <translation>Julkaisu</translation> </message> <message> <source>New Media</source> - <translation type="unfinished"></translation> + <translation>Uusi Media</translation> </message> <message> <source>Arts/Culture Magazines</source> - <translation type="unfinished"></translation> + <translation>Taide/Kulttuuri</translation> </message> <message> <source>Social/Policical/Economics</source> - <translation type="unfinished"></translation> + <translation>Sosiaali/Politiikka/Ekonomia</translation> </message> <message> <source>Magazines/Reports/Documentary</source> - <translation type="unfinished"></translation> + <translation>Lehdet/Raportit/Dokumentit</translation> </message> <message> <source>Economics/Social Advisory</source> - <translation type="unfinished"></translation> + <translation>Ekonomia/Sosiaalinen Neuvo</translation> </message> <message> <source>Remarkable People</source> - <translation type="unfinished"></translation> + <translation>Erityiset Ihmiset</translation> </message> <message> <source>Education/Science/Factual</source> - <translation type="unfinished"></translation> + <translation>Koulutus/Tiede/Todellisuus</translation> </message> <message> <source>Nature/animals/Environment</source> - <translation type="unfinished"></translation> + <translation>Luonto/Eläimet/Ympäristö</translation> </message> <message> <source>Technology/Natural Sciences</source> - <translation type="unfinished"></translation> + <translation>Teknologia/Luonnontieteet</translation> </message> <message> <source>Medicine/Physiology/Psychology</source> - <translation type="unfinished"></translation> + <translation>Lääketiede/Psykologia</translation> </message> <message> <source>Foreign Countries/Expeditions</source> - <translation type="unfinished"></translation> + <translation>Vieraat Maat</translation> </message> <message> <source>Social/Spiritual Sciences</source> - <translation type="unfinished"></translation> + <translation>Sosiaaliset/Sprituaaliset Tieteet</translation> </message> <message> <source>Further Education</source> - <translation type="unfinished"></translation> + <translation>Koulutus</translation> </message> <message> <source>Languages</source> - <translation type="unfinished"></translation> + <translation>Kielet</translation> </message> <message> <source>Leisure/Hobbies</source> - <translation type="unfinished"></translation> + <translation>Vapaa-aika/Harrastukset</translation> </message> <message> <source>Tourism/Travel</source> - <translation type="unfinished"></translation> + <translation>Turismi/Matkailu</translation> </message> <message> <source>Handicraft</source> - <translation type="unfinished"></translation> + <translation>Käsityöt</translation> </message> <message> <source>Motoring</source> - <translation type="unfinished"></translation> + <translation>Moottoriajoneuvot</translation> </message> <message> <source>Fitness & Health</source> - <translation type="unfinished"></translation> + <translation>Terveys & Kuntoilu</translation> </message> <message> <source>Cooking</source> - <translation type="unfinished"></translation> + <translation>Ruoanlaitto</translation> </message> <message> <source>Advertizement/Shopping</source> - <translation type="unfinished"></translation> + <translation>Mainokset/Ostos</translation> </message> <message> <source>Gardening</source> - <translation type="unfinished"></translation> + <translation>Puutarhanhoito</translation> </message> <message> <source>Original Language</source> - <translation type="unfinished"></translation> + <translation>Vieras Kieli</translation> </message> <message> <source>Black & White</source> - <translation type="unfinished"></translation> + <translation>Musta & valkoinen</translation> </message> <message> <source>"Unpublished" Programmes</source> - <translation type="unfinished"></translation> + <translation>Ennen Julkaisematon</translation> </message> <message> <source>Live Broadcast</source> - <translation type="unfinished"></translation> + <translation>Suora Lähetys</translation> </message> <message> <source>currently running.</source> - <translation type="unfinished"></translation> + <translation>juuri lähetyksessä.</translation> </message> <message> <source>Successful.</source> - <translation type="unfinished"></translation> + <translation>Onnistui.</translation> </message> <message> <source>FAILED: xmltv ran but was interrupted.</source> - <translation type="unfinished"></translation> + <translation>Epäonnistui: xmltv ajoi mutta keskeytettiin.</translation> </message> <message> <source>FAILED: xmltv returned error code %1.</source> - <translation type="unfinished"></translation> + <translation>Epäonnistui: xmltv antoi virhekoodin %1.</translation> </message> <message> <source>mythfilldatabase ran, but did not insert any new data into the Guide for %1 of %2 sources. This can indicate a potential grabber failure.</source> - <translation type="unfinished"></translation> + <translation>mythfilldatabase ajoi, mutta ei toimittanut uusia ohjelmatietoja. Voi merkitä ongelmia.</translation> </message> <message> <source>Max Audio Channels</source> - <translation type="unfinished"></translation> + <translation>Max. Äänikanavia</translation> </message> <message> <source>5.1</source> @@ -10125,11 +10127,11 @@ </message> <message> <source>Run commercial flagger</source> - <translation type="unfinished"></translation> + <translation>Aja mainosten merkkaus</translation> </message> <message> <source>Run transcoder</source> - <translation type="unfinished"></translation> + <translation>Aja jälkikäsittely</translation> </message> <message> <source>Deferral days for Auto-Transcode jobs</source> @@ -10141,7 +10143,7 @@ </message> <message> <source>Run User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Aja käyttäjän työ #%1</translation> </message> <message> <source>This is the default value used for the 'Run %1' setting when a new scheduled recording is created.</source> @@ -10149,7 +10151,7 @@ </message> <message> <source>Merge short commercial breaks (in seconds)</source> - <translation type="unfinished"></translation> + <translation>Yhdistä lyhyet mainoskatkot (sekuntia)</translation> </message> <message> <source>Treat consecutive commercial breaks shorter than this as one break when skipping forward. Useful if you have to skip a few times during breaks. Applies to automatic skipping as well. Set to 0 to disable.</source> @@ -10250,41 +10252,41 @@ </message> <message> <source>Edit</source> - <translation type="unfinished">Muokkaa</translation> + <translation>Muokkaa</translation> </message> <message> <source>Add New Entry</source> - <translation type="unfinished"></translation> + <translation>Lisää Uusi</translation> </message> <message> <source>Playback Profiles</source> - <translation type="unfinished"></translation> + <translation>Toistoprofiilit</translation> </message> <message> <source>Current Video Playback Profile</source> - <translation type="unfinished"></translation> + <translation>Nykyinen Toistoprofiili</translation> </message> <message> <source>Add New</source> - <translation type="unfinished"></translation> + <translation>Lisää Uusi</translation> </message> <message> <source>Enter Playback Group Name</source> - <translation type="unfinished"></translation> + <translation>Anna Toistoryhmän Nimi</translation> </message> <message> <source>Sorry, playback group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Toistoryhmän nimi ei voi olla tyhjä.</translation> </message> <message> <source>Sorry, playback group name '%1' is already being used.</source> - <translation type="unfinished"></translation> + <translation>Toistoryhmän nimi %1 on jo käytössä.</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Virhe</translation> </message> <message> <source>Length of time an on-screen display window will be visible.</source> @@ -10632,47 +10634,47 @@ </message> <message> <source>Yes, Exit and Reboot</source> - <translation type="unfinished"></translation> + <translation>Kyllä, Poistu ja Käynnistä Uudelleen</translation> </message> <message> <source>DVD contains a bookmark</source> - <translation type="unfinished"></translation> + <translation>DVD sisältää kirjanmerkin</translation> </message> <message> <source>Play from bookmark</source> - <translation type="unfinished">Toista kirjanmerkistä</translation> + <translation>Toista kirjanmerkistä</translation> </message> <message> <source>Play from beginning</source> - <translation type="unfinished">Toista alusta</translation> + <translation>Toista alusta</translation> </message> <message> <source>The file for this recording is empty.</source> - <translation type="unfinished"></translation> + <translation>Tämän nauhoituksen tiedosto on tyhjä.</translation> </message> <message> <source>This recording is not yet available.</source> - <translation type="unfinished"></translation> + <translation>Tämä nauhoitus ei ole vielä saatavilla.</translation> </message> <message> <source>Move to Default group</source> - <translation type="unfinished"></translation> + <translation>Siirrä Oletus Ryhmään</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Palauta Poistettu</translation> </message> <message> <source>IP address</source> - <translation type="unfinished"></translation> + <translation>IP-osoite</translation> </message> <message> <source>Status Port</source> - <translation type="unfinished"></translation> + <translation>Tilaportti</translation> </message> <message> <source>Security Pin (Required)</source> - <translation type="unfinished"></translation> + <translation>PIN (vaadittu)</translation> </message> <message> <source>Pin code required for a frontend to connect to the backend. Blank prevents all connections, 0000 allows any client to connect.</source> @@ -10741,19 +10743,19 @@ </message> <message> <source>User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Käyttäjän Työ #%1</translation> </message> <message> <source>Allow %1 jobs</source> - <translation type="unfinished"></translation> + <translation>Salli %1 Työtä</translation> </message> <message> <source>Master Backend</source> - <translation type="unfinished"></translation> + <translation>Palvelin</translation> </message> <message> <source>Locale Settings</source> - <translation type="unfinished"></translation> + <translation>Paikallisasetukset</translation> </message> <message> <source>Miscellaneous Settings</source> @@ -10769,25 +10771,25 @@ </message> <message> <source>Slave Backends</source> - <translation type="unfinished"></translation> + <translation>Orja-Asiakkaat</translation> </message> <message> <source>Job Queue (Backend-Specific)</source> - <translation type="unfinished"></translation> + <translation>Työjono</translation> </message> <message> <source>Tuner %1 is recording: </source> - <translation type="unfinished">Viritin %1 nauhoittaa: + <translation>Viritin %1 nauhoittaa: </translation> </message> <message> <source>Tuner %1 is not recording</source> - <translation type="unfinished">Viritin %1 ei nauhoita</translation> + <translation>Viritin %1 ei nauhoita</translation> </message> <message> <source>Date Format</source> - <translation type="unfinished"></translation> + <translation>Päivämäärän Muoto</translation> </message> <message> <source>This is the format to use to display the date. See http://doc.trolltech.com/3.3/qdate.html#toString for a list of valid format specifiers.</source> @@ -10798,19 +10800,19 @@ <name>RecOptDialog</name> <message> <source>Missing Element</source> - <translation type="unfinished"></translation> + <translation>Puuttuva Elementti</translation> </message> <message> <source>The theme you are using does not contain a 'recording_options' element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Press EXIT to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Käytetty teema ei sisällä 'nauhoitusasetukset'-elementtiä.</translation> </message> <message> <source>Unknown Element</source> - <translation type="unfinished"></translation> + <translation>Tuntematon Elementti</translation> </message> <message> <source>The theme you are using contains an unknown element ('%1'). It will be ignored</source> - <translation type="unfinished">Käytetty teema sisältää tuntemattoman elementin (%1). + <translation>Käytetty teema sisältää tuntemattoman elementin (%1). Se ohitetaan</translation> </message> @@ -10819,11 +10821,11 @@ <name>RecordingProfileEditor</name> <message> <source>Add Recording Profile</source> - <translation type="unfinished"></translation> + <translation>Lisää Nauhoitusprofiili</translation> </message> <message> <source>Enter the name of the new profile</source> - <translation type="unfinished"></translation> + <translation>Uuden profiilin nimi</translation> </message> </context> <context> @@ -10987,25 +10989,25 @@ </message> <message> <source>M3U Import</source> - <translation type="unfinished"></translation> + <translation>M3U Tuonti</translation> </message> </context> <context> <name>ScanWizard</name> <message> <source>ScanWizard</source> - <translation type="unfinished"></translation> + <translation>ViritinVelho</translation> </message> <message> <source>Error parsing parameters</source> - <translation type="unfinished">Virhe parametreissa</translation> + <translation>Virhe parametreissa</translation> </message> </context> <context> <name>ScanWizardConfig</name> <message> <source>Scan Configuration</source> - <translation type="unfinished"></translation> + <translation>Viritinkonfiguraatio</translation> </message> </context> <context> @@ -11019,15 +11021,15 @@ <name>ScanWizardScanner</name> <message> <source>Scanning</source> - <translation type="unfinished">Selataan</translation> + <translation>Selataan</translation> </message> <message> <source>ScanWizard</source> - <translation type="unfinished">Viritysvelho</translation> + <translation>Viritysvelho</translation> </message> <message> <source>Error tuning to transport</source> - <translation type="unfinished">Virhe lähetysvirran virittämisessä</translation> + <translation>Virhe lähetysvirran virittämisessä</translation> </message> <message> <source>Error parsing parameters</source> @@ -11035,7 +11037,7 @@ </message> <message> <source>Error starting scan</source> - <translation type="unfinished">Virhe Etsinnässä</translation> + <translation>Virhe Etsinnässä</translation> </message> <message> <source>Failed to open : </source> @@ -11047,11 +11049,11 @@ </message> <message> <source>Failed to open '%1'</source> - <translation type="unfinished"></translation> + <translation>Ei saatu avattua '%1':stä</translation> </message> <message> <source>Failed to parse '%1'</source> - <translation type="unfinished"></translation> + <translation>Ei saatu parsittua '%1':stä</translation> </message> </context> <context> @@ -11134,54 +11136,54 @@ </message> <message> <source>%1 of these are LiveTV and consume %2</source> - <translation type="unfinished"></translation> + <translation>%1 näistä on LiveTV ja käyttää %2</translation> </message> <message> <source>is unavailable</source> - <translation type="unfinished"></translation> + <translation>ei ole saatavilla</translation> </message> <message> <source>standard rules are defined</source> - <translation type="unfinished"></translation> + <translation>normisääntöä on määritelty</translation> </message> <message> <source>search rules are defined</source> - <translation type="unfinished"></translation> + <translation>hakusääntöä on määritelty</translation> </message> <message> <source>Scheduled Run Time:</source> - <translation type="unfinished"></translation> + <translation>Aikataulutettu Ajoaika:</translation> </message> <message> <source>marked as HDTV</source> - <translation type="unfinished"></translation> + <translation>Merkitty HDTV:ksi</translation> </message> <message> <source>from source</source> - <translation type="unfinished"></translation> + <translation>lähteestä</translation> </message> <message> <source>on input</source> - <translation type="unfinished"></translation> + <translation>sisääntulosta</translation> </message> <message> <source>%1 of these are Deleted and consume %2</source> - <translation type="unfinished"></translation> + <translation>%1 näistä on poistettu ja käyttää %2</translation> </message> </context> <context> <name>StorageGroupEditor</name> <message> <source>'%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>'%1' Tallennusryhmäkansiot</translation> </message> <message> <source>Local '%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>Paikalliset '%1' Tallennusryhmäkansiot</translation> </message> <message> <source>Add Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>Lisää Tallennusryhmäkansio</translation> </message> <message> <source>Enter directory name or press SELECT to enter text via the On Screen Keyboard</source> @@ -11189,39 +11191,40 @@ </message> <message> <source>Edit Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>Muokkaa Tallennusryhmäkansiota</translation> </message> <message> <source>Remove '%1' Directory From Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Poista '%1' +Tallennusryhmäkansio?</translation> </message> <message> <source>Yes, remove directory</source> - <translation type="unfinished"></translation> + <translation>Kyllä, poista kansio</translation> </message> <message> <source>No, Don't remove directory</source> - <translation type="unfinished"></translation> + <translation>Ei, älä poista kansiota</translation> </message> <message> <source>(Add New Directory)</source> - <translation type="unfinished"></translation> + <translation>(Uusi Kansio)</translation> </message> </context> <context> <name>StorageGroupListEditor</name> <message> <source>Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Tallennusryhmät</translation> </message> <message> <source>Local Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Paikalliset Tallennusryhmät</translation> </message> <message> <source>Create New Storage Group</source> - <translation type="unfinished"></translation> + <translation>Luo uusi Tallennusryhmä</translation> </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> @@ -11229,19 +11232,19 @@ </message> <message> <source>Delete '%1' Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Poista '%1' Tallennusryhmä?</translation> </message> <message> <source>Yes, delete group</source> - <translation type="unfinished"></translation> + <translation>Kyllä, poista ryhmä</translation> </message> <message> <source>No, Don't delete group</source> - <translation type="unfinished">Älä poista</translation> + <translation>Älä poista</translation> </message> <message> <source>(Create %1 group)</source> - <translation type="unfinished"></translation> + <translation>(Luo %1 ryhmä)</translation> </message> </context> <context> @@ -11468,11 +11471,11 @@ </message> <message> <source>Auto-Expire OFF</source> - <translation>Aut. vanhentuminen pois</translation> + <translation>Aut. vanh. pois</translation> </message> <message> <source>Auto-Expire ON</source> - <translation>Aut. vanhentuminen päällä</translation> + <translation>Aut. vanh. päällä</translation> </message> <message> <source>Zoom Mode ON</source> @@ -11536,7 +11539,7 @@ </message> <message> <source>Commercial Auto-Skip</source> - <translation>Mainosten Automaattinen Sivuutus</translation> + <translation>Mainosten Aut. Ohitus</translation> </message> <message> <source>Turn Auto-Expire OFF</source> @@ -11544,7 +11547,7 @@ </message> <message> <source>Turn Auto-Expire ON</source> - <translation>Aut. Vanhentuminen Päälle</translation> + <translation>Aut. Vanhentuminen Päällä</translation> </message> <message> <source>Change Aspect Ratio</source> @@ -11700,11 +11703,11 @@ </message> <message> <source>Audio Sync</source> - <translation>Äänen Tahdistaminen</translation> + <translation>Äänen Tahdistus</translation> </message> <message> <source>Adjust Audio Sync</source> - <translation>Muokkaa Äänen Tahdistusta</translation> + <translation>Äänen Tahdistus</translation> </message> <message> <source>MythTV is already using all available inputs for the channel you selected. If you want to watch an in-progress recording, select one from the playback menu. If you want to watch live TV, cancel one of the in-progress recordings from the delete menu.</source> @@ -11781,20 +11784,20 @@ </message> <message> <source>S/N %1dB</source> - <translation type="unfinished"></translation> + <translation>Kohina %1db</translation> </message> <message> <source>BE %1</source> <comment>Bit Errors</comment> - <translation type="unfinished"></translation> + <translation>BVirhe %1</translation> </message> <message> <source>Speed 16X</source> - <translation type="unfinished">Nopeus 16X</translation> + <translation>Nopeus 16X</translation> </message> <message> <source>Speed 8X</source> - <translation type="unfinished">Nopeus 8X</translation> + <translation>Nopeus 8X</translation> </message> <message> <source>Speed 4X</source> @@ -11810,107 +11813,107 @@ </message> <message> <source>Swap PiP/Main</source> - <translation type="unfinished"></translation> + <translation>Vaihda Kuvakuvassa/Pää</translation> </message> <message> <source>Skip Still Frame</source> - <translation type="unfinished"></translation> + <translation>Ohita Pysäytyskuvaruutu</translation> </message> <message> <source>Next Title</source> - <translation type="unfinished"></translation> + <translation>Seuraava Nimike</translation> </message> <message> <source>DVD Root Menu</source> - <translation type="unfinished"></translation> + <translation>DVD Päävalikko</translation> </message> <message> <source>Schedule Recordings</source> - <translation type="unfinished"></translation> + <translation>Ajasta Nauhoituksia</translation> </message> <message> <source>Program Finder</source> - <translation type="unfinished"></translation> + <translation>OhjelmaHaut</translation> </message> <message> <source>Edit Recording Schedule</source> - <translation type="unfinished">Muuta Nauhoituksen Asetuksia</translation> + <translation>Muuta Nauhoituksen Asetuksia</translation> </message> <message> <source>Previous Title</source> - <translation type="unfinished"></translation> + <translation>Edellinen Nimike</translation> </message> <message> <source>Skip Back Not Allowed</source> - <translation type="unfinished"></translation> + <translation>Hyppäys Taakse Ei Sallittu</translation> </message> <message> <source>Channel Editor</source> - <translation type="unfinished"></translation> + <translation>Kanavaeditori</translation> </message> <message> <source>Callsign</source> - <translation type="unfinished">Nimike</translation> + <translation>Nimike</translation> </message> <message> <source>Channel #</source> - <translation type="unfinished"></translation> + <translation>Kanava #</translation> </message> <message> <source>Channel Name</source> - <translation type="unfinished">Kanavan Nimi</translation> + <translation>Kanavan Nimi</translation> </message> <message> <source>XMLTV ID</source> - <translation type="unfinished">XMLTV ID</translation> + <translation>XMLTV ID</translation> </message> <message> <source>[P]robe</source> - <translation type="unfinished"></translation> + <translation>[P]selaa</translation> </message> <message> <source>[O]k</source> - <translation type="unfinished"></translation> + <translation>[O]k</translation> </message> <message> <source>Jump to Program</source> - <translation type="unfinished"></translation> + <translation>Hyppää Ohjelmaan</translation> </message> <message> <source>Recorded Program</source> - <translation type="unfinished"></translation> + <translation>Nauhoitetut Ohjelmat</translation> </message> <message> <source>Default</source> - <translation type="unfinished">Oletus</translation> + <translation>Oletus</translation> </message> <message> <source>Autodetect</source> - <translation type="unfinished">Havaitse automaattisesti</translation> + <translation>Havaitse automaattisesti</translation> </message> <message> <source>High Quality</source> - <translation type="unfinished"></translation> + <translation>Korkea Laatu</translation> </message> <message> <source>Medium Quality</source> - <translation type="unfinished"></translation> + <translation>Keskimääräinen Laatu</translation> </message> <message> <source>Low Quality</source> - <translation type="unfinished"></translation> + <translation>Alhainen Laatu</translation> </message> <message> <source>Toggle Teletext Captions</source> - <translation type="unfinished"></translation> + <translation>Päälle/Pois Tekstitys</translation> </message> <message> <source>Toggle Teletext Menu</source> - <translation type="unfinished"></translation> + <translation>Päälle/Pois Tekstitelevisio</translation> </message> <message> <source>Toggle</source> - <translation type="unfinished"></translation> + <translation>Päälle/Pois</translation> </message> <message> <source>(I)</source> @@ -11929,174 +11932,174 @@ </message> <message> <source>Video Scan</source> - <translation type="unfinished"></translation> + <translation>Videon Pyyhkäisymedodi</translation> </message> <message> <source>Detect</source> - <translation type="unfinished"></translation> + <translation>Havaitse</translation> </message> <message> <source>Progressive</source> - <translation type="unfinished"></translation> + <translation>Progressiivinen</translation> </message> <message> <source>Interlaced (Normal)</source> - <translation type="unfinished"></translation> + <translation>Lomitettu (Normaali)</translation> </message> <message> <source>Interlaced (Reversed)</source> - <translation type="unfinished"></translation> + <translation>Lomitettu (Käänteinen)</translation> </message> <message> <source>Select Subtitle</source> - <translation type="unfinished"></translation> + <translation>Valitse Tekstitys</translation> </message> <message> <source>Select VBI CC</source> - <translation type="unfinished"></translation> + <translation>VBI-tekstitys</translation> </message> <message> <source>Select ATSC CC</source> - <translation type="unfinished"></translation> + <translation>ATSC-tekstitys</translation> </message> <message> <source>Select DVB CC</source> - <translation type="unfinished"></translation> + <translation>DVB-tekstitys</translation> </message> <message> <source>Toggle On/Off</source> - <translation type="unfinished"></translation> + <translation>Päälle/Pois</translation> </message> <message> <source>Rotor %1%</source> - <translation type="unfinished"></translation> + <translation>Roottori %1%</translation> </message> <message> <source>Chan %1: %2</source> - <translation type="unfinished"></translation> + <translation>Kanava %1: %2</translation> </message> <message> <source>All Tuners are Busy. Select a Current Recording</source> - <translation type="unfinished"></translation> + <translation>Kaikki Virittimet Käytössä</translation> </message> <message> <source>End Of Recording</source> - <translation type="unfinished"></translation> + <translation>Nauhoitus Lopussa</translation> </message> <message> <source>Last Program: %1 Doesn't Exist</source> - <translation type="unfinished"></translation> + <translation>Viimeisin Ohjelma: %1 Ei ole Olemassa</translation> </message> <message> <source>Delete this recording?</source> - <translation type="unfinished"></translation> + <translation>Poista tämä nauhoitus?</translation> </message> <message> <source>DVD</source> - <translation type="unfinished"></translation> + <translation>DVD</translation> </message> <message> <source>Menu</source> - <translation type="unfinished">Valikko</translation> + <translation>Valikko</translation> </message> <message> <source>Still Frame</source> - <translation type="unfinished"></translation> + <translation>Pysäytyskuva</translation> </message> <message> <source>Title: %1 (%2)</source> - <translation type="unfinished"></translation> + <translation>Nimike: %1 (%2)</translation> </message> <message> <source>Chapter: %1/%2</source> - <translation type="unfinished"></translation> + <translation>Kappale: %1/%2</translation> </message> <message> <source>DVD Chapter Menu</source> - <translation type="unfinished"></translation> + <translation>DVD Kappalevalikko</translation> </message> <message> <source>'%1' Group Password:</source> - <translation type="unfinished"></translation> + <translation>'%1' Ryhmän Salasana:</translation> </message> <message> <source>Password Failed</source> - <translation type="unfinished"></translation> + <translation>Salasana Virheellinen</translation> </message> <message> <source>Screen Shot</source> - <translation type="unfinished"></translation> + <translation>Kuvankaappaus</translation> </message> <message> <source>Exit</source> - <translation type="unfinished">Poistu</translation> + <translation>Poistu</translation> </message> <message> <source>MythTV wants to record "%1" on %2 in %d seconds. Do you want to:</source> - <translation type="unfinished"></translation> + <translation>MythTV haluaa nauhoittaa "%1" %2 sekunnin päästä. Haluatko:</translation> </message> <message> <source>Let them record and go back to the Main Menu</source> - <translation type="unfinished"></translation> + <translation>Nauhoittaa ja palata Päävalikkoon</translation> </message> <message> <source>Record it later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Nauhoittaa myöhemmin, jatkaen LiveTV:n puolella</translation> </message> <message> <source>Record them later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Nauhoittaa myöhemmin, jatkaen LiveTV:n puolella</translation> </message> <message> <source>Don't let them record, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Ei nauhoiteta myöhemmin, jatketaan LiveTV:n puolella</translation> </message> <message> <source>You should have gotten a channel lock by now. You can continue to wait for a signal, or you can change the channels with %1 or %2, change video source (%3), inputs (%4), etc.</source> - <translation type="unfinished"></translation> + <translation>Kanava olisi pitänyt virittäytyä jo. Kanavaa voidaan vaihtaa (%1 -- %2).</translation> </message> <message> <source>Yes</source> - <translation type="unfinished">Kyllä</translation> + <translation>Kyllä</translation> </message> <message> <source>Adjust Fill</source> - <translation type="unfinished"></translation> + <translation>Säädä Täyttöä</translation> </message> <message> <source>Switch Input</source> - <translation type="unfinished"></translation> + <translation>Vaihda Sisääntuloa</translation> </message> <message> <source>C</source> <comment>Card</comment> - <translation type="unfinished">C</translation> + <translation>C</translation> </message> <message> <source>I</source> <comment>Input</comment> - <translation type="unfinished"></translation> + <translation>I</translation> </message> <message> <source>Switch Source</source> - <translation type="unfinished"></translation> + <translation>Vaihda Lähdettä</translation> </message> <message> <source>Upcoming Recordings</source> - <translation type="unfinished"></translation> + <translation>Tulevat Nauhoitukset</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Virhe</translation> </message> <message> <source>You are exiting %1</source> - <translation type="unfinished"></translation> + <translation>Poistutaan %1:sta</translation> </message> <message> <source>Exit %1</source> - <translation type="unfinished"></translation> + <translation>Poistu %1:sta</translation> </message> </context> <context> @@ -12271,7 +12274,7 @@ </message> <message> <source>Welcome to MythTV</source> - <translation>Tervetuloa MythTV:oon</translation> + <translation type="unfinished">Tervetuloa MythTelevisioon</translation> </message> <message> <source>MythTV is idle and will shutdown shortly.</source> @@ -12302,57 +12305,57 @@ <name>TransportList</name> <message> <source>New Transport</source> - <translation type="unfinished"></translation> + <translation>Uusi Lähetysvirta</translation> </message> </context> <context> <name>TransportListEditor</name> <message> <source>Are you sure you would like to delete this transport?</source> - <translation type="unfinished">Poistetaanko tämä?</translation> + <translation>Poistetaanko tämä?</translation> </message> <message> <source>Yes, delete the transport</source> - <translation type="unfinished">Kyllä</translation> + <translation>Kyllä</translation> </message> <message> <source>No, don't</source> - <translation type="unfinished"></translation> + <translation>Ei</translation> </message> <message> <source>Transport Menu</source> - <translation type="unfinished">Valikko</translation> + <translation>Valikko</translation> </message> <message> <source>Edit..</source> - <translation type="unfinished">Muokkaa..</translation> + <translation>Muokkaa..</translation> </message> <message> <source>Delete..</source> - <translation type="unfinished">Poista..</translation> + <translation>Poista..</translation> </message> <message> <source>Multiplex Editor</source> - <translation type="unfinished"></translation> + <translation>Multiplex-muokkain</translation> </message> </context> <context> <name>UIListBtnType</name> <message> <source>Search</source> - <translation type="unfinished">Haku</translation> + <translation>Haku</translation> </message> <message> <source>Starts with text</source> - <translation type="unfinished">Alkaa tekstillä</translation> + <translation>Alkaa tekstillä</translation> </message> <message> <source>Contains text</source> - <translation type="unfinished">Sisältää tekstin</translation> + <translation>Sisältää tekstin</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Peruuta</translation> + <translation>Peruuta</translation> </message> </context> <context> @@ -12378,15 +12381,15 @@ <name>V4LConfigurationGroup</name> <message> <source>Probed info</source> - <translation type="unfinished"></translation> + <translation>Haettu tieto</translation> </message> <message> <source>Failed to open</source> - <translation type="unfinished"></translation> + <translation>Ei saatu avattua</translation> </message> <message> <source>Failed to probe</source> - <translation type="unfinished"></translation> + <translation>Ei saatu haettua</translation> </message> </context> <context> @@ -12432,7 +12435,7 @@ <name>VideoSourceSelector</name> <message> <source>Video Source</source> - <translation type="unfinished">Videon Lähde</translation> + <translation>Videon Lähde</translation> </message> </context> <context> @@ -12470,15 +12473,15 @@ </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>Poista '%1' %2 sääntö?</translation> </message> <message> <source>Conflict Today</source> - <translation type="unfinished"></translation> + <translation>Ristiriita Tänään</translation> </message> <message> <source>Conflict </source> - <translation type="unfinished"></translation> + <translation>Ristiriita</translation> </message> </context> <context> @@ -12595,11 +12598,11 @@ </message> <message> <source>to</source> - <translation type="unfinished"></translation> + <translation>-</translation> </message> <message> <source>MythTV has running or pending jobs.</source> - <translation type="unfinished"></translation> + <translation>MythTV:lla on suorittamattomia töitä jonossa.</translation> </message> </context> </TS> Dateien mythtv-0.21/i18n/mythfrontend_he.qm und mythtv/i18n/mythfrontend_he.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_he.ts mythtv/i18n/mythfrontend_he.ts --- mythtv-0.21/i18n/mythfrontend_he.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_he.ts 2008-03-21 10:27:07.000000000 +0100 @@ -66,19 +66,19 @@ <name>BackendSelect</name> <message> <source>Please select default Myth Backend Server</source> - <translation type="unfinished"></translation> + <translation>בחר שרת ברירת מחדל</translation> </message> <message> <source>OK</source> - <translation type="unfinished"></translation> + <translation>OK</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">ביטול</translation> + <translation>ביטול</translation> </message> <message> <source>Configure Manually</source> - <translation type="unfinished"></translation> + <translation>בחר ידנית</translation> </message> </context> <context> @@ -171,30 +171,30 @@ </message> <message> <source>Create Input Group</source> - <translation type="unfinished"></translation> + <translation>צור קבוצת כניסה</translation> </message> <message> <source>Enter new group name</source> - <translation type="unfinished"></translation> + <translation>הכנס שם קבוצה חדש</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>שגיאה</translation> </message> <message> <source>Sorry, this Input Group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>סליחה, שם קבוצה אינו יכול להיות ריק.</translation> </message> <message> <source>Sorry, this Input Group name is already in use.</source> - <translation type="unfinished"></translation> + <translation>סליחה, שם קבוצה זה כבר בשימוש.</translation> </message> </context> <context> <name>CardInputEditor</name> <message> <source>Input connections</source> - <translation type="unfinished">Input connections</translation> + <translation>מחברי כניסה</translation> </message> </context> <context> @@ -245,35 +245,35 @@ </message> <message> <source>Are you sure you would like to delete ALL channels?</source> - <translation type="unfinished"></translation> + <translation>האם אתה בטוח שברצונך למחוק את כל הערוצים ?</translation> </message> <message> <source>Are you sure you would like to delete all unassigned channels?</source> - <translation type="unfinished"></translation> + <translation>האם אתה בטוח שברצונך למחוק את כל הערוצים הלא משוייכים ?</translation> </message> <message> <source>Are you sure you would like to delete the channels on %1?</source> - <translation type="unfinished"></translation> + <translation>האם אתה בטוח שברצונך למחוק את כל הערוצים ב%1 ?</translation> </message> <message> <source>Add some for channels first!</source> - <translation type="unfinished"></translation> + <translation>הוסף מספר ערוצים תחילה!</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">ביטול</translation> + <translation>ביטול</translation> </message> <message> <source>Download all icons..</source> - <translation type="unfinished"></translation> + <translation>הורד אייקונים מהרשת..</translation> </message> <message> <source>Rescan for missing icons..</source> - <translation type="unfinished"></translation> + <translation>סרוק לאייקונים חסרים..</translation> </message> <message> <source>Download icon for </source> - <translation type="unfinished"></translation> + <translation>הורד אייקון עבור</translation> </message> </context> <context> @@ -475,23 +475,23 @@ </message> <message> <source>stored search</source> - <translation type="unfinished"></translation> + <translation>חיפוש שמור</translation> </message> <message> <source>Add</source> - <translation type="unfinished"></translation> + <translation>הוסף</translation> </message> <message> <source>Match this series</source> - <translation type="unfinished"></translation> + <translation>התאם לסדרה זו</translation> </message> <message> <source>Match words in the subtitle</source> - <translation type="unfinished"></translation> + <translation>התאם למילים בכותרת משנה</translation> </message> <message> <source>Only shows marked as widescreen</source> - <translation type="unfinished"></translation> + <translation>רק מופעים המסומנים כמסך רחב</translation> </message> <message> <source>Exclude H.264 encoded streams (EIT only)</source> @@ -904,6 +904,14 @@ <source>Western</source> <translation type="unfinished">Western</translation> </message> + <message> + <source>Voltage</source> + <translation type="unfinished"></translation> + </message> + <message> + <source>Mini DiSEqC</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>FirewireDesc</name> @@ -923,51 +931,52 @@ <name>InfoDialog</name> <message> <source>Record this program whenever it's shown anywhere</source> - <translation type="unfinished"></translation> + <translation>הקלט תוכנית בכל זמן בכל ערוץ</translation> </message> <message> <source>Record this program whenever it's shown on this channel</source> - <translation type="unfinished"></translation> + <translation>הקלט תוכנית זו בכל זמן שהוא בערוץ זה</translation> </message> <message> <source>Record this program in this timeslot every week</source> - <translation type="unfinished"></translation> + <translation>הקלט תוכנית זו באותו זמן בכל שבוע</translation> </message> <message> <source>Record this program in this timeslot every day</source> - <translation type="unfinished"></translation> + <translation>הקלט תוכנית זו באותו זמן בכל יום</translation> </message> <message> <source>Record one showing of this title</source> - <translation type="unfinished">הקלטה יחדה של כותר זה</translation> + <translation>הקלטה יחדה של כותר זה</translation> </message> <message> <source>Record only this showing of the program</source> - <translation type="unfinished"></translation> + <translation>הקלט שידור זה של התוכנית</translation> </message> <message> <source>Don't record this program</source> - <translation type="unfinished"></translation> + <translation>אל תקליט תוכנית זו</translation> </message> <message> <source>Don't record this showing</source> - <translation type="unfinished"></translation> + <translation>אל תקליט שידור זה של התוכנית</translation> </message> <message> <source>Record this showing with override options</source> - <translation>Record this showing with override options</translation> + <translation>הקלט מופע זה של התוכנית באופציית עקיפה +</translation> </message> <message> <source>Record this showing with normal options</source> - <translation>Record this showing with normal options</translation> + <translation>הקלט מופע זה של התוכנית באופציה רגילה</translation> </message> <message> <source>To go to the advanced recordings screen, press 'i'</source> - <translation>To go to the advanced recordings screen, press 'i'</translation> + <translation>למסך אפשרויות הקלטה מתקדמות הקש 'i'</translation> </message> <message> <source>To see a list of all up-coming showings of this program, press '5'</source> - <translation type="unfinished"></translation> + <translation>לצפיה ברשימת מופעים עתידים של תוכנית זו הקש 'S'</translation> </message> </context> <context> @@ -981,19 +990,19 @@ <name>JobQueue</name> <message> <source>Transcode</source> - <translation>Transcode</translation> + <translation>המרה</translation> </message> <message> <source>Flag Commercials</source> - <translation>Flag Commercials</translation> + <translation>סמן פרסומות</translation> </message> <message> <source>Unknown Job</source> - <translation type="unfinished"></translation> + <translation>משימה לא ידועה</translation> </message> <message> <source>Undefined</source> - <translation>Undefined</translation> + <translation>לא מוגדר</translation> </message> </context> <context> @@ -1015,19 +1024,19 @@ <name>ManualBox</name> <message> <source>Manual Recording</source> - <translation type="unfinished"></translation> + <translation>הקלטה ידנית</translation> </message> <message> <source>Title:</source> - <translation>Title:</translation> + <translation>כותרת:</translation> </message> <message> <source>Subtitle:</source> - <translation>Subtitle:</translation> + <translation>כותרת משנה:</translation> </message> <message> <source>Duration:</source> - <translation>Duration:</translation> + <translation>משך:</translation> </message> <message> <source>minutes</source> @@ -1035,7 +1044,7 @@ </message> <message> <source>Start</source> - <translation>Start</translation> + <translation>תחילת</translation> </message> <message> <source>Stop</source> @@ -1046,35 +1055,35 @@ <name>ManualSchedule</name> <message> <source>Manual Recording Scheduler</source> - <translation type="unfinished"></translation> + <translation>מתזמן הקלטות ידני</translation> </message> <message> <source>Channel:</source> - <translation type="unfinished">:ערוץ</translation> + <translation>ערוץ:</translation> </message> <message> <source>Date or day of the week</source> - <translation type="unfinished"></translation> + <translation>תאריך או יום בשבוע</translation> </message> <message> <source>5 weekdays if daily</source> - <translation>5 weekdays if daily</translation> + <translation>אמצע השבוע אם יומי</translation> </message> <message> <source>7 days per week if daily</source> - <translation>7 days per week if daily</translation> + <translation>7 ימים אם יומי</translation> </message> <message> <source>Time:</source> - <translation>Time:</translation> + <translation>זמן:</translation> </message> <message> <source>Duration:</source> - <translation>Duration:</translation> + <translation>משך:</translation> </message> <message> <source>minute</source> - <translation>minute</translation> + <translation>דקה</translation> </message> <message> <source>minutes</source> @@ -1082,11 +1091,11 @@ </message> <message> <source>Title (optional):</source> - <translation>Title (optional):</translation> + <translation>כותרת (אופציונאלי):</translation> </message> <message> <source>Set Recording Options</source> - <translation>Set Recording Options</translation> + <translation>קבע אפשרויות הקלטה</translation> </message> <message> <source>Cancel</source> @@ -1094,57 +1103,57 @@ </message> <message> <source>Manual Record</source> - <translation type="unfinished"></translation> + <translation>הקלטה ידנית</translation> </message> </context> <context> <name>MediaMonitor</name> <message> <source>Cancel</source> - <translation type="unfinished">ביטול</translation> + <translation>ביטול</translation> </message> <message> <source>Select removable media to eject or insert</source> - <translation type="unfinished"></translation> + <translation>בחר מדיה להכניס או להוציא</translation> </message> <message> <source>No devices to eject</source> - <translation type="unfinished"></translation> + <translation>אין התקן להוציא</translation> </message> <message> <source>Failed to unmount %1</source> - <translation type="unfinished"></translation> + <translation>לא מצליח לנתק את %1</translation> </message> <message> <source>You may safely remove %1</source> - <translation type="unfinished"></translation> + <translation>ניתן לנתק את %1 בביטחה</translation> </message> <message> <source>Failed to eject %1</source> - <translation type="unfinished"></translation> + <translation>לא מצליח להוציא את %1</translation> </message> <message> <source>Select a CD drive</source> - <translation type="unfinished"></translation> + <translation>בחר כונן CD</translation> </message> <message> <source>Select a VCD drive</source> - <translation type="unfinished"></translation> + <translation>בחר כונן VCD</translation> </message> <message> <source>Select a DVD drive</source> - <translation type="unfinished"></translation> + <translation>בחר כונן DVD</translation> </message> <message> <source>Select a DVD writer</source> - <translation type="unfinished"></translation> + <translation>בחר צורב DVD</translation> </message> </context> <context> <name>MultiplexSetting</name> <message> <source>Transport</source> - <translation type="unfinished">Transport</translation> + <translation>שינוע</translation> </message> </context> <context> @@ -1238,7 +1247,7 @@ </message> <message> <source>Cancel</source> - <translation>ביטול</translation> + <translation type="unfinished">בטל</translation> </message> </context> <context> @@ -1290,11 +1299,11 @@ </message> <message> <source>Create New Playback Group</source> - <translation type="unfinished"></translation> + <translation>צור קבוצת צפיה חדשה</translation> </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished"></translation> + <translation>הכנס שם קבוצה או SELECT לשימוש במקלדת וירטואלית</translation> </message> <message> <source>Delete playback group:</source> @@ -1473,15 +1482,15 @@ </message> <message> <source>Change Recording Group</source> - <translation>Change Recording Group</translation> + <translation>שנה קבוצת הקלטה</translation> </message> <message> <source>Change Playback Group</source> - <translation>Change Playback Group</translation> + <translation>שנה קבוצת צפיה</translation> </message> <message> <source>Job Options</source> - <translation>Job Options</translation> + <translation>אפשרויות עבודה</translation> </message> <message> <source>Delete</source> @@ -1529,11 +1538,11 @@ </message> <message> <source>Do not preserve this episode</source> - <translation type="unfinished"></translation> + <translation>אל תשמר פרק זה</translation> </message> <message> <source>Preserve this episode</source> - <translation type="unfinished"></translation> + <translation>שמר פרק זה</translation> </message> <message> <source>Edit Recording Schedule</source> @@ -1545,7 +1554,7 @@ </message> <message> <source>Change Recording Title</source> - <translation>Change Recording Title</translation> + <translation>שנה את שם ההקלטה</translation> </message> <message> <source>User Job</source> @@ -1577,11 +1586,11 @@ </message> <message> <source>Remove from Playlist</source> - <translation>Remove from Playlist</translation> + <translation>הסר מרשימת צפיה</translation> </message> <message> <source>Add to Playlist</source> - <translation>Add to Playlist</translation> + <translation>הוסף לרשימת צפיה</translation> </message> <message> <source>Stop Recording</source> @@ -1589,11 +1598,11 @@ </message> <message> <source>Storage Options</source> - <translation>Storage Options</translation> + <translation>אפשרויות אכסון</translation> </message> <message> <source>Recording Options</source> - <translation>Recording Options</translation> + <translation>אפשרויות הקלטה</translation> </message> <message> <source>Status Icons</source> @@ -1601,7 +1610,7 @@ </message> <message> <source>Commercials are flagged</source> - <translation type="unfinished"></translation> + <translation>פרסומות סומנו</translation> </message> <message> <source>An editing cutlist is present</source> @@ -1753,27 +1762,27 @@ </message> <message> <source>Delete, and allow re-record</source> - <translation type="unfinished"></translation> + <translation>מחק, ואפשר להקליט מחדש</translation> </message> <message> <source>Allow this program to re-record</source> - <translation type="unfinished"></translation> + <translation>אפשר לתוכנית זו להקליט מחדש</translation> </message> <message> <source>Mark as Unwatched</source> - <translation type="unfinished"></translation> + <translation>סמן כלא נצפה</translation> </message> <message> <source>Mark as Watched</source> - <translation type="unfinished"></translation> + <translation>סמן כנצפה</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>בטל מחיקה</translation> </message> <message> <source>Delete Forever</source> - <translation type="unfinished"></translation> + <translation>מחק לצמיתות</translation> </message> <message> <source>Recording is in Mono</source> @@ -1915,7 +1924,7 @@ </message> <message> <source>Select Sort Order</source> - <translation>Select Sort Order</translation> + <translation>בחר סדר מיון</translation> </message> <message> <source>Sort by Time</source> @@ -1923,7 +1932,7 @@ </message> <message> <source>Reverse Time</source> - <translation>Reverse Time</translation> + <translation>הפוך זמן</translation> </message> <message> <source>Sort by Title</source> @@ -1931,11 +1940,11 @@ </message> <message> <source>Reverse Title</source> - <translation>Reverse Title</translation> + <translation>הפוך כותרתReverse Title</translation> </message> <message> <source>NOTE: removing items from this list will not delete any recordings.</source> - <translation type="unfinished"></translation> + <translation>שים לב:מחיקת פריטים מרשימה זו אינה מוחקת את ההקלטה.</translation> </message> <message> <source>OK</source> @@ -1943,7 +1952,7 @@ </message> <message> <source>Allow this episode to re-record</source> - <translation type="unfinished"></translation> + <translation>אפשר לפרק זה להקליט מחדש</translation> </message> <message> <source>Never record this episode</source> @@ -1951,7 +1960,7 @@ </message> <message> <source>Remove this episode from the list</source> - <translation type="unfinished"></translation> + <translation>מחק פרק זה מהרשימה</translation> </message> <message> <source>Remove all episodes for this title</source> @@ -1959,11 +1968,11 @@ </message> <message> <source>Time</source> - <translation type="unfinished"></translation> + <translation>זמן</translation> </message> <message> <source>Title</source> - <translation type="unfinished">Title</translation> + <translation>כותרתTitle</translation> </message> </context> <context> @@ -1996,7 +2005,7 @@ </message> <message> <source>New Title Search</source> - <translation>חיפוש כותר חגד</translation> + <translation>חיפוש כותר חדש</translation> </message> <message> <source>Title Search</source> @@ -2028,11 +2037,11 @@ </message> <message> <source>Movie Search</source> - <translation>Movie Search</translation> + <translation>חיפוש סרטים</translation> </message> <message> <source>Time Search</source> - <translation>Time Search</translation> + <translation>חיפוש זמן</translation> </message> <message> <source>Unknown Search</source> @@ -2052,15 +2061,15 @@ </message> <message> <source>Select List</source> - <translation>Select List</translation> + <translation>בחר רשימה</translation> </message> <message> <source>Select</source> - <translation>Select</translation> + <translation>בחר</translation> </message> <message> <source>Select Phrase</source> - <translation>Select Phrase</translation> + <translation>בחר ביטוי</translation> </message> <message> <source><New Phrase></source> @@ -2076,11 +2085,11 @@ </message> <message> <source>Record</source> - <translation>Record</translation> + <translation>הקלט</translation> </message> <message> <source>Select Search</source> - <translation>Select Search</translation> + <translation>בחר חיפוש</translation> </message> <message> <source><New Search></source> @@ -2092,27 +2101,27 @@ </message> <message> <source>Select Time</source> - <translation>Select Time</translation> + <translation>בחר זמן</translation> </message> <message> <source>Edit Power Search Fields</source> - <translation type="unfinished"></translation> + <translation>בחר שדות חיפוש מתקדם</translation> </message> <message> <source>Optional title phrase:</source> - <translation type="unfinished"></translation> + <translation>ביטוי כותרת אפשרי:</translation> </message> <message> <source>Optional subtitle phrase:</source> - <translation>Optional subtitle phrase:</translation> + <translation>ביטוי כותרת משנה אפשרי:</translation> </message> <message> <source>Optional description phrase:</source> - <translation type="unfinished"></translation> + <translation>ביטוי תאור אפשרי:</translation> </message> <message> <source>(Any Program Type)</source> - <translation type="unfinished"></translation> + <translation>(כל סוג תוכנית)</translation> </message> <message> <source>Movies</source> @@ -2120,15 +2129,15 @@ </message> <message> <source>Series</source> - <translation>Series</translation> + <translation>סדרה</translation> </message> <message> <source>Show</source> - <translation>Show</translation> + <translation>מופע</translation> </message> <message> <source>Sports</source> - <translation>Sports</translation> + <translation>ספורט</translation> </message> <message> <source>(Any Genre)</source> @@ -2136,7 +2145,7 @@ </message> <message> <source>(Any Station)</source> - <translation>(Any Station)</translation> + <translation>(כל תחנה)</translation> </message> <message> <source>All</source> @@ -2144,11 +2153,11 @@ </message> <message> <source>Premieres</source> - <translation>Premieres</translation> + <translation>בכורה</translation> </message> <message> <source>Specials</source> - <translation>Specials</translation> + <translation>מיוחד</translation> </message> <message> <source>4 stars</source> @@ -2168,59 +2177,59 @@ </message> <message> <source>Power Recording Rule</source> - <translation type="unfinished"></translation> + <translation>הוראת הקלטה מתקדמת</translation> </message> <message> <source>Stored Search</source> - <translation type="unfinished"></translation> + <translation>חיפוש שמור</translation> </message> <message> <source>Select a search stored from</source> - <translation type="unfinished"></translation> + <translation>בחר חיפוש שמור מ</translation> </message> <message> <source>Custom Record</source> - <translation type="unfinished"></translation> + <translation>הקלטה מותאמת</translation> </message> <message> <source>0 .. 9 moves to Nx10 percent in list</source> - <translation type="unfinished"></translation> + <translation>0..9 מעביר לNx10 אחוז ברשימה</translation> </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>מחק הוראה '%1' $2 ?</translation> </message> <message> <source>Unrated</source> - <translation type="unfinished"></translation> + <translation>ללא דרוג</translation> </message> <message> <source>At least ***/</source> - <translation type="unfinished"></translation> + <translation>לפחות ***/</translation> </message> <message> <source>At least ***</source> - <translation type="unfinished"></translation> + <translation>לפחות ***</translation> </message> <message> <source>At least **/</source> - <translation type="unfinished"></translation> + <translation>לפחות **/</translation> </message> <message> <source>At least **</source> - <translation type="unfinished"></translation> + <translation>לפחות **</translation> </message> <message> <source>At least */</source> - <translation type="unfinished"></translation> + <translation>לפחות */</translation> </message> <message> <source>At least *</source> - <translation type="unfinished"></translation> + <translation>לפחות *</translation> </message> <message> <source>At least /</source> - <translation type="unfinished"></translation> + <translation>לפחות /</translation> </message> </context> <context> @@ -2239,47 +2248,47 @@ </message> <message> <source>Recording %1 of %2</source> - <translation>Recording %1 of %2</translation> + <translation>מקליט %1 מתוך %2</translation> </message> <message> <source>Recording just this showing</source> - <translation>Recording just this showing</translation> + <translation>מקליט רק מופע זה</translation> </message> <message> <source>Recording with override options</source> - <translation>Recording with override options</translation> + <translation>מקליט באפשרויות עקיפה</translation> </message> <message> <source>Recording every week</source> - <translation>Recording every week</translation> + <translation>מקליט כל שבוע</translation> </message> <message> <source>Recording in this timeslot</source> - <translation>Recording in this timeslot</translation> + <translation>מקליט בזמן שידור זה</translation> </message> <message> <source>Recording on this channel</source> - <translation type="unfinished"></translation> + <translation>מקליט בערוץ זה</translation> </message> <message> <source>Recording all showings</source> - <translation type="unfinished"></translation> + <translation>מקליט כל המופעים</translation> </message> <message> <source>Recording one showing</source> - <translation>Recording one showing</translation> + <translation>מקליט מופע אחד</translation> </message> <message> <source>Recording a showing daily</source> - <translation>Recording a showing daily</translation> + <translation>מקליט מופע באופן יומי</translation> </message> <message> <source>Recording a showing weekly</source> - <translation>Recording a showing weekly</translation> + <translation>מקליט מופע באופן שבועי</translation> </message> <message> <source>Not allowed to record this showing</source> - <translation type="unfinished"></translation> + <translation>לא מורשה להקליט מופע זה</translation> </message> <message> <source>Not recording this showing</source> @@ -2291,7 +2300,7 @@ </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>מחק הוראת הקלטה '%1' %2 ?</translation> </message> </context> <context> @@ -2414,339 +2423,339 @@ </message> <message> <source>Any</source> - <translation>Any</translation> + <translation>כל</translation> </message> <message> <source>Education</source> - <translation>Education</translation> + <translation>חינוכי</translation> </message> <message> <source>Entertainment</source> - <translation>Entertainment</translation> + <translation>בידור</translation> </message> <message> <source>Movie</source> - <translation>Movie</translation> + <translation>סרט</translation> </message> <message> <source>News</source> - <translation>News</translation> + <translation>חדשות</translation> </message> <message> <source>Religious</source> - <translation>Religious</translation> + <translation>דת</translation> </message> <message> <source>Sports</source> - <translation>Sports</translation> + <translation>ספורט</translation> </message> <message> <source>Other</source> - <translation>Other</translation> + <translation>אחר</translation> </message> <message> <source>Action</source> - <translation>Action</translation> + <translation>פעולה</translation> </message> <message> <source>Advertisement</source> - <translation>Advertisement</translation> + <translation>פירסומת</translation> </message> <message> <source>Animated</source> - <translation>Animated</translation> + <translation>הנפשה</translation> </message> <message> <source>Anthology</source> - <translation>Anthology</translation> + <translation>קובץ</translation> </message> <message> <source>Automobile</source> - <translation>Automobile</translation> + <translation>רכב</translation> </message> <message> <source>Awards</source> - <translation>Awards</translation> + <translation>פרסים</translation> </message> <message> <source>Baseball</source> - <translation>Baseball</translation> + <translation>כדור בסיס</translation> </message> <message> <source>Basketball</source> - <translation>Basketball</translation> + <translation>כדורסל</translation> </message> <message> <source>Bulletin</source> - <translation>Bulletin</translation> + <translation>מבזק</translation> </message> <message> <source>Business</source> - <translation>Business</translation> + <translation>עסקים</translation> </message> <message> <source>Classical</source> - <translation>Classical</translation> + <translation>קלאסי</translation> </message> <message> <source>College</source> - <translation>College</translation> + <translation>מכללות</translation> </message> <message> <source>Combat</source> - <translation>Combat</translation> + <translation>קרב</translation> </message> <message> <source>Comedy</source> - <translation>Comedy</translation> + <translation>קומדיה</translation> </message> <message> <source>Commentary</source> - <translation>Commentary</translation> + <translation>פרשנות</translation> </message> <message> <source>Concert</source> - <translation>Concert</translation> + <translation>קונצרט</translation> </message> <message> <source>Consumer</source> - <translation>Consumer</translation> + <translation>צרכנות</translation> </message> <message> <source>Contemporary</source> - <translation>Contemporary</translation> + <translation>בר זמננו</translation> </message> <message> <source>Crime</source> - <translation>Crime</translation> + <translation>פשע</translation> </message> <message> <source>Dance</source> - <translation>Dance</translation> + <translation>מחול</translation> </message> <message> <source>Documentary</source> - <translation>Documentary</translation> + <translation>תעודי</translation> </message> <message> <source>Drama</source> - <translation>Drama</translation> + <translation>דרמה</translation> </message> <message> <source>Elementary</source> - <translation>Elementary</translation> + <translation>אלמנטרי</translation> </message> <message> <source>Erotica</source> - <translation>Erotica</translation> + <translation>ארוטיקה</translation> </message> <message> <source>Exercise</source> - <translation>Exercise</translation> + <translation>תרגול</translation> </message> <message> <source>Fantasy</source> - <translation>Fantasy</translation> + <translation>פנטזיה</translation> </message> <message> <source>Farm</source> - <translation>Farm</translation> + <translation>חווה</translation> </message> <message> <source>Fashion</source> - <translation>Fashion</translation> + <translation>אופנה</translation> </message> <message> <source>Fiction</source> - <translation>Fiction</translation> + <translation>סיפורת</translation> </message> <message> <source>Food</source> - <translation>Food</translation> + <translation>אוכל</translation> </message> <message> <source>Football</source> - <translation>Football</translation> + <translation>כדורגל</translation> </message> <message> <source>Foreign</source> - <translation>Foreign</translation> + <translation>זר</translation> </message> <message> <source>Fund Raiser</source> - <translation>Fund Raiser</translation> + <translation>גיוס כספים</translation> </message> <message> <source>Game/Quiz</source> - <translation>Game/Quiz</translation> + <translation>משחק/חידון</translation> </message> <message> <source>Garden</source> - <translation>Garden</translation> + <translation>גינה</translation> </message> <message> <source>Golf</source> - <translation>Golf</translation> + <translation>גולף</translation> </message> <message> <source>Government</source> - <translation>Government</translation> + <translation>ממשל</translation> </message> <message> <source>Health</source> - <translation>Health</translation> + <translation>בריאות</translation> </message> <message> <source>High School</source> - <translation>High School</translation> + <translation>ביה"ס תיכון</translation> </message> <message> <source>History</source> - <translation>History</translation> + <translation>היסטוריה</translation> </message> <message> <source>Hobby</source> - <translation>Hobby</translation> + <translation>תחביב</translation> </message> <message> <source>Hockey</source> - <translation>Hockey</translation> + <translation>הוקי</translation> </message> <message> <source>Home</source> - <translation>Home</translation> + <translation>בית</translation> </message> <message> <source>Horror</source> - <translation>Horror</translation> + <translation>זוועה</translation> </message> <message> <source>Information</source> - <translation>Information</translation> + <translation>מידע</translation> </message> <message> <source>Instruction</source> - <translation>Instruction</translation> + <translation>הדרכה</translation> </message> <message> <source>International</source> - <translation>International</translation> + <translation>בין לאומי</translation> </message> <message> <source>Interview</source> - <translation>Interview</translation> + <translation>ראיון</translation> </message> <message> <source>Language</source> - <translation>Language</translation> + <translation>שפה</translation> </message> <message> <source>Legal</source> - <translation>Legal</translation> + <translation>חוק</translation> </message> <message> <source>Live</source> - <translation>Live</translation> + <translation>חי</translation> </message> <message> <source>Local</source> - <translation>Local</translation> + <translation>מקומי</translation> </message> <message> <source>Math</source> - <translation>Math</translation> + <translation>מתמטיקה</translation> </message> <message> <source>Medical</source> - <translation>Medical</translation> + <translation>רפואה</translation> </message> <message> <source>Meeting</source> - <translation>Meeting</translation> + <translation>פגישה</translation> </message> <message> <source>Military</source> - <translation>Military</translation> + <translation>צבא</translation> </message> <message> <source>Miniseries</source> - <translation>Miniseries</translation> + <translation>מיני סדרה</translation> </message> <message> <source>Music</source> - <translation>Music</translation> + <translation>מוסיקה</translation> </message> <message> <source>Mystery</source> - <translation>Mystery</translation> + <translation>מסתורין</translation> </message> <message> <source>National</source> - <translation>National</translation> + <translation>לאומי</translation> </message> <message> <source>Nature</source> - <translation>Nature</translation> + <translation>טבע</translation> </message> <message> <source>Police</source> - <translation>Police</translation> + <translation>משטרה</translation> </message> <message> <source>Politics</source> - <translation>Politics</translation> + <translation>פוליטיקה</translation> </message> <message> <source>Premiere</source> - <translation>Premiere</translation> + <translation>בכורה</translation> </message> <message> <source>Prerecorded</source> - <translation>Prerecorded</translation> + <translation>מוקלט מראש</translation> </message> <message> <source>Product</source> - <translation>Product</translation> + <translation>מוצר</translation> </message> <message> <source>Professional</source> - <translation>Professional</translation> + <translation>מקצועי</translation> </message> <message> <source>Public</source> - <translation>Public</translation> + <translation>ציבורי</translation> </message> <message> <source>Racing</source> - <translation>Racing</translation> + <translation>מרוץ</translation> </message> <message> <source>Reading</source> - <translation>Reading</translation> + <translation>קריאה</translation> </message> <message> <source>Repair</source> - <translation>Repair</translation> + <translation>תיקון</translation> </message> <message> <source>Repeat</source> - <translation>Repeat</translation> + <translation>חוזר</translation> </message> <message> <source>Review</source> - <translation>Review</translation> + <translation>סקירה</translation> </message> <message> <source>Romance</source> - <translation>Romance</translation> + <translation>רומנטי</translation> </message> <message> <source>Science</source> - <translation>Science</translation> + <translation>מדע</translation> </message> <message> <source>Series</source> - <translation>Series</translation> + <translation>סדרה</translation> </message> <message> <source>Service</source> @@ -2754,39 +2763,39 @@ </message> <message> <source>Shopping</source> - <translation>Shopping</translation> + <translation>קניות</translation> </message> <message> <source>Soap Opera</source> - <translation>Soap Opera</translation> + <translation>אופרת סבון</translation> </message> <message> <source>Special</source> - <translation>Special</translation> + <translation>מיוחד</translation> </message> <message> <source>Suspense</source> - <translation>Suspense</translation> + <translation>מתח</translation> </message> <message> <source>Talk</source> - <translation>Talk</translation> + <translation>דיבורים</translation> </message> <message> <source>Technical</source> - <translation>Technical</translation> + <translation>טכני</translation> </message> <message> <source>Tennis</source> - <translation>Tennis</translation> + <translation>טניס</translation> </message> <message> <source>Travel</source> - <translation>Travel</translation> + <translation>נסיעות</translation> </message> <message> <source>Variety</source> - <translation>Variety</translation> + <translation>מגוון</translation> </message> <message> <source>Video</source> @@ -2794,11 +2803,11 @@ </message> <message> <source>Weather</source> - <translation>Weather</translation> + <translation>מזג אויר</translation> </message> <message> <source>Western</source> - <translation>Western</translation> + <translation>מערבון</translation> </message> <message> <source>Channel Options</source> @@ -2830,11 +2839,11 @@ </message> <message> <source>Sort Mode</source> - <translation>Sort Mode</translation> + <translation>מוד מיון</translation> </message> <message> <source>Hide channels without channel number.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">הסתר ערוצים ללא מספר ערוץ</translation> </message> <message> <source>Channel Scanner</source> @@ -2846,7 +2855,7 @@ </message> <message> <source>Transport Editor</source> - <translation>Transport Editor</translation> + <translation>עורך שינוע</translation> </message> <message> <source>[Not Selected]</source> @@ -2946,7 +2955,7 @@ </message> <message> <source>Frequency</source> - <translation>Frequency</translation> + <translation>תדר</translation> </message> <message> <source>or</source> @@ -3424,7 +3433,7 @@ <message> <source>Page Not Available</source> <comment>Requested Teletext page not available</comment> - <translation type="unfinished"></translation> + <translation>דף אינו זמין</translation> </message> <message> <source>Title match (regex)</source> @@ -3480,27 +3489,27 @@ </message> <message> <source>New Profile Group Name</source> - <translation type="unfinished"></translation> + <translation>שם קבוצת פרופיל החדשה</translation> </message> <message> <source>(Create new profile group)</source> - <translation>(Create new profile group)</translation> + <translation>(צור קבוצת פרופיל חדשה)</translation> </message> <message> <source>Delete profile group:</source> - <translation type="unfinished"></translation> + <translation>למחוק קבוצת פרופיל:</translation> </message> <message> <source>Yes, delete group</source> - <translation type="unfinished">כן, מחק קבוצה</translation> + <translation>כן, מחק קבוצה</translation> </message> <message> <source>No, Don't delete group</source> - <translation type="unfinished">לא, אל תמחק קבוצה</translation> + <translation>לא, אל תמחק קבוצה</translation> </message> <message> <source>Profile Group Name</source> - <translation type="unfinished"></translation> + <translation>שם קבוצת פרופיל</translation> </message> <message> <source>Hostname</source> @@ -3602,39 +3611,39 @@ </message> <message> <source>Single Record</source> - <translation>Single Record</translation> + <translation>הקלטה יחידה</translation> </message> <message> <source>Record Daily</source> - <translation>Record Daily</translation> + <translation>הקלט כל יום</translation> </message> <message> <source>Record Weekly</source> - <translation>Record Weekly</translation> + <translation>הקלט כל שבוע</translation> </message> <message> <source>Channel Record</source> - <translation type="unfinished"></translation> + <translation>הקלט בערוץ</translation> </message> <message> <source>Record All</source> - <translation type="unfinished"></translation> + <translation>הקלט הכל</translation> </message> <message> <source>Find One</source> - <translation>Find One</translation> + <translation>חפש אחד</translation> </message> <message> <source>Find Daily</source> - <translation>Find Daily</translation> + <translation>חפש כל יום</translation> </message> <message> <source>Find Weekly</source> - <translation>Find Weekly</translation> + <translation>חפש כל שבוע</translation> </message> <message> <source>Override Recording</source> - <translation>Override Recording</translation> + <translation>עקוף הקלטה</translation> </message> <message> <source>Not Recording</source> @@ -3805,43 +3814,43 @@ </message> <message> <source>Never Record</source> - <translation type="unfinished"></translation> + <translation>אל תקליט אף פעם</translation> </message> <message> <source>Recorder Off-Line</source> - <translation type="unfinished"></translation> + <translation>המקליט אינו מקוון</translation> </message> <message> <source>This showing will be recorded.</source> - <translation>This showing will be recorded.</translation> + <translation>מופע זה יוקלט.</translation> </message> <message> <source>This showing is being recorded.</source> - <translation>This showing is being recorded.</translation> + <translation>מופע זה מוקלט כרגע.</translation> </message> <message> <source>This showing was recorded.</source> - <translation>This showing was recorded.</translation> + <translation>מופע זה הוקלט.</translation> </message> <message> <source>This showing was recorded but was aborted before recording was completed.</source> - <translation>This showing was recorded but was aborted before recording was completed.</translation> + <translation>מופע זה הוקלט אך ההקלטה הופסקה לפני הסיום.</translation> </message> <message> <source>This showing was not recorded because it was scheduled after it would have ended.</source> - <translation>This showing was not recorded because it was scheduled after it would have ended.</translation> + <translation>מופע זה לא הוקלט מכיוון שתוזמן לאחר שהסתיים.</translation> </message> <message> <source>This showing was not recorded because it was manually cancelled.</source> - <translation>This showing was not recorded because it was manually cancelled.</translation> + <translation>מופע זה לא הוקלט עקב ביטול ידני.</translation> </message> <message> <source>there wasn't enough disk space available.</source> - <translation>there wasn't enough disk space available.</translation> + <translation>לא היה מספיק מקום בדיסק.</translation> </message> <message> <source>the tuner card was already being used.</source> - <translation type="unfinished"></translation> + <translation>כרטיס הטלויזיה היה כבר בשימוש.</translation> </message> <message> <source>the recording failed.</source> @@ -3849,63 +3858,63 @@ </message> <message> <source>The status of this showing is unknown.</source> - <translation type="unfinished"></translation> + <translation>מצב מופע זה לא ידוע.</translation> </message> <message> <source>This showing will not be recorded because </source> - <translation>This showing will not be recorded because </translation> + <translation>מופע זה לא יוקלט מכיוון ש</translation> </message> <message> <source>This showing was not recorded because </source> - <translation>This showing was not recorded because </translation> + <translation>מופע זה לא הוקלט מכיוון ש</translation> </message> <message> <source>it was manually set to not record.</source> - <translation type="unfinished"></translation> + <translation>סומן באופן ידני לא להקלטה.</translation> </message> <message> <source>this episode was previously recorded according to the duplicate policy chosen for this title.</source> - <translation type="unfinished"></translation> + <translation>פרק זה הוקלט בעבר לפי מדיניות הכפילות שנבחרה לכותר זה.</translation> </message> <message> <source>this episode was previously recorded and is still available in the list of recordings.</source> - <translation type="unfinished"></translation> + <translation>פרק זה הוקלט בעבר ועדיין זמין ברשימת ההקלטות.</translation> </message> <message> <source>this episode will be recorded at an earlier time instead.</source> - <translation type="unfinished"></translation> + <translation>פרק זה יוקלט בזמן מוקדם יותר.</translation> </message> <message> <source>too many recordings of this program have already been recorded.</source> - <translation type="unfinished"></translation> + <translation>קיימים יותר מדי הקלטות של תוכנית זאת.</translation> </message> <message> <source>another program with a higher priority will be recorded.</source> - <translation type="unfinished"></translation> + <translation>תוכנית אחרת בעלת קדימות גבוהה תוקלט.</translation> </message> <message> <source>this episode will be recorded at a later time.</source> - <translation type="unfinished"></translation> + <translation>פרק זה יוקלט בזמן מאוחר יותר.</translation> </message> <message> <source>this episode is a repeat.</source> - <translation type="unfinished"></translation> + <translation>פרק זה הוא שידור חוזר.</translation> </message> <message> <source>it was marked to never be recorded.</source> - <translation type="unfinished"></translation> + <translation>סומן לא להקליט לעולם.</translation> </message> <message> <source>the backend recorder is off-line.</source> - <translation type="unfinished"></translation> + <translation>המקליט בשרת אינו מקוון.</translation> </message> <message> <source>you should never see this.</source> - <translation>you should never see this.</translation> + <translation>אתה לא צריך לראות את זה.</translation> </message> <message> <source>Title</source> - <translation>Title</translation> + <translation>כותרת</translation> </message> <message> <source>Title Pronounce</source> @@ -3913,7 +3922,7 @@ </message> <message> <source>Part %1 of %2, </source> - <translation>Part %1 of %2, </translation> + <translation type="unfinished">חלק %1 מ %2 .</translation> </message> <message> <source>HDTV</source> @@ -3926,15 +3935,15 @@ </message> <message> <source>Subtitled</source> - <translation>Subtitled</translation> + <translation>כתוביות</translation> </message> <message> <source>Stereo</source> - <translation>Stereo</translation> + <translation>סטריאו</translation> </message> <message> <source>Unidentified Episode</source> - <translation>Unidentified Episode</translation> + <translation>פרק לא מוגדר</translation> </message> <message> <source>Description</source> @@ -3947,11 +3956,11 @@ <message> <source>Type</source> <comment>category_type</comment> - <translation>Type</translation> + <translation>סוג</translation> </message> <message> <source>Episode Number</source> - <translation>Episode Number</translation> + <translation>פרק מספר</translation> </message> <message> <source>Original Airdate</source> @@ -3963,83 +3972,83 @@ </message> <message> <source>Actors</source> - <translation>Actors</translation> + <translation>שחקנים</translation> </message> <message> <source>Director</source> - <translation>Director</translation> + <translation>במאי</translation> </message> <message> <source>Producer</source> - <translation>Producer</translation> + <translation>מפיק</translation> </message> <message> <source>Executive Producer</source> - <translation>Executive Producer</translation> + <translation>מפיק בפועל</translation> </message> <message> <source>Writer</source> - <translation>Writer</translation> + <translation>כותב</translation> </message> <message> <source>Guest Star</source> - <translation>Guest Star</translation> + <translation>כוכב אורח</translation> </message> <message> <source>Host</source> - <translation>Host</translation> + <translation>מנחה</translation> </message> <message> <source>Adapter</source> - <translation>Adapter</translation> + <translation>מעבד</translation> </message> <message> <source>Presenter</source> - <translation>Presenter</translation> + <translation>מגיש</translation> </message> <message> <source>Commentator</source> - <translation>Commentator</translation> + <translation>פרשן</translation> </message> <message> <source>Guest</source> - <translation>Guest</translation> + <translation>אורח</translation> </message> <message> <source>Status</source> - <translation>Status</translation> + <translation>מצב</translation> </message> <message> <source>Recording Rule</source> - <translation type="unfinished"></translation> + <translation>הוראת הקלטה</translation> </message> <message> <source>Search Phrase</source> - <translation>Search Phrase</translation> + <translation>חפש משפט</translation> </message> <message> <source>Find ID</source> - <translation>Find ID</translation> + <translation>מצא ID</translation> </message> <message> <source>Recording Host</source> - <translation>Recording Host</translation> + <translation>שרת הקלטה</translation> </message> <message> <source>Recorded File Size</source> - <translation type="unfinished"></translation> + <translation>גודל קובץ ההקלטה</translation> </message> <message> <source>Recording Profile</source> - <translation>Recording Profile</translation> + <translation>פרופיל הקלטה</translation> </message> <message> <source>Recording Group</source> - <translation>Recording Group</translation> + <translation>קבוצת הקלטה</translation> </message> <message> <source>Playback Group</source> - <translation>Playback Group</translation> + <translation>קבוצת הסרטה</translation> </message> <message> <source>Reactivate</source> @@ -4059,48 +4068,49 @@ </message> <message> <source>Change Ending Time</source> - <translation>Change Ending Time</translation> + <translation>שנה זמן סיום</translation> </message> <message> <source>Edit Options</source> - <translation type="unfinished"></translation> + <translation>ערוך אפשרויות</translation> </message> <message> <source>Add Override</source> - <translation>Add Override</translation> + <translation>הוסף עקיפה</translation> </message> <message> <source>Edit Override</source> - <translation type="unfinished"></translation> + <translation>ערוך עקיפה</translation> </message> <message> <source>Clear Override</source> - <translation>Clear Override</translation> + <translation>בטל עקיפה</translation> </message> <message> <source> The following programs will be recorded instead: </source> - <translation> The following programs will be recorded instead:</translation> + <translation>התוכנית הבאה תוקלט במקום : +</translation> </message> <message> <source>Record anyway</source> - <translation>Record anyway</translation> + <translation>הקלט בכל זאת</translation> </message> <message> <source>Forget Previous</source> - <translation>Forget Previous</translation> + <translation>שכח מהקודם</translation> </message> <message> <source>Codec</source> - <translation>Codec</translation> + <translation>מקודד</translation> </message> <message> <source>MP3 Quality</source> - <translation>MP3 Quality</translation> + <translation>איכות MP3</translation> </message> <message> <source>The higher the slider number, the lower the quality of the audio. Better quality audio (lower numbers) requires more CPU.</source> - <translation>The higher the slider number, the lower the quality of the audio. Better quality audio (lower numbers) requires more CPU.</translation> + <translation>ככל שהערך גבוהה, איכות הקלטת הקול ירודה. איכות הקלטה גבוהה (ערך נמוך) דורש יותר משאבי מעבד.</translation> </message> <message> <source>Volume (%)</source> @@ -4108,11 +4118,11 @@ </message> <message> <source>Recording volume of the capture card</source> - <translation type="unfinished"></translation> + <translation>עוצמת הקלטה בכרטיס הדגימה</translation> </message> <message> <source>Sampling rate</source> - <translation>Sampling rate</translation> + <translation>קצב דגימה</translation> </message> <message> <source>Sets the audio sampling rate for your DSP. Ensure that you choose a sampling rate appropriate for your device. btaudio may only allow 32000.</source> @@ -4120,51 +4130,51 @@ </message> <message> <source>Type</source> - <translation>Type</translation> + <translation type="unfinished">Type</translation> </message> <message> <source>Sets the audio type</source> - <translation>Sets the audio type</translation> + <translation type="unfinished">Sets the audio type</translation> </message> <message> <source>Bitrate</source> - <translation>Bitrate</translation> + <translation type="unfinished">Bitrate</translation> </message> <message> <source>Sets the audio bitrate</source> - <translation>Sets the audio bitrate</translation> + <translation type="unfinished">Sets the audio bitrate</translation> </message> <message> <source>Volume of the recording </source> - <translation>Volume of the recording </translation> + <translation type="unfinished">Volume of the recording </translation> </message> <message> <source>Bitrate Settings</source> - <translation>Bitrate Settings</translation> + <translation type="unfinished">Bitrate Settings</translation> </message> <message> <source>Audio Quality</source> - <translation>Audio Quality</translation> + <translation type="unfinished">Audio Quality</translation> </message> <message> <source>RTjpeg Quality</source> - <translation>RTjpeg Quality</translation> + <translation type="unfinished">RTjpeg Quality</translation> </message> <message> <source>Higher is better quality.</source> - <translation>Higher is better quality.</translation> + <translation type="unfinished">Higher is better quality.</translation> </message> <message> <source>Luma filter</source> - <translation>Luma filter</translation> + <translation type="unfinished">Luma filter</translation> </message> <message> <source>Lower is better.</source> - <translation>Lower is better.</translation> + <translation type="unfinished">Lower is better.</translation> </message> <message> <source>Chroma filter</source> - <translation>Chroma filter</translation> + <translation type="unfinished">Chroma filter</translation> </message> <message> <source>Bitrate in kilobits/second. 2200Kbps is approximately 1 Gigabyte per hour.</source> @@ -4176,7 +4186,7 @@ </message> <message> <source>Minimum quality</source> - <translation>Minimum quality</translation> + <translation type="unfinished">Minimum quality</translation> </message> <message> <source>Modifying the default may have severe consequences.</source> @@ -4184,15 +4194,15 @@ </message> <message> <source>Maximum quality</source> - <translation>Maximum quality</translation> + <translation type="unfinished">Maximum quality</translation> </message> <message> <source>Max quality difference between frames</source> - <translation>Max quality difference between frames</translation> + <translation type="unfinished">Max quality difference between frames</translation> </message> <message> <source>Enable interlaced DCT encoding</source> - <translation>Enable interlaced DCT encoding</translation> + <translation type="unfinished">Enable interlaced DCT encoding</translation> </message> <message> <source>If set, the MPEG4 encoder will use interlaced DCT encoding. You may want this when encoding interlaced video, however, this is experimental and may cause damaged video.</source> @@ -4200,7 +4210,7 @@ </message> <message> <source>Enable interlaced motion estimation</source> - <translation>Enable interlaced motion estimation</translation> + <translation type="unfinished">Enable interlaced motion estimation</translation> </message> <message> <source>If set, the MPEG4 encoder will use interlaced motion estimation. You may want this when encoding interlaced video, however, this is experimental and may cause damaged video.</source> @@ -4208,7 +4218,7 @@ </message> <message> <source>Enable high-quality encoding</source> - <translation>Enable high-quality encoding</translation> + <translation type="unfinished">Enable high-quality encoding</translation> </message> <message> <source>If set, the MPEG4 encoder will use 'high-quality' encoding options. This requires much more processing, but can result in better video.</source> @@ -4216,7 +4226,7 @@ </message> <message> <source>Enable 4MV encoding</source> - <translation>Enable 4MV encoding</translation> + <translation type="unfinished">Enable 4MV encoding</translation> </message> <message> <source>If set, the MPEG4 encoder will use '4MV' motion-vector encoding. This requires much more processing, but can result in better video. It is highly recommended that the HQ option is enabled if 4MV is enabled.</source> @@ -4224,7 +4234,7 @@ </message> <message> <source>Number of threads</source> - <translation>Number of threads</translation> + <translation type="unfinished">Number of threads</translation> </message> <message> <source>Threads to use for software encoding.</source> @@ -4236,7 +4246,7 @@ </message> <message> <source>Max. Bitrate</source> - <translation>Max. Bitrate</translation> + <translation type="unfinished">Max. Bitrate</translation> </message> <message> <source>Maximum Bitrate in kilobits/second. 2200Kbps is approximately 1 Gigabyte per hour.</source> @@ -4320,7 +4330,7 @@ </message> <message> <source>Normal</source> - <translation>Normal</translation> + <translation>רגיל</translation> </message> <message> <source>TV Only</source> @@ -4336,7 +4346,7 @@ </message> <message> <source>Width</source> - <translation>Width</translation> + <translation>רוחב</translation> </message> <message> <source>If the width is set to 'Auto', the width will be calculated based on the height and the recording's physical aspect ratio.</source> @@ -4344,7 +4354,7 @@ </message> <message> <source>Height</source> - <translation>Height</translation> + <translation>גובה</translation> </message> <message> <source>If the height is set to 'Auto', the height will be calculated based on the width and the recording's physical aspect ratio.</source> @@ -4352,11 +4362,11 @@ </message> <message> <source>Image size</source> - <translation>Image size</translation> + <translation>גודל תמונה</translation> </message> <message> <source>Profile</source> - <translation>Profile</translation> + <translation>פרופיל</translation> </message> <message> <source>Autodetect</source> @@ -4368,19 +4378,19 @@ </message> <message> <source>Record using the "%1" profile</source> - <translation>Record using the "%1" profile</translation> + <translation>הקלט בפרופיל "%1"</translation> </message> <message> <source>Transcode using Autodetect</source> - <translation type="unfinished"></translation> + <translation>קדד מחדש עם זיהוי אוטומטי</translation> </message> <message> <source>Transcode using "%1"</source> - <translation>Transcode using "%1"</translation> + <translation>קדד מחדש עם "%1"</translation> </message> <message> <source>Profile name</source> - <translation>Profile name</translation> + <translation>שם הפרופיל</translation> </message> <message> <source>ATSC Channel %1</source> @@ -4537,47 +4547,47 @@ </message> <message> <source>Power Search</source> - <translation>Power Search</translation> + <translation>חיפוש מתקדם</translation> </message> <message> <source>Title Search</source> - <translation>Title Search</translation> + <translation>חיפוש כותר</translation> </message> <message> <source>Keyword Search</source> - <translation>Keyword Search</translation> + <translation>חיפוש מילות מפתח</translation> </message> <message> <source>People Search</source> - <translation>People Search</translation> + <translation>חיפוש אנשים</translation> </message> <message> <source>Unknown Search</source> - <translation type="unfinished">חיפוש לא ידוע</translation> + <translation>חיפוש לא ידוע</translation> </message> <message> <source>Signal Lock</source> - <translation>Signal Lock</translation> + <translation>נעילת אות</translation> </message> <message> <source>Signal Power</source> - <translation>Signal Power</translation> + <translation>עוצמת אות</translation> </message> <message> <source>Scheduling Options</source> - <translation>Scheduling Options</translation> + <translation>אפשרויות תזמון</translation> </message> <message> <source>Post Recording Processing</source> - <translation>Post Recording Processing</translation> + <translation>עיבוד לאחר הקלטה</translation> </message> <message> <source>Storage Options</source> - <translation>Storage Options</translation> + <translation>אפשרויות אכסון</translation> </message> <message> <source>Schedule Information</source> - <translation>Schedule Information</translation> + <translation>מידע על תזמון</translation> </message> <message> <source>Program details</source> @@ -4661,55 +4671,55 @@ </message> <message> <source>Record this showing with normal options</source> - <translation>Record this showing with normal options</translation> + <translation>הקלט שידור זה באפשרויות רגילות</translation> </message> <message> <source>Record this showing with override options</source> - <translation>Record this showing with override options</translation> + <translation>הקלט שידור זה באפשרויות עקיפה</translation> </message> <message> <source>Do not allow this showing to be recorded</source> - <translation>Do not allow this showing to be recorded</translation> + <translation>אל תאפשר שהקלטת שידור זה</translation> </message> <message> <source>Start recording %1 minutes late</source> - <translation type="unfinished"></translation> + <translation>התחל הקלטה ב%1 דקות איחור</translation> </message> <message> <source>Start recording %1 minute late</source> - <translation>Start recording %1 minute late</translation> + <translation>התחל הקלטה ב%1 דקה איחור</translation> </message> <message> <source>Start recording on time</source> - <translation type="unfinished"></translation> + <translation>התחל הקלטה בזמן</translation> </message> <message> <source>Start recording %1 minute early</source> - <translation>Start recording %1 minute early</translation> + <translation>התחל הקלטה %1 דקה לפני הזמן</translation> </message> <message> <source>Start recording %1 minutes early</source> - <translation type="unfinished"></translation> + <translation>התחל הקלטה %1 דקות לפני הזמן</translation> </message> <message> <source>End recording %1 minutes early</source> - <translation type="unfinished"></translation> + <translation>סיים הקלטה %1 דקות לפני הזמן</translation> </message> <message> <source>End recording %1 minute early</source> - <translation>End recording %1 minute early</translation> + <translation>סיים הקלטה %1 דקה לפני הזמן</translation> </message> <message> <source>End recording on time</source> - <translation type="unfinished"></translation> + <translation>סיים הקלטה בזמן</translation> </message> <message> <source>End recording %1 minute late</source> - <translation>End recording %1 minute late</translation> + <translation>סיים הקלטה ב%1 דקה איחור</translation> </message> <message> <source>End recording %1 minutes late</source> - <translation type="unfinished"></translation> + <translation>סיים הקלטה ב%1 דקות איחור</translation> </message> <message> <source>Record new episodes only</source> @@ -4717,63 +4727,63 @@ </message> <message> <source>Look for duplicates in current and previous recordings</source> - <translation type="unfinished"></translation> + <translation>חפש כפילויות בהקלטות קודמות ומאוחרות</translation> </message> <message> <source>Look for duplicates in current recordings only</source> - <translation type="unfinished"></translation> + <translation>חפש כפילויות בהקלטות נוכחיות בלבד</translation> </message> <message> <source>Look for duplicates in previous recordings only</source> - <translation type="unfinished"></translation> + <translation>חפש כפילויות בהקלטות קודמות בלבד</translation> </message> <message> <source>[ Match duplicates with ]</source> - <translation type="unfinished"></translation> + <translation>[ התאם כפילויות עם ]</translation> </message> <message> <source>Match duplicates using subtitle & description</source> - <translation type="unfinished"></translation> + <translation type="unfinished">התאם כפילויות עם כיתוביות ותאור</translation> </message> <message> <source>Match duplicates using subtitle</source> - <translation type="unfinished"></translation> + <translation>התאם כפילויות עם כיתוביות</translation> </message> <message> <source>Match duplicates using description</source> - <translation type="unfinished"></translation> + <translation>התאם כפילויות עם תאור מפורט</translation> </message> <message> <source>Don't match duplicates</source> - <translation>Don't match duplicates</translation> + <translation>אל תתאים כפילויות</translation> </message> <message> <source>[ Select recording Profile ]</source> - <translation>[ Select recording Profile ]</translation> + <translation>[בחר פרופיל הקלטה ]</translation> </message> <message> <source>Transcode new recordings</source> - <translation>Transcode new recordings</translation> + <translation>קדד מחדש הקלטות חדשות</translation> </message> <message> <source>Do not Transcode new recordings</source> - <translation>Do not Transcode new recordings</translation> + <translation>אל תקודד מחדש הקלטות חדשות</translation> </message> <message> <source>Commercial Flag new recordings</source> - <translation type="unfinished"></translation> + <translation>סמן פרסומות בהקלטות חדשות</translation> </message> <message> <source>Do not Commercial Flag new recordings</source> - <translation type="unfinished"></translation> + <translation>אל תסמן פרסומות בהקלטות חדשות</translation> </message> <message> <source>Run '%1'</source> - <translation>Run '%1'</translation> + <translation>הפעל את '%1'</translation> </message> <message> <source>Do not run '%1' for new recordings</source> - <translation type="unfinished"></translation> + <translation>אל תפעיל '%1' על הקלטות חדשות</translation> </message> <message> <source>Allow auto expire</source> @@ -4793,11 +4803,11 @@ </message> <message> <source>Delete oldest if this would exceed the max episodes</source> - <translation type="unfinished"></translation> + <translation>מחק את הישן ביותר עם יהיו יותר פרקים מהמותר</translation> </message> <message> <source>Don't record if this would exceed the max episodes</source> - <translation type="unfinished"></translation> + <translation>אל תקליט אם יהיו יותר פרקים מהמותר</translation> </message> <message> <source>No episode limit</source> @@ -4809,43 +4819,43 @@ </message> <message> <source>Keep at most %1 episodes</source> - <translation type="unfinished"></translation> + <translation>השאר לפחות %1 פרקים</translation> </message> <message> <source>Reduce priority by %1</source> - <translation>Reduce priority by %1</translation> + <translation>הורד עדיפות ב%1</translation> </message> <message> <source>Normal recording priority</source> - <translation>Normal recording priority</translation> + <translation>עדיפות הקלטה רגילה</translation> </message> <message> <source>Raise priority by %1</source> - <translation>Raise priority by %1</translation> + <translation>העלה עדיפות ב%1</translation> </message> <message> <source>Select Recording Group</source> - <translation>Select Recording Group</translation> + <translation>בחר קבוצת הקלטה</translation> </message> <message> <source>Create a new recording group</source> - <translation>Create a new recording group</translation> + <translation>צור קבוצת הקלטה חדשה</translation> </message> <message> <source>Select Playback Group</source> - <translation>Select Playback Group</translation> + <translation>בחר קבוצת הקרנה</translation> </message> <message> <source>Select Preferred Input</source> - <translation>Select Preferred Input</translation> + <translation>בחר כניסה מועדפת</translation> </message> <message> <source>Preview schedule changes</source> - <translation>Preview schedule changes</translation> + <translation>הצג שינויים בתזמון</translation> </message> <message> <source>Save these settings</source> - <translation>Save these settings</translation> + <translation>שמור הגדרות אלו</translation> </message> <message> <source>(CH)</source> @@ -7280,7 +7290,7 @@ </message> <message> <source>Opacity</source> - <translation>Opacity</translation> + <translation>שקיפות</translation> </message> <message> <source>Video in floating window</source> @@ -7368,7 +7378,7 @@ </message> <message> <source>General (Basic)</source> - <translation>General (Basic)</translation> + <translation>כללי (בסיס)</translation> </message> <message> <source>General (AutoExpire)</source> @@ -7376,11 +7386,11 @@ </message> <message> <source>General (Jobs)</source> - <translation>General (Jobs)</translation> + <translation>כללי (עבודות)</translation> </message> <message> <source>General (Advanced)</source> - <translation>General (Advanced)</translation> + <translation>כללי (מתקדם)</translation> </message> <message> <source>Program Guide</source> @@ -7388,7 +7398,7 @@ </message> <message> <source>Scheduler Options</source> - <translation>Scheduler Options</translation> + <translation>אפשרויות מתזמן</translation> </message> <message> <source>Recording Type Priority Settings</source> @@ -7412,11 +7422,11 @@ </message> <message> <source>Theme Error</source> - <translation type="unfinished"></translation> + <translation>שגיאת ערכת נושא</translation> </message> <message> <source>Your theme does not contain elements required to display the status screen.</source> - <translation type="unfinished"></translation> + <translation>ערכת הנושא שלך אינה מכילה אלמנטים הדרושים להצגת מסך המצב.</translation> </message> <message> <source>Do you really want to exit MythTV?</source> @@ -7442,7 +7452,7 @@ </message> <message> <source>Directed By</source> - <translation>Directed By</translation> + <translation>בוים על ידי</translation> </message> <message> <source>^(The |A |An )</source> @@ -7450,7 +7460,7 @@ </message> <message> <source>Failed to get selector object</source> - <translation type="unfinished"></translation> + <translation>כשל בהשגת אוביקט בחירה</translation> </message> <message> <source>Myth could not locate the selector object within your theme. @@ -7464,55 +7474,55 @@ </message> <message> <source>Recording Available</source> - <translation>Recording Available</translation> + <translation>הקלטה זמינה</translation> </message> <message> <source>This recording is currently in use by:</source> - <translation>This recording is currently in use by:</translation> + <translation type="unfinished">הקלטה כרגע בשימוש על ידי:</translation> </message> <message> <source>This recording is currently Available</source> - <translation>This recording is currently Available</translation> + <translation>הקלטה זמינה כרגע</translation> </message> <message> <source>Recording Unavailable</source> - <translation>Recording Unavailable</translation> + <translation>הקלטה אינה זמינה</translation> </message> <message> <source>This recording is currently being deleted and is unavailable</source> - <translation>This recording is currently being deleted and is unavailable</translation> + <translation>הקלטה זו נמחקת כרגע ואינה זמינה</translation> </message> <message> <source>The file for this recording can not be found</source> - <translation type="unfinished"></translation> + <translation>לא ניתן למצוא את הקובץ של הקלטה זו</translation> </message> <message> <source>Listings Status</source> - <translation>Listings Status</translation> + <translation>מצב לוח השידורים</translation> </message> <message> <source>Tuner Status</source> - <translation type="unfinished"></translation> + <translation>מצב כרטיס הקלטה</translation> </message> <message> <source>Log Entries</source> - <translation>Log Entries</translation> + <translation>יומן ארועים</translation> </message> <message> <source>Job Queue</source> - <translation>Job Queue</translation> + <translation>עבודות בתור</translation> </message> <message> <source>Machine Status</source> - <translation>Machine Status</translation> + <translation>מצב המכונה</translation> </message> <message> <source>AutoExpire List</source> - <translation type="unfinished"></translation> + <translation>רשימת תפוגה אוטומטית</translation> </message> <message> <source>Acknowledge all log entries at this priority level or lower?</source> - <translation type="unfinished"></translation> + <translation>לאשר כל רשומות היומן בחשיבות זו או פחותה ממנה ?</translation> </message> <message> <source>Yes</source> @@ -7520,35 +7530,35 @@ </message> <message> <source>Setting priority level to %1</source> - <translation>Setting priority level to %1</translation> + <translation>קובע עדיפות ל%1</translation> </message> <message> <source>Listings Status shows the latest status information from mythfilldatabase</source> - <translation type="unfinished"></translation> + <translation>מצב לוח השידורים מראה את מצב העדכון האחרון של mythfilldatabase</translation> </message> <message> <source>Tuner Status shows the current information about the state of backend tuner cards</source> - <translation type="unfinished"></translation> + <translation>מצב כרטיס הקלטה מראה את מצב כרטיסי ההקלטה ביחידת השרת</translation> </message> <message> <source>DVB Status</source> - <translation>DVB Status</translation> + <translation>מצב DVB</translation> </message> <message> <source>DVB Status shows the quality statistics of all DVB cards, if present</source> - <translation type="unfinished"></translation> + <translation>מצב DVB מראה נתוני איכות של כרטיסי DVB באם נמצאים</translation> </message> <message> <source>Log Entries shows any unread log entries from the system if you have logging enabled</source> - <translation type="unfinished"></translation> + <translation>יומן ארועים מראה הודעות מערכת שלא קראת במידה ואפשרת אופציה זו</translation> </message> <message> <source>Job Queue shows any jobs currently in Myth's Job Queue such as a commercial flagging job.</source> - <translation type="unfinished"></translation> + <translation>תור משימות מראה את כל עבודות הממתינות לביצוע כגון סימון פירסומות וכו.</translation> </message> <message> <source>Machine Status shows some operating system statistics of this machine</source> - <translation type="unfinished"></translation> + <translation>מצב המכונה מראה נתונים על מערכת ההפעלה במחשב זה</translation> </message> <message> <source>and the MythTV server</source> @@ -7556,15 +7566,15 @@ </message> <message> <source>The AutoExpire List shows all recordings which may be expired and the order of their expiration. Recordings at the top of the list will be expired first.</source> - <translation type="unfinished"></translation> + <translation>רשימת תפוגה אוטומטית מראה את רשימת התוכניות שתאריך התפוגה שלהם קרוב לפי סדר עולה. הקלטות בראש הרשימה יפוגו ראשונות.</translation> </message> <message> <source>Acknowledge this log entry?</source> - <translation>Acknowledge this log entry?</translation> + <translation>לאשר רשימת יומן ארועים ?</translation> </message> <message> <source>Delete Job?</source> - <translation type="unfinished"></translation> + <translation>למחוק משימה?</translation> </message> <message> <source>Pause</source> @@ -7588,7 +7598,7 @@ </message> <message> <source>Delete Now</source> - <translation type="unfinished"></translation> + <translation>מחק עכשיו</translation> </message> <message> <source>Disable AutoExpire</source> @@ -7596,19 +7606,19 @@ </message> <message> <source>AutoExpire Actions:</source> - <translation type="unfinished"></translation> + <translation>פעולות תפוגה אוטומטית:</translation> </message> <message> <source>Myth version:</source> - <translation>Myth version:</translation> + <translation>גרסת Myth :</translation> </message> <message> <source>Last mythfilldatabase guide update:</source> - <translation type="unfinished"></translation> + <translation>עדכון בסיס נתונים אחרון:</translation> </message> <message> <source>Started: </source> - <translation>Started: </translation> + <translation>התחיל: </translation> </message> <message> <source>Finished: </source> @@ -7616,7 +7626,7 @@ </message> <message> <source>Result: </source> - <translation>Result: </translation> + <translation>תוצאה: </translation> </message> <message> <source>Suggested Next: </source> @@ -7624,27 +7634,27 @@ </message> <message> <source>There's no guide data available!</source> - <translation type="unfinished"></translation> + <translation>אין בנמצא לוח שידורים</translation> </message> <message> <source>Have you run mythfilldatabase?</source> - <translation>Have you run mythfilldatabase?</translation> + <translation>האם הפעלת את mythfilldatabase ?</translation> </message> <message> <source>There is guide data until </source> - <translation type="unfinished"></translation> + <translation>נתקבל לוח שידורים עד </translation> </message> <message> <source>days</source> - <translation>days</translation> + <translation>ימים</translation> </message> <message> <source>day</source> - <translation>day</translation> + <translation>יום</translation> </message> <message> <source>WARNING: is mythfilldatabase running?</source> - <translation>WARNING: is mythfilldatabase running?</translation> + <translation>זהירות: האם mythfilldatabase בפעולה?</translation> </message> <message> <source>DataDirect Status: </source> @@ -7652,7 +7662,7 @@ </message> <message> <source>No items found at priority level %1 or lower.</source> - <translation type="unfinished"></translation> + <translation>לא נמצאו פריטים ברמת חשיבות %1 או נמוכה יותר.</translation> </message> <message> <source>Use 1-8 to change priority level.</source> @@ -7664,55 +7674,55 @@ </message> <message> <source>%1 total, %2 used, %3 (or %4%) free.</source> - <translation>%1 בסיכובסיכום, %2 בשימוש, %3 (או %4%) פנוי.</translation> + <translation>%1 בסיכום, %2 בשימוש, %3 (או %4%) פנוי.</translation> </message> <message> <source>, using your %1 rate of %2 Kb/sec</source> - <translation>, using your %1 rate of %2 Kb/sec</translation> + <translation>, בשימוש בקצב %1 של %2 Kb/sec</translation> </message> <message> <source>%1 hours left</source> - <translation>%1 hours left</translation> + <translation>נשארו %1 שעות</translation> </message> <message> <source>%1 hours and %2 minutes left</source> - <translation type="unfinished"></translation> + <translation>נשארו %1 שעות ו%2 דקות</translation> </message> <message> <source>%1 minutes left</source> - <translation type="unfinished"></translation> + <translation>נשארו %1 דקות</translation> </message> <message> <source>Uptime</source> - <translation>Uptime</translation> + <translation>זמן בפעולה</translation> </message> <message> <source>average</source> - <translation>average</translation> + <translation>ממוצא</translation> </message> <message> <source>maximum</source> - <translation>maximum</translation> + <translation>מירבי</translation> </message> <message> <source>System</source> - <translation>System</translation> + <translation>מערכת</translation> </message> <message> <source>This machine</source> - <translation>This machine</translation> + <translation>מכונה זו</translation> </message> <message> <source>Load</source> - <translation>Load</translation> + <translation>עומס</translation> </message> <message> <source>unknown</source> - <translation>unknown</translation> + <translation>לא ידוע</translation> </message> <message> <source>failed</source> - <translation>failed</translation> + <translation>נכשל</translation> </message> <message> <source>RAM</source> @@ -7724,7 +7734,7 @@ </message> <message> <source>MythTV server</source> - <translation>MythTV server</translation> + <translation>שרת MythTV</translation> </message> <message> <source>Enter the IP address of this machine. Use an externally accessible address (ie, not 127.0.0.1) if you are going to be running a frontend on a different machine than this one.</source> @@ -8490,23 +8500,23 @@ </message> <message> <source>Other Showing</source> - <translation type="unfinished"></translation> + <translation>מופעים אחרים</translation> </message> <message> <source>the recorder failed to record.</source> - <translation type="unfinished"></translation> + <translation>הקלטה נכשלה.</translation> </message> <message> <source>this recording rule is inactive.</source> - <translation type="unfinished"></translation> + <translation>הוראת הקלטה זו אינה פעילה.</translation> </message> <message> <source>this rule does not match any showings in the current program listings.</source> - <translation type="unfinished"></translation> + <translation>הראות הקלטה זו אינה תואמת לאף שידור בלוח התוכניות.</translation> </message> <message> <source>this episode will be recorded on a different channel in this time slot.</source> - <translation type="unfinished"></translation> + <translation>פרק זה יוקלט בערוץ אחר בזמן השידור.</translation> </message> <message> <source>Mono</source> @@ -8672,39 +8682,39 @@ </message> <message> <source>Include in the "%1" recording group</source> - <translation type="unfinished"></translation> + <translation>צרף בקבוצת הקלטה "%1"</translation> </message> <message> <source>Exclude unidentified episodes</source> - <translation type="unfinished">הוצא פרקים בלתי מזוהים</translation> + <translation>הוצא פרקים בלתי מזוהים</translation> </message> <message> <source>Exclude old episodes</source> - <translation type="unfinished"></translation> + <translation>הוצא פרקים ישנים</translation> </message> <message> <source>Record new episode first showings</source> - <translation type="unfinished"></translation> + <translation>הקלטת שידור ראשון של פרקים חדשים</translation> </message> <message> <source>Match duplicates using subtitle then description</source> - <translation type="unfinished"></translation> + <translation>התאם כפילויות עם כתוביות ואז תאור מפורט</translation> </message> <message> <source>This recording rule is inactive</source> - <translation type="unfinished"></translation> + <translation>הוראת הקלטה זו אינה פעילה</translation> </message> <message> <source>This recording rule is active</source> - <translation type="unfinished"></translation> + <translation>הוראת הקלטה זו פעילה</translation> </message> <message> <source>Select Storage Group</source> - <translation type="unfinished"></translation> + <translation>בחר קבוצת איכסון</translation> </message> <message> <source>Store in the "%1" storage group</source> - <translation type="unfinished"></translation> + <translation>שמור בקבוצת איכסון "%1"</translation> </message> <message> <source>LiveTV</source> @@ -9442,7 +9452,7 @@ </message> <message> <source>mythfilldatabase ran, but did not insert any new data into the Guide for %1 of %2 sources. This can indicate a potential grabber failure.</source> - <translation type="unfinished"></translation> + <translation>mythfilldatabase הופעל אך לא הכניס מידע חדש עבור %1 מ %2 מקורות. יתכן וזה מסמן תקלה במייבא לוח השידורים.</translation> </message> <message> <source>Max Audio Channels</source> @@ -9473,10 +9483,6 @@ <translation type="unfinished"></translation> </message> <message> - <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Run commercial flagger</source> <translation type="unfinished"></translation> </message> @@ -10113,39 +10119,39 @@ </message> <message> <source>Play from bookmark</source> - <translation type="unfinished"></translation> + <translation>נגן מהסימניה</translation> </message> <message> <source>Play from beginning</source> - <translation type="unfinished">Play from beginning</translation> + <translation>נגן מהתחלה</translation> </message> <message> <source>The file for this recording is empty.</source> - <translation type="unfinished"></translation> + <translation>הקובץ של הקלטה זו ריק.</translation> </message> <message> <source>This recording is not yet available.</source> - <translation type="unfinished"></translation> + <translation>הקלטה זו אינה זמינה עדיין.</translation> </message> <message> <source>Schedule Status</source> - <translation type="unfinished"></translation> + <translation>מצב תזמון הקלטות</translation> </message> <message> <source>Schedule Status shows current statistics from the scheduler.</source> - <translation type="unfinished"></translation> + <translation>מצב תזמון הקלטות מראה נתוני מתזמן הקלטות</translation> </message> <message> <source>Move to Default group</source> - <translation type="unfinished"></translation> + <translation>העבר לקבוצת ברירת המחדל</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>בטל מחיקה</translation> </message> <message> <source>Total Disk Space:</source> - <translation type="unfinished"></translation> + <translation>שטח דיסק כולל:</translation> </message> <message> <source>MythTV Drive #%1:</source> @@ -10305,6 +10311,10 @@ <source>The format of the time string passed to the 'Set Wakeup Time Command' as $time. See QT::QDateTime.toString() for details. Set to 'time_t' for seconds since epoch (use time_t for nvram_wakeup).</source> <translation type="unfinished"></translation> </message> + <message> + <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback. 'Passive' is the least demanding on the CPU. 'Active Simple' is more demanding and 'Active Linear' is the most demanding (but highest quality).</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>RecOptDialog</name> @@ -10567,23 +10577,23 @@ </message> <message> <source>is unavailable</source> - <translation>is unavailable</translation> + <translation>לא זמין</translation> </message> <message> <source>is watching live TV</source> - <translation>is watching live TV</translation> + <translation>משמש לצפיה</translation> </message> <message> <source>is recording</source> - <translation>is recording</translation> + <translation>מקליט כרגע</translation> </message> <message> <source>is not recording</source> - <translation>is not recording</translation> + <translation>אינו מקליט</translation> </message> <message> <source>Tuner %1 </source> - <translation>טונר %1 </translation> + <translation>טיונר %1 </translation> </message> <message> <source>On %1 %2 from %3.%4 @@ -10623,31 +10633,31 @@ </message> <message> <source>standard rules are defined</source> - <translation type="unfinished"></translation> + <translation>חוקים רגילים מוגדרים</translation> </message> <message> <source>search rules are defined</source> - <translation type="unfinished"></translation> + <translation>חוקי חיפוש מוגדרים</translation> </message> <message> <source>marked as HDTV</source> - <translation type="unfinished"></translation> + <translation>מסומן כHDTV</translation> </message> <message> <source>from source</source> - <translation type="unfinished"></translation> + <translation>ממקור</translation> </message> <message> <source>on input</source> - <translation type="unfinished"></translation> + <translation>בכניסה</translation> </message> <message> <source>Scheduled Run Time:</source> - <translation type="unfinished"></translation> + <translation>זמן ריצה מתוכנן:</translation> </message> <message> <source>%1 of these are Deleted and consume %2</source> - <translation type="unfinished"></translation> + <translation>%1 כאלו נמחקו וצרכו %2</translation> </message> </context> <context> @@ -10729,23 +10739,23 @@ <name>TV</name> <message> <source>Record and watch while it records</source> - <translation>Record and watch while it records</translation> + <translation>הקלט וצפה תוך כדי הקלטה</translation> </message> <message> <source>Let it record and go back to the Main Menu</source> - <translation type="unfinished"></translation> + <translation>המשך להקליט וחזור לתפריט ראשי</translation> </message> <message> <source>Don't let it record, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>הפסק להקליט, אני רוצה לראות טלוויזיה</translation> </message> <message> <source>%1 Settings</source> - <translation>%1 Settings</translation> + <translation>הגדרות %1</translation> </message> <message> <source>Seek:</source> - <translation>Seek:</translation> + <translation>חפש :</translation> </message> <message> <source>Forward</source> @@ -10757,7 +10767,7 @@ </message> <message> <source>Rewind</source> - <translation>Rewind</translation> + <translation>חזור</translation> </message> <message> <source>Skip Back</source> @@ -10777,7 +10787,7 @@ </message> <message> <source>Jump to Beginning</source> - <translation type="unfinished"></translation> + <translation>דלג לתחילה</translation> </message> <message> <source>You are exiting this recording</source> @@ -10849,11 +10859,11 @@ </message> <message> <source>Rewind %1X</source> - <translation>Rewind %1X</translation> + <translation>אחורה %1X</translation> </message> <message> <source>Stopping Transcode</source> - <translation type="unfinished"></translation> + <translation>עצור קידוד</translation> </message> <message> <source>Transcoding</source> @@ -10861,11 +10871,11 @@ </message> <message> <source>Try Again</source> - <translation>Try Again</translation> + <translation>נסה שוב</translation> </message> <message> <source>Searching...</source> - <translation>Searching...</translation> + <translation>מחפש...</translation> </message> <message> <source>Skip</source> @@ -10890,15 +10900,15 @@ </message> <message> <source>Partial Lock</source> - <translation>Partial Lock</translation> + <translation>נעילה חלקית</translation> </message> <message> <source>No Lock</source> - <translation type="unfinished"></translation> + <translation>ללא נעילה</translation> </message> <message> <source>Lock</source> - <translation>Lock</translation> + <translation>נעילה</translation> </message> <message> <source>Signal %1%</source> @@ -10943,7 +10953,7 @@ </message> <message> <source>Audio Resync</source> - <translation>Audio Resync</translation> + <translation>סנכרון קול מחדש</translation> </message> <message> <source>Audio Sync</source> @@ -10955,19 +10965,19 @@ </message> <message> <source>Mute Off</source> - <translation type="unfinished"></translation> + <translation>בטל השתקה</translation> </message> <message> <source>Mute On</source> - <translation>Mute On</translation> + <translation>השתקת קול</translation> </message> <message> <source>Left Channel Muted</source> - <translation type="unfinished"></translation> + <translation>השתקת ערוץ שמאל</translation> </message> <message> <source>Right Channel Muted</source> - <translation type="unfinished"></translation> + <translation>השתקת ערוץ ימין</translation> </message> <message> <source>Sleep </source> @@ -11015,15 +11025,15 @@ </message> <message> <source>Continue Editing</source> - <translation>Continue Editing</translation> + <translation>המשך בעריכה</translation> </message> <message> <source>Do not edit</source> - <translation>Do not edit</translation> + <translation>אל תערוך</translation> </message> <message> <source>Channel Editor</source> - <translation type="unfinished"></translation> + <translation>עורך ערוצים</translation> </message> <message> <source>Callsign</source> @@ -11055,23 +11065,23 @@ </message> <message> <source>Picture-in-Picture</source> - <translation>Picture-in-Picture</translation> + <translation>תמונה בתוך תמונה</translation> </message> <message> <source>Enable/Disable</source> - <translation>Enable/Disable</translation> + <translation>אפשור/מניעה</translation> </message> <message> <source>Swap PiP/Main</source> - <translation>Swap PiP/Main</translation> + <translation>החלף תמונת חלון/ראשי</translation> </message> <message> <source>Change Active Window</source> - <translation>Change Active Window</translation> + <translation>שנה חלון פעיל</translation> </message> <message> <source>Enable Browse Mode</source> - <translation>Enable Browse Mode</translation> + <translation>אפשר מצב סיור</translation> </message> <message> <source>Previous Channel</source> @@ -11079,7 +11089,7 @@ </message> <message> <source>DVD Root Menu</source> - <translation type="unfinished"></translation> + <translation>תפריט DVD ראשי</translation> </message> <message> <source>Edit Recording</source> @@ -11254,7 +11264,7 @@ </message> <message> <source>Detect</source> - <translation>Detect</translation> + <translation>זהה</translation> </message> <message> <source>Progressive</source> @@ -11278,23 +11288,23 @@ </message> <message> <source>Select Audio Track</source> - <translation>Select Audio Track</translation> + <translation>בחר ערוץ שמע</translation> </message> <message> <source>Select Subtitle</source> - <translation>Select Subtitle</translation> + <translation>בחר כתוביות</translation> </message> <message> <source>Select VBI CC</source> - <translation>Select VBI CC</translation> + <translation>בחר VBI CC</translation> </message> <message> <source>Select ATSC CC</source> - <translation>Select ATSC CC</translation> + <translation>בחר ATSC CC</translation> </message> <message> <source>Select DVB CC</source> - <translation>Select DVB CC</translation> + <translation>בחר DVB CC</translation> </message> <message> <source>Toggle On/Off</source> @@ -11318,35 +11328,35 @@ </message> <message> <source>MythTV is already using all available inputs for the channel you selected. If you want to watch an in-progress recording, select one from the playback menu. If you want to watch live TV, cancel one of the in-progress recordings from the delete menu.</source> - <translation type="unfinished"></translation> + <translation>התוכנה משתמשת בכל הכניסות האפשריות לערוץ שבחרת. אם ברצונך לצפות בהקלטה פעילה, בחר בה מתוך תפריט צפיה בהקלטות.(sp)(sp) אם ברצונך לצפות בשידור חי, בטל את אחת ההקלטות מתפריט המחיקה.</translation> </message> <message> <source>Skip Back Not Allowed</source> - <translation type="unfinished"></translation> + <translation>דילוג אחורה אינו מותר</translation> </message> <message> <source>Previous Chapter</source> - <translation>Previous Chapter</translation> + <translation>פרק קודם</translation> </message> <message> <source>Previous Title</source> - <translation>Previous Title</translation> + <translation>כותרת קודמת</translation> </message> <message> <source>Skip Still Frame</source> - <translation type="unfinished"></translation> + <translation>דלג תמונה בודדת</translation> </message> <message> <source>Next Chapter</source> - <translation>Next Chapter</translation> + <translation>פרק הבא</translation> </message> <message> <source>Next Title</source> - <translation>Next Title</translation> + <translation>כותרת הבאה</translation> </message> <message> <source>Exit</source> - <translation type="unfinished">Exit</translation> + <translation>יציאה</translation> </message> <message> <source>Chan %1: %2</source> @@ -11355,39 +11365,40 @@ <message> <source>All Tuners are Busy. Select a Current Recording</source> - <translation type="unfinished"></translation> + <translation>כל המקלטים בפעולה. +בחר הקלטה נוכחית</translation> </message> <message> <source>MythTV wants to record "%1" on %2 in %d seconds. Do you want to:</source> - <translation type="unfinished"></translation> + <translation>התוכנה רוצה להקליט את "%1" בערוץ %2 תוך %d שניות. האם ברצונך:</translation> </message> <message> <source>Let them record and go back to the Main Menu</source> - <translation type="unfinished"></translation> + <translation>הרשה להקליט וחזור לתפריט הראשי</translation> </message> <message> <source>Record it later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>הקלט אחר כך, אני רוצה לראות טלוויזיה</translation> </message> <message> <source>Record them later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>הקלט אותם אחר כך, אני רוצה לראות טלוויזיה</translation> </message> <message> <source>Don't let them record, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>אל תקליט, אני רוצה לראות טלוויזיה</translation> </message> <message> <source>End Of Recording</source> - <translation type="unfinished"></translation> + <translation>סוף הקלטה</translation> </message> <message> <source>Last Program: %1 Doesn't Exist</source> - <translation type="unfinished"></translation> + <translation>התוכנית האחרונה: %1 אינה קיימת</translation> </message> <message> <source>Delete this recording?</source> - <translation type="unfinished"></translation> + <translation>מחק הקלטה זו ?</translation> </message> <message> <source>You should have gotten a channel lock by now. You can continue to wait for a signal, or you can change the channels with %1 or %2, change video source (%3), inputs (%4), etc.</source> @@ -11403,27 +11414,27 @@ </message> <message> <source>Still Frame</source> - <translation type="unfinished"></translation> + <translation>תמונה קפואה</translation> </message> <message> <source>Title: %1 (%2)</source> - <translation type="unfinished"></translation> + <translation>כותרת: %1 (%2)</translation> </message> <message> <source>Chapter: %1/%2</source> - <translation type="unfinished"></translation> + <translation>פרק: %1/%2</translation> </message> <message> <source>Yes</source> - <translation type="unfinished">כן</translation> + <translation>כן</translation> </message> <message> <source>Adjust Fill</source> - <translation type="unfinished"></translation> + <translation>התאם מילוי</translation> </message> <message> <source>Switch Input</source> - <translation type="unfinished"></translation> + <translation>שנה כניסה</translation> </message> <message> <source>C</source> @@ -11437,94 +11448,102 @@ </message> <message> <source>Switch Source</source> - <translation type="unfinished"></translation> + <translation>שנה מקור</translation> </message> <message> <source>DVD Chapter Menu</source> - <translation type="unfinished"></translation> + <translation>תפריט פרקי DVD</translation> </message> <message> <source>Upcoming Recordings</source> - <translation type="unfinished"></translation> + <translation>הקלטות הבאות</translation> </message> <message> <source>Screen Shot</source> - <translation type="unfinished"></translation> + <translation>תמונת מסך</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>שגיאה</translation> </message> <message> <source>You are exiting %1</source> - <translation type="unfinished"></translation> + <translation>אתה יוצא מ%1</translation> </message> <message> <source>Exit %1</source> - <translation type="unfinished"></translation> + <translation>יציאה מ%1</translation> </message> <message> <source>'%1' Group Password:</source> - <translation type="unfinished"></translation> + <translation>סיסמה לקבוצה '%1':</translation> </message> <message> <source>Password Failed</source> - <translation type="unfinished"></translation> + <translation>סיסמא שגויה</translation> + </message> + <message> + <source>MythTV is using all inputs for Live TV?</source> + <translation>התוכנה משתמשת בכל הכניסות לשידור חי ?</translation> + </message> + <message> + <source>MythTV has no capture cards defined. Please run the mythtv-setup program.</source> + <translation>אין לתוכנה כרטיסי דגימה מוגדרים. אנא הפעל את mythtv-setup.</translation> </message> </context> <context> <name>ThemeUI</name> <message> <source>Scheduled Recordings:</source> - <translation>Scheduled Recordings:</translation> + <translation>הקלטה מתוזמנת:</translation> </message> <message> <source>Showing:</source> - <translation>Showing:</translation> + <translation>מופע:</translation> </message> <message> <source>You Haven't Scheduled Any Programs To Be Recorded</source> - <translation type="unfinished"></translation> + <translation>לא תזמנת אף תוכנית להקלטה</translation> </message> <message> <source>To schedule a recording, exit this screen and</source> - <translation>To schedule a recording, exit this screen and</translation> + <translation>לתזמון הקלטה, צא ממסך זה ו</translation> </message> <message> <source>Select 'Program Guide' or 'Program Finder'</source> - <translation type="unfinished"></translation> + <translation>בחר ב 'לוח שידורים' או 'חיפוש תוכניות'</translation> </message> <message> <source>Preview Schedule Changes:</source> - <translation>Preview Schedule Changes:</translation> + <translation>צפה בשינויי תזמון:</translation> </message> <message> <source>The recording schedule would not be affected.</source> - <translation>The recording schedule would not be affected.</translation> + <translation>תזמון ההקלטות לא יושפע.</translation> </message> <message> <source>Channel Recording Priorities</source> - <translation type="unfinished"></translation> + <translation>עדיפות הקלטה לערוץ</translation> </message> <message> <source>Source:</source> - <translation>Source:</translation> + <translation>מקור:</translation> </message> <message> <source>Priority:</source> - <translation>Priority:</translation> + <translation>עדיפות:</translation> </message> <message> <source>Program Recording Priorities</source> - <translation type="unfinished"></translation> + <translation>עדיפויות הקלטת תוכניות</translation> </message> <message> <source>Priority</source> - <translation>Priority</translation> + <translation>עדיפות</translation> </message> <message> <source>Final Priority</source> - <translation>Final Priority</translation> + <translation>עדיפות סופית</translation> </message> <message> <source>(1) Sort by Title (2) Sort by Priority (4) Sort by Type</source> @@ -11532,7 +11551,7 @@ </message> <message> <source>Record Type:</source> - <translation>Record Type:</translation> + <translation>סוג הקלטה:</translation> </message> <message> <source>Channel:</source> @@ -11568,7 +11587,7 @@ </message> <message> <source>Select 'Schedule a Recording' from the Main Menu</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>(4) Program Guide **(6) Program Finder **</source> @@ -11576,23 +11595,23 @@ </message> <message> <source>Select a letter...</source> - <translation>Select a letter...</translation> + <translation>בחר אות...</translation> </message> <message> <source>Pick the letter in which the show starts with, then press SELECT or the right arrow</source> - <translation type="unfinished"></translation> + <translation>בחר את האות שבה מתחילה התוכנית ולחץ SELECT או חץ ימני</translation> </message> <message> <source>Select a program...</source> - <translation type="unfinished"></translation> + <translation>בחר תוכנית...</translation> </message> <message> <source>Select the title of the program you wish to find. When finished return with the left arrow key. Press SELECT to schedule a recording.</source> - <translation type="unfinished"></translation> + <translation>בחר את שם התוכנית שברצונך למצוא. כשסיימת חזור עם החץ השמאלי. לחץ SELECT לתזמון הקלטה.</translation> </message> <message> <source>No Programs</source> - <translation type="unfinished">אין תכניות</translation> + <translation>אין תכניות</translation> </message> <message> <source>There are no available programs under this search. Please select another search.</source> @@ -11600,15 +11619,15 @@ </message> <message> <source>Program Listings</source> - <translation type="unfinished">רשימות תוכניות</translation> + <translation>רשימות תוכניות</translation> </message> <message> <source>(1)Time (2)Title</source> - <translation>(1)Time (2)Title</translation> + <translation>(1)זמן (2)כותרת</translation> </message> <message> <source>No listings found for this program. </source> - <translation type="unfinished"></translation> + <translation>לא נמצאו נתוני שידור לתוכנית זו.</translation> </message> <message> <source>Airdate:</source> @@ -11620,11 +11639,11 @@ </message> <message> <source>System Status - Select a category to view the status</source> - <translation type="unfinished"></translation> + <translation>מצב מערכת - בחר קטגוריה לצפיה במצבה</translation> </message> <message> <source>This screen displays the status of various system components</source> - <translation type="unfinished"></translation> + <translation>מסך זה מציג את מצב יחידות המערכת השונות</translation> </message> <message> <source>Program Details:</source> @@ -11636,50 +11655,50 @@ </message> <message> <source>Welcome to MythTV</source> - <translation>Welcome to MythTV</translation> + <translation>ברוכים הבאים ל MythTV</translation> </message> <message> <source>MythTV is idle and will shutdown shortly.</source> - <translation>MythTV is idle and will shutdown shortly.</translation> + <translation>MythTV אינה פעילה ותכבה בקרוב.</translation> </message> <message> <source>Current Recording(s)</source> - <translation>Current Recording(s)</translation> + <translation>הקלטות נוכחיות</translation> </message> <message> <source>Retrieving Recording Status ...</source> - <translation>Retrieving Recording Status ...</translation> + <translation>מאחזר מצב הקלטות ...</translation> </message> <message> <source>Next Scheduled Recording(s)</source> - <translation>Next Scheduled Recording(s)</translation> + <translation>הקלטות הבאות</translation> </message> <message> <source>Retrieving Scheduled Recordings ...</source> - <translation>Retrieving Scheduled Recordings ...</translation> + <translation>מאחזר הקלטות שתוזמנו ...</translation> </message> <message> <source>WARNING: There are conflicting scheduled recordings!</source> - <translation>WARNING: There are conflicting scheduled recordings!</translation> + <translation>זהירות: ישנה התנגשות בין הקלטות שתוזמנו!</translation> </message> <message> <source>(1) All (2) Important</source> - <translation type="unfinished"></translation> + <translation>(1) הכל (2) חשובים</translation> </message> <message> <source>(1) Channel (2) Priority</source> - <translation type="unfinished"></translation> + <translation>(1) ערוץ (2) עדיפות</translation> </message> <message> <source>(1) Title (2) Priority (4) Type</source> - <translation type="unfinished"></translation> + <translation>(1) כותרת (2) עדיפות (4) סוג</translation> </message> </context> <context> <name>TransportList</name> <message> <source>New Transport</source> - <translation type="unfinished"></translation> + <translation>שינוע חדש</translation> </message> </context> <context> @@ -11717,19 +11736,19 @@ <name>UIListBtnType</name> <message> <source>Search</source> - <translation type="unfinished">Search</translation> + <translation>חיפוש</translation> </message> <message> <source>Starts with text</source> - <translation type="unfinished">Starts with text</translation> + <translation>מתחיל בטקסט</translation> </message> <message> <source>Contains text</source> - <translation type="unfinished">Contains text</translation> + <translation>מכיל טקסט</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">ביטול</translation> + <translation>ביטול</translation> </message> </context> <context> @@ -11755,22 +11774,22 @@ <name>V4LConfigurationGroup</name> <message> <source>Probed info</source> - <translation>Probed info</translation> + <translation>תוצאות בדיקה</translation> </message> <message> <source>Failed to open</source> - <translation type="unfinished"></translation> + <translation>כשל בפתיחה</translation> </message> <message> <source>Failed to probe</source> - <translation type="unfinished"></translation> + <translation>כשל בבדיקה</translation> </message> </context> <context> <name>VideoSourceEditor</name> <message> <source>Video Source Menu</source> - <translation type="unfinished"></translation> + <translation>תפריט מקור וידאו</translation> </message> <message> <source>Edit..</source> @@ -11782,11 +11801,11 @@ </message> <message> <source>Are you sure you want to delete ALL video sources?</source> - <translation type="unfinished"></translation> + <translation>האם אתה בטוח שברצונך למחוק את כל מקורות הוידאו ?</translation> </message> <message> <source>Yes, delete video sources</source> - <translation type="unfinished"></translation> + <translation>כן, מחק את מקורות הוידאו</translation> </message> <message> <source>No, don't</source> @@ -11802,14 +11821,14 @@ </message> <message> <source>Video sources</source> - <translation type="unfinished"></translation> + <translation>מקורות וידאו</translation> </message> </context> <context> <name>VideoSourceSelector</name> <message> <source>Video Source</source> - <translation type="unfinished">מקור וידאו</translation> + <translation>מקור וידאו</translation> </message> </context> <context> @@ -11831,11 +11850,11 @@ <name>ViewScheduled</name> <message> <source>Time Conflict</source> - <translation>Time Conflict</translation> + <translation>התנגשות בזמן</translation> </message> <message> <source>No Conflicts</source> - <translation type="unfinished"></translation> + <translation>אין התנגשויות</translation> </message> <message> <source>All</source> @@ -11843,70 +11862,70 @@ </message> <message> <source>Important</source> - <translation>Important</translation> + <translation>חשוב</translation> </message> <message> <source>Conflict Today</source> - <translation type="unfinished"></translation> + <translation>התנגשות היום</translation> </message> <message> <source>Conflict </source> - <translation type="unfinished"></translation> + <translation>התנגשות </translation> </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>למחוק הוראה '%1' %2 ?</translation> </message> </context> <context> <name>WelcomeDialog</name> <message> <source>Start Frontend</source> - <translation>Start Frontend</translation> + <translation type="unfinished">Start Frontend</translation> </message> <message> <source>Cannot connect to server!</source> - <translation>Cannot connect to server!</translation> + <translation type="unfinished">Cannot connect to server!</translation> </message> <message> <source>There are no recordings currently taking place</source> - <translation>There are no recordings currently taking place</translation> + <translation type="unfinished">There are no recordings currently taking place</translation> </message> <message> <source>There are no scheduled recordings</source> - <translation>There are no scheduled recordings</translation> + <translation type="unfinished">There are no scheduled recordings</translation> </message> <message> <source>Please Wait ...</source> - <translation>Please Wait ...</translation> + <translation type="unfinished">Please Wait ...</translation> </message> <message> <source>MythTV is about to start recording.</source> - <translation>MythTV is about to start recording.</translation> + <translation type="unfinished">MythTV is about to start recording.</translation> </message> <message> <source>MythTV is busy recording.</source> - <translation>MythTV is busy recording.</translation> + <translation type="unfinished">MythTV is busy recording.</translation> </message> <message> <source>MythTV is busy flagging commercials.</source> - <translation>MythTV is busy flagging commercials.</translation> + <translation type="unfinished">MythTV is busy flagging commercials.</translation> </message> <message> <source>MythTV is busy grabbing EPG data.</source> - <translation>MythTV is busy grabbing EPG data.</translation> + <translation type="unfinished">MythTV is busy grabbing EPG data.</translation> </message> <message> <source>MythTV is locked by a user.</source> - <translation>MythTV is locked by a user.</translation> + <translation type="unfinished">MythTV is locked by a user.</translation> </message> <message> <source>MythTV is in a daily wakeup/shutdown period.</source> - <translation>MythTV is in a daily wakeup/shutdown period.</translation> + <translation type="unfinished">MythTV is in a daily wakeup/shutdown period.</translation> </message> <message> <source>MythTV is about to start a wakeup/shutdown period.</source> - <translation>MythTV is about to start a wakeup/shutdown period.</translation> + <translation type="unfinished">MythTV is about to start a wakeup/shutdown period.</translation> </message> <message> <source>MythTV is idle and will shutdown in %1 seconds.</source> @@ -11914,7 +11933,7 @@ </message> <message> <source>MythTV is idle.</source> - <translation>MythTV is idle.</translation> + <translation type="unfinished">MythTV is idle.</translation> </message> <message> <source>Menu</source> @@ -11922,23 +11941,23 @@ </message> <message> <source>Unlock Shutdown</source> - <translation>Unlock Shutdown</translation> + <translation type="unfinished">Unlock Shutdown</translation> </message> <message> <source>Lock Shutdown</source> - <translation>Lock Shutdown</translation> + <translation type="unfinished">Lock Shutdown</translation> </message> <message> <source>Run mythfilldatabase</source> - <translation>Run mythfilldatabase</translation> + <translation type="unfinished">Run mythfilldatabase</translation> </message> <message> <source>Shutdown Now</source> - <translation>Shutdown Now</translation> + <translation type="unfinished">Shutdown Now</translation> </message> <message> <source>Exit</source> - <translation>Exit</translation> + <translation>יציאה</translation> </message> <message> <source>Cancel</source> @@ -11946,15 +11965,15 @@ </message> <message> <source>Cannot shutdown because MythTV is currently recording</source> - <translation>Cannot shutdown because MythTV is currently recording</translation> + <translation type="unfinished">Cannot shutdown because MythTV is currently recording</translation> </message> <message> <source>Cannot shutdown because MythTV is about to start recording</source> - <translation>Cannot shutdown because MythTV is about to start recording</translation> + <translation type="unfinished">Cannot shutdown because MythTV is about to start recording</translation> </message> <message> <source>Cannot shutdown because MythTV is about to start a wakeup/shutdown period.</source> - <translation>Cannot shutdown because MythTV is about to start a wakeup/shutdown period.</translation> + <translation type="unfinished">Cannot shutdown because MythTV is about to start a wakeup/shutdown period.</translation> </message> <message> <source>MythTV is busy transcoding.</source> Dateien mythtv-0.21/i18n/mythfrontend_nb.qm und mythtv/i18n/mythfrontend_nb.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_nb.ts mythtv/i18n/mythfrontend_nb.ts --- mythtv-0.21/i18n/mythfrontend_nb.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_nb.ts 2008-04-04 01:37:37.000000000 +0200 @@ -151,7 +151,7 @@ </message> <message> <source>Use channel scanner to find channels for this input.</source> - <translation>Bruk kanalsøkeren for å finne kanaler fro denne inndatakilden.</translation> + <translation>Bruk kanalsøkeren for å finne kanaler for denne inndatakilden.</translation> </message> <message> <source>This uses the listings data source to provide the channels for this input.</source> @@ -391,7 +391,7 @@ </message> <message> <source>Anytime on a specific day of the week</source> - <translation>Nårr som helst på en bestemt ukedag</translation> + <translation>Når som helst på en bestemt ukedag</translation> </message> <message> <source>Only on weekdays (Monday through Friday)</source> @@ -1165,7 +1165,7 @@ </message> <message> <source>The connection to the master backend server has gone away for some reason.. Is it running?</source> - <translation>Tilkoblingen til hovedtjeneren har av en eller anenn grunn forsvunnet. Kjører den?</translation> + <translation>Tilkoblingen til hovedtjeneren har av en eller annen grunn forsvunnet. Kjører den?</translation> </message> <message> <source>There are also other clients using this database. They should be shut down first.</source> @@ -1216,7 +1216,7 @@ <source>The theme you are using is missing the 'file_browser_background' element. Returning to the previous menu.</source> - <translation>Temaet som brukes mangler elementet «file_borwsser_background». + <translation>Temaet som brukes mangler elementet «file_browser_background». Går tilbake til forrige meny.</translation> </message> @@ -1224,7 +1224,7 @@ <source>The theme you are using is missing the 'file_browser' element. Returning to the previous menu.</source> - <translation>Temaet som brukes mangler elementet «file_borwser». + <translation>Temaet som brukes mangler elementet «file_browser». Går tilbake til forrige meny.</translation> </message> @@ -1559,7 +1559,7 @@ </message> <message> <source>Commercials are flagged</source> - <translation>Reklamer blir markert</translation> + <translation>Reklamer er markert</translation> </message> <message> <source>An editing cutlist is present</source> @@ -1949,7 +1949,7 @@ </message> <message> <source>Reverse Time</source> - <translation>Omvendt kronoligisk rekkefølge</translation> + <translation>Omvendt kronologisk rekkefølge</translation> </message> <message> <source>Sort by Title</source> @@ -2388,7 +2388,7 @@ </message> <message> <source>If this frontend's host name changes often, check this box and provide a network-unique name to identify it. If unchecked, the frontend machine's local host name will be used to save preferences in the database.</source> - <translation>Hvis klientens vertsnavn enders ofte, kryss av denne boksen og oppgi et unikt nettverksnavn for å identifisere den. Er dette ikke avkrysset, vil klientens lokale vertsnavn bli brukt for å lagre innstillinger i databasen.</translation> + <translation>Hvis klientens vertsnavn endres ofte, kryss av denne boksen og oppgi et unikt nettverksnavn for å identifisere den. Er dette ikke avkrysset, vil klientens lokale vertsnavn bli brukt for å lagre innstillinger i databasen.</translation> </message> <message> <source>Custom identifier</source> @@ -3163,7 +3163,7 @@ </message> <message> <source>This showing will be recorded.</source> - <translation>Denne sendingen vil bil tatt opp.</translation> + <translation>Denne sendingen vil bli tatt opp.</translation> </message> <message> <source>This showing is being recorded.</source> @@ -3183,7 +3183,7 @@ </message> <message> <source>This showing was not recorded because </source> - <translation>Denne sendingen vil ikke bli tatt opp fordi </translation> + <translation>Denne sendingen ble ikke tatt opp fordi </translation> </message> <message> <source>it was manually set to not record.</source> @@ -3818,7 +3818,7 @@ </message> <message> <source>Match duplicates using subtitle</source> - <translation>Finn duplisering ved hejlp av undertittel</translation> + <translation>Finn duplisering ved hjelp av undertittel</translation> </message> <message> <source>Match duplicates using description</source> @@ -3850,7 +3850,7 @@ </message> <message> <source>Allow auto expire</source> - <translation>Tillatt automatisk utløing</translation> + <translation>Tillat automatisk utløping</translation> </message> <message> <source>Don't allow auto expire</source> @@ -3866,11 +3866,11 @@ </message> <message> <source>Delete oldest if this would exceed the max episodes</source> - <translation>Slett den eldste hvis denne overstiger tillate episoder</translation> + <translation>Slett den eldste hvis denne overstiger antall tillatte episoder</translation> </message> <message> <source>Don't record if this would exceed the max episodes</source> - <translation>Ikke ta opp hvis denne overstiger tillate episoder</translation> + <translation>Ikke ta opp hvis denne overstiger antall tillatte episoder</translation> </message> <message> <source>No episode limit</source> @@ -3956,7 +3956,7 @@ <source>You MUST run 'mythfilldatabase --manual the first time, instead of just 'mythfilldatabase'. Your grabber does not provide channel numbers, so you have to set them manually.</source> - <translation>Første gangen MÅ «mythfilldatabase --manual» kjøres i stedet for bare «mythfilldatabase». Henteren tildeler ikke kanalnumbre, så disse må angis manuelt.</translation> + <translation>Første gangen MÅ «mythfilldatabase --manual» kjøres i stedet for bare «mythfilldatabase». Henteren tildeler ikke kanalnummer, så disse må angis manuelt.</translation> </message> <message> <source>Video source setup</source> @@ -4242,7 +4242,7 @@ </message> <message> <source>Enable this setting if MythTV is playing "crackly" audio and you are using hardware encoding. This setting will have no effect on MPEG-4 or RTJPEG video. MythTV will keep extra audio data in its internal buffers to workaround this bug.</source> - <translation>Slå på denne innstillingen hvis MythTV spiller hakkete lyd og det brukes maskinvarekoding. Innstillingen har ingen effekt på MPEG-4- eller RTJPEG-video. Hakkingen fjernes ved at MythTV beholde ekstra lyddata i dets interne hurtigminne.</translation> + <translation>Slå på denne innstillingen hvis MythTV spiller hakkete lyd og det brukes maskinvarekoding. Innstillingen har ingen effekt på MPEG-4- eller RTJPEG-video. Hakkingen fjernes ved at MythTV beholder ekstra lyddata i dets interne hurtigminne.</translation> </message> <message> <source>PIP Video Location</source> @@ -4410,7 +4410,7 @@ </message> <message> <source>New Recording Free Disk Space Threshold (in Megabytes)</source> - <translation>MInimum ledig diskplass for å ta opp (i MB)</translation> + <translation type="unfinished">Minimum ledig diskplass for å ta opp (i MB)</translation> </message> <message> <source>MythTV will stop scheduling new recordings on a backend when its free disk space falls below this value.</source> @@ -4418,7 +4418,7 @@ </message> <message> <source>Time to record before start of show (in seconds)</source> - <translation>TId å ta opp før programstart (i sekunder)</translation> + <translation type="unfinished">Tid å ta opp før programstart (i sekunder)</translation> </message> <message> <source>This global setting allows the recorder to start before the scheduled start time. It does not affect the scheduler. It is ignored when two shows have been scheduled without enough time in between.</source> @@ -4430,7 +4430,7 @@ </message> <message> <source>This global setting allows the recorder to record beyond the scheduled end time. It does not affect the scheduler. It is ignored when two shows have been scheduled without enough time in between.</source> - <translation>Denne globale innstillingen tillater opptakeren å ta opp etter den planlagte sluttiden. Dette påvirker ikke planlaggeren, og ignoreres når to opptak er planlagt uten nok tid mellom dem.</translation> + <translation>Denne globale innstillingen tillater opptakeren å ta opp etter den planlagte sluttiden. Dette påvirker ikke planleggeren, og ignoreres når to opptak er planlagt uten nok tid mellom dem.</translation> </message> <message> <source>List Newest Recording First</source> @@ -4470,7 +4470,7 @@ </message> <message> <source>If enabled, pressing the sticky rewind key in fast forward mode switches to rewind mode, and vice versa. If disabled, it will decrease the current speed or switch to play mode if the speed can't be decreased further.</source> - <translation>Hvis på vil et trykk på den treige spole tilbake-knappen i framoverspillingsmodues bytte til bakoverspoling, og omvendt. Hvis av vil den nevnte handlingen senke farten eller bytte til avspillingsmodues hvis farten ikke kan reduseres mer.</translation> + <translation>Hvis på vil et trykk på den treige spole tilbake-knappen i framoverspillingsmodus bytte til bakoverspoling, og omvendt. Hvis av vil den nevnte handlingen senke farten eller bytte til avspillingsmodus hvis farten ikke kan reduseres mer.</translation> </message> <message> <source>Menu theme</source> @@ -4578,7 +4578,7 @@ </message> <message> <source>UDP Notify Port</source> - <translation>UPD-notifiseringsport</translation> + <translation>UDP-notifiseringsport</translation> </message> <message> <source>During playback, MythTV will listen for connections from the "mythtvosd" or "mythudprelay" programs on this port. See the README in contrib/mythnotify/ for additional information.</source> @@ -4662,7 +4662,7 @@ </message> <message> <source>"Fill" is the quickest shading method. "Image" is somewhat slow, but has a higher visual quality. No shading will be the fastest.</source> - <translation>«Fyll» er den raskeste skyggeleggingsmetoden, mens «Bilde» er treigere men ser bedre ut. Ingen skyggelegging er raskest.</translation> + <translation>«Fyll» er den raskeste skyggeleggingsmetoden, mens «Bilde» er treigere, men ser bedre ut. Ingen skyggelegging er raskest.</translation> </message> <message> <source>System Exit key</source> @@ -4690,7 +4690,7 @@ </message> <message> <source>MythTV is designed to run continuously. If you wish, you may use the ESC key or the ESC key + a modifier to exit MythTV. Do not choose a key combination that will be intercepted by your window manager.</source> - <translation>MythTV er laget for å kjøre kontinuerlig. Er det ønskelig kan ESC-knappen aleine eller sammen med en annen knapp brukes for å avslutte MythTV. Ikke bruke n tastekombinasjon som vil bli fanget opp av vindusbehandleren.</translation> + <translation type="unfinished">MythTV er laget for å kjøre kontinuerlig. Er det ønskelig kan ESC-knappen aleine eller sammen med en annen knapp brukes for å avslutte MythTV. Ikke bruk en tastekombinasjon som vil bli fanget opp av vindusbehandleren.</translation> </message> <message> <source>Confirm Exit</source> @@ -4826,7 +4826,7 @@ </message> <message> <source>Use GUI size for TV playback</source> - <translation>Bruk størrelse for grafisk grensesnitt for TV-aspilling</translation> + <translation>Bruk størrelse for grafisk grensesnitt for TV-avspilling</translation> </message> <message> <source>If enabled, use the above size for TV, otherwise use full screen.</source> @@ -4942,7 +4942,7 @@ </message> <message> <source>Your preferred date format.</source> - <translation>Det foretrukkede datoformatet.</translation> + <translation>Det foretrukne datoformatet.</translation> </message> <message> <source>Short Date format</source> @@ -4950,7 +4950,7 @@ </message> <message> <source>Your preferred short date format.</source> - <translation>Det foretrukkede formate for kort datovisning.</translation> + <translation>Det foretrukne formatet for kort datovisning.</translation> </message> <message> <source>Time format</source> @@ -5002,7 +5002,7 @@ </message> <message> <source>Your preferred channel format.</source> - <translation>Det foretrukkede kanalformatet.</translation> + <translation>Det foretrukne kanalformatet.</translation> </message> <message> <source>Long Channel format</source> @@ -5010,7 +5010,7 @@ </message> <message> <source>Your preferred long channel format.</source> - <translation>Det foretrukkede formatet for lang kanalvisning.</translation> + <translation>Det foretrukne formatet for lang kanalvisning.</translation> </message> <message> <source>Time limit for ATSC signal lock (msec)</source> @@ -5150,7 +5150,7 @@ </message> <message> <source>Move higher priority programs to other cards and showings when resolving conflicts. This can be used to record lower priority programs that would otherwise not be recorded, but risks missing a higher priority program if the schedule changes.</source> - <translation>Flytt programmer med høyere prioritet til andre kort og sendinger når konflikter løses. Dette kan brukes til å ta opp lavprioritersprogrammer som ellers ikke ville blitt tatt opp, men risikerer at programmer med høyere prioritet går tapt hvis planen endres.</translation> + <translation>Flytt programmer med høyere prioritet til andre kort og sendinger når konflikter løses. Dette kan brukes til å ta opp lavprioritetsprogrammer som ellers ikke ville blitt tatt opp, men risikerer at programmer med høyere prioritet går tapt hvis planen endres.</translation> </message> <message> <source>Single Recordings Priority</source> @@ -5346,7 +5346,7 @@ </message> <message> <source>Maximum Number of Entries per Module</source> - <translation>Høyste antall oppføringer per modul</translation> + <translation>Høyeste antall oppføringer per modul</translation> </message> <message> <source>If there are more than this number of entries for a module, the oldest log entries will be deleted to reduce the count to this number. Set to 0 to disable.</source> @@ -5374,7 +5374,7 @@ </message> <message> <source>The number of days before a log entry that has been acknowledged will be deleted by the log cleanup process.</source> - <translation>Antall dager før en loggoppføring som er lest slettes av loggrensinsprosessen.</translation> + <translation>Antall dager før en loggoppføring som er lest slettes av loggrensingsprosessen.</translation> </message> <message> <source>Number of days to keep unacknowledged log entries</source> @@ -5382,7 +5382,7 @@ </message> <message> <source>The number of days before a log entry that has NOT been acknowledged will be deleted by the log cleanup process.</source> - <translation>Antall dager før loggoppføringen som ikke er merket som lest slettes av loggrensinsprosessen.</translation> + <translation>Antall dager før en loggoppføring som ikke er merket som lest slettes av loggrensingsprosessen.</translation> </message> <message> <source>Log Print Threshold</source> @@ -5430,7 +5430,7 @@ </message> <message> <source>This controls what messages will be printed out as well as being logged to the database.</source> - <translation>Dette kontroller hvilke meldinger som skrives ut i tillegg til å lagres i databasen.</translation> + <translation>Dette kontrollerer hvilke meldinger som skrives ut i tillegg til å lagres i databasen.</translation> </message> <message> <source>Automatically run mythfilldatabase</source> @@ -5566,7 +5566,7 @@ </message> <message> <source>If checked, video will be displayed in a floating window. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source> - <translation>Hvis p vises video i et flytende vindu. Dette virker kun når «Bruk størrelse for grensesnitt for TV-avspilling» og «Kjør klienten i et vindu» er valgt.</translation> + <translation>Hvis på vises video i et flytende vindu. Dette virker kun når «Bruk størrelse for grensesnitt for TV-avspilling» og «Kjør klienten i et vindu» er valgt.</translation> </message> <message> <source>Video in the floating window will skip this many frames for each frame drawn. Set to 0 to show every frame.</source> @@ -5926,7 +5926,7 @@ </message> <message> <source>The TV standard to use for viewing TV.</source> - <translation>TV-standarden som skal brukes for vising av TV.</translation> + <translation>TV-standarden som skal brukes for visning av TV.</translation> </message> <message> <source>VBI format</source> @@ -5946,7 +5946,7 @@ </message> <message> <source>This will cause Myth to follow symlinks when recordings and related files are deleted, instead of deleting the symlink and leaving the actual file.</source> - <translation>Dette gjør at Myth følger symbolkse koblinger år opptak og relaterte filer slettes: i stedet for at den symbolske koblingen slettes, slettes filen den peker til.</translation> + <translation>Dette gjør at Myth følger symbolske koblinger når opptak og relaterte filer slettes: i stedet for at den symbolske koblingen slettes, slettes filen den peker til.</translation> </message> <message> <source>Time offset for XMLTV listings</source> @@ -6002,7 +6002,7 @@ </message> <message> <source>The amount of time the master backend waits for a recording. If it's idle but a recording starts within this time period, the backends won't shut down.</source> - <translation>Hvor lenge hovedtjeneren venter på et opptak. Hvis den er arbeidsledig men et opptak begynner innen denne tidsperioden, vil ikke tjenerne slåes av.</translation> + <translation>Hvor lenge hovedtjeneren venter på et opptak. Hvis den er arbeidsledig, men et opptak begynner innen denne tidsperioden, vil ikke tjenerne slåes av.</translation> </message> <message> <source>Startup before rec. (secs)</source> @@ -6018,7 +6018,7 @@ </message> <message> <source>The format of the time string passed to the 'setWakeuptime Command' as $time. See QT::QDateTime.toString() for details. Set to 'time_t' for seconds since epoch.</source> - <translation>Formatet for tidsstrengen som gis til «setWakeuptime Command» som $time. Se QT::QDateTime.toString() for detalsjer. Angi «time_t» for sekunder siden epoke.</translation> + <translation>Formatet for tidsstrengen som gis til «setWakeuptime Command» som $time. Se QT::QDateTime.toString() for detaljer. Angi «time_t» for sekunder siden epoke.</translation> </message> <message> <source>Set wakeuptime command</source> @@ -6098,7 +6098,7 @@ </message> <message> <source>This setting controls the start of the Job Queue time window which determines when new jobs will be started.</source> - <translation>Denne innstillingen kontrolleren begynnelsen på jobbkøens tidsvindu, som bestemmer når nye jobber startes.</translation> + <translation>Denne innstillingen kontrollerer begynnelsen på jobbkøens tidsvindu, som bestemmer når nye jobber startes.</translation> </message> <message> <source>Job Queue End Time</source> @@ -6537,7 +6537,7 @@ </message> <message> <source>When exiting sticky keys fast forward/rewind mode, reposition this many 1/100th seconds before resuming normal playback. This compensates for the reaction time between seeing where to resume playback and actually exiting seeking.</source> - <translation>Endre posisjon så mange hundredels sekunder før normal avspilling startes når treige taster spol framover-/bakover-modus avsluttes. Dette kompanserer for reaksjonstiden mellom å se hvor avspillingen skal fortsette og avslutte søkingen.</translation> + <translation>Endre posisjon så mange hundredels sekunder før normal avspilling startes når treige taster spol framover-/bakover-modus avsluttes. Dette kompenserer for reaksjonstiden mellom å se hvor avspillingen skal fortsette og avslutte søkingen.</translation> </message> <message> <source>Aggressive Sound card Buffering</source> @@ -6589,7 +6589,7 @@ </message> <message> <source>If it is supported by your hardware/drivers, MythTV will use OpenGL vertical syncing for video timing, reducing frame jitter.</source> - <translation>Bruk OpenGL vertikal synkronisering for tidsbestemmelse av video hvis maskinvaren/driverne støtter det, noe som reduserer skelving i video.</translation> + <translation>Bruk OpenGL vertikal synkronisering for tidsbestemmelse av video hvis maskinvaren/driverne støtter det, noe som reduserer skjelving i video.</translation> </message> <message> <source>Display current time on idle LCD display. </source> @@ -6658,7 +6658,7 @@ </message> <message> <source>This recording is currently being deleted and is unavailable</source> - <translation>Dette opptaket er utilgjengelig fordi det er iferd med å bil slettet</translation> + <translation type="unfinished">Dette opptaket er utilgjengelig fordi det er iferd med å bli slettet</translation> </message> <message> <source>The file for this recording can not be found</source> @@ -6780,7 +6780,7 @@ </message> <message> <source>This showing was recorded but was aborted before recording was completed.</source> - <translation>Denne sendingen ble tatt opp men ble avbrutt før opptaket var ferdig.</translation> + <translation>Denne sendingen ble tatt opp, men ble avbrutt før opptaket var ferdig.</translation> </message> <message> <source>This showing was not recorded because it was scheduled after it would have ended.</source> @@ -6900,7 +6900,7 @@ </message> <message> <source>Changing existing card inputs, deleting anything, or scanning for channels may not work.</source> - <translation>Det er ikke sikker at det virker å endre eksisterende kortinndatakilder, slette hva som helst eller søke etter kanaler.</translation> + <translation>Det er ikke sikkert at det virker å endre eksisterende kortinndatakilder, slette hva som helst eller søke etter kanaler.</translation> </message> <message> <source>Channel Scanner</source> @@ -6920,7 +6920,7 @@ </message> <message> <source>This is rarely required unless you are using a satellite dish and must enter an initial frequency to for the channel scanner to try.</source> - <translation>Dette er sjelden nødvendig med mindre du bruker en satelittallerken og må skrive inn en startfrekvens som kanalsøkeren kan prøve.</translation> + <translation>Dette er sjelden nødvendig med mindre du bruker en parabol og må skrive inn en startfrekvens som kanalsøkeren kan prøve.</translation> </message> <message> <source>(5_1) Underscore</source> @@ -7224,7 +7224,7 @@ </message> <message> <source>Command to start an Xterm. Can be disabled by leaving this setting blank.</source> - <translation>Kommandol for å starte en X-terminal. Kan slås av ved å la dette feltet være tomt.</translation> + <translation>Kommando for å starte en X-terminal. Kan slås av ved å la dette feltet være tomt.</translation> </message> <message> <source>Perform EIT Scan</source> @@ -7332,7 +7332,7 @@ </message> <message> <source>This recording is currently in use by:</source> - <translation>Dette opptaker er for øyeblikket i bruk av:</translation> + <translation>Dette opptaket er for øyeblikket i bruk av:</translation> </message> <message> <source>The following programs will be recorded instead:</source> @@ -7380,7 +7380,7 @@ </message> <message> <source>If set, MythTV will automatically rewind this many seconds after performing a commercial skip.</source> - <translation>Hvis dette slås på spoler MythTV automatisk tilbake valgte antal sekunder etter å ha hoppet over reklame.</translation> + <translation>Hvis dette slås på spoler MythTV automatisk tilbake valgte antall sekunder etter å ha hoppet over reklame.</translation> </message> <message> <source>Title Pronounce</source> @@ -7444,7 +7444,7 @@ </message> <message> <source>Allows the transcoder to resize the video during transcoding.</source> - <translation>TIllater konvertereren å endre størrelsen på video under konvertering.</translation> + <translation>Tillater konvertereren å endre størrelsen på video under konvertering.</translation> </message> <message> <source>Lossless transcoding</source> @@ -7684,7 +7684,7 @@ </message> <message> <source>The program used to detect commercials in a recording. The default is 'mythcommflag' if this setting is empty.</source> - <translation>Programmet som brukes for å opptage reklamer i et opptak. Hvis feltet er tomt brukes «mythcommflag».</translation> + <translation>Programmet som brukes for å oppdage reklamer i et opptak. Hvis feltet er tomt brukes «mythcommflag».</translation> </message> <message> <source>Recorder Off-Line</source> @@ -11475,7 +11475,7 @@ </message> <message> <source>MythTV is already using all available inputs for the channel you selected. If you want to watch an in-progress recording, select one from the playback menu. If you want to watch live TV, cancel one of the in-progress recordings from the delete menu.</source> - <translation>All inndata for den valgte kanalen er allerede i bruk. Pågående opptak kan sees fra avspillingsmenyen, men for å se direkte TV må ett av de kjørende opptakene avsluttes.</translation> + <translation type="unfinished">Alle inndata for den valgte kanalen er allerede i bruk. Pågående opptak kan sees fra avspillingsmenyen, men for å se direkte TV må ett av de kjørende opptakene avsluttes.</translation> </message> <message> <source>Jump to Bookmark</source> @@ -11544,7 +11544,7 @@ </message> <message> <source>Swap PiP/Main</source> - <translation>Bytt bilde-i-bidle/hoved</translation> + <translation>Bytt bilde-i-bilde/hoved</translation> </message> <message> <source>Skip Still Frame</source> @@ -12144,7 +12144,7 @@ </message> <message> <source>Are you sure you want to delete this video source?</source> - <translation>VIrkelig slette denne videokilden?</translation> + <translation>Virkelig slette denne videokilden?</translation> </message> <message> <source>Yes, delete video source</source> @@ -12257,7 +12257,7 @@ </message> <message> <source>MythTV is busy recording.</source> - <translation>MythTV er opptak med å ta opp.</translation> + <translation>MythTV er opptatt med å ta opp.</translation> </message> <message> <source>MythTV is busy transcoding.</source> @@ -12265,7 +12265,7 @@ </message> <message> <source>MythTV is busy flagging commercials.</source> - <translation>MythTV er opptakk med å merke reklamer.</translation> + <translation>MythTV er opptatt med å merke reklamer.</translation> </message> <message> <source>MythTV is busy grabbing EPG data.</source> Dateien mythtv-0.21/i18n/mythfrontend_nl.qm und mythtv/i18n/mythfrontend_nl.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_nl.ts mythtv/i18n/mythfrontend_nl.ts --- mythtv-0.21/i18n/mythfrontend_nl.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_nl.ts 2008-04-10 03:31:01.000000000 +0200 @@ -1,4 +1,5 @@ <!DOCTYPE TS><TS> +<defaultcodec></defaultcodec> <context> <name>@default</name> <message> @@ -66,19 +67,19 @@ <name>BackendSelect</name> <message> <source>Please select default Myth Backend Server</source> - <translation type="unfinished"></translation> + <translation>Selecteer een standaard Myth Backend Server</translation> </message> <message> <source>OK</source> - <translation type="unfinished">OK</translation> + <translation>OK</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Annuleren</translation> + <translation>Annuleren</translation> </message> <message> <source>Configure Manually</source> - <translation type="unfinished"></translation> + <translation>Handmatig instellen</translation> </message> </context> <context> @@ -171,37 +172,37 @@ </message> <message> <source>Create Input Group</source> - <translation type="unfinished"></translation> + <translation>Maak ingangsgroep</translation> </message> <message> <source>Enter new group name</source> - <translation type="unfinished"></translation> + <translation>Voer nieuwe groepsnaam in</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>fout</translation> </message> <message> <source>Sorry, this Input Group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Sorry. deze ingangsgroep mag niet leeg zijn.</translation> </message> <message> <source>Sorry, this Input Group name is already in use.</source> - <translation type="unfinished"></translation> + <translation>Sorry, deze ingangsgroep is al in gebruik.</translation> </message> </context> <context> <name>CardInputEditor</name> <message> <source>Input connections</source> - <translation type="unfinished">Ingang verbindingen</translation> + <translation>Ingang verbindingen</translation> </message> </context> <context> <name>ChannelEditor</name> <message> <source>Channels</source> - <translation type="unfinished">Zenders</translation> + <translation>Zenders</translation> </message> <message> <source>Are you sure you would like to delete this channel?</source> @@ -245,35 +246,35 @@ </message> <message> <source>Are you sure you would like to delete ALL channels?</source> - <translation type="unfinished"></translation> + <translation>Bent u zeker van het verwijderen van ALLE zenders?</translation> </message> <message> <source>Are you sure you would like to delete all unassigned channels?</source> - <translation type="unfinished"></translation> + <translation>Bent u zeker van het verwijderen van ALLE niet toegewezen zenders?</translation> </message> <message> <source>Are you sure you would like to delete the channels on %1?</source> - <translation type="unfinished"></translation> + <translation>Bent u zeker van het verwijderen van ALLE zenders op %1?</translation> </message> <message> <source>Add some for channels first!</source> - <translation type="unfinished"></translation> + <translation>Voeg eerst voor zenders toe!</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Annuleren</translation> + <translation>Annuleren</translation> </message> <message> <source>Download all icons..</source> - <translation type="unfinished"></translation> + <translation>Download alle iconen..</translation> </message> <message> <source>Rescan for missing icons..</source> - <translation type="unfinished"></translation> + <translation>Opnieuw zoeken naar ontbrekende iconen..</translation> </message> <message> <source>Download icon for </source> - <translation type="unfinished"></translation> + <translation>Download icoon voor </translation> </message> </context> <context> @@ -476,27 +477,27 @@ </message> <message> <source>stored search</source> - <translation type="unfinished"></translation> + <translation>Opgeslagen zoekopdracht</translation> </message> <message> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Voeg toe</translation> </message> <message> <source>Match this series</source> - <translation type="unfinished"></translation> + <translation>Zoek deze series</translation> </message> <message> <source>Match words in the subtitle</source> - <translation type="unfinished"></translation> + <translation>Zoeken naar woorden in de afleveringstitel</translation> </message> <message> <source>Only shows marked as widescreen</source> - <translation type="unfinished"></translation> + <translation>Enkel uitzendingen in breedbeeld</translation> </message> <message> <source>Exclude H.264 encoded streams (EIT only)</source> - <translation type="unfinished"></translation> + <translation>H.264 gecodeerde 'stromen' uitsluiten</translation> </message> </context> <context> @@ -597,11 +598,11 @@ <name>DVBUtilsImportPane</name> <message> <source>File location</source> - <translation type="unfinished">Bestandslocatie</translation> + <translation>Bestandslocatie</translation> </message> <message> <source>Location of the channels.conf file.</source> - <translation type="unfinished">Locatie van het channels.conf bestand.</translation> + <translation>Locatie van het channels.conf bestand.</translation> </message> </context> <context> @@ -753,7 +754,7 @@ </message> <message> <source>Rotor Position Map</source> - <translation type="unfinished">Rotor Positie Map</translation> + <translation>Rotor Positie Map</translation> </message> <message> <source>Rotor Configuration</source> @@ -861,7 +862,7 @@ </message> <message> <source>DiSEqC Device Tree</source> - <translation type="unfinished">DiSEqC Apparaat Boom</translation> + <translation>DiSEqC Apparaat Boom</translation> </message> <message> <source>Choose a port to use for this switch.</source> @@ -885,19 +886,19 @@ </message> <message> <source>Repeat Count</source> - <translation type="unfinished"></translation> + <translation>Aantal herhalingen</translation> </message> <message> <source>Number of times to repeat DiSEqC commands sent to this device. Larger values may help with less reliable devices.</source> - <translation type="unfinished"></translation> + <translation>Aantal keren dat DiSEqC commandos naar dit apparaat verstuurd moeten worden. Een groot getal kan helpen bij minder betrouwbare apparaten.</translation> </message> <message> <source>LNB Reversed</source> - <translation type="unfinished"></translation> + <translation>Omgedraaid LNB signaal</translation> </message> <message> <source>This defines whether the signal reaching the LNB is reversed from normal polarization. This happens to circular signals bouncing twice on a toroidal dish.</source> - <translation type="unfinished"></translation> + <translation>Dit geeft aan of het signaal dat de LNB bereikt omgedraaid is ten opzichte van normale polarisatie. Dit komt voor bij circulaire signale die twee maal weerkaatsen op een toroidal schotel.</translation> </message> <message> <source>Locates the satellite you wish to point to with the longitude along the Clarke Belt of the satellite [-180..180] and its hemisphere.</source> @@ -905,33 +906,33 @@ </message> <message> <source>Longitude (degrees)</source> - <translation type="unfinished"></translation> + <translation>Lengtegraad (graden)</translation> </message> <message> <source>Hemisphere</source> - <translation type="unfinished"></translation> + <translation>Halfrond</translation> </message> <message> <source>Eastern</source> - <translation type="unfinished"></translation> + <translation>Oost</translation> </message> <message> <source>Western</source> - <translation type="unfinished">Western</translation> + <translation>West</translation> </message> </context> <context> <name>FirewireDesc</name> <message> <source>Description</source> - <translation type="unfinished">Beschrijving</translation> + <translation>Beschrijving</translation> </message> </context> <context> <name>GuideGrid</name> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>Verwijder regel '%1' %2?</translation> </message> </context> <context> @@ -989,7 +990,7 @@ <name>InputSelector</name> <message> <source>Input</source> - <translation type="unfinished">Ingang</translation> + <translation>Ingang</translation> </message> </context> <context> @@ -1105,61 +1106,61 @@ </message> <message> <source>5 weekdays if daily</source> - <translation type="unfinished"></translation> + <translation>5 dagen per week indien dagelijks</translation> </message> <message> <source>7 days per week if daily</source> - <translation type="unfinished"></translation> + <translation>7 dagen per week indien dagelijks</translation> </message> </context> <context> <name>MediaMonitor</name> <message> <source>Cancel</source> - <translation type="unfinished">Annuleren</translation> + <translation>Annuleren</translation> </message> <message> <source>Select removable media to eject or insert</source> - <translation type="unfinished"></translation> + <translation>Kies verwijderbare media om te verwijdern of in te voeren</translation> </message> <message> <source>No devices to eject</source> - <translation type="unfinished"></translation> + <translation>Geen apparaten om media te verwijderen</translation> </message> <message> <source>Failed to unmount %1</source> - <translation type="unfinished"></translation> + <translation>Afkoppelen van %1 is mislukt</translation> </message> <message> <source>You may safely remove %1</source> - <translation type="unfinished"></translation> + <translation>U kunt %1 veilig verwijderen</translation> </message> <message> <source>Failed to eject %1</source> - <translation type="unfinished"></translation> + <translation>Het verwijderen van %1 is mislukt</translation> </message> <message> <source>Select a CD drive</source> - <translation type="unfinished"></translation> + <translation>Selecteer een CD speler</translation> </message> <message> <source>Select a VCD drive</source> - <translation type="unfinished"></translation> + <translation>Selecteer een VCD speler</translation> </message> <message> <source>Select a DVD drive</source> - <translation type="unfinished"></translation> + <translation>Selecteer een DVD speler</translation> </message> <message> <source>Select a DVD writer</source> - <translation type="unfinished"></translation> + <translation>Selecteer een DVD brander</translation> </message> </context> <context> <name>MultiplexSetting</name> <message> <source>Transport</source> - <translation type="unfinished">Transport</translation> + <translation>Transport</translation> </message> </context> <context> @@ -1174,41 +1175,43 @@ </message> <message> <source>There are also other clients using this database. They should be shut down first.</source> - <translation type="unfinished"></translation> + <translation>Er zijn ook andere clients die deze database gebruiken. Deze moeten eerst afgesloten worden.</translation> </message> <message> <source>Error: MythTV cannot upgrade the schema of this datatase because other clients are using it. Please shut them down before upgrading.</source> - <translation type="unfinished"></translation> + <translation>Fout: MythTV kan het schema van deze database niet upgraden omdat andere clients er nog gebruik van maken. + +Sluit deze eerst af.</translation> </message> <message> <source>Warning: MythTV wants to upgrade your database schema, from %1 to %2.</source> - <translation type="unfinished"></translation> + <translation>Waarschuwing: MythTV wil je database schema upgraden, van %1 naar %2.</translation> </message> <message> <source>You can try using the old schema, but that may cause problems.</source> - <translation type="unfinished"></translation> + <translation>U kunt proberen om het oude schema te gebruiken, maar dit kan problemen veroorzaken.</translation> </message> <message> <source>Warning: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Waarschuwing: De MythTv database heeft een nieuwer schema (%1) dan verwacht (%2).</translation> </message> <message> <source>Error: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Fout: De MythTV database heeft een nieuwe schema (%1) dan verwacht (%2).</translation> </message> <message> <source>MythTV was unable to backup your database.</source> - <translation type="unfinished"></translation> + <translation>MythTv kon geen reservekopie van uw database maken.</translation> </message> <message> <source>If your system becomes unstable, a database backup file called %1 is located in %2.</source> - <translation type="unfinished"></translation> + <translation>Er is een database reservekopie genaamd %1 geplaatst in %2 voor het geval uw systeem onstabiel wordt.</translation> </message> <message> <source>This cannot be un-done, so having a database backup would be a good idea.</source> - <translation type="unfinished"></translation> + <translation>Dit kan niet ongedaan gemaakt worden, dus het is een goed idee om een database reservekopie te hebben.</translation> </message> </context> <context> @@ -1760,55 +1763,55 @@ </message> <message> <source>Watch List</source> - <translation type="unfinished"></translation> + <translation>Nog niet gezien</translation> </message> <message> <source>There are no recordings in your current view</source> - <translation type="unfinished"></translation> + <translation>Er zijn geen opnames in de huidige weergave</translation> </message> <message> <source>There are no recordings available</source> - <translation type="unfinished"></translation> + <translation>Er zijn geen opnames beschikbaar</translation> </message> <message> <source>Mark as Unwatched</source> - <translation type="unfinished"></translation> + <translation>Markeer als Ongezien</translation> </message> <message> <source>Mark as Watched</source> - <translation type="unfinished"></translation> + <translation>Markeer als Gezien</translation> </message> <message> <source>Recording is preserved</source> - <translation type="unfinished"></translation> + <translation>De opname is bewaard</translation> </message> <message> <source>Show Titles</source> - <translation type="unfinished"></translation> + <translation>Titels weergeven</translation> </message> <message> <source>Show Categories</source> - <translation type="unfinished"></translation> + <translation>Categorieën weergeven</translation> </message> <message> <source>Show Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Opnamegroep weergeven</translation> </message> <message> <source>Show Watch List</source> - <translation type="unfinished"></translation> + <translation>Nog niet gezien weergeven</translation> </message> <message> <source>Show Searches</source> - <translation type="unfinished"></translation> + <translation>Zoekopdrachten weergeven</translation> </message> <message> <source>Save Current View</source> - <translation type="unfinished"></translation> + <translation>Huidige weergave opslaan</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Annuleren</translation> + <translation>Annuleren</translation> </message> <message> <source>_NO_TITLE_</source> @@ -1816,126 +1819,126 @@ </message> <message> <source>Unknown</source> - <translation type="unfinished">Onbekend</translation> + <translation>Onbekend</translation> </message> <message> <source>Help (Status Icons)</source> - <translation type="unfinished"></translation> + <translation>Help (Status iconen)</translation> </message> <message> <source>Delete, and allow re-record</source> - <translation type="unfinished"></translation> + <translation>Verwijder, en opnieuw opnemen toestaan</translation> </message> <message> <source>Allow this program to re-record</source> - <translation type="unfinished"></translation> + <translation>Het opnieuw opnemen van dit programma toestaan</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Verwijderen ongedaan maken</translation> </message> <message> <source>Delete Forever</source> - <translation type="unfinished"></translation> + <translation>Voorgoed verwijderen</translation> </message> <message> <source>Recording is in Mono</source> - <translation type="unfinished"></translation> + <translation>Opname is in Mono</translation> </message> <message> <source>Recording is in Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Opname is in Surround Sound</translation> </message> <message> <source>Recording is in Dolby Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Opname is in Dolby Surround Sound</translation> </message> <message> <source>Recording has Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Opname heeft Ondertiteling beschikbaar</translation> </message> <message> <source>Recording is Subtitled</source> - <translation type="unfinished"></translation> + <translation>Opname is ondertiteld</translation> </message> <message> <source>Recording is in WideScreen</source> - <translation type="unfinished"></translation> + <translation>Opname is in breedbeeld</translation> </message> <message> <source>Recording has been watched</source> - <translation type="unfinished"></translation> + <translation>Opname is bekeken</translation> </message> <message> <source>Show LiveTV as a Group</source> - <translation type="unfinished"></translation> + <translation>Laat LiveTV als een groep zien</translation> </message> <message> <source>Deleted</source> - <translation type="unfinished"></translation> + <translation>Verwijderd</translation> </message> </context> <context> <name>PlaybackProfileItemConfig</name> <message> <source>Match Criteria</source> - <translation type="unfinished"></translation> + <translation>Voldoe aan criterium</translation> </message> <message> <source>W</source> - <translation type="unfinished">W</translation> + <translation>B</translation> </message> <message> <source>H</source> - <translation type="unfinished"></translation> + <translation>H</translation> </message> <message> <source>Decoder</source> - <translation type="unfinished"></translation> + <translation>Decoder</translation> </message> <message> <source>Max CPUs</source> - <translation type="unfinished"></translation> + <translation>Max CPUs</translation> </message> <message> <source>Video Renderer</source> - <translation type="unfinished"></translation> + <translation>Video renderer</translation> </message> <message> <source>OSD Renderer</source> - <translation type="unfinished"></translation> + <translation>OSD renderer</translation> </message> <message> <source>OSD Fade</source> - <translation type="unfinished"></translation> + <translation>OSD fade</translation> </message> <message> <source>Primary Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Primaire deïnterlacer</translation> </message> <message> <source>Fallback Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Reserve deïnterlacer</translation> </message> <message> <source>Custom Filters</source> - <translation type="unfinished">Aangepaste filters</translation> + <translation>Aangepaste filters</translation> </message> <message> <source>Maximum number of CPU cores used for decoding.</source> - <translation type="unfinished"></translation> + <translation>Maximum aantal CPU cores dat gebruikt mag worden om de decoden.</translation> </message> <message> <source> Multithreaded decoding disabled-only one CPU will be used, please recompile with --enable-ffmpeg-pthreads to enable.</source> - <translation type="unfinished"></translation> + <translation>Multithreaded decoden is niet beschikbaar-er wordt maar één CPU gebruikt, hercompileer met --enable-ffmpeg-pthreads om dit beschikbaar te maken.</translation> </message> <message> <source>When unchecked the OSD will not fade away but instead will disappear abruptly.</source> - <translation type="unfinished"></translation> + <translation>Als dit uit staat zal het OSD niet uitfaden maar direct verdwijnen.</translation> </message> <message> <source>Uncheck this if the video studders while the OSD is fading away.</source> - <translation type="unfinished"></translation> + <translation>Zet dit uit als het beeld stotterd terwijl het OSD aan het uitfaden is.</translation> </message> </context> <context> @@ -1990,11 +1993,11 @@ </message> <message> <source>Time</source> - <translation type="unfinished"></translation> + <translation>Tijd</translation> </message> <message> <source>Title</source> - <translation type="unfinished">Titel</translation> + <translation>Titel</translation> </message> </context> <context> @@ -2203,55 +2206,55 @@ </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>Verwijder regel '%1' %2?</translation> </message> <message> <source>Stored Search</source> - <translation type="unfinished"></translation> + <translation>Opgeslagen zoekopdracht</translation> </message> <message> <source>Select a search stored from</source> - <translation type="unfinished"></translation> + <translation>Kies een opgeslagen zoekopdracht van</translation> </message> <message> <source>Custom Record</source> - <translation type="unfinished"></translation> + <translation>Aangepaste opname</translation> </message> <message> <source>0 .. 9 moves to Nx10 percent in list</source> - <translation type="unfinished"></translation> + <translation>0 .. 9 verplaatst naar Nx10 percentage in de lijst</translation> </message> <message> <source>Unrated</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>At least ***/</source> - <translation type="unfinished"></translation> + <translation>Minstens ***/</translation> </message> <message> <source>At least ***</source> - <translation type="unfinished"></translation> + <translation>Minstens ***</translation> </message> <message> <source>At least **/</source> - <translation type="unfinished"></translation> + <translation>Minstens **/</translation> </message> <message> <source>At least **</source> - <translation type="unfinished"></translation> + <translation>Minstens **</translation> </message> <message> <source>At least */</source> - <translation type="unfinished"></translation> + <translation>Minstens */</translation> </message> <message> <source>At least *</source> - <translation type="unfinished"></translation> + <translation>Minstens *</translation> </message> <message> <source>At least /</source> - <translation type="unfinished"></translation> + <translation>Minstens /</translation> </message> </context> <context> @@ -2323,7 +2326,7 @@ </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>Verwijder regel '%1' %2?</translation> </message> </context> <context> @@ -2714,7 +2717,7 @@ </message> <message> <source>Xinerama screen</source> - <translation>Xinerama scherm</translation> + <translation type="obsolete">Xinerama scherm</translation> </message> <message> <source>The width of the GUI. Do not make the GUI wider than your actual screen resolution. Set to 0 to automatically scale to fullscreen.</source> @@ -3183,10 +3186,6 @@ <translation>Herhaling</translation> </message> <message> - <source></source> - <translation></translation> - </message> - <message> <source>Conflicting</source> <translation>Conflicterende</translation> </message> @@ -3444,7 +3443,7 @@ </message> <message> <source>Channel Options</source> - <translation type="unfinished">Zender opties</translation> + <translation>Zender opties</translation> </message> <message> <source>Video Source</source> @@ -3703,7 +3702,7 @@ </message> <message> <source>Audio sampling rate limit</source> - <translation>Liniet audiosamplerate</translation> + <translation>Limiet audiosamplerate</translation> </message> <message> <source>Default input</source> @@ -4865,11 +4864,11 @@ </message> <message> <source>This setting and the following one define a time period when the mythfilldatabase process is allowed to run. For example, setting Start to 11 and End to 13 would mean that the process would only run between 11:00 AM and 1:59 PM.</source> - <translation type="unfinished">Deze instelling en de volgende bepalen een tijdsperiode waarin mythfilldatabase uitgevoerd mag worden. Bv. start op 11 instellen en einde op 13 betekent dat mythfilldatabase mag uitgevoerd worden van 11.00 tot 13.00.</translation> + <translation>Deze instelling en de volgende bepalen een tijdsperiode waarin mythfilldatabase uitgevoerd mag worden. Bv. start op 11 instellen en einde op 13 betekent dat mythfilldatabase mag uitgevoerd worden van 11.00 tot 13.00.</translation> </message> <message> <source>This setting and the preceding one define a time period when the mythfilldatabase process is allowed to run. For example, setting Start to 11 and End to 13 would mean that the process would only run between 11:00 AM and 1:59 PM.</source> - <translation type="unfinished">Deze instelling en de vorige bepalen een tijdsperiode waarin mythfilldatabase uitgevoerd mag worden. Bv. start op 11 instellen en einde op 13 betekent dat mythfilldatabase mag uitgevoerd worden van 11.00 tot 13.00.</translation> + <translation>Deze instelling en de vorige bepalen een tijdsperiode waarin mythfilldatabase uitgevoerd mag worden. Bv. start op 11 instellen en einde op 13 betekent dat mythfilldatabase mag uitgevoerd worden van 11.00 tot 13.00.</translation> </message> <message> <source>(Unassigned)</source> @@ -5133,7 +5132,7 @@ </message> <message> <source>There is guide data until </source> - <translation>Er zijn TV-gids data voor </translation> + <translation>Er is TV-gids data voor </translation> </message> <message> <source>days</source> @@ -6235,7 +6234,7 @@ </message> <message> <source>DVB Transport</source> - <translation type="unfinished">DVB transport</translation> + <translation>DVB transport</translation> </message> <message> <source>Transport Options</source> @@ -6412,7 +6411,7 @@ </message> <message> <source>Default group filter to apply on the View Recordings screen.</source> - <translation type="unfinished">Standaard groepsfilter om toe te passen in het 'Opnames bekijken' scherm.</translation> + <translation>Standaard groepsfilter om toe te passen in het 'Opnames bekijken' scherm.</translation> </message> <message> <source>Save current group filter when changed</source> @@ -6424,39 +6423,39 @@ </message> <message> <source>Default View</source> - <translation type="unfinished">Standaard weergave</translation> + <translation>Standaard weergave</translation> </message> <message> <source>Show Titles only</source> - <translation type="unfinished">Enkel titels laten zien</translation> + <translation>Enkel titels laten zien</translation> </message> <message> <source>Show Titles and Categories</source> - <translation type="unfinished">Titels en categorieën laten zien</translation> + <translation>Titels en categorieën laten zien</translation> </message> <message> <source>Show Titles, Categories, and Recording Groups</source> - <translation type="unfinished">Titels, categorieën en opnamegroepen laten zien</translation> + <translation>Titels, categorieën en opnamegroepen laten zien</translation> </message> <message> <source>Show Titles and Recording Groups</source> - <translation type="unfinished">Titels en opnamegroepen laten zien</translation> + <translation>Titels en opnamegroepen laten zien</translation> </message> <message> <source>Show Categories only</source> - <translation type="unfinished">Enkel categorieën laten zien</translation> + <translation>Enkel categorieën laten zien</translation> </message> <message> <source>Show Categories and Recording Groups</source> - <translation type="unfinished">Categorieën en opnamegroepen laten zien</translation> + <translation>Categorieën en opnamegroepen laten zien</translation> </message> <message> <source>Show Recording Groups only</source> - <translation type="unfinished">Enkel opnamegroepen laten zien</translation> + <translation>Enkel opnamegroepen laten zien</translation> </message> <message> <source>Select what type of grouping to show on the Watch Recordings screen by default.</source> - <translation type="unfinished">Standaard type groepering dat het 'Opnames bekijken' scherm zal gebruiken.</translation> + <translation>Standaard type groepering dat het 'Opnames bekijken' scherm zal gebruiken.</translation> </message> <message> <source>Show filter name instead of "All Programs"</source> @@ -8623,11 +8622,11 @@ </message> <message> <source>If set, the MPEG4 encoder will use interlaced DCT encoding. You may want this when encoding interlaced video, however, this is experimental and may cause damaged video.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld, zal de MPEG4 encoder interlaced DCT encoding toepassen. Dit kan gewenst zijn tijdens het encoden van interlaced video. Dit is echter expirimenteel en kan de video beschadigen.</translation> </message> <message> <source>If set, the MPEG4 encoder will use interlaced motion estimation. You may want this when encoding interlaced video, however, this is experimental and may cause damaged video.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld, zal de MPEG4 encoder interlaced motion estimation toepassen. Dit kan wenselijk zijn tijdens het encoden van interlaced video. Dit is echter expirimenteel en kan de video beschadigen.</translation> </message> <message> <source>(CH)</source> @@ -8639,11 +8638,11 @@ </message> <message> <source>Adjust Playback</source> - <translation type="unfinished"></translation> + <translation>Afspeelgroep aanpassen</translation> </message> <message> <source>Adjust Recorder</source> - <translation type="unfinished"></translation> + <translation>Recorder aanpassen</translation> </message> <message> <source>Colour</source> @@ -8651,59 +8650,59 @@ </message> <message> <source>Volume</source> - <translation type="unfinished"></translation> + <translation>Volume</translation> </message> <message> <source>Enable this option for budget BT878 based DVB-T cards such as the AverTV DVB-T which require the audio volume to be left alone.</source> - <translation type="unfinished"></translation> + <translation>Kies deze optie voor budget DVT-T kaarten gebaseerd op de BT878 zoals de AverTV DVB-T welke vereisen dat het volume met rust gelaten wordt.</translation> </message> <message> <source>Make the dvb-recording drop packets from the card until a sequence start header is seen.</source> - <translation type="unfinished"></translation> + <translation>Laat de dvb-opname paketjes van de kaart overslaan totdat een sequence start header gezien is.</translation> </message> <message> <source>This option makes the backend dvb-recorder only open the card when it is actually in-use, leaving it free for other programs at other times.</source> - <translation type="unfinished"></translation> + <translation>Deze optie laat de backend dvb-recorder de kaart alleen openen als deze werkelijk gebruikt wordt. Hierdoor blijft de kaart beschikbaar voor andere programma's op het moment dat deze niet door MythTV gebruikt wordt.</translation> </message> <message> <source>Experimental</source> - <translation type="unfinished"></translation> + <translation>Experimenteel</translation> </message> <message> <source>General (AutoExpire)</source> - <translation type="unfinished"></translation> + <translation>Standaard (Automatisch vervallen)</translation> </message> <message> <source>Delete files slowly</source> - <translation type="unfinished"></translation> + <translation>Verwijder bestanden langzaam</translation> </message> <message> <source>Analog</source> - <translation type="unfinished"></translation> + <translation>Analoog</translation> </message> <message> <source>This section lists each transport that MythTV currently knows about. The display fields are video source, modulation, frequency, and when relevant symbol rate, network id, and transport id.</source> - <translation type="unfinished"></translation> + <translation>Deze sectie laat alle transporten zien die op dit moment bekend zijn bij MythTV. De scherm velden zijn videobron, modulatie, frequentie, en indien relevant, symbool snelheid, netwerk id en transport id.</translation> </message> <message> <source>Sorry, the Transport Editor can only be used to edit transports which are connected to a card input.</source> - <translation type="unfinished"></translation> + <translation>Sorry, de transport editor kan alleen gebruikt worden om transporten die verbonden zijn aan een TV-kaartingang te bewerken.</translation> </message> <message> <source>Failed to probe a capture card connected to this transport's video source. Please make sure the backend is not running.</source> - <translation type="unfinished"></translation> + <translation>Het zoeken naar een TV-opnamekaart die aangesloten is aan deze transport's videobron is mislukt. Controleer of de backend niet aan staat.</translation> </message> <message> <source>The Video Sources to which this Transport is connected are incompatible, please create seperate video sources for these cards. </source> - <translation type="unfinished"></translation> + <translation>De videobronnen waar deze transport aan gekoppeld is, is niet compatibel. Maak een aparte videobron voor deze kaarten.</translation> </message> <message> <source>Digital TV Standard</source> - <translation type="unfinished"></translation> + <translation>Digitale TV standaard</translation> </message> <message> <source>Guiding standard to use for making sense of the data streams after they have been demodulated, error corrected and demultiplexed.</source> - <translation type="unfinished"></translation> + <translation>TV gids standaard die gebruikt moet worden om de data stromen te kunnen gebruiken nadat deze gedemoduleerd zijn, fout correctie is toegepast en ze gedemultiplext zijn.</translation> </message> <message> <source>OpenCable</source> @@ -8711,311 +8710,311 @@ </message> <message> <source>MPEG</source> - <translation type="unfinished"></translation> + <translation>MPEG</translation> </message> <message> <source>Frequency (Option has no default). The frequency for this channel in</source> - <translation type="unfinished"></translation> + <translation>Frequentie (Optie heeft geen standaard waarde)De frequentie van deze zender in</translation> </message> <message> <source>Modulation, aka Constellation</source> - <translation type="unfinished"></translation> + <translation>Modulatie, oftewel constellatie</translation> </message> <message> <source>QAM Auto</source> - <translation type="unfinished"></translation> + <translation>QAMAuto</translation> </message> <message> <source>seconds</source> - <translation type="unfinished"></translation> + <translation>seconden</translation> </message> <message> <source>DVD Menu Not Available</source> - <translation type="unfinished"></translation> + <translation>DVD menu niet beschikbaar</translation> </message> <message> <source>Group</source> <comment>Play Group</comment> - <translation type="unfinished">Groep</translation> + <translation>Groep</translation> </message> <message> <source>f</source> <comment>RecStatusChar rsFailed</comment> - <translation type="unfinished"></translation> + <translation>f</translation> </message> <message> <source>O</source> <comment>RecStatusChar rsOtherShowing</comment> - <translation type="unfinished">O</translation> + <translation>O</translation> </message> <message> <source>Recorder Failed</source> - <translation type="unfinished"></translation> + <translation>Recorder mislukt</translation> </message> <message> <source>Other Showing</source> - <translation type="unfinished"></translation> + <translation>Andere uitzendingen</translation> </message> <message> <source>Last Recorded</source> - <translation type="unfinished"></translation> + <translation>Laatst opgenomen</translation> </message> <message> <source>Next Recording</source> - <translation type="unfinished"></translation> + <translation>Volgende opname</translation> </message> <message> <source>Watch List Score</source> - <translation type="unfinished"></translation> + <translation>Nog niet gezien score</translation> </message> <message> <source>Auto-expire off</source> - <translation type="unfinished"></translation> + <translation>Automatisch vervallen uit</translation> </message> <message> <source>Marked as 'watched'</source> - <translation type="unfinished"></translation> + <translation>Gemarkeerd als 'Gezien'</translation> </message> <message> <source>Not the earliest episode</source> - <translation type="unfinished"></translation> + <translation>Niet de eerste aflevering</translation> </message> <message> <source>Recently deleted episode</source> - <translation type="unfinished"></translation> + <translation>Recent verwijderde aflevering</translation> </message> <message> <source>Watch List Status</source> - <translation type="unfinished"></translation> + <translation>Nog niet gezien status</translation> </message> <message> <source>Storage Group</source> - <translation type="unfinished"></translation> + <translation>Opslaggroep</translation> </message> <message> <source>SAP/Bilingual</source> - <translation type="unfinished"></translation> + <translation>SAP/Tweetalig</translation> </message> <message> <source>Main Language</source> - <translation type="unfinished"></translation> + <translation>Hoofd taal</translation> </message> <message> <source>SAP Language</source> - <translation type="unfinished"></translation> + <translation>SAP taal</translation> </message> <message> <source>Dual</source> - <translation type="unfinished"></translation> + <translation>Dual</translation> </message> <message> <source>Chooses the language(s) to record when two languages are broadcast. Only Layer II supports the recording of two languages (Dual).Requires ivtv 0.4.0 or later.</source> - <translation type="unfinished"></translation> + <translation>Kies de taal of talen die opgenomen moeten worden indien er twee talen uitgezonden worden. Enkel layer II ondersteund het opnemen van twee talen (Dual). Vereist ivtv 0.4.0 of nieuwer.</translation> </message> <message> <source>Automatically transcode when a recording is made using this profile and the recording's schedule is configured to allow transcoding.</source> - <translation type="unfinished"></translation> + <translation>Automatisch transcoden als een opname met dit profiel gemaakt is en het opname schema zo geconfigureerd is dat transcoden toegestaan is.</translation> </message> <message> <source>Width to use for encoding. Note: PVR-x50 cards may produce ghosting if this is not set to 720 or 768 for NTSC and PAL, respectively.</source> - <translation type="unfinished"></translation> + <translation>Breedte die gebruikt wordt tijdens encoden. Opmerking: PVR-x50 kaarten kunnen ghosting produceren indien dit niet op 720 ingesteld voor NTSC of 768 voor PAL.</translation> </message> <message> <source>Height to use for encoding. Note: PVR-x50 cards may produce ghosting if this is not set to 480 or 576 for NTSC and PAL, respectively.</source> - <translation type="unfinished"></translation> + <translation>Hoogte die gebruikt wordt tijdens encoden. Opmerking: PVR-x50 kaarten kunnen ghosting produceren indien dit niet op 480 ingesteld voor NTSC of 576 voor PAL.</translation> </message> <message> <source>Modulation, 8-VSB, QAM-256, etc.</source> - <translation type="unfinished"></translation> + <translation>Modulatie, 8-VSB, QAM-256, etc.</translation> </message> <message> <source>ATSC Channel Separator</source> - <translation type="unfinished"></translation> + <translation>ATSC Zenderscheidingsteken</translation> </message> <message> <source>Include in the "%1" recording group</source> - <translation type="unfinished"></translation> + <translation>Toevoegen aan de '%1' opnamegroep</translation> </message> <message> <source>Exclude unidentified episodes</source> - <translation type="unfinished">Niet geïdentificeerde afleveringen uitsluiten</translation> + <translation>Niet geïdentificeerde afleveringen uitsluiten</translation> </message> <message> <source>Exclude old episodes</source> - <translation type="unfinished"></translation> + <translation>Oude aflevering uitsluiten</translation> </message> <message> <source>Select Storage Group</source> - <translation type="unfinished"></translation> + <translation>Opslag groep kiezen</translation> </message> <message> <source>Store in the "%1" storage group</source> - <translation type="unfinished"></translation> + <translation>In de "%1" opslaggroep bewaren</translation> </message> <message> <source>LiveTV</source> - <translation type="unfinished">Live TV</translation> + <translation>Live TV</translation> </message> <message> <source>Listings grabber</source> - <translation type="unfinished"></translation> + <translation>TV-gids grabber</translation> </message> <message> <source>GUID</source> - <translation type="unfinished"></translation> + <translation>GUID</translation> </message> <message> <source>Generic</source> - <translation type="unfinished"></translation> + <translation>Generieke</translation> </message> <message> <source>800Mbps</source> - <translation type="unfinished">800Mbps</translation> + <translation>800Mbps</translation> </message> <message> <source>IP address or Device ID from the bottom of the HDHomeRun. You may use 'FFFFFFFF' if there is only one unit on your your network.</source> - <translation type="unfinished"></translation> + <translation>IP adres of Device ID van de onderkant van de HDHomeRun. U kunt 'FFFFFFFF' gebruiken als er maar één apparaat in uw netwerk heeft.</translation> </message> <message> <source>M3U URL</source> - <translation type="unfinished"></translation> + <translation>M3U URL</translation> </message> <message> <source>URL of M3U containing IPTV channel URLs.</source> - <translation type="unfinished"></translation> + <translation>URL van de M3U die de URLs van de IPTV zenders bevat.</translation> </message> <message> <source>Network Recorder</source> - <translation type="unfinished"></translation> + <translation>Netwerk recorder</translation> </message> <message> <source>Unencrypted channels only</source> - <translation type="unfinished"></translation> + <translation>Enkel vrij toegankelijke zenders</translation> </message> <message> <source>If set, only unencrypted channels will be tuned to by MythTV or not be ignored by the MythTV channel scanner.</source> - <translation type="unfinished"></translation> + <translation>Indien geselecteerd zullen alleen vrije zenders gebruikt worden door MythTV en de MythTV zenderscanner.</translation> </message> <message> <source>Allow audio only channels</source> - <translation type="unfinished"></translation> + <translation>Zenders die alleen geluid bevatten toestaan</translation> </message> <message> <source>If set, audio only channels will not be ignored by the MythTV channel scanner.</source> - <translation type="unfinished"></translation> + <translation>Indien geselecteerd zullen kanalen die alleen geluid bevatten niet genegeerd worden door de MythTV zenderscanner.</translation> </message> <message> <source>Use quick tuning</source> - <translation type="unfinished"></translation> + <translation>Snel afstemmen gebruiken</translation> </message> <message> <source>Never</source> - <translation type="unfinished"></translation> + <translation>Nooit</translation> </message> <message> <source>Always</source> - <translation type="unfinished"></translation> + <translation>Altijd</translation> </message> <message> <source>If set, programs that have been marked as watched and are auto-expired will be re-recorded if they are shown again.</source> - <translation type="unfinished"></translation> + <translation>Indien geselecteerd zullen programma's die u al gezien heeft en die automatisch vervallen zijn opnieuw opgenomen worden als ze opnieuw uitgezonden worden.</translation> </message> <message> <source>Sort all sub-titles/multi-titles Ascending</source> - <translation type="unfinished"></translation> + <translation>Sorteer alle subtitels/multititels oplopend</translation> </message> <message> <source>Sort all sub-titles/multi-titles Descending</source> - <translation type="unfinished"></translation> + <translation>Sorteer alle subtitels/multititels aflopend</translation> </message> <message> <source>Sort sub-titles Descending, multi-titles Ascending</source> - <translation type="unfinished"></translation> + <translation>Sorteer subtitels aflopend, multititels oplopend</translation> </message> <message> <source>Sort sub-titles Ascending, multi-titles Descending</source> - <translation type="unfinished"></translation> + <translation>Sorteer ondertiteling oplopend, multititels aflopend</translation> </message> <message> <source>Selects how to sort show episodes. Sub-titles refers to the episodes listed under a specific show title. Multi-title refers to sections (e.g. "All Programs") which list multiple titles. Sections in parentheses are not affected.</source> - <translation type="unfinished"></translation> + <translation>Kies hoe afleveringen gesorteerd moeten worden. Subtitels zijn afleveringen die onder een specifieke titel vallen. Multititels zijn secties (b.v. "Alle programma's") die meerdere titels bevatten. Secties tussen haakjes worden niet beïnvloed.</translation> </message> <message> <source>Episode sort orderings</source> - <translation type="unfinished"></translation> + <translation>Sorteervolgorde van de afleveringen</translation> </message> <message> <source>Theme cache size</source> - <translation type="unfinished"></translation> + <translation>Grootte van de theme cache</translation> </message> <message> <source>Maximum number of prescaled themes to cache.</source> - <translation type="unfinished"></translation> + <translation>Maximum aantal geschaalde themes dat in de cache opgeslagen wordt.</translation> </message> <message> <source>Always stream recordings from the backend</source> - <translation type="unfinished"></translation> + <translation>Opnames altijd streamen vanaf de backend</translation> </message> <message> <source>Enable this setting if you want MythTV to always stream files from a remote backend instead of directly reading a recording file if it is accessible locally.</source> - <translation type="unfinished"></translation> + <translation>Als dit is ingeschakeld, zal MythTV opnames altijd streamen vanaf de backend in plaats van het bestand direct te lezen indien deze lokaal te benaderen is.</translation> </message> <message> <source>Jump to Program OSD</source> - <translation type="unfinished"></translation> + <translation>Spring naar Programma OSD</translation> </message> <message> <source>Set the choice between viewing the current recording group in the OSD, or showing the 'Watch Recording' screen when 'Jump to Program' is activated. If set, the recordings are shown in the OSD</source> - <translation type="unfinished"></translation> + <translation>Maak de keuze uit het bekijken van de huidige opnamegroep in het OSD, of het 'Opnames bekijken' scherm tonen als 'Spring naar Programma' gekozen wordt. Indien geselecteerd, dan zullen de opnames in het OSD getoond worden</translation> </message> <message> <source>If set, when you exit near the end of a recording it will be marked as watched. The automatic detection is not foolproof, so do not enable this setting if you don't want an unwatched recording marked as watched.</source> - <translation type="unfinished"></translation> + <translation>Indien geselecteerd, zal een opname als gezien gemarkeerd worden indien u stopt met kijken terwijl deze bijna afgelopen is. De automatisch detectie is niet waterdicht, zet dit dus niet aan indien u zeker wilt zijn dat een opname nooit als gezien gemarkeerd wordt als u deze nog niet helemaal bekeken heeft.</translation> </message> <message> <source>Sets the Title sorting order when the view is set to Titles only.</source> - <translation type="unfinished"></translation> + <translation>Stelt de Titel sorteer volgorde in indien de weergave ingesteld is op Enkel titels.</translation> </message> <message> <source>Include the 'Watch List' group</source> - <translation type="unfinished"></translation> + <translation>De groep 'Nog niet gezien' toevoegen</translation> </message> <message> <source>The 'Watch List' is an abbreviated list of recordings sorted to highlight series and shows that need attention in order to keep up to date.</source> - <translation type="unfinished"></translation> + <translation>De groep 'Nog niet gezien' is een lijst van opnames die zo gesorteerd is dat u ziet welke series en shows u moet kijken om up to date te blijven.</translation> </message> <message> <source>Start from the Watch List view</source> - <translation type="unfinished"></translation> + <translation>Start vanaf de 'Nog niet gezien' weergave</translation> </message> <message> <source>If set, the 'Watch List' will be the initial view each time you enter the Watch Recordings screen</source> - <translation type="unfinished"></translation> + <translation>Indien geselecteerd, zal de groep 'Nog niet gezien' direct getoond worden bij het openen van het 'Opnames Bekijken' scherm</translation> </message> <message> <source>Exclude recordings not set for Auto-Expire</source> - <translation type="unfinished"></translation> + <translation>Opnames die niet automatisch vervallen buitensluiten</translation> </message> <message> <source>Set this if you turn off auto-expire only for recordings that you've seen and intend to keep. This option will exclude these recordings from the 'Watch List'.</source> - <translation type="unfinished"></translation> + <translation>Selecteer dit indien u automatisch vervallen alleen uitzet voor opnames die u heeft gezien en wilt bewaren. Deze optie zorgt er voor dat deze opnames niet in de groep 'Nog te bekijken' staan.</translation> </message> <message> <source>Maximum days counted in the score</source> - <translation type="unfinished"></translation> + <translation>Maximum aantal dagen dat geteld wordt in de score</translation> </message> <message> <source>The 'Watch List' scores are based on 1 point equals one day since recording. This option limits the maximum score due to age and affects other weighting factors.</source> - <translation type="unfinished"></translation> + <translation>De scores van de groep 'Nog te bekijken' zijn gebaseerd op 1 punt staat gelijk aan 1 dag sinds dat de opname gemaakt is. Deze optie beperkt de maximum score door leeftijd en heeft effect op andere wegende factoren.</translation> </message> <message> <source>Days to exclude weekly episodes after delete</source> - <translation type="unfinished"></translation> + <translation>Aantal dagen dat wekelijkse opnames genegeerd worden</translation> </message> <message> <source>When an episode is deleted or marked as watched, other episodes of the series are excluded from the 'Watch List' for this interval of time. Daily shows also have a smaller interval based on this setting.</source> - <translation type="unfinished"></translation> + <translation>Indien een aflevering verwijderd is of gemarkeerd is als gezien, dan zullen andere afleveringen van deze serie voor het ingestelde aantal dagen uit de groep 'Nog te bekijken' blijven. Voor dagelijkse opnames geld een kleiner aantal, gebaseerd op het ingestelde aantal.</translation> </message> <message> <source>This setting and the following one define a time period when the mythfilldatabase process is allowed to run. For example, setting Start to 11 and End to 13 would mean that the process would only run between 11 AM and 1 PM.</source> @@ -9027,151 +9026,151 @@ </message> <message> <source>mythfilldatabase Program</source> - <translation type="unfinished"></translation> + <translation>Mythfilldatabase programma</translation> </message> <message> <source>Use 'mythfilldatabase' or the name of a custom script that will populate the program guide info for all your video sources.</source> - <translation type="unfinished"></translation> + <translation>Gebruik 'mythfilldatabase' of de naam van een eigen script dat de programmagids data vult voor alle video bronnen.</translation> </message> <message> <source>Schedule Status</source> - <translation type="unfinished"></translation> + <translation>Opnameschema status</translation> </message> <message> <source>Schedule Status shows current statistics from the scheduler.</source> - <translation type="unfinished"></translation> + <translation>Opname Planner Status toont de statistieken van de opname planner.</translation> </message> <message> <source>Total Disk Space:</source> - <translation type="unfinished"></translation> + <translation>Totale schijfruimte:</translation> </message> <message> <source>MythTV Drive #%1:</source> - <translation type="unfinished"></translation> + <translation>MythTV Schijf #%1:</translation> </message> <message> <source>Directories:</source> - <translation type="unfinished"></translation> + <translation>Mappen:</translation> </message> <message> <source>Directory:</source> - <translation type="unfinished"></translation> + <translation>Map:</translation> </message> <message> <source>Some filesystems use a lot of resources when deleting large recording files. This option makes Myth delete the file slowly on this backend to lessen the impact.</source> - <translation type="unfinished"></translation> + <translation>Sommige bestandssystemen gebruiken veel bronnen tijdens het verwijderen van grote opname bestanden. Deze optie laat MythTv de bestanden langzaam verwijderen op deze backend om de impact te verkleinen.</translation> </message> <message> <source>No Storage Group directories are defined. You must add at least one directory to the Default Storage Group where new recordings will be stored.</source> - <translation type="unfinished"></translation> + <translation>Er zijn geen Opslag groep mappen gedefinieerd. Er moet minimaal één map in de standaard opslag groep gedefinieerd zijn zodat nieuwe opnames opgeslagen kunnen worden.</translation> </message> <message> <source>Command to Set Wakeup Time</source> - <translation type="unfinished"></translation> + <translation>Commando om de Wakeup tijd in te stellen</translation> </message> <message> <source>The format of the time string passed to the 'Set Wakeup Time Command' as $time. See QT::QDateTime.toString() for details. Set to 'time_t' for seconds since epoch (use time_t for nvram_wakeup).</source> - <translation type="unfinished"></translation> + <translation>Het formaat van de tijd string die aan het 'Set Wakeup Time Command' wordt doorgegeven als $time. Zie QT::QDateTime.toString() voor details. Zet op 't_time' voor het aantal seconden sinds epoch (1-1-1970) (gebruik 'time_t' voor nvram_wakeup).</translation> </message> <message> <source>Match duplicates using subtitle then description</source> - <translation type="unfinished"></translation> + <translation>Dubbel via afleveringstitel detecteren, daarna via beschrijving</translation> </message> <message> <source>Commercial Flagging Method</source> - <translation type="unfinished"></translation> + <translation>Reclame Detectie methode</translation> </message> <message> <source>Changes the method of commercial detection used for recordings on this channel or skips detection by marking the channel as Commercial Free.</source> - <translation type="unfinished"></translation> + <translation>Veranderd reclame detectie methode die gebruikt wordt voor opnames op deze zender of slaat detectie over door de zender als commercial vrij te markeren.</translation> </message> <message> <source>Use Global Setting</source> - <translation type="unfinished"></translation> + <translation>Gebruik algemene instelling</translation> </message> <message> <source>Channel Options - Filters</source> - <translation type="unfinished"></translation> + <translation>Zenderopties - Filters</translation> </message> <message> <source>Aspect ratio when watching a video at a specific resolution.</source> - <translation type="unfinished"></translation> + <translation>Beeldverhouding wanneer een video op een bepaalde resolutie wordt gekeken.</translation> </message> <message> <source>Backend Server Wakeup settings</source> - <translation type="unfinished"></translation> + <translation>Backend server wakeup instellingen</translation> </message> <message> <source>Database Server Settings</source> - <translation type="unfinished"></translation> + <translation>Database server instellingen</translation> </message> <message> <source>Ping test server?</source> - <translation type="unfinished"></translation> + <translation>Ping test server?</translation> </message> <message> <source>Test basic host connectivity using the ping command. Turn off if your host or network don't support ping (ICMP ECHO) packets</source> - <translation type="unfinished"></translation> + <translation>Test basis host connectiviteit door middel van het ping commando. Zet dit uit als uw host of netwerk geen ping (ICMP ECHO) pakketten ondersteund</translation> </message> <message> <source>Port</source> - <translation type="unfinished"></translation> + <translation>Poort</translation> </message> <message> <source>The port number the database is running on. Leave blank if using the default port (3306).</source> - <translation type="unfinished"></translation> + <translation>De poort waarop de database draait. Leeg laten indien de standaard poort (3306) gebruikt wordt.</translation> </message> <message> <source>Database name</source> - <translation type="unfinished"></translation> + <translation>Database naam</translation> </message> <message> <source>Enable Database Server Wakeup</source> - <translation type="unfinished"></translation> + <translation>Database server wakeup inschakelen</translation> </message> <message> <source>If checked, the frontend will use database wakeup parameters to reconnect to the database server.</source> - <translation type="unfinished"></translation> + <translation>Indien geselecteerd zal de frontend de database wakeup parameters gebruiken om opnieuw verbinding te maken met de database server.</translation> </message> <message> <source>The command executed on this frontend to wake up the database server (eg. sudo /etc/init.d/mysql restart).</source> - <translation type="unfinished"></translation> + <translation>Het commando dat uitgevoerd wordt op deze frontend om de database server wakker te maken (bv. sudo/etc/init.d/mysql restart).</translation> </message> <message> <source>Required fields are marked with an asterisk (*).</source> - <translation type="unfinished"></translation> + <translation>Verplichte velden zijn met een sterretje (*) gemarkeerd.</translation> </message> <message> <source>Cannot find (ping) database host %1 on the network</source> - <translation type="unfinished"></translation> + <translation>Kan de database host %1 niet vinden (ping) op het netwerk</translation> </message> <message> <source>Cannot connect to port %1 on database host %2</source> - <translation type="unfinished"></translation> + <translation>Kan niet verbinden met poort %1 op database host %2</translation> </message> <message> <source>Save database details</source> - <translation type="unfinished"></translation> + <translation>Database details opslaan</translation> </message> <message> <source>Save backend details</source> - <translation type="unfinished"></translation> + <translation>Backend details opslaan</translation> </message> <message> <source>Don't Save</source> - <translation type="unfinished"></translation> + <translation>Niet opslaan</translation> </message> <message> <source>Save that backend or database as the default?</source> - <translation type="unfinished"></translation> + <translation>De backend of de database als standaard opslaan?</translation> </message> <message> <source>Upgrade</source> - <translation type="unfinished"></translation> + <translation>Upgrade</translation> </message> <message> <source>Use current schema</source> - <translation type="unfinished"></translation> + <translation>Gebruik het huidige schema</translation> </message> <message> <source>Subtitle</source> @@ -9179,99 +9178,99 @@ </message> <message> <source>Could not query inputs.</source> - <translation type="unfinished"></translation> + <translation>Kan de ingangen niet aanspreken.</translation> </message> <message> <source>ERROR, Compile with V4L support to query inputs</source> - <translation type="unfinished"></translation> + <translation>Fout, compileer met V4L support om ingangen aan te spreken</translation> </message> <message> <source>Could not open '%1' to probe its inputs.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Kan '%1' niet openen om zijn ingangen te proben.</translation> </message> <message> <source>ERROR, Compile with DVB support to query inputs</source> - <translation type="unfinished"></translation> + <translation>Fout, compileer met DVB support om ingangen aan te spreken</translation> </message> <message> <source>New Input</source> - <translation type="unfinished"></translation> + <translation>Nieuwe ingang</translation> </message> <message> <source>Icon Download</source> - <translation type="unfinished"></translation> + <translation>Icoon downloaden</translation> </message> <message> <source>Starts the icon downloader</source> - <translation type="unfinished"></translation> + <translation>Start de icoon downloader</translation> </message> <message> <source>as a search</source> - <translation type="unfinished"></translation> + <translation>als een zoekopdracht</translation> </message> <message> <source>as an example</source> - <translation type="unfinished"></translation> + <translation>als een voorbeeld</translation> </message> <message> <source>Title %1 chapter %2</source> - <translation type="unfinished"></translation> + <translation>Titel %1 hoofdstuk %2</translation> </message> <message> <source>%1 of %2 (%3 behind)</source> - <translation type="unfinished"></translation> + <translation>%1 van %2 (%3 achter)</translation> </message> <message> <source>%1 of %2 (%3 remaining)</source> - <translation type="unfinished"></translation> + <translation>%1 van %2 (resterende %3)</translation> </message> <message> <source>The theme you are using does not contain the %1 element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Escape out of it to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Het thema dat u gebruikt heeft geen %1 element. Neem contact op met de theme makers en vraag of ze deze willen updaten. <br><br>Het volgende scherm zal leeg zijn. Druk escape om terug te gaan naar het menu.</translation> </message> <message> <source>the recorder failed to record.</source> - <translation type="unfinished"></translation> + <translation>Opnemen mislukt.</translation> </message> <message> <source>this rule does not match any showings in the current program listings.</source> - <translation type="unfinished"></translation> + <translation>Deze regel komt met geen enkele uitzending in de huidige programma gids overeen.</translation> </message> <message> <source>this episode will be recorded on a different channel in this time slot.</source> - <translation type="unfinished"></translation> + <translation>Deze aflevering zal op een ander kanaal in dit tijdslot opgenomen worden.</translation> </message> <message> <source>Mono</source> - <translation type="unfinished"></translation> + <translation>Mono</translation> </message> <message> <source>Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Surround Sound</translation> </message> <message> <source>Dolby Sound</source> - <translation type="unfinished"></translation> + <translation>Dolby Sound</translation> </message> <message> <source>Audio for Hearing Impaired</source> - <translation type="unfinished"></translation> + <translation>Audio voor slechthorenden</translation> </message> <message> <source>Audio for Visually Impaired</source> - <translation type="unfinished"></translation> + <translation>Audio voor slechtzienden</translation> </message> <message> <source>Widescreen</source> - <translation type="unfinished"></translation> + <translation>Breedbeeld</translation> </message> <message> <source>AVC/H.264</source> - <translation type="unfinished"></translation> + <translation>AVC/H.264</translation> </message> <message> <source>Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Ondertiteling beschikbaar</translation> </message> <message> <source>Deaf Signing</source> @@ -9279,57 +9278,58 @@ </message> <message> <source>Average Time Shift</source> - <translation type="unfinished"></translation> + <translation>Gemiddelde tijdsverschuiving</translation> </message> <message> <source>hours</source> - <translation type="unfinished"></translation> + <translation>uren</translation> </message> <message> <source>Recorded File Name</source> - <translation type="unfinished"></translation> + <translation>Naam van het opgenomen bestand</translation> </message> <message> <source>If set, the bitrate specified will be used for 640x480. If other resolutions are used, the bitrate will be scaled appropriately.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld zal de bitrate die opgegeven is gebruikt worden voor 640x480. Indien andere resoluties gebruikt worden, zal de bitrate naar verhouding geschaald worden.</translation> </message> <message> <source>Frequency (%1)</source> - <translation type="unfinished"></translation> + <translation>Frequentie (%1)</translation> </message> <message> <source>Frequency (Option has no default). The frequency for this channel in %1.</source> - <translation type="unfinished"></translation> + <translation>Frequentie (Optie heeft geen standaard waarde)De frequentie van deze zender in %1.</translation> </message> <message> <source>Symbol Rate (symbols/second). Most dvb-s transponders transmit at 27.5 million symbols per second.</source> - <translation type="unfinished"></translation> + <translation>symboolsnelheid (symbolen/seconde). +De meeste dvb-s transponders zenden met 27,5 millioen symbolen per seconde.</translation> </message> <message> <source>Could not open tuner device</source> - <translation type="unfinished"></translation> + <translation>Kan het tuner apparaat niet openen</translation> </message> <message> <source>Bad connection to backend</source> - <translation type="unfinished"></translation> + <translation>Slechte verbinding met de backend</translation> </message> <message> <source> offset %2</source> - <translation type="unfinished"></translation> + <translation> offset %2</translation> </message> <message> <source>Timeout Scanning %1 -- no tables</source> - <translation type="unfinished"></translation> + <translation>Timeout tijdens scannen naar %1 -- no tables</translation> </message> <message> <source>Timeout Scanning %1 -- no signal</source> - <translation type="unfinished"></translation> + <translation>Timeout tijdens scannen naar %1 -- no signal</translation> </message> <message> <source>Tuning to %1 mplexid(%2)</source> - <translation type="unfinished"></translation> + <translation>Afstemmen op %1 mplexid(%2)</translation> </message> <message> <source>Record new episode first showings</source> @@ -9337,291 +9337,291 @@ </message> <message> <source>MythTV wants to record these programs in %d seconds:</source> - <translation type="unfinished"></translation> + <translation>MythTV wil deze programma's in %d seconden opnemen:</translation> </message> <message> <source>"%1" on %2</source> - <translation type="unfinished"></translation> + <translation>"%1" op %2</translation> </message> <message> <source>Do you want to:</source> - <translation type="unfinished"></translation> + <translation>Wilt u:</translation> </message> <message> <source>Mythtv has been idle for %1 minutes and will exit in %2 seconds. Are you still watching?</source> - <translation type="unfinished"></translation> + <translation>Mythtv is %1 minuten ongebruikt en zal binnen %2 seconden uitgeschakeld worden. Bent u nog steeds aan het kijken?</translation> </message> <message> <source>On known multiplex...</source> - <translation type="unfinished"></translation> + <translation>Op bekende multiplex...</translation> </message> <message> <source>PVR-350 decoder</source> - <translation type="unfinished"></translation> + <translation>PVR-350 decoder</translation> </message> <message> <source>libmpeg2 will use mpeg2 library; this is faster on some 32 bit AMD processors.</source> - <translation type="unfinished"></translation> + <translation>libmpeg2 zal de mpeg2 library gebruiken; dit is sneller op sommige 32bit AMD processors.</translation> </message> <message> <source>Note: Closed caption decoding will not work with libmpeg2.</source> - <translation type="unfinished"></translation> + <translation>Opmerking: ondertiteling kan niet gedecodeerd worden met libmpeg2.</translation> </message> <message> <source>Kernel</source> - <translation type="unfinished"></translation> + <translation>Kernel</translation> </message> <message> <source>Greedy HighMotion</source> - <translation type="unfinished"></translation> + <translation>Greedy HighMotion</translation> </message> <message> <source>Greedy HighMotion (2x)</source> - <translation type="unfinished"></translation> + <translation>Greedy HighMotion (2x)</translation> </message> <message> <source>Yadif</source> - <translation type="unfinished"></translation> + <translation>Yadif</translation> </message> <message> <source>Yadif (2x)</source> - <translation type="unfinished"></translation> + <translation>Yadif (2x)</translation> </message> <message> <source>Bob (2x)</source> - <translation type="unfinished"></translation> + <translation>Bob (2x)</translation> </message> <message> <source>Linear blend (HW)</source> - <translation type="unfinished"></translation> + <translation>Linear blend (HW)</translation> </message> <message> <source>Kernel (HW)</source> - <translation type="unfinished"></translation> + <translation>Kernel (HW)</translation> </message> <message> <source>Bob (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Bob (2x, HW)</translation> </message> <message> <source>One field (HW)</source> - <translation type="unfinished"></translation> + <translation>One field (HW)</translation> </message> <message> <source>One Field (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>One Field (2x, HW)</translation> </message> <message> <source>Kernel (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Kernel (2x, HW)</translation> </message> <message> <source>Linear blend (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Linear blend (2x, HW)</translation> </message> <message> <source>Interlaced (2x, Hw)</source> - <translation type="unfinished"></translation> + <translation>Interlaced (2x, Hw)</translation> </message> <message> <source>Video rendering method</source> - <translation type="unfinished"></translation> + <translation>Video render methode</translation> </message> <message> <source>Render video offscreen. Used internally.</source> - <translation type="unfinished"></translation> + <translation>Render video offscreen. Wordt intern gebruikt.</translation> </message> <message> <source>Use X11 pixel copy to render video. This is not recommended if any other option is available. The video will not be scaled to fit the screen. This will work with all X11 servers, local and remote.</source> - <translation type="unfinished"></translation> + <translation>Gebruik X11 pixel copy om video te renderen. Dit wordt niet aanbevolen indien er andere mogelijkheden zijn. De video zal niet geschaald worden om op het scherm te passen. Dit werkt op alle X11 server's, lokaal en remote.</translation> </message> <message> <source>Use X11 shared memory pixel transfer to render video. This is only recommended over the X11 pixel copy renderer. The video will not be scaled to fit the screen. This works with most local X11 servers.</source> - <translation type="unfinished"></translation> + <translation>Gebruik X11 shared memory pixel transfer om video te renderen. Dit is alleen aanbevolen als de enige andere optie X11 pixel copy renderer is. De video zal niet geschaald worden om op het scherm te passen. Dit werkt op de meeste lokale X11 server's.</translation> </message> <message> <source>This is the standard video renderer for X11 systems. It uses XVideo hardware assist for scaling, color conversion. If the hardware offers picture controls the renderer supports them.</source> - <translation type="unfinished"></translation> + <translation>Dit is de standaard video renderer voor X11 systemen. Het gebruikt XVideo hardware assist om te schalen en kleuren te converteren. Indien de hardware picture controls ondersteund gebruikt de renderer deze.</translation> </message> <message> <source>This is the standard video renderer for XvMC decoders. It uses XVideo hardware assist for scaling, color conversion and when available offers XVideo picture controls.</source> - <translation type="unfinished"></translation> + <translation>Dit is de standaard video decoder voor XvMC decoders. Het gebruikt XVideo hardware assist om te schalen, kleuren te converteren en bied indien beschikbaar XVideo picture controls.</translation> </message> <message> <source>This video renderer for XvMC on nVidia cards uses XVideo for color conversion and OpenGL for scaling. The main benefit of this renderer is that it allows OpenGL OSD rendering, which frees two XvMC buffers for decoding. It requires a reasonably fast nVidia card.</source> - <translation type="unfinished"></translation> + <translation>Deze video renderer voor XvMC op nVidia kaarten gebruikt XVideo voor color conversion en OpenGL om te schalen. Het grootste voordeel van deze renderer is dat het OpenGL OSD rendering toestaat. Dit maakt twee XvMC buffers vrij om te decoden. Het vereist een redelijk snelle nVidia kaart.</translation> </message> <message> <source>This video renderer uses DirectFB for scaling and color conversion. It is not as feature rich as the standard video renderer, but can run on Linux hardware without an X11 server.</source> - <translation type="unfinished"></translation> + <translation>Deze video renderer gebruikt DirectFB om te schalen en voor color conversion. Het is niet zo volledig qua features als de standaard video renderer, maar het draait wel op Linux hardware zonder een X11 server.</translation> </message> <message> <source>Windows video renderer based on overlays. Not compatible with Vista Aero Glass.</source> - <translation type="unfinished"></translation> + <translation>Windows video renderer gebaseerd op overlays. Niet compatible met VistaAero Glass.</translation> </message> <message> <source>Windows video renderer based on Direct3D. Requires video card compatible with Direct3D 9. This is the preferred renderer for current Windows systems.</source> - <translation type="unfinished"></translation> + <translation>Windows video renderer gebaseerd op Direct3D. Vereist een videokaart die Direct3D 9 compatilbe is. Dit is de aanbevolen renderer voor Windows systemen.</translation> </message> <message> <source>This is the standard video render for Macintosh OS X systems.</source> - <translation type="unfinished"></translation> + <translation>Dit is de standaard video renderer voor Macintosh OS X systemen.</translation> </message> <message> <source>This is the only video renderer for the MacAccel decoder.</source> - <translation type="unfinished"></translation> + <translation>Dit is de enige video renderer voor de MacAccel decoder.</translation> </message> <message> <source>This is only video renderer for the PVR-350 decoder.</source> - <translation type="unfinished"></translation> + <translation>Dit is de enige video renderer voor de PVR-350 decoder.</translation> </message> <message> <source>This video renderer uses OpenGL for scaling and color conversion and can offer limited picture contols. This requires a faster GPU than XVideo. Also, when enabled, picture controls consume additional resources.</source> - <translation type="unfinished"></translation> + <translation>Deze video renderer gebruikt OpenGL om te schalen en voor color conversion en bied basis picture controls. Dit vereist een snellere CPU dan XVideo. Indien ingeschakeld zal picture controls meer resources gebruiken.</translation> </message> <message> <source>This deinterlacer requires the display to be capable of twice the frame rate as the source video.</source> - <translation type="unfinished"></translation> + <translation>Deze deïnterlacer vereist dat het scherm twee maal de frame rate van de bron video kan tonen.</translation> </message> <message> <source>Perform no deinterlacing.</source> - <translation type="unfinished"></translation> + <translation>Geen deïnterlacing toepassen.</translation> </message> <message> <source>Use this with an interlaced display whose resolution exactly matches the video size. This is incompatible with MythTV zoom modes.</source> - <translation type="unfinished"></translation> + <translation>Gebruik dit met een interlaced scherm waarvan de resolutie exact gelijk is aan de video grootte. Dit is incompatible met MythTV zoom modus.</translation> </message> <message> <source>Shows only one of the two fields in the frame. This looks good when displaying a high motion 1080i video on a 720p display.</source> - <translation type="unfinished"></translation> + <translation>Toont maar één van de twee velden in het frame. Dit ziet er goed uit indien u een 1080i video met snelle bewegingen op een 720p scherm toont.</translation> </message> <message> <source>Shows one field of the frame followed by the other field displaced vertically.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Toont één veld van het frame gevolgd door het andere veld, vertikaal weergegeven.</translation> </message> <message> <source>Blends the odd and even fields linearly into one frame.</source> - <translation type="unfinished"></translation> + <translation>Voeg de even en oneven velden linear samen tot één frame.</translation> </message> <message> <source>This filter disables deinterlacing when the two fields are similar, and performs linear deinterlacing otherwise.</source> - <translation type="unfinished"></translation> + <translation>Dit filter schakeld deïnterlacing uit indien de twee velden gelijk zijn, en voert anders lineare deïnterlacing uit.</translation> </message> <message> <source>(Hardware Accelerated)</source> - <translation type="unfinished"></translation> + <translation>(Hardware Accelerated)</translation> </message> <message> <source>With workaround for broken interlaced modelines.</source> - <translation type="unfinished"></translation> + <translation>Met workaround voor 'slechte' interlaced modlines.</translation> </message> <message> <source>This deinterlacer uses several fields to reduce motion blur. It has increased CPU requirements.</source> - <translation type="unfinished"></translation> + <translation>Deze deïnterlacer gebruikt verschillende velden om motion blur te verminderen. Het vereist meer CPU kracht.</translation> </message> <message> <source>'%1' has not been documented yet.</source> - <translation type="unfinished"></translation> + <translation>'%1' is nog niet gedocumenteerd.</translation> </message> <message> <source>OSD rendering method</source> - <translation type="unfinished"></translation> + <translation>OSD rendering methode</translation> </message> <message> <source>Render the OSD using the XVideo chromakey feature.This renderer does not alpha blend. But it is the fastest OSD renderer; and is particularly efficient compared to the ia44blend OSD renderer for XvMC.</source> - <translation type="unfinished"></translation> + <translation>Render het OSD door gebruik te maken van de XVideo chromakey mogelijkheid. Deze renderer kan niet alpha blenden maar het is de snelste OSD renderen; en is specifiek efficient vergleken met de ia44blend OSD renderer voor XvMC.</translation> </message> <message> <source>Note: nVidia hardware after the 5xxx series does not have XVideo chromakey support.</source> - <translation type="unfinished"></translation> + <translation>Opmerking: nVidia hardware na de 5xxx serie heeft geen XVideo chromakey support.</translation> </message> <message> <source>Software OSD rendering uses your CPU to alpha blend the OSD.</source> - <translation type="unfinished"></translation> + <translation>Software OSD rendering gebruikt de CPU om de OSD te alpha blenden.</translation> </message> <message> <source>Uses hardware support for 16 color alpha-blend surfaces for rendering the OSD. Because of the limited color range, MythTV renders the OSD in 16 level grayscale.</source> - <translation type="unfinished"></translation> + <translation>Gebruikt hardware support voor 16 kleuren alpha-blend surfaces om het OSD te renderen. Vanwege het beperkte kleurenbereik zal MythTV het OSD in 16 grijstinten renderen.</translation> </message> <message> <source>Note: Not recommended for nVidia or Intel chipsets. This removes two of the limited XvMC buffers from decoding duty.</source> - <translation type="unfinished"></translation> + <translation>Opmerking: Niet aanbevolen voor nVidia of Intel chipsets. Dit haalt twee van de beperkte XvMC buffers van de decoding taak af.</translation> </message> <message> <source>Renders the OSD using the PVR-350 chromakey feature.</source> - <translation type="unfinished"></translation> + <translation>Renderd het OSD door gebruik te maken van de PVR-350 chromakey mogelijkheid.</translation> </message> <message> <source>Uses OpenGL to alpha blend the OSD onto the video.</source> - <translation type="unfinished"></translation> + <translation>Gebruikt OpenGL om het OSD te alpha blenden op het video beeld.</translation> </message> <message> <source>Max recordings</source> - <translation type="unfinished"></translation> + <translation>Maximum # opnames</translation> </message> <message> <source>Maximum number of simultaneous recordings this device should make. Some digital transmitters transmit multiple programs on a multiplex, if this is set to a value greater than one MythTV can sometimes take advantage of this.</source> - <translation type="unfinished"></translation> + <translation>Maximum aantal gelijktijdige opnames die dit apparaat mag maken. Sommige digitale zenders zenden meerdere programma's uit op een multiplex. mythTV kan hier in sommige gevallen gebruik van maken indien een waarde groter dan één ingevuld wordt.</translation> </message> <message> <source>Searching for installed XMLTV grabbers</source> - <translation type="unfinished"></translation> + <translation>Zoeken naar geinstalleerde XMLTV grabbers</translation> </message> <message> <source>DVB Device Number</source> - <translation type="unfinished"></translation> + <translation>DVB apparaat nummer</translation> </message> <message> <source>Warning: already in use</source> - <translation type="unfinished"></translation> + <translation>Waarschuwing: is al in gebruik</translation> </message> <message> <source>Use DVB Card for active EIT scan</source> - <translation type="unfinished"></translation> + <translation>Gebruik DVB kaart voor actieve EIT scan</translation> </message> <message> <source>This option activates the active scan for program data (EIT). With this option enabled the DVB card is constantly in-use.</source> - <translation type="unfinished"></translation> + <translation>Deze optie activeert de active scan voor programmagids data (EIT). Door deze optie is de DVB kaart continu in gebruik.</translation> </message> <message> <source>Input Group</source> - <translation type="unfinished"></translation> + <translation>Ingangsgroep</translation> </message> <message> <source>Leave as 'Generic' unless this input is shared with another device. Only one of the inputs in an input group will be allowed to record at any given time.</source> - <translation type="unfinished"></translation> + <translation>Laat op 'standaard' staan tenzij deze ingang gedeeld wordt met een ander apparaat. Er zal maar één ingang uit een ingangsgroep tegelijkertijd mogen opnemen.</translation> </message> <message> <source>Live TV only</source> - <translation type="unfinished"></translation> + <translation>Alleen live tv</translation> </message> <message> <source>If enabled MythTV will tune using only the MPEG program number. The program numbers change more often than DVB or ATSC tuning parameters, so this is slightly less reliable. This will also inhibit EIT gathering during Live TV and recording.</source> - <translation type="unfinished"></translation> + <translation>Indien ingeschakeld zal MythTV afstemmen door alleen gebruik te maken van het MPEG programma nummer. De programma nummers veranderen iets vaker dan DVB of ATSC tuning parameters, waardoor dit iets minder betrouwbaar is. Dit zal ook het EIT verzamelen tijdens Live tv of opnemen vertragen. </translation> </message> <message> <source>Interactions between inputs</source> - <translation type="unfinished"></translation> + <translation>Interactie tussen ingangen</translation> </message> <message> <source>Create a New Input Group</source> - <translation type="unfinished"></translation> + <translation>Maak een nieuwe ingangsgroep</translation> </message> <message> <source>Input groups are only needed when two or more cards share the same resource such as a firewire card and an analog card input controlling the same set top box.</source> - <translation type="unfinished"></translation> + <translation>Ingangsgroepen zijn alleen nodig indien twee of meer kaarten dezelfde bronnen delen, zoals een firewire kaart en een analoge ingang die beide dezelfde set top box besturen.</translation> </message> <message> <source>Ignore</source> - <translation type="unfinished"></translation> + <translation>Negeren</translation> </message> <message> <source>Detect</source> - <translation type="unfinished">Detecteer</translation> + <translation>Detecteer</translation> </message> <message> <source>Interlaced</source> - <translation type="unfinished"></translation> + <translation>Interlaced</translation> </message> <message> <source>Interlaced (Normal)</source> @@ -9637,88 +9637,88 @@ </message> <message> <source>14:9</source> - <translation type="unfinished">14:9</translation> + <translation>14:9</translation> </message> <message> <source>Black</source> - <translation type="unfinished"></translation> + <translation>Zwart</translation> </message> <message> <source>Gray</source> - <translation type="unfinished"></translation> + <translation>Grijs</translation> </message> <message> <source>Half</source> - <translation type="unfinished"></translation> + <translation>Half</translation> </message> <message> <source>Full</source> - <translation type="unfinished"></translation> + <translation>Volledig</translation> </message> <message> <source>Stretch</source> - <translation type="unfinished"></translation> + <translation>Uitgerekt</translation> </message> <message> <source>[Reserved]</source> - <translation type="unfinished"></translation> + <translation>[Gereserveerd]</translation> </message> <message> <source>SCTE mode 1</source> - <translation type="unfinished"></translation> + <translation>SCTE mode 1</translation> </message> <message> <source>SCTE mode 2</source> - <translation type="unfinished"></translation> + <translation>SCTE mode 2</translation> </message> <message> <source>ATSC 8-VSB</source> - <translation type="unfinished"></translation> + <translation>ATSC 8-VSB</translation> </message> <message> <source>ATSC 16-VSB</source> - <translation type="unfinished"></translation> + <translation>ATSC 16-VSB</translation> </message> <message> <source>Detective/Thriller</source> - <translation type="unfinished"></translation> + <translation>Detective/thriller</translation> </message> <message> <source>Adventure/Western/War</source> - <translation type="unfinished"></translation> + <translation>Avontuur/western/oorlog</translation> </message> <message> <source>Science Fiction/Fantasy/Horror</source> - <translation type="unfinished"></translation> + <translation>Science fiction/Fantasie/Horror</translation> </message> <message> <source>Soap/melodrama/folkloric</source> - <translation type="unfinished"></translation> + <translation>Soap/melodrame/folkloristisch</translation> </message> <message> <source>Serious/Classical/Religious/Historical Movie/Drama</source> - <translation type="unfinished"></translation> + <translation>Serieus/klassiek/religieus/historische film/drama</translation> </message> <message> <source>Adult</source> <comment>Adult Movie</comment> - <translation type="unfinished"></translation> + <translation>Volwassen</translation> </message> <message> <source>News/weather report</source> - <translation type="unfinished"></translation> + <translation>Nieuws/weer</translation> </message> <message> <source>News magazine</source> - <translation type="unfinished"></translation> + <translation>Nieuws magazine</translation> </message> <message> <source>Intelligent Programmes</source> - <translation type="unfinished"></translation> + <translation>Intelligente programma's</translation> </message> <message> <source>Game Show</source> - <translation type="unfinished"></translation> + <translation>Spelletjes programma</translation> </message> <message> <source>Variety Show</source> @@ -9726,47 +9726,47 @@ </message> <message> <source>Talk Show</source> - <translation type="unfinished"></translation> + <translation>Talkshow</translation> </message> <message> <source>Special Events (World Cup, World Series..)</source> - <translation type="unfinished"></translation> + <translation>Speciale evenementen (World cup, World series..)</translation> </message> <message> <source>Sports Magazines</source> - <translation type="unfinished"></translation> + <translation>Sport magazine</translation> </message> <message> <source>Football (Soccer)</source> - <translation type="unfinished"></translation> + <translation>Voetbal</translation> </message> <message> <source>Tennis/Squash</source> - <translation type="unfinished"></translation> + <translation>Tennis/squash</translation> </message> <message> <source>Misc. Team Sports</source> - <translation type="unfinished"></translation> + <translation>Div. teamsporten</translation> </message> <message> <source>Athletics</source> - <translation type="unfinished"></translation> + <translation>Atletiek</translation> </message> <message> <source>Motor Sport</source> - <translation type="unfinished"></translation> + <translation>Motor sport</translation> </message> <message> <source>Water Sport</source> - <translation type="unfinished"></translation> + <translation>Water sport</translation> </message> <message> <source>Winter Sports</source> - <translation type="unfinished"></translation> + <translation>Winter sporten</translation> </message> <message> <source>Equestrian</source> - <translation type="unfinished"></translation> + <translation>Ruitersport</translation> </message> <message> <source>Martial Sports</source> @@ -9774,59 +9774,59 @@ </message> <message> <source>Kids</source> - <translation type="unfinished"></translation> + <translation>Kinderen</translation> </message> <message> <source>Pre-School Children's Programmes</source> - <translation type="unfinished"></translation> + <translation>Voor school kinder programma's</translation> </message> <message> <source>Entertainment Programmes for 6 to 14</source> - <translation type="unfinished"></translation> + <translation>Entertainment programma's voor 6 tot 14 jaar</translation> </message> <message> <source>Entertainment Programmes for 10 to 16</source> - <translation type="unfinished"></translation> + <translation>Entertainment programma's voor 10 tot 16 jaar</translation> </message> <message> <source>Informational/Educational</source> - <translation type="unfinished"></translation> + <translation>Informatief/educatief</translation> </message> <message> <source>Cartoons/Puppets</source> - <translation type="unfinished"></translation> + <translation>Tekenfilm's/Poppen</translation> </message> <message> <source>Music/Ballet/Dance</source> - <translation type="unfinished"></translation> + <translation>Muziek/ballet/dans</translation> </message> <message> <source>Rock/Pop</source> - <translation type="unfinished"></translation> + <translation>Rock/pop</translation> </message> <message> <source>Classical Music</source> - <translation type="unfinished"></translation> + <translation>Klassieke muziek</translation> </message> <message> <source>Folk Music</source> - <translation type="unfinished"></translation> + <translation>Volksmuziek</translation> </message> <message> <source>Jazz</source> - <translation type="unfinished"></translation> + <translation>Jazz</translation> </message> <message> <source>Musical/Opera</source> - <translation type="unfinished"></translation> + <translation>Musical/opera</translation> </message> <message> <source>Ballet</source> - <translation type="unfinished"></translation> + <translation>Ballet</translation> </message> <message> <source>Arts/Culture</source> - <translation type="unfinished"></translation> + <translation>Kunst/cultuur</translation> </message> <message> <source>Performing Arts</source> @@ -9838,7 +9838,7 @@ </message> <message> <source>Religion</source> - <translation type="unfinished"></translation> + <translation>Religie</translation> </message> <message> <source>Popular Culture/Traditional Arts</source> @@ -9846,19 +9846,19 @@ </message> <message> <source>Literature</source> - <translation type="unfinished"></translation> + <translation>Literatuur</translation> </message> <message> <source>Film/Cinema</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Film</translation> </message> <message> <source>Experimental Film/Video</source> - <translation type="unfinished"></translation> + <translation>Experimentele film/video</translation> </message> <message> <source>Broadcasting/Press</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>New Media</source> @@ -9870,43 +9870,43 @@ </message> <message> <source>Social/Policical/Economics</source> - <translation type="unfinished"></translation> + <translation>Sociaal/politiek/economie</translation> </message> <message> <source>Magazines/Reports/Documentary</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Economics/Social Advisory</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Economie/</translation> </message> <message> <source>Remarkable People</source> - <translation type="unfinished"></translation> + <translation>Opmerkelijke personen</translation> </message> <message> <source>Education/Science/Factual</source> - <translation type="unfinished"></translation> + <translation>Educatief/wetenschap/feiten</translation> </message> <message> <source>Nature/animals/Environment</source> - <translation type="unfinished"></translation> + <translation>Natuur/dieren/milieu</translation> </message> <message> <source>Technology/Natural Sciences</source> - <translation type="unfinished"></translation> + <translation>Technologie/natuurwetenschappen</translation> </message> <message> <source>Medicine/Physiology/Psychology</source> - <translation type="unfinished"></translation> + <translation>Medisch/fysiologie/psychologie</translation> </message> <message> <source>Foreign Countries/Expeditions</source> - <translation type="unfinished"></translation> + <translation>Buiteland/expedities</translation> </message> <message> <source>Social/Spiritual Sciences</source> - <translation type="unfinished"></translation> + <translation>Sociaal/spirituele wetenschap</translation> </message> <message> <source>Further Education</source> @@ -9914,15 +9914,15 @@ </message> <message> <source>Languages</source> - <translation type="unfinished"></translation> + <translation>Talen</translation> </message> <message> <source>Leisure/Hobbies</source> - <translation type="unfinished"></translation> + <translation>Vrijetijd/hobbies</translation> </message> <message> <source>Tourism/Travel</source> - <translation type="unfinished"></translation> + <translation>Toerisme/reizen</translation> </message> <message> <source>Handicraft</source> @@ -9930,366 +9930,364 @@ </message> <message> <source>Motoring</source> - <translation type="unfinished"></translation> + <translation>Auto</translation> </message> <message> <source>Fitness & Health</source> - <translation type="unfinished"></translation> + <translation>Fitness & gezondheid</translation> </message> <message> <source>Cooking</source> - <translation type="unfinished"></translation> + <translation>Koken</translation> </message> <message> <source>Advertizement/Shopping</source> - <translation type="unfinished"></translation> + <translation>Reclame/winkelen</translation> </message> <message> <source>Gardening</source> - <translation type="unfinished"></translation> + <translation>Tuinieren</translation> </message> <message> <source>Original Language</source> - <translation type="unfinished"></translation> + <translation>Originele taal</translation> </message> <message> <source>Black & White</source> - <translation type="unfinished"></translation> + <translation>Zwart & wit</translation> </message> <message> <source>"Unpublished" Programmes</source> - <translation type="unfinished"></translation> + <translation>"Ongepubliceerde" programma's</translation> </message> <message> <source>Live Broadcast</source> - <translation type="unfinished"></translation> + <translation>Live uitzending</translation> </message> <message> <source>currently running.</source> - <translation type="unfinished"></translation> + <translation>draait momenteel.</translation> </message> <message> <source>Successful.</source> - <translation type="unfinished"></translation> + <translation>Successvol.</translation> </message> <message> <source>FAILED: xmltv ran but was interrupted.</source> - <translation type="unfinished"></translation> + <translation>MISLUKT: xmltv is gestart maar is onderbroken.</translation> </message> <message> <source>FAILED: xmltv returned error code %1.</source> - <translation type="unfinished"></translation> + <translation>MISLUKT: xmltv gaf error code %1.</translation> </message> <message> <source>mythfilldatabase ran, but did not insert any new data into the Guide for %1 of %2 sources. This can indicate a potential grabber failure.</source> - <translation type="unfinished"></translation> + <translation>mythfilldatabase is gestart, maar heeft geen nieuwe data in de tvgids geplaatst voor %1 van %2 bronnen. Dit kan duiden op een grabber probleem.</translation> </message> <message> <source>Max Audio Channels</source> - <translation type="unfinished"></translation> + <translation>MaxAudio kanalen</translation> </message> <message> <source>5.1</source> - <translation type="unfinished">5.1</translation> + <translation>5.1</translation> </message> <message> <source>Set the maximum number of audio channels to be decoded. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation>Zet het maximum aantal audio kanalen dat gedecodeerd mag worden. Dit is voor het afspelen van multi-kanaal/surround audio.</translation> </message> <message> <source>Upmix</source> - <translation type="unfinished"></translation> + <translation>Upmix</translation> </message> <message> <source>Passive</source> - <translation type="unfinished"></translation> + <translation>passief</translation> </message> <message> <source>Active Simple</source> - <translation type="unfinished"></translation> + <translation>Actief simpel</translation> </message> <message> <source>Active Linear</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation>Actief lineair</translation> </message> <message> <source>Run commercial flagger</source> - <translation type="unfinished"></translation> + <translation>Draai het markeren van reclameblokken</translation> </message> <message> <source>Run transcoder</source> - <translation type="unfinished"></translation> + <translation>Draai transcoder</translation> </message> <message> <source>Deferral days for Auto-Transcode jobs</source> - <translation type="unfinished"></translation> + <translation>Aantal dagen dat auto-transcode taken uitgesteld worden</translation> </message> <message> <source>If non-zero, Auto-Transcode jobs will be scheduled to run this many days after a recording completes instead of immediately afterwards.</source> - <translation type="unfinished"></translation> + <translation>Indien anders dan nul, zullen auto-transcode taken het opgegeven aantal dagen nadat de opname afgerond is gestart worden in plaast van direct hierna.</translation> </message> <message> <source>Run User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Start Gebruikers taak #%1</translation> </message> <message> <source>This is the default value used for the 'Run %1' setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation>Dit is de standaard waarde die gebrukt wordt voor de 'Run %1' instelling wanneer een nieuwe geprogrammeerde opname gemaakt wordt.</translation> </message> <message> <source>Merge short commercial breaks (in seconds)</source> - <translation type="unfinished"></translation> + <translation>Voeg korte recleame onderbrekingen samen (in seconden)</translation> </message> <message> <source>Treat consecutive commercial breaks shorter than this as one break when skipping forward. Useful if you have to skip a few times during breaks. Applies to automatic skipping as well. Set to 0 to disable.</source> - <translation type="unfinished"></translation> + <translation>Behandel achtereenvolgende reclame onderbrekingen korter dan de ingevoerde waarde als één onderbreking tijdens het overslaan. Dit is handig indien u tijdens onderbrekingen meerdere malen moet overslaan. Wordt ook toegepast op automatisch overslaan. Zet op 0 om uit te schakelen.</translation> </message> <message> <source>Extra Disk Space</source> - <translation type="unfinished"></translation> + <translation>Extra schijfruimte</translation> </message> <message> <source>Extra disk space (in Gigabytes) that you want to keep free on the recording file systems beyond what MythTV requires.</source> - <translation type="unfinished"></translation> + <translation>Extra schijfruimte (in Gigabytes) dat u vrij wilt houden op het opname bestandssysteem, naast hetgeen dat MythTV nodig heeft.</translation> </message> <message> <source>Auto Expire Instead of Delete Recording</source> - <translation type="unfinished"></translation> + <translation>Automatishc vervallen in plaats van de opname verwijderen</translation> </message> <message> <source>Instead of deleting a recording, move recording to the 'Deleted' recgroup and turn on autoexpire.</source> - <translation type="unfinished"></translation> + <translation>Verplaats de opname naar de groep 'verwijderd', in plaats van de opname te verwijderen.</translation> </message> <message> <source>Deleted Max Age</source> - <translation type="unfinished"></translation> + <translation>Max ouderdom verwijderd</translation> </message> <message> <source>When set to a number greater than zero, AutoExpire will force expiration of Deleted recordings when they are this many days old.</source> - <translation type="unfinished"></translation> + <translation>Indien een nummer groter dan nul ingevuld is, zal automatisch vervallen verwijderde opnames laten vervallen indien ze het opgegeven aantal dagen oud zijn.</translation> </message> <message> <source>Expire in deleted order</source> - <translation type="unfinished"></translation> + <translation>Vervallen in volgorde van verwijderen</translation> </message> <message> <source>Expire Deleted recordings in the order which they were originally deleted.</source> - <translation type="unfinished"></translation> + <translation>Laat verwijderde opnames vervallen in de volgorde waarin ze origineel verwijderd zijn.</translation> </message> <message> <source>DeletedExpireOptions</source> - <translation type="unfinished"></translation> + <translation>VerwijderVervalOpties</translation> </message> <message> <source>Watched before UNwatched</source> - <translation type="unfinished"></translation> + <translation>Gezien voor ONgezien</translation> </message> <message> <source>If set, programs that have been marked as watched will be expired before programs that have not been watched.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld, zullen programma's die gemarkeerd zijn als gezien eerder vervallen dan programma's die nog niet bekeken zijn.</translation> </message> <message> <source>Priority Weight</source> - <translation type="unfinished"></translation> + <translation>Prioriteit gewicht</translation> </message> <message> <source>When enabled, any new recording schedules will be marked as eligible for Auto-Expiration. Existing schedules will keep their current value.</source> - <translation type="unfinished"></translation> + <translation>Indien ingeschakeld, zullen alle nieuwe geplande opnames gemarkeerd worden als geschikt voor automatisch vervallen. Bestaande schema's houden hun huidige waarde.</translation> </message> <message> <source>LiveTV Max Age</source> - <translation type="unfinished"></translation> + <translation>LiveTv MaxOuderdom</translation> </message> <message> <source>AutoExpire will force expiration of LiveTV recordings when they are this many days old. LiveTV recordings may also be expired early if necessary to free up disk space.</source> - <translation type="unfinished"></translation> + <translation>Automatisch vervallen zal het vervallen van LiveTV opnames forceren indien deze het opgegeven aantal dagen oud zijn. LiveTV opnames kunnen ook eerder vervallen indien er ruimte vrij gemaakt moet worden.</translation> </message> <message> <source>Re-record Watched</source> - <translation type="unfinished"></translation> + <translation>Gezien heropnemen</translation> </message> <message> <source>For a specific category (e.g. "Sports event"), request that shows be autoextended. Only works if a show's category can be determined.</source> - <translation type="unfinished"></translation> + <translation>Vraag voor een bepaalde categorie (b.v. "Sport evenementen") aan dat uitzendingen automatisch verlengd worden. Dit werkt alleen indien de categorie van de uitzending bepaald kan worden.</translation> </message> <message> <source>Profile Item</source> - <translation type="unfinished"></translation> + <translation>Profiel item</translation> </message> <message> <source>Example Custom filter list: 'ivtc,denoise3d'</source> - <translation type="unfinished"></translation> + <translation>Voorbeeld van een aangepaste filter lijst: 'ivtv,denoise3d'</translation> </message> <message> <source>Main deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation>Hoofd deïnterlacing methode.</translation> </message> <message> <source>Fallback deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation>Reserve deïnterlacing methode.</translation> </message> <message> <source>&</source> <comment>and</comment> - <translation type="unfinished"></translation> + <translation>&</translation> </message> <message> <source>if rez</source> - <translation type="unfinished"></translation> + <translation>if rez</translation> </message> <message> <source>Edit</source> - <translation type="unfinished">Bewerken</translation> + <translation>Bewerken</translation> </message> <message> <source>Add New Entry</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Voeg nieuwe toe</translation> </message> <message> <source>Playback Profiles</source> - <translation type="unfinished"></translation> + <translation>Afspeelprofiel</translation> </message> <message> <source>Current Video Playback Profile</source> - <translation type="unfinished"></translation> + <translation>Huidige video afspeelprofiel</translation> </message> <message> <source>Add New</source> - <translation type="unfinished"></translation> + <translation>Voeg nieuwe toe</translation> </message> <message> <source>Enter Playback Group Name</source> - <translation type="unfinished"></translation> + <translation>Voer afspeelgroep naam in</translation> </message> <message> <source>Sorry, playback group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Sorry, afspeelgroep +naam mag niet leeg zijn.</translation> </message> <message> <source>Sorry, playback group name '%1' is already being used.</source> - <translation type="unfinished"></translation> + <translation>Sorry, afspeelgroep naam +'%1' is al in gebruik.</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fout</translation> </message> <message> <source>Length of time an on-screen display window will be visible.</source> - <translation type="unfinished"></translation> + <translation>Tijd dat een 'on-screen display' scherm getoond wordt.</translation> </message> <message> <source>Length of time the on-screen display will display program information.</source> - <translation type="unfinished"></translation> + <translation>Tijd dat het 'on-screen display' programma informatie toont.</translation> </message> <message> <source>Use this to enlarge or shrink captions.</source> - <translation type="unfinished"></translation> + <translation>Gebruik dit om ondertiteling te vergroten of te verkleinen.</translation> </message> <message> <source>ATSC Caption Settings</source> - <translation type="unfinished"></translation> + <translation>ATSC ondertiteling instellingen</translation> </message> <message> <source>ATSC %1 closed caption font.</source> - <translation type="unfinished"></translation> + <translation>ATSC %1 ondertiteling lettertype.</translation> </message> <message> <source>ATSC Caption Fonts</source> - <translation type="unfinished"></translation> + <translation>ATSC caption lettertype</translation> </message> <message> <source>Monospaced Serif</source> - <translation type="unfinished"></translation> + <translation>Monospaced serif</translation> </message> <message> <source>Proportional Serif</source> - <translation type="unfinished"></translation> + <translation>Proportionele serif</translation> </message> <message> <source>Monospaced Sans Serif</source> - <translation type="unfinished"></translation> + <translation>Monispaced sans serif</translation> </message> <message> <source>Proportional Sans Serif</source> - <translation type="unfinished"></translation> + <translation>Proportionele sans serif</translation> </message> <message> <source>Regular Font</source> - <translation type="unfinished"></translation> + <translation>Normaal lettetype</translation> </message> <message> <source>Italic Font</source> - <translation type="unfinished"></translation> + <translation>Cursief lettertype</translation> </message> <message> <source>Italic</source> - <translation type="unfinished"></translation> + <translation>Cursief</translation> </message> <message> <source>Vertical scaling</source> - <translation type="unfinished"></translation> + <translation>Vertikaal schalen</translation> </message> <message> <source>Adjust this if the image does not fill your screen vertically. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation>Aanpassen wanneer het beeld uw scherm niet volledig vult (vertikaal). Bereik -100% tot 100%</translation> </message> <message> <source>Horizontal scaling</source> - <translation type="unfinished"></translation> + <translation>Horizontale schaling</translation> </message> <message> <source>Adjust this if the image does not fill your screen horizontally. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation>Aanpassen wanneer het beeld uw scherm niet volledig vult (horizontaal). Bereik -100% tot 100%</translation> </message> <message> <source>Prefer EIA-708 over EIA-608 captions</source> - <translation type="unfinished"></translation> + <translation>Geef de voorkeur aan EIA-708 over EIA-608 lettertypes</translation> </message> <message> <source>When enabled the new EIA-708 captions will be preferred over the old EIA-608 captions in ATSC streams.</source> - <translation type="unfinished"></translation> + <translation>Indien geselecteerd zullen de nieuwe EIA-708 lettertypes de voorkeur krijgen over de oude EIA-608 lettertypes in ATSC streams.</translation> </message> <message> <source>This is the default, but as of early 2008 most stations are not broadcasting useable EIA-708 captions.</source> - <translation type="unfinished"></translation> + <translation>Dit is de standaard, maar vanaf begin 2008 zenden de meeste zenders geen bruikbaar EIA-708 lettertypes uit.</translation> </message> <message> <source>Enable picture controls</source> - <translation type="unfinished"></translation> + <translation>Picture controls inschakelen</translation> </message> <message> <source>If enabled, MythTV attempts to initialize picture controls (brightness, contrast, etc.) that are applied during playback.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld, zal MythTV proberen om picture controls (helderheid, contrast, etc.) in te schakelen tijdens het afspelen.</translation> </message> <message> <source>Warn on no audio output</source> - <translation type="unfinished"></translation> + <translation>Waarschuwing bij geen geluid</translation> </message> <message> <source>If enabled, MythTV will warn you if it can't access the soundcard.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld zal MythTV een waarschuwing geven als deze de geluidskaart niet kan benaderen.</translation> </message> <message> <source>Always prompt (excluding Live TV)</source> - <translation type="unfinished"></translation> + <translation>Altijd vragen (exclusief Live TV)</translation> </message> <message> <source>Always prompt (including Live TV)</source> - <translation type="unfinished"></translation> + <translation>Altijd vragen (inclusief Live TV)</translation> </message> <message> <source>Prompt for Live TV only</source> - <translation type="unfinished"></translation> + <translation>Vraag alleen voor Live TV</translation> </message> <message> <source>Continue Playback When Embedded</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Doorgaan met afspelen indien </translation> </message> <message> <source>This option continues TV playback when the TV window is embedded in the upcoming program list or recorded list. The default is to pause the recorded show when embedded.</source> @@ -10297,514 +10295,558 @@ </message> <message> <source>Automatically mark a recording as watched</source> - <translation type="unfinished"></translation> + <translation>Opnames automatishc als gezien markeren</translation> </message> <message> <source>Customise exit menu options</source> - <translation type="unfinished"></translation> + <translation>Afsluitmenu optes aanpassen</translation> </message> <message> <source>Show quit</source> - <translation type="unfinished"></translation> + <translation>Afsluiten laten zien</translation> </message> <message> <source>Show quit and shutdown</source> - <translation type="unfinished"></translation> + <translation>Afsluiten en uitschakelen laten zien</translation> </message> <message> <source>Show quit, reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>Afsluiten, herstarten en uitschakelen laten zien</translation> </message> <message> <source>Show shutdown</source> - <translation type="unfinished"></translation> + <translation>Afsluiten laten zien</translation> </message> <message> <source>Show reboot</source> - <translation type="unfinished"></translation> + <translation>Herstarten laten zien</translation> </message> <message> <source>Show reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>Herstarten en uitschakelen laten zien</translation> </message> <message> <source>By default, only remote frontends are shown the shutdown option on the exit menu. Here you can force specific shutdown and reboot options to be displayed.</source> - <translation type="unfinished"></translation> + <translation>Standaard wordt de uitschakelen optie in het afsluit menu alleen op externe frontends getoond. Hier kunt u afdwingen dat bepaalde afsluit en herstart opties getoodn worden.</translation> </message> <message> <source>Reboot command</source> - <translation type="unfinished"></translation> + <translation>Herstart commando</translation> </message> <message> <source>Command or script to run if you select the reboot option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source> - <translation type="unfinished"></translation> + <translation>Commando of script dat gestart moet worden indien u de herstart optie uit het afsluit menu kiest. U dient een afsluitknop te configureren om het afsluit menu te tonen.</translation> </message> <message> <source>Command or script to run if you select the shutdown option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source> - <translation type="unfinished"></translation> + <translation>Commando of script dat gestart moet worden indien u de afsluiten optie uit het afsluit menu kiest. U dient een afsluitknop te configureren om het afsluit menu te tonen.</translation> </message> <message> <source>The aspect ratio of a Xinerama display can not be queried from the display, so it must be specified.</source> - <translation type="unfinished"></translation> + <translation>De beeldverhouding van een Xinerama-beeldscherm kan niet achterhaald worden, u moet het specificeren.</translation> </message> <message> <source>Letterboxing Color</source> - <translation type="unfinished"></translation> + <translation>Letterboxing kleur</translation> </message> <message> <source>By default MythTV uses black letterboxing to match broadcaster letterboxing, but those with plasma screens may prefer gray to minimize burn-in.</source> - <translation type="unfinished"></translation> + <translation>MythTV gebruikt standaard de kleur zwart om de 'zwarte randen' onder en boven het scherm te plaatsen, met plasma schermen kan het wenselijk zijn om grijs te kiezen om het inbranden te minimaliseren.</translation> </message> <message> <source>Currently only works with XVideo video renderer.</source> - <translation type="unfinished"></translation> + <translation>Werkt momenteel alleen met XVideo video renderer.</translation> </message> <message> <source>Video Aspect Override</source> - <translation type="unfinished"></translation> + <translation>Video beeldverhouding aanpassen</translation> </message> <message> <source>When enabled, these will override the aspect ratio specified by any broadcaster for all video streams.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld zal deze beeldverhouding voor alle uitzendingen gebruikt worden.</translation> </message> <message> <source>Zoom</source> - <translation type="unfinished"></translation> + <translation>Zoom</translation> </message> <message> <source>When enabled, these will apply a predefined zoom to all video playback in MythTV.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld zal er standaard ingezoomt worden bij het afspelen in MythTV.</translation> </message> <message> <source>Horizontal size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation>Breedte van monitor of TV, wordt gebruikt om de beeldverhouding te berekenen. Dit gaat boven de 'DisplaySize' van het systeem.</translation> </message> <message> <source>Vertical size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation>Hoogte van monitor of TV, wordt gebruikt om de beeldverhouding te berekenen. Dit gaat boven de 'DisplaySize' van het systeem.</translation> </message> <message> <source>Hide Mouse Cursor in MythTV</source> - <translation type="unfinished"></translation> + <translation>Muisaanwijzer verbergen in MythTV</translation> </message> <message> <source>Toggles mouse cursor visibility. Most of the MythTV GUI does not respond to mouse clicks. Use this option to avoid "losing" your mouse cursor.</source> - <translation type="unfinished"></translation> + <translation>Schakelt de zichtbaarheid van de muisaanwijzer in/uit. De meeste onderdelen in MythTV reageren niet op muisklikken. Dit is enkel om het 'verliezen' van de muisaanwijzer tegen te gaan.</translation> </message> <message> <source>This selects what MythTV uses to draw. If you have decent hardware, select OpenGL. Changing this requires a restart.</source> - <translation type="unfinished"></translation> + <translation>Dit selecteerd wat Myth gebruikt om te tekenen. Als u fatsoenlijke hardware heeft, selecteer OpenGL. Aanpassingen vereisen een herstart van Myth.</translation> </message> <message> <source>UI Theme</source> - <translation type="unfinished"></translation> + <translation>UI Thema</translation> </message> <message> <source>OSD Theme</source> - <translation type="unfinished"></translation> + <translation>OSD Thema</translation> </message> <message> <source>Menu Theme</source> - <translation type="unfinished"></translation> + <translation>Menu Thema</translation> </message> <message> <source>Avoid conflicts between live TV and scheduled shows</source> - <translation type="unfinished"></translation> + <translation>Conflicten tussen LiveTV en geprogrammeerde opnames vermijden</translation> </message> <message> <source>Allow live TV to move scheduled shows</source> - <translation type="unfinished"></translation> + <translation>Sta toe dat live TV geplande opnames verplaatst</translation> </message> <message> <source>If enabled, scheduled recordings will be moved to other cards (where possible), so that live TV will not be interrupted.</source> - <translation type="unfinished"></translation> + <translation>Indien ingeschakeld zullen geplande opnames verplaatst worden naar andere kaarten (indien mogelijk), zodat live TV niet verstoord wordt.</translation> </message> <message> <source>Fine tune font size (%)</source> - <translation type="unfinished"></translation> + <translation>Fine tune lettertype grootte (%)</translation> </message> <message> <source>Fine tune all font sizes by this percentage. Font sizes should be the correct relative size if the X11 DPI (dots per inch) is set to 100.</source> - <translation type="unfinished"></translation> + <translation>Fine tune alle lettertype groottes met dit percentage. Lettertype groottes zouden de juiste relatieve grootte moeten hebben indien de X11 DPI (dots per inch) op 100 ingesteld is.</translation> </message> <message> <source>Display the channel icons</source> - <translation type="unfinished"></translation> + <translation>Zender iconen tonen</translation> </message> <message> <source>Display the icons/logos for the channels in the guide. See section 9.5 of the Installation Guide for how to grab icons.</source> - <translation type="unfinished"></translation> + <translation>Toont de iconen/logo's van de kanalen in de tvgids. Zie sectie 9.5 van de installatie handleiding voor uitleg over hoe u iconen kunt downloaden.</translation> </message> <message> <source>Avoid back to back recordings from different channels</source> - <translation type="unfinished"></translation> + <translation>Voorkom back to back opnames van verschillende kanalen</translation> </message> <message> <source>If set, the scheduler will avoid assigning shows from different channels to the same card if their end time and start time match. This will be allowed when necessary in order to resolve conflicts.</source> - <translation type="unfinished"></translation> + <translation>Indien ingesteld zal de scheduler voorkomen dat programma's van verschillende kanalen op dezelfde kaart opgenomen worden indien de eind en begin tijd gelijk is. Dit wordt wel toegestaan indien er conflicten opgelost moeten worden.</translation> </message> <message> <source>The 'All' Recording type will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation>De 'Alle' opnames soort krijgt deze waarde aan hun prioriteit toegevoegd.</translation> </message> <message> <source>Ignore LiveTV Recordings</source> - <translation type="unfinished"></translation> + <translation>Negeer LiveTV opnames</translation> </message> <message> <source>Recording monitoring will ignore LiveTV recordings.</source> - <translation type="unfinished"></translation> + <translation>Het monitoren van opnames zal LiveTV negeren.</translation> </message> <message> <source> (and other removable devices)</source> - <translation type="unfinished"></translation> + <translation> (en andere verwisselbare apparaten)</translation> </message> <message> <source>Use new media</source> - <translation type="unfinished"></translation> + <translation>Gebruik nieuwe media</translation> </message> <message> <source>This will cause MythTV to jump, to an appropriate plugin, when new media is inserted.</source> - <translation type="unfinished"></translation> + <translation>Dit zal MythTV naar een geschikte plugin laten springen indien er nieuwe media ingevoerd wordt.</translation> </message> <message> <source>Ignore Devices</source> - <translation type="unfinished"></translation> + <translation>Apparaten negeren</translation> </message> <message> <source>If there are any devices that you do not want to be monitored, list them here with commas in-between. The plugins will ignore them</source> - <translation type="unfinished"></translation> + <translation>Indien u wilt dat bepaalde apparaten niet gemonitord worden, geef ze dan hier komma gescheiden op. De plugins negeren deze dan</translation> </message> <message> <source>MythMediaMonitor</source> - <translation type="unfinished"></translation> + <translation>MythMediaMonitor</translation> </message> <message> <source>PVR-350 Hardware Decoder Settings</source> - <translation type="unfinished"></translation> + <translation>PVR-350 Hardware decoder instellingen</translation> </message> <message> <source>This setting allows a DataDirect guide data provider to specify the next download time in order to distribute load on their servers. If this setting is enabled, mythfilldatabase Execution Start/End times are ignored.</source> - <translation type="unfinished"></translation> + <translation>Deze instelling laat een DataDirect tvgids aanbieder de volgende download tijd opgeven zodat de server load verspreid wordt. Indien dit is ingeschakeld zullen de mythfilldatabase Start/Eind tijden genegeerd worden.</translation> </message> <message> <source>File or directory to use for logging output from the mythfilldatabase program. Leave blank to disable logging.</source> - <translation type="unfinished"></translation> + <translation>Bestand of map die gebruikt wordt voor het loggen van de uitvoer van mythfilldatabase.Laat leeg om niet te loggen.</translation> </message> <message> <source>Miscellaneous</source> - <translation type="unfinished"></translation> + <translation>Verschillende</translation> </message> <message> <source>Settings Access</source> - <translation type="unfinished"></translation> + <translation>Instellingen toegang</translation> </message> <message> <source>Shutdown/Reboot Settings</source> - <translation type="unfinished"></translation> + <translation>Afsluit/herstart instellingen</translation> </message> <message> <source>General Playback</source> - <translation type="unfinished"></translation> + <translation>Afspelen Algemeen</translation> </message> <message> <source>Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Opnamegroepen</translation> </message> <message> <source>UDP OSD Notifications</source> - <translation type="unfinished"></translation> + <translation>UPD OSD aankondigingen</translation> </message> <message> <source>Analog Closed Captions</source> - <translation type="unfinished"></translation> + <translation>Analoge ondertiteling</translation> </message> <message> <source>Default JobQueue settings for new scheduled recordings</source> - <translation type="unfinished"></translation> + <translation>Standaard JobQueue instellingen voor een nieuwe geplande opname</translation> </message> <message> <source>Yes, Exit and Reboot</source> - <translation type="unfinished"></translation> + <translation>Ja, afsluiten en herstarten</translation> </message> <message> <source>DVD contains a bookmark</source> - <translation type="unfinished"></translation> + <translation>DVD bevat een bladwijzer</translation> </message> <message> <source>Play from bookmark</source> - <translation type="unfinished">Vanaf bladwijzer afspelen</translation> + <translation>Vanaf bladwijzer afspelen</translation> </message> <message> <source>Play from beginning</source> - <translation type="unfinished">Vanaf begin afspelen</translation> + <translation>Vanaf het begin afspelen</translation> </message> <message> <source>The file for this recording is empty.</source> - <translation type="unfinished"></translation> + <translation>Het bestand van deze opname is leeg.</translation> </message> <message> <source>This recording is not yet available.</source> - <translation type="unfinished"></translation> + <translation>Deze opname is nog niet beschikbaar.</translation> </message> <message> <source>Move to Default group</source> - <translation type="unfinished"></translation> + <translation>Verplaats naar standaard groep</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Verwijderen ongedaan maken</translation> </message> <message> <source>IP address</source> - <translation type="unfinished"></translation> + <translation>IP-adres</translation> </message> <message> <source>Status Port</source> - <translation type="unfinished"></translation> + <translation>Status poort</translation> </message> <message> <source>Security Pin (Required)</source> - <translation type="unfinished"></translation> + <translation>Beveiligings pin (vereist)</translation> </message> <message> <source>Pin code required for a frontend to connect to the backend. Blank prevents all connections, 0000 allows any client to connect.</source> - <translation type="unfinished"></translation> + <translation>Pin code is vereist om een frontend verbinding te laten maken met de backend. Indien niet gevuld, zal er geen verbinding gemaakt kunnen worden. 0000 geeft alle clients toegang.</translation> </message> <message> <source>Disable Firewire Reset</source> - <translation type="unfinished"></translation> + <translation>Firewire reset uitschakelen</translation> </message> <message> <source>By default MythTV will reset the firewire bus when a firewire recorder stops responding to commands. But if this causes problems you can disable this here for Linux firewire recorders.</source> - <translation type="unfinished"></translation> + <translation>Standaard zal MythTV de firewire bus resetten indien een firewire recorder niet meer reageerd. Indien die problemen veroorzaakt kunt u dit hier uitschakelen voor Linux firewire recorders.</translation> </message> <message> <source>Miscellaneous Status Application</source> - <translation type="unfinished"></translation> + <translation>Diverse status applicatie</translation> </message> <message> <source>External application or script that outputs extra information for inclusion in the backend status page. See contrib/misc_status_info/README</source> - <translation type="unfinished"></translation> + <translation>Een extern programma of script dat extra informatie geeft welke in de backend status pagina getoont moet worden. Zie contrib/misc_status_info/README</translation> </message> <message> <source>Your Local Timezone (for XMLTV)</source> - <translation type="unfinished"></translation> + <translation>Uw lokale tijdzone (voor XMLTV)</translation> </message> <message> <source>Used if the XMLTV data comes from a different timezone than your own. This adjust the times in the XMLTV EPG data to compensate. 'Auto' converts the XMLTV time to local time using your computer's timezone. 'None' ignores the XMLTV timezone, interpreting times as local.</source> - <translation type="unfinished"></translation> + <translation>Wordt gebruikt indien de XMLTV data van een andere tijdzone komt dan uw eigen tijdzone. Dit past de tijden in de XMLTV EPG data aan. 'Auto' converterd de XMLTV tijd naar de lokale tijd door gebruik te maken van uw computer's tijdzone. 'None' negeert de XMLTV tijdzone en intepreteerd de tijden als lokale tijden.</translation> </message> <message> <source>Delay between wake attempts (secs)</source> - <translation type="unfinished"></translation> + <translation>Vertraging tussen wake pogingen (sec)</translation> </message> <message> <source>Wake Attempts</source> - <translation type="unfinished"></translation> + <translation>Wake pogingen</translation> </message> <message> <source>The command used to wake up your master backend server (eg. sudo /etc/init.d/mythtv-backend restart).</source> - <translation type="unfinished"></translation> + <translation>Het commando om de master backend server wakker te maken +(b.v. sudo /etc/init.d/mythtv-backend restart).</translation> </message> <message> <source>Idle shutdown timeout (secs)</source> - <translation type="unfinished"></translation> + <translation>Ongebruikt afsluiten timeout (sec)</translation> </message> <message> <source>Command to set Wakeup Time</source> - <translation type="unfinished"></translation> + <translation>Commando om de Wakeup tijd in te stellen</translation> </message> <message> <source>The command used to set the wakeup time (passed as $time) for the Master Backend</source> - <translation type="unfinished"></translation> + <translation>Het commando gebruikt om de tijd in te stellen (doorgegeven als $time) om de master backend wakker te maken</translation> </message> <message> <source>Run Jobs only on original recording backend</source> - <translation type="unfinished"></translation> + <translation>Voer taken uit op de backend waarop opgenomen werd</translation> </message> <message> <source>User Job #%1 Command</source> - <translation type="unfinished"></translation> + <translation>Commando voor gebruikertaak #%1</translation> </message> <message> <source>User Job #%1 Description</source> - <translation type="unfinished"></translation> + <translation>Omschrijving van gebruikertaak #%1</translation> </message> <message> <source>User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Gebruikers taak #%1</translation> </message> <message> <source>Allow %1 jobs</source> - <translation type="unfinished"></translation> + <translation>%1 jobs toestaan</translation> </message> <message> <source>Master Backend</source> - <translation type="unfinished"></translation> + <translation>Master Backend</translation> </message> <message> <source>Locale Settings</source> - <translation type="unfinished"></translation> + <translation>Landinstellingen</translation> </message> <message> <source>Miscellaneous Settings</source> - <translation type="unfinished"></translation> + <translation>Diverse instellingen</translation> </message> <message> <source>File Management Settings</source> - <translation type="unfinished"></translation> + <translation>Bestandsbeheer instellingen</translation> </message> <message> <source>Backend Wakeup settings</source> - <translation type="unfinished"></translation> + <translation>Backend wakeup instellingen</translation> </message> <message> <source>Slave Backends</source> - <translation type="unfinished"></translation> + <translation>Slave backends</translation> </message> <message> <source>Job Queue (Backend-Specific)</source> - <translation type="unfinished"></translation> + <translation>Taakrij (Backend-specifiek)</translation> </message> <message> <source>Tuner %1 is recording: </source> - <translation type="unfinished">Opname op tuner %1:</translation> + <translation>Opname op tuner %1: +</translation> </message> <message> <source>Tuner %1 is not recording</source> - <translation type="unfinished">Tuner %1 neemt niet op</translation> + <translation>Tuner %1 neemt niet op</translation> </message> <message> <source>Date Format</source> - <translation type="unfinished"></translation> + <translation>Weergave datum</translation> </message> <message> <source>This is the format to use to display the date. See http://doc.trolltech.com/3.3/qdate.html#toString for a list of valid format specifiers.</source> - <translation type="unfinished"></translation> + <translation>Dit is het formaat waarin de datum getoond wordt. Zie http://doc.trolltech.com/3.3/qdate.html#toString voor een lijst met geldige opties.</translation> + </message> + <message> + <source>CPU++</source> + <comment>Sample: No hardware assist</comment> + <translation>CPU++</translation> + </message> + <message> + <source>CPU+</source> + <comment>Sample: Hardware assist HD only</comment> + <translation>CPU+</translation> + </message> + <message> + <source>CPU--</source> + <comment>Sample: Hardware assist all</comment> + <translation>CPU--</translation> + </message> + <message> + <source>High Quality</source> + <comment>Sample: high quality</comment> + <translation>Hoge Kwaliteit</translation> + </message> + <message> + <source>Normal</source> + <comment>Sample: average quality</comment> + <translation>Normaal</translation> + </message> + <message> + <source>Slim</source> + <comment>Sample: low CPU usage</comment> + <translation>Minimaal</translation> + </message> + <message> + <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback. 'Passive' is the least demanding on the CPU. 'Active Simple' is more demanding and 'Active Linear' is the most demanding (but highest quality).</source> + <translation>Stelt het audio upmix type voor 2 naar 6 kanaals conversie in. Dit wordt gebruikt voor multikanaal/surround audio. 'Passief' is het minst belastend voor de CPU. 'Actief simpel' is zwaarder en 'Actief linear' is het meest belastend (maar bied de hoogste kwaliteit).</translation> + </message> + <message> + <source>Local Backend</source> + <translation type="obsolete">Lokale backend</translation> + </message> + <message> + <source>Display on screen</source> + <translation>Op het scherm tonen</translation> </message> </context> <context> <name>RecOptDialog</name> <message> <source>Missing Element</source> - <translation type="unfinished"></translation> + <translation>Ontbrekend element</translation> </message> <message> <source>The theme you are using does not contain a 'recording_options' element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Press EXIT to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Het thema dat u gebruikt, bevat geen "recording_options" element. Neem contact op met de maker van het thema en vraag of dit aangepast kan worden.<br><br>Het volgende scherm zal leeg zijn. Ga terug om het menu opnieuw weer te geven.</translation> </message> <message> <source>Unknown Element</source> - <translation type="unfinished"></translation> + <translation>Onbekend element</translation> </message> <message> <source>The theme you are using contains an unknown element ('%1'). It will be ignored</source> - <translation type="unfinished">Het thema dat u gebruikt bevat een onbekend element ('%1'). Het wordt genegeerd</translation> + <translation>Het thema dat u gebruikt bevat een onbekend element ('%1'). Het wordt genegeerd</translation> </message> </context> <context> <name>RecordingProfileEditor</name> <message> <source>Add Recording Profile</source> - <translation type="unfinished"></translation> + <translation>Opnameprofiel toevoegen</translation> </message> <message> <source>Enter the name of the new profile</source> - <translation type="unfinished"></translation> + <translation>Voer de naam van het nieuwe profiel in</translation> </message> </context> <context> <name>SIScan</name> <message> <source>Updated Channel %1</source> - <translation type="unfinished"></translation> + <translation>Kanaal %1 bijgewerkt</translation> </message> <message> <source>Added Channel %1</source> - <translation type="unfinished"></translation> + <translation>Kanaal %1 toegevoegd</translation> </message> <message> <source>Failed to add channel %1</source> - <translation type="unfinished"></translation> + <translation>Toeveogen van kanaal %1 is mislukt</translation> </message> <message> <source>Network %1 Processing</source> - <translation type="unfinished"></translation> + <translation>Netwerk %1 in behandeling</translation> </message> <message> <source>Finished processing Transport List</source> - <translation type="unfinished"></translation> + <translation>Klaar met behandelen van transport lijst</translation> </message> <message> <source>Updating Services</source> - <translation type="unfinished"></translation> + <translation>Services bijwerken</translation> </message> <message> <source>Finished processing Services</source> - <translation type="unfinished"></translation> + <translation>Klaar met behandelen van services</translation> </message> <message> <source>Frequency %1</source> - <translation type="unfinished"></translation> + <translation>Frequentie %1</translation> </message> <message> <source>as</source> - <translation type="unfinished"></translation> + <translation>as</translation> </message> <message> <source>Skipping %1, not in imported channel map</source> - <translation type="unfinished"></translation> + <translation type="unfinished">%1 overslaan, niet aanwezig in geimporteerde kanaal map</translation> </message> <message> <source>%1%2%3 on %4 (%5)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">%1%2%3 op %4 (%5)</translation> </message> <message> <source>Adding %1</source> - <translation type="unfinished"></translation> + <translation>%1 toevoegen</translation> </message> <message> <source>Updating %1</source> - <translation type="unfinished"></translation> + <translation>%1 bijwerken</translation> </message> <message> <source>Skipping %1</source> - <translation type="unfinished"></translation> + <translation>%1 overslaan</translation> </message> <message> <source>on %1</source> - <translation type="unfinished"></translation> + <translation>op %1</translation> </message> <message> <source>Data Only Channel (off-air?)</source> - <translation type="unfinished"></translation> + <translation>Alleen data kanaal (uit de lucht?)</translation> </message> <message> <source>Empty Channel (off-air?)</source> - <translation type="unfinished"></translation> + <translation>Leeg kanaal (uit de lucht?)</translation> </message> <message> <source>Audio Only Channel</source> - <translation type="unfinished"></translation> + <translation>Alleen geluidskanaal</translation> </message> <message> <source>Encrypted Channel</source> - <translation type="unfinished"></translation> + <translation>Gecodeerd kanaal</translation> </message> <message> <source>%1 %2-%3 as %4 on %5 (%6)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">%1 %2-%3 as %4 op %5 (%6)</translation> </message> <message> <source>Found channel, but it doesn't match existing tsid. You may wish to delete existing channels and do a full scan.</source> - <translation type="unfinished"></translation> + <translation>Kanaal gevonden maar deze correspondeerd niet met de bestaande tsid. U kunt het beste de bestaande kanalen wissen en een volledige scan doen.</translation> </message> <message> <source>Skipping %1 - already in DB, and we don't have better data.</source> - <translation type="unfinished"></translation> + <translation>%1 overslaan - is al aanwezig in de DB en er is geen betere data.</translation> </message> </context> <context> @@ -10884,18 +10926,18 @@ <name>ScanWizard</name> <message> <source>ScanWizard</source> - <translation type="unfinished"></translation> + <translation>ScanWizard</translation> </message> <message> <source>Error parsing parameters</source> - <translation type="unfinished"></translation> + <translation>Fout tijdens behandelen van parameters</translation> </message> </context> <context> <name>ScanWizardConfig</name> <message> <source>Scan Configuration</source> - <translation type="unfinished"></translation> + <translation>Scan instellingen</translation> </message> </context> <context> @@ -10909,27 +10951,27 @@ <name>ScanWizardScanner</name> <message> <source>ScanWizard</source> - <translation type="unfinished"></translation> + <translation>ScanWizard</translation> </message> <message> <source>Error tuning to transport</source> - <translation type="unfinished"></translation> + <translation>Fout tijdens afstemmen op transport</translation> </message> <message> <source>Scanning</source> - <translation type="unfinished"></translation> + <translation>Scannen</translation> </message> <message> <source>Failed to open '%1'</source> - <translation type="unfinished"></translation> + <translation>Openen van '%1' mislukt</translation> </message> <message> <source>Failed to parse '%1'</source> - <translation type="unfinished"></translation> + <translation>Behandelen van '%1' mislukt</translation> </message> <message> <source>Error starting scan</source> - <translation type="unfinished"></translation> + <translation>Fout tijdens starten met scannen</translation> </message> </context> <context> @@ -11010,106 +11052,107 @@ </message> <message> <source>standard rules are defined</source> - <translation type="unfinished"></translation> + <translation>standaard regels zijn gedefinieerd</translation> </message> <message> <source>search rules are defined</source> - <translation type="unfinished"></translation> + <translation>Zoekregels zijn gedefinieerd</translation> </message> <message> <source>Scheduled Run Time:</source> - <translation type="unfinished"></translation> + <translation>Geplande Run Time:</translation> </message> <message> <source>marked as HDTV</source> - <translation type="unfinished"></translation> + <translation>Gemarkeerd als HDTV</translation> </message> <message> <source>from source</source> - <translation type="unfinished"></translation> + <translation type="unfinished">van bron</translation> </message> <message> <source>on input</source> - <translation type="unfinished"></translation> + <translation type="unfinished">op ingang</translation> </message> <message> <source>%1 of these are Deleted and consume %2</source> - <translation type="unfinished"></translation> + <translation>%1 hiervan is verwijderd en gebruikt %2</translation> </message> </context> <context> <name>StorageGroupEditor</name> <message> <source>'%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>%1 Opslag groep mappen</translation> </message> <message> <source>Local '%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>Lokaal '%1' opslag groep mappen</translation> </message> <message> <source>Add Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>Voeg een Opslag groep map toe</translation> </message> <message> <source>Enter directory name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished"></translation> + <translation>Geef de mapnaam of druk op 'SELECTEER' om tekst via het 'On Screen Keyboard' in te voeren</translation> </message> <message> <source>Edit Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>Bewerk opslag groep map</translation> </message> <message> <source>Remove '%1' Directory From Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Verwijder '%1' +map uit de opslag groep?</translation> </message> <message> <source>Yes, remove directory</source> - <translation type="unfinished"></translation> + <translation>Ja, verwijder de map</translation> </message> <message> <source>No, Don't remove directory</source> - <translation type="unfinished"></translation> + <translation>Nee, map niet verwijderen</translation> </message> <message> <source>(Add New Directory)</source> - <translation type="unfinished"></translation> + <translation>(Voeg nieuwe map toe)</translation> </message> </context> <context> <name>StorageGroupListEditor</name> <message> <source>Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Opslag groep (mappen voor nieuwe opnames)</translation> </message> <message> <source>Local Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Lokale opslag groepen (mappen voor nieuwe opnames)</translation> </message> <message> <source>Create New Storage Group</source> - <translation type="unfinished"></translation> + <translation>Maak een nieuwe opslag groep</translation> </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished">Voer groepsnaam in of druk op 'SELECTEER' om tekst via het 'On Screen Keyboard' in te voeren.</translation> + <translation>Voer groepsnaam in of druk op 'SELECTEER' om tekst via het 'On Screen Keyboard' in te voeren</translation> </message> <message> <source>Delete '%1' Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Verwijder opslag groep '%1'?</translation> </message> <message> <source>Yes, delete group</source> - <translation type="unfinished">Ja, groep verwijderen</translation> + <translation>Ja, groep verwijderen</translation> </message> <message> <source>No, Don't delete group</source> - <translation type="unfinished">Nee, groep niet verwijderen</translation> + <translation>Nee, groep niet verwijderen</translation> </message> <message> <source>(Create %1 group)</source> - <translation type="unfinished"></translation> + <translation>(Maak groep %1)</translation> </message> </context> <context> @@ -11741,130 +11784,131 @@ </message> <message> <source>Chan %1: %2</source> - <translation type="unfinished"></translation> + <translation>Kanaal %1: %2</translation> </message> <message> <source>All Tuners are Busy. Select a Current Recording</source> - <translation type="unfinished"></translation> + <translation>Alle tuners zijn bezet. +Selecteer een huidige opname</translation> </message> <message> <source>End Of Recording</source> - <translation type="unfinished"></translation> + <translation>Einde van de opname</translation> </message> <message> <source>Last Program: %1 Doesn't Exist</source> - <translation type="unfinished"></translation> + <translation>Laatste programma: %1 bestaat niet</translation> </message> <message> <source>Delete this recording?</source> - <translation type="unfinished"></translation> + <translation>Deze opname verwijderen?</translation> </message> <message> <source>DVD</source> - <translation type="unfinished"></translation> + <translation>DVD</translation> </message> <message> <source>Menu</source> - <translation type="unfinished">Menu</translation> + <translation>Menu</translation> </message> <message> <source>Still Frame</source> - <translation type="unfinished"></translation> + <translation>Stilstaand beeld</translation> </message> <message> <source>Title: %1 (%2)</source> - <translation type="unfinished"></translation> + <translation>Titel: %1 (%2)</translation> </message> <message> <source>Chapter: %1/%2</source> - <translation type="unfinished"></translation> + <translation>Hoofdstuk: %1%2</translation> </message> <message> <source>DVD Chapter Menu</source> - <translation type="unfinished"></translation> + <translation>DVD Hoofdstuk menu</translation> </message> <message> <source>'%1' Group Password:</source> - <translation type="unfinished"></translation> + <translation>'%1' groepswachtwoord:</translation> </message> <message> <source>Password Failed</source> - <translation type="unfinished"></translation> + <translation>Verkeerd wachtwoord</translation> </message> <message> <source>Screen Shot</source> - <translation type="unfinished"></translation> + <translation>Screen shot</translation> </message> <message> <source>Exit</source> - <translation type="unfinished"></translation> + <translation>Afsluiten</translation> </message> <message> <source>MythTV wants to record "%1" on %2 in %d seconds. Do you want to:</source> - <translation type="unfinished"></translation> + <translation>MythTV wil "%1" op %2 in %d seconden opnemen. Wilt u:</translation> </message> <message> <source>Let them record and go back to the Main Menu</source> - <translation type="unfinished"></translation> + <translation>Opnemen en terug naar menu</translation> </message> <message> <source>Record it later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Later opnemen, ik wil TV kijken</translation> </message> <message> <source>Record them later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Later opnemen, ik wil TV kijken</translation> </message> <message> <source>Don't let them record, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Niet opnemen, ik wil TV kijken</translation> </message> <message> <source>You should have gotten a channel lock by now. You can continue to wait for a signal, or you can change the channels with %1 or %2, change video source (%3), inputs (%4), etc.</source> - <translation type="unfinished"></translation> + <translation>Het kanaal had al vergrendeld moeten zijn. U kunt blijven wachten voor een signaal, of u kunt naar een ander kanaal overschakelen met %1 of %2, van bron wisselen (%3) of van ingang wisselen (%4).</translation> </message> <message> <source>Yes</source> - <translation type="unfinished">Ja</translation> + <translation>Ja</translation> </message> <message> <source>Adjust Fill</source> - <translation type="unfinished"></translation> + <translation>Beeldvullend</translation> </message> <message> <source>Switch Input</source> - <translation type="unfinished"></translation> + <translation>Wissel van ingang</translation> </message> <message> <source>C</source> <comment>Card</comment> - <translation type="unfinished">C</translation> + <translation>C</translation> </message> <message> <source>I</source> <comment>Input</comment> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Switch Source</source> - <translation type="unfinished"></translation> + <translation>Wissen van bron</translation> </message> <message> <source>Upcoming Recordings</source> - <translation type="unfinished"></translation> + <translation>Toekomstige opnames</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fout</translation> </message> <message> <source>You are exiting %1</source> - <translation type="unfinished"></translation> + <translation>U sluit %1 af</translation> </message> <message> <source>Exit %1</source> - <translation type="unfinished"></translation> + <translation>%1 afsluiten</translation> </message> </context> <context> @@ -12067,64 +12111,64 @@ </message> <message> <source>(1) Channel (2) Priority</source> - <translation type="unfinished"></translation> + <translation>(1) Kanaal (2) Prioriteit</translation> </message> </context> <context> <name>TransportList</name> <message> <source>New Transport</source> - <translation type="unfinished"></translation> + <translation>Nieuwe transport</translation> </message> </context> <context> <name>TransportListEditor</name> <message> <source>Are you sure you would like to delete this transport?</source> - <translation type="unfinished">Weet u zeker dat u dit transport wilt verwijderen?</translation> + <translation>Weet u zeker dat u dit transport wilt verwijderen?</translation> </message> <message> <source>Yes, delete the transport</source> - <translation type="unfinished">Ja, het transport verwijderen</translation> + <translation>Ja, het transport verwijderen</translation> </message> <message> <source>No, don't</source> - <translation type="unfinished">Nee, niet doen</translation> + <translation>Nee, niet doen</translation> </message> <message> <source>Transport Menu</source> - <translation type="unfinished">Transport Menu</translation> + <translation>Transport Menu</translation> </message> <message> <source>Edit..</source> - <translation type="unfinished"></translation> + <translation>Bewerken..</translation> </message> <message> <source>Delete..</source> - <translation type="unfinished"></translation> + <translation>Verwijderen..</translation> </message> <message> <source>Multiplex Editor</source> - <translation type="unfinished"></translation> + <translation>Multiplex bewerker</translation> </message> </context> <context> <name>UIListBtnType</name> <message> <source>Search</source> - <translation type="unfinished">Zoeken</translation> + <translation>Zoeken</translation> </message> <message> <source>Starts with text</source> - <translation type="unfinished">Begint met tekst</translation> + <translation>Begint met tekst</translation> </message> <message> <source>Contains text</source> - <translation type="unfinished">Bevat tekst</translation> + <translation>Bevat tekst</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Annuleren</translation> + <translation>Annuleren</translation> </message> </context> <context> @@ -12204,7 +12248,7 @@ <name>VideoSourceSelector</name> <message> <source>Video Source</source> - <translation type="unfinished">Video bron</translation> + <translation>Video bron</translation> </message> </context> <context> @@ -12243,15 +12287,15 @@ </message> <message> <source>Delete '%1' %2 rule?</source> - <translation type="unfinished"></translation> + <translation>Verwijder regel '%1' %2?</translation> </message> <message> <source>Conflict Today</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Conflict vandaag</translation> </message> <message> <source>Conflict </source> - <translation type="unfinished"></translation> + <translation>Conflict </translation> </message> </context> <context> @@ -12367,11 +12411,11 @@ </message> <message> <source>to</source> - <translation type="unfinished"></translation> + <translation type="unfinished">to</translation> </message> <message> <source>MythTV has running or pending jobs.</source> - <translation type="unfinished"></translation> + <translation>MythTV heeft taken die draaien of wachten.</translation> </message> </context> <context> Dateien mythtv-0.21/i18n/mythfrontend_sv.qm und mythtv/i18n/mythfrontend_sv.qm sind verschieden. diff -uNr mythtv-0.21/i18n/mythfrontend_sv.ts mythtv/i18n/mythfrontend_sv.ts --- mythtv-0.21/i18n/mythfrontend_sv.ts 2008-03-04 04:48:46.000000000 +0100 +++ mythtv/i18n/mythfrontend_sv.ts 2008-03-31 01:23:38.000000000 +0200 @@ -66,19 +66,19 @@ <name>BackendSelect</name> <message> <source>Please select default Myth Backend Server</source> - <translation type="unfinished"></translation> + <translation>Var god välj Myth Backend Server</translation> </message> <message> <source>OK</source> - <translation type="unfinished">OK</translation> + <translation>OK</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Avbryt</translation> + <translation>Avbryt</translation> </message> <message> <source>Configure Manually</source> - <translation type="unfinished"></translation> + <translation>Konfigurera Manuellt</translation> </message> </context> <context> @@ -156,23 +156,23 @@ </message> <message> <source>Create Input Group</source> - <translation type="unfinished"></translation> + <translation>Skapa Ingångsgrupp</translation> </message> <message> <source>Enter new group name</source> - <translation type="unfinished"></translation> + <translation>Ange nytt gruppnamn</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fel</translation> </message> <message> <source>Sorry, this Input Group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Tyvärr, detta ingångsgruppnamn kan inte vara tomt.</translation> </message> <message> <source>Sorry, this Input Group name is already in use.</source> - <translation type="unfinished"></translation> + <translation>Tyvärr, detta ingångsgruppnamn används redan.</translation> </message> </context> <context> @@ -226,39 +226,43 @@ </message> <message> <source>Channels</source> - <translation type="unfinished"></translation> + <translation>Kanaler</translation> </message> <message> <source>Are you sure you would like to delete ALL channels?</source> - <translation type="unfinished"></translation> + <translation>Är du säker på att du vill radera ALLA kanaler?</translation> </message> <message> <source>Are you sure you would like to delete all unassigned channels?</source> - <translation type="unfinished"></translation> + <translation>Är du säker på att du vill radera alla otilldelade kanaler?</translation> </message> <message> <source>Are you sure you would like to delete the channels on %1?</source> - <translation type="unfinished"></translation> + <translation>Är du säker på att du vill radera kanalerna på %1?</translation> </message> <message> <source>Add some for channels first!</source> - <translation type="unfinished"></translation> + <translation type="obsolete">Lägg till litet för kanaler först!</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Avbryt</translation> + <translation>Avbryt</translation> </message> <message> <source>Download all icons..</source> - <translation type="unfinished"></translation> + <translation>Ladda ner alla ikoner..</translation> </message> <message> <source>Rescan for missing icons..</source> - <translation type="unfinished"></translation> + <translation>Sök efter saknade ikoner..</translation> </message> <message> <source>Download icon for </source> - <translation type="unfinished"></translation> + <translation>Ladda ner ikon för</translation> + </message> + <message> + <source>Add some channels first!</source> + <translation>Lägg till kanaler först!</translation> </message> </context> <context> @@ -460,27 +464,27 @@ </message> <message> <source>stored search</source> - <translation type="unfinished"></translation> + <translation>lagrad sökning</translation> </message> <message> <source>Add</source> - <translation type="unfinished"></translation> + <translation>Lägg Till</translation> </message> <message> <source>Match this series</source> - <translation type="unfinished"></translation> + <translation>Matcha denna serie</translation> </message> <message> <source>Match words in the subtitle</source> - <translation type="unfinished"></translation> + <translation>Matcha ord i undertexter</translation> </message> <message> <source>Only shows marked as widescreen</source> - <translation type="unfinished"></translation> + <translation>Visar endast markerade i bredbildsformat</translation> </message> <message> <source>Exclude H.264 encoded streams (EIT only)</source> - <translation type="unfinished"></translation> + <translation>Uteslut H.264 kodade strömmar (endast EIT)</translation> </message> </context> <context> @@ -862,11 +866,19 @@ </message> <message> <source>Rotor Position Map</source> - <translation type="unfinished"></translation> + <translation>Rotor Läge Karta</translation> </message> <message> <source>DiSEqC Device Tree</source> - <translation type="unfinished"></translation> + <translation>DiSEqC Enhet Träd</translation> + </message> + <message> + <source>Voltage</source> + <translation>Spänning</translation> + </message> + <message> + <source>Mini DiSEqC</source> + <translation>Mini DiSEqC</translation> </message> </context> <context> @@ -1065,43 +1077,43 @@ <name>MediaMonitor</name> <message> <source>Cancel</source> - <translation type="unfinished">Avbryt</translation> + <translation>Avbryt</translation> </message> <message> <source>Select removable media to eject or insert</source> - <translation type="unfinished"></translation> + <translation>Välj portabelt media som ska kopplas till eller bort</translation> </message> <message> <source>No devices to eject</source> - <translation type="unfinished"></translation> + <translation>Inga enheter att koppla bort</translation> </message> <message> <source>Failed to unmount %1</source> - <translation type="unfinished"></translation> + <translation>Misslyckades att avmontera %1</translation> </message> <message> <source>You may safely remove %1</source> - <translation type="unfinished"></translation> + <translation>Du kan nu avlägsna %1 säkert</translation> </message> <message> <source>Failed to eject %1</source> - <translation type="unfinished"></translation> + <translation>Misslyckades att föra ut %1</translation> </message> <message> <source>Select a CD drive</source> - <translation type="unfinished"></translation> + <translation>Välj en CD enhet</translation> </message> <message> <source>Select a VCD drive</source> - <translation type="unfinished"></translation> + <translation>Välj en VCD enhet</translation> </message> <message> <source>Select a DVD drive</source> - <translation type="unfinished"></translation> + <translation>Välj en DVD enhet</translation> </message> <message> <source>Select a DVD writer</source> - <translation type="unfinished"></translation> + <translation>Välj en DVD skrivare</translation> </message> </context> <context> @@ -1123,41 +1135,43 @@ </message> <message> <source>There are also other clients using this database. They should be shut down first.</source> - <translation type="unfinished"></translation> + <translation>Andra klienter använder databasen. Dessa borde stängas av först.</translation> </message> <message> <source>Error: MythTV cannot upgrade the schema of this datatase because other clients are using it. Please shut them down before upgrading.</source> - <translation type="unfinished"></translation> + <translation>Fel: MythTV kan inte uppgradera schemat för denna databas eftersom andra klienter använder den. + +Var god och stäng av dom andar klienterna före uppgradering.</translation> </message> <message> <source>Warning: MythTV wants to upgrade your database schema, from %1 to %2.</source> - <translation type="unfinished"></translation> + <translation>Varning: MythTV kommer att uppgradera ditt databas schema, från %1 till %2.</translation> </message> <message> <source>You can try using the old schema, but that may cause problems.</source> - <translation type="unfinished"></translation> + <translation>Du kan försöka använda det gamla schemat, men det kan orsaka problem.</translation> </message> <message> <source>Warning: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Varning: MythTV databasen har ett nyare schema (%1) än väntat (%2).</translation> </message> <message> <source>Error: MythTV database has newer schema (%1) than expected (%2).</source> - <translation type="unfinished"></translation> + <translation>Fel: MythTV databasen har ett nyare schema (%1) än väntat (%2).</translation> </message> <message> <source>MythTV was unable to backup your database.</source> - <translation type="unfinished"></translation> + <translation>MythTV kunde inte säkerhetskopiera din databas.</translation> </message> <message> <source>If your system becomes unstable, a database backup file called %1 is located in %2.</source> - <translation type="unfinished"></translation> + <translation>Om ditt system blir ostabilt, så finns en säkerhetskopia med namn %1 i %2.</translation> </message> <message> <source>This cannot be un-done, so having a database backup would be a good idea.</source> - <translation type="unfinished"></translation> + <translation>Detta kan inte ångras, så att ha en säkerhetskopia av databasen vore en god ide'.</translation> </message> </context> <context> @@ -1346,7 +1360,7 @@ </message> <message> <source>Ok</source> - <translation type="obsolete">OK</translation> + <translation>OK</translation> </message> <message> <source>Recording List Menu</source> @@ -1694,130 +1708,130 @@ </message> <message> <source>_NO_TITLE_</source> - <translation type="unfinished"></translation> + <translation>_NO_TITLE_</translation> </message> <message> <source>Unknown</source> - <translation type="unfinished">Okänt</translation> + <translation>Okänt</translation> </message> <message> <source>Help (Status Icons)</source> - <translation type="unfinished"></translation> + <translation>Hjälp (Status Ikoner)</translation> </message> <message> <source>Delete, and allow re-record</source> - <translation type="unfinished"></translation> + <translation>Radera, och tillåt återinspelning</translation> </message> <message> <source>Allow this program to re-record</source> - <translation type="unfinished"></translation> + <translation>Tillåt detta program att återinspelas</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Ångra radering</translation> </message> <message> <source>Delete Forever</source> - <translation type="unfinished"></translation> + <translation>Radera För Alltid</translation> </message> <message> <source>Recording is in Mono</source> - <translation type="unfinished"></translation> + <translation>Inspelningen är i Mono</translation> </message> <message> <source>Recording is in Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Inspelningen är i Surround Ljud</translation> </message> <message> <source>Recording is in Dolby Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Inspelningen är i Dolby Surround Ljud</translation> </message> <message> <source>Recording has Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Undertexter finns för inspelning</translation> </message> <message> <source>Recording is Subtitled</source> - <translation type="unfinished"></translation> + <translation>Inspelning har undertexter</translation> </message> <message> <source>Recording is in WideScreen</source> - <translation type="unfinished"></translation> + <translation>Inspelning är i bredbildsformat</translation> </message> <message> <source>Recording has been watched</source> - <translation type="unfinished"></translation> + <translation>Inspelning har tittats på</translation> </message> <message> <source>Show LiveTV as a Group</source> - <translation type="unfinished"></translation> + <translation>Visa tv-sändning som Grupp</translation> </message> <message> <source>Deleted</source> - <translation type="unfinished"></translation> + <translation>Raderad</translation> </message> </context> <context> <name>PlaybackProfileItemConfig</name> <message> <source>Match Criteria</source> - <translation type="unfinished"></translation> + <translation>Matcha Kriterier</translation> </message> <message> <source>W</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>H</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Decoder</source> - <translation type="unfinished"></translation> + <translation>Dekoder</translation> </message> <message> <source>Max CPUs</source> - <translation type="unfinished"></translation> + <translation>Max Processorer</translation> </message> <message> <source>Video Renderer</source> - <translation type="unfinished"></translation> + <translation>Video-återgivare</translation> </message> <message> <source>OSD Renderer</source> - <translation type="unfinished"></translation> + <translation>OSD-återgivare</translation> </message> <message> <source>OSD Fade</source> - <translation type="unfinished"></translation> + <translation>OSD Borttoning</translation> </message> <message> <source>Primary Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Primär Deinterlacer</translation> </message> <message> <source>Fallback Deinterlacer</source> - <translation type="unfinished"></translation> + <translation>Reservdeinterlacer</translation> </message> <message> <source>Custom Filters</source> - <translation type="unfinished">Egna filter</translation> + <translation>Egna filter</translation> </message> <message> <source>Maximum number of CPU cores used for decoding.</source> - <translation type="unfinished"></translation> + <translation>Maximalt antal processorkärnor använda för avkodning.</translation> </message> <message> <source> Multithreaded decoding disabled-only one CPU will be used, please recompile with --enable-ffmpeg-pthreads to enable.</source> - <translation type="unfinished"></translation> + <translation> Avkodning med flera processorkärnor är avstängd-endast en processorkärna kommer användas, var god kompilera om med --enable-ffmpeg-pthreads för att ändra.</translation> </message> <message> <source>When unchecked the OSD will not fade away but instead will disappear abruptly.</source> - <translation type="unfinished"></translation> + <translation>Då avmarkerad, kommer inte OSD tona bort, utan kommer att försvinna direkt.</translation> </message> <message> <source>Uncheck this if the video studders while the OSD is fading away.</source> - <translation type="unfinished"></translation> + <translation>Avmarkera detta om video knycker medan OSD tonar bort.</translation> </message> </context> <context> @@ -1872,11 +1886,11 @@ </message> <message> <source>Time</source> - <translation type="unfinished"></translation> + <translation>Tid</translation> </message> <message> <source>Title</source> - <translation type="unfinished">Titel</translation> + <translation>Titel</translation> </message> </context> <context> @@ -2089,51 +2103,51 @@ </message> <message> <source>Stored Search</source> - <translation type="unfinished"></translation> + <translation>Lagrad Sökning</translation> </message> <message> <source>Select a search stored from</source> - <translation type="unfinished"></translation> + <translation>Välj en lagrad sökning från</translation> </message> <message> <source>Custom Record</source> - <translation type="unfinished"></translation> + <translation>Egen Inspelning</translation> </message> <message> <source>0 .. 9 moves to Nx10 percent in list</source> - <translation type="unfinished"></translation> + <translation>0 .. 9 flyttar till Nx10 procent i listan</translation> </message> <message> <source>Unrated</source> - <translation type="unfinished"></translation> + <translation>Ocensurerad</translation> </message> <message> <source>At least ***/</source> - <translation type="unfinished"></translation> + <translation>Åtminstone ***/</translation> </message> <message> <source>At least ***</source> - <translation type="unfinished"></translation> + <translation>Åtminstone ***</translation> </message> <message> <source>At least **/</source> - <translation type="unfinished"></translation> + <translation>Åtminstone **/</translation> </message> <message> <source>At least **</source> - <translation type="unfinished"></translation> + <translation>Åtminstone **</translation> </message> <message> <source>At least */</source> - <translation type="unfinished"></translation> + <translation>Åtminstone */</translation> </message> <message> <source>At least *</source> - <translation type="unfinished"></translation> + <translation>Åtminstone *</translation> </message> <message> <source>At least /</source> - <translation type="unfinished"></translation> + <translation>Åtminstone /</translation> </message> </context> <context> @@ -2206,6 +2220,10 @@ <source>Delete '%1' %2 rule?</source> <translation>Radera '%1' %2 regel?</translation> </message> + <message> + <source> + %1 automatic priority (%2hr)</source> + <translation> + %1 automatisk prioritet (%2t)</translation> + </message> </context> <context> <name>QObject</name> @@ -2463,7 +2481,7 @@ </message> <message> <source>channel name</source> - <translation>kanalnamn</translation> + <translation type="obsolete">kanalnamn</translation> </message> <message> <source>Vertical over/underscan percentage</source> @@ -2591,7 +2609,7 @@ </message> <message> <source>Xinerama screen</source> - <translation>Xinerama-skärm</translation> + <translation type="obsolete">Xinerama-skärm</translation> </message> <message> <source>The width of the GUI. Do not make the GUI wider than your actual screen resolution. Set to 0 to automatically scale to fullscreen.</source> @@ -3900,7 +3918,7 @@ </message> <message> <source></source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Visible</source> @@ -8764,1659 +8782,1732 @@ </message> <message> <source>Backend Server Wakeup settings</source> - <translation type="unfinished"></translation> + <translation>Uppvakningsinställningar För Backend Server</translation> </message> <message> <source>Database Server Settings</source> - <translation type="unfinished"></translation> + <translation>Databasserverinställningar</translation> </message> <message> <source>Ping test server?</source> - <translation type="unfinished"></translation> + <translation>Pinga testserver?</translation> </message> <message> <source>Test basic host connectivity using the ping command. Turn off if your host or network don't support ping (ICMP ECHO) packets</source> - <translation type="unfinished"></translation> + <translation>Testa enkel värdåtkomst med pingkommandot. Stäng av om din värd eller ditt nätverk inte stöder ping (ICMP ECHO) paket</translation> </message> <message> <source>Port</source> - <translation type="unfinished"></translation> + <translation>Port</translation> </message> <message> <source>The port number the database is running on. Leave blank if using the default port (3306).</source> - <translation type="unfinished"></translation> + <translation>Portnumret som databasen körs på. Lämna tomt om standardport (3306) används.</translation> </message> <message> <source>Database name</source> - <translation type="unfinished"></translation> + <translation>Databasnamn</translation> </message> <message> <source>Enable Database Server Wakeup</source> - <translation type="unfinished"></translation> + <translation>Möjliggör Databasserver Uppvakning</translation> </message> <message> <source>If checked, the frontend will use database wakeup parameters to reconnect to the database server.</source> - <translation type="unfinished"></translation> + <translation>Då markerad, kommer MythTV frontend att använda parametrar för databas uppvakning för att skapa kontakt med databasservern.</translation> </message> <message> <source>The command executed on this frontend to wake up the database server (eg. sudo /etc/init.d/mysql restart).</source> - <translation type="unfinished"></translation> + <translation>Kommandot som körs på denna MythTV frontend för att väcka upp databasservern (sudo /etc/init.d/mysql restart).</translation> </message> <message> <source>Required fields are marked with an asterisk (*).</source> - <translation type="unfinished"></translation> + <translation>Obligatoriska fält är markerade med en asterisk (*).</translation> </message> <message> <source>Cannot find (ping) database host %1 on the network</source> - <translation type="unfinished"></translation> + <translation>Kan inte hitta databasvärden %1 i nätverket</translation> </message> <message> <source>Cannot connect to port %1 on database host %2</source> - <translation type="unfinished"></translation> + <translation>Kan inte kontakta port %1 på databasvärd %2</translation> </message> <message> <source>Save database details</source> - <translation type="unfinished"></translation> + <translation>Spara databasdetaljer</translation> </message> <message> <source>Save backend details</source> - <translation type="unfinished"></translation> + <translation>Spara backend detaljer</translation> </message> <message> <source>Don't Save</source> - <translation type="unfinished"></translation> + <translation>Spara Inte</translation> </message> <message> <source>Save that backend or database as the default?</source> - <translation type="unfinished"></translation> + <translation>Spara denna backend eller databas som standard?</translation> </message> <message> <source>Upgrade</source> - <translation type="unfinished"></translation> + <translation>Uppgradera</translation> </message> <message> <source>Use current schema</source> - <translation type="unfinished"></translation> + <translation>Använd nuvarande schema</translation> </message> <message> <source>Subtitle</source> - <translation type="unfinished">Undertitel</translation> + <translation>Undertext</translation> </message> <message> <source>Could not query inputs.</source> - <translation type="unfinished"></translation> + <translation>Kunde inte kommunicera med ingångar.</translation> </message> <message> <source>ERROR, Compile with V4L support to query inputs</source> - <translation type="unfinished"></translation> + <translation>FEL, kompilera med V4L stöd för att kommunicera med ingångar</translation> </message> <message> <source>Could not open '%1' to probe its inputs.</source> - <translation type="unfinished"></translation> + <translation>Kunde inte öppna '%1' för att kommunicera med dess ingångar.</translation> </message> <message> <source>ERROR, Compile with DVB support to query inputs</source> - <translation type="unfinished"></translation> + <translation>FEL, kompilera med DVB stöd för att kommunicera med ingångar</translation> </message> <message> <source>New Input</source> - <translation type="unfinished"></translation> + <translation>Ny Ingång</translation> </message> <message> <source>Channel Options</source> - <translation type="unfinished"></translation> + <translation>Kanal Alternativ</translation> </message> <message> <source>Icon Download</source> - <translation type="unfinished"></translation> + <translation>Ikon Nerladdning</translation> </message> <message> <source>Starts the icon downloader</source> - <translation type="unfinished"></translation> + <translation>Startar ikonnedladdaren</translation> </message> <message> <source>as a search</source> - <translation type="unfinished"></translation> + <translation>som sökning</translation> </message> <message> <source>as an example</source> - <translation type="unfinished"></translation> + <translation>som exempel</translation> </message> <message> <source>Title %1 chapter %2</source> - <translation type="unfinished"></translation> + <translation>titel %1 kapitel %2</translation> </message> <message> <source>%1 of %2 (%3 behind)</source> - <translation type="unfinished"></translation> + <translation>%1 av %2 (%3 efter)</translation> </message> <message> <source>%1 of %2 (%3 remaining)</source> - <translation type="unfinished"></translation> + <translation>%1 av %2 (%3 kvar)</translation> </message> <message> <source>The theme you are using does not contain the %1 element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Escape out of it to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Temat som du använder innehåller inte elementet %1. Var god kontakta temats upphovsmän och be dom att uppdatera det.<br><br>Nästa bildskärm kommer att vara tom. Tryck Esc för att komma ur den och tillbaka till menyn.</translation> </message> <message> <source>the recorder failed to record.</source> - <translation type="unfinished"></translation> + <translation>inspelaren misslyckades att spela in.</translation> </message> <message> <source>this rule does not match any showings in the current program listings.</source> - <translation type="unfinished"></translation> + <translation>denna regel matchar inte någon förekomst i aktuell programlista.</translation> </message> <message> <source>this episode will be recorded on a different channel in this time slot.</source> - <translation type="unfinished"></translation> + <translation>denna episod kommer att bli inspelad på en annan kanal på denna tidpunkt.</translation> </message> <message> <source>Mono</source> - <translation type="unfinished"></translation> + <translation>Mono</translation> </message> <message> <source>Surround Sound</source> - <translation type="unfinished"></translation> + <translation>Surround Ljud</translation> </message> <message> <source>Dolby Sound</source> - <translation type="unfinished"></translation> + <translation>Dolby Ljud</translation> </message> <message> <source>Audio for Hearing Impaired</source> - <translation type="unfinished"></translation> + <translation>Ljudspår för hörselskadade</translation> </message> <message> <source>Audio for Visually Impaired</source> - <translation type="unfinished"></translation> + <translation>Ljudspår för synskadade</translation> </message> <message> <source>Widescreen</source> - <translation type="unfinished"></translation> + <translation>Bredbildsformat</translation> </message> <message> <source>AVC/H.264</source> - <translation type="unfinished"></translation> + <translation>AVC/H.264</translation> </message> <message> <source>Subtitles Available</source> - <translation type="unfinished"></translation> + <translation>Det finns undertexter</translation> </message> <message> <source>Deaf Signing</source> - <translation type="unfinished"></translation> + <translation>Teckenspråk</translation> </message> <message> <source>Average Time Shift</source> - <translation type="unfinished"></translation> + <translation>Medeltal av tidskast</translation> </message> <message> <source>hours</source> - <translation type="unfinished"></translation> + <translation>timmar</translation> </message> <message> <source>Recorded File Name</source> - <translation type="unfinished"></translation> + <translation>Inspelat Filnamn</translation> </message> <message> <source>If set, the bitrate specified will be used for 640x480. If other resolutions are used, the bitrate will be scaled appropriately.</source> - <translation type="unfinished"></translation> + <translation>Om inställt, så kommer specifierad bitrate användas för 640x480. Om annan upplösning används, så kommer bitrate att skaleras om efter behov.</translation> </message> <message> <source>Frequency (%1)</source> - <translation type="unfinished"></translation> + <translation>Frekvens (%1)</translation> </message> <message> <source>Frequency (Option has no default). The frequency for this channel in %1.</source> - <translation type="unfinished"></translation> + <translation>Frekvens (Inget standardalternativ). +Frekvensen för denna kanal i %1.</translation> </message> <message> <source>Symbol Rate (symbols/second). Most dvb-s transponders transmit at 27.5 million symbols per second.</source> - <translation type="unfinished"></translation> + <translation>Symbol Rate (symboler/sekund). +Dom flesta dvb-s transpondrar sänder 27,5 millioner symboler per sekund.</translation> </message> <message> <source>Could not open tuner device</source> - <translation type="unfinished"></translation> + <translation>Kunde inte öppna mottagarenhet</translation> </message> <message> <source>Bad connection to backend</source> - <translation type="unfinished"></translation> + <translation>Dålig kontakt med MythTV backend</translation> </message> <message> <source> offset %2</source> - <translation type="unfinished"></translation> + <translation> kompensation %2</translation> </message> <message> <source>Timeout Scanning %1 -- no tables</source> - <translation type="unfinished"></translation> + <translation>Timeout vid avsökning %1 -- inga tabeller</translation> </message> <message> <source>Timeout Scanning %1 -- no signal</source> - <translation type="unfinished"></translation> + <translation>Timeout vid avsökning %1 -- ingen signal</translation> </message> <message> <source>Tuning to %1 mplexid(%2)</source> - <translation type="unfinished"></translation> + <translation>Ställer in till %1 mplexid(%2)</translation> </message> <message> <source>Record new episode first showings</source> - <translation type="unfinished"></translation> + <translation>Spela in nytt avsnitt vid premiärer</translation> </message> <message> <source>DVB Transport</source> - <translation type="unfinished"></translation> + <translation>DVB Transport</translation> </message> <message> <source>MythTV wants to record these programs in %d seconds:</source> - <translation type="unfinished"></translation> + <translation>MythTV kommer att spela in dessa program efter %d sekunder:</translation> </message> <message> <source>"%1" on %2</source> - <translation type="unfinished"></translation> + <translation>"%1" på %2</translation> </message> <message> <source>Do you want to:</source> - <translation type="unfinished"></translation> + <translation>Vill du:</translation> </message> <message> <source>Mythtv has been idle for %1 minutes and will exit in %2 seconds. Are you still watching?</source> - <translation type="unfinished"></translation> + <translation>MythTV har varit oanvänt i %1 minuter och kommer att avslutas efter %2 sekunder. Tittar du på TV ännu?</translation> </message> <message> <source>On known multiplex...</source> - <translation type="unfinished"></translation> + <translation>På känd multiplex...</translation> </message> <message> <source>PVR-350 decoder</source> - <translation type="unfinished"></translation> + <translation>PVR-350 dekoder</translation> </message> <message> <source>libmpeg2 will use mpeg2 library; this is faster on some 32 bit AMD processors.</source> - <translation type="unfinished"></translation> + <translation>libmpeg2 kommer att använda mpeg2-rutiner; detta är snabbare på vissa 32 bitars AMD processorer.</translation> </message> <message> <source>Note: Closed caption decoding will not work with libmpeg2.</source> - <translation type="unfinished"></translation> + <translation>Notera: Avkodning av valbara undertexter fungerar inte med libmpeg2.</translation> </message> <message> <source>Kernel</source> - <translation type="unfinished"></translation> + <translation>Kernel</translation> </message> <message> <source>Greedy HighMotion</source> - <translation type="unfinished"></translation> + <translation>Greedy HighMotion</translation> </message> <message> <source>Greedy HighMotion (2x)</source> - <translation type="unfinished"></translation> + <translation>Greedy HighMotion (2x)</translation> </message> <message> <source>Yadif</source> - <translation type="unfinished"></translation> + <translation>Yadif</translation> </message> <message> <source>Yadif (2x)</source> - <translation type="unfinished"></translation> + <translation>Yadif (2x)</translation> </message> <message> <source>Bob (2x)</source> - <translation type="unfinished"></translation> + <translation>Bob (2x)</translation> </message> <message> <source>Linear blend (HW)</source> - <translation type="unfinished"></translation> + <translation>Linear blend (HW)</translation> </message> <message> <source>Kernel (HW)</source> - <translation type="unfinished"></translation> + <translation>Kernel (HW)</translation> </message> <message> <source>Bob (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Bob (2x, HW)</translation> </message> <message> <source>One field (HW)</source> - <translation type="unfinished"></translation> + <translation>One field (HW)</translation> </message> <message> <source>One Field (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>One Field (2x, HW)</translation> </message> <message> <source>Kernel (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Kernel (2x, HW)</translation> </message> <message> <source>Linear blend (2x, HW)</source> - <translation type="unfinished"></translation> + <translation>Linear blend (2x, HW)</translation> </message> <message> <source>Interlaced (2x, Hw)</source> - <translation type="unfinished"></translation> + <translation>Interlaced (2x, Hw)</translation> </message> <message> <source>Video rendering method</source> - <translation type="unfinished"></translation> + <translation>Video återgivningsmetod</translation> </message> <message> <source>Render video offscreen. Used internally.</source> - <translation type="unfinished"></translation> + <translation>Återge video utanför skärmen. Används internt.</translation> </message> <message> <source>Use X11 pixel copy to render video. This is not recommended if any other option is available. The video will not be scaled to fit the screen. This will work with all X11 servers, local and remote.</source> - <translation type="unfinished"></translation> + <translation>Använd X11 pixel kopiering för att återge video. Detta rekommenderas inte om andra alternativ finns. Videon kommer inte att skaleras om för att passa på skärmen. Detta fungerar med alla X11 servrar, lokalt och icke lokalt.</translation> </message> <message> <source>Use X11 shared memory pixel transfer to render video. This is only recommended over the X11 pixel copy renderer. The video will not be scaled to fit the screen. This works with most local X11 servers.</source> - <translation type="unfinished"></translation> + <translation>Använd X11 delat minne pixel överföring för att återge video. Detta är bara rekommenderat framom X11 pixel kopiering. Videon kommer inte att skaleras om för att passa skärmen. Detta fungerar lokalt med dom flesta X11 servrar.</translation> </message> <message> <source>This is the standard video renderer for X11 systems. It uses XVideo hardware assist for scaling, color conversion. If the hardware offers picture controls the renderer supports them.</source> - <translation type="unfinished"></translation> + <translation>Detta är standard video återgivaren för X11 system. Den använder XVideo hårdvaruassist för skalering, färgkonvertering. Om hårdvaran stöder bildinställningar så stöder återgivaren det också. </translation> </message> <message> <source>This is the standard video renderer for XvMC decoders. It uses XVideo hardware assist for scaling, color conversion and when available offers XVideo picture controls.</source> - <translation type="unfinished"></translation> + <translation>Detta är standard video återgivaren för XvMC avkodare. Den använder XVideo hårdvaruassist för skalering, färgkonvertering och om tillgänglig, medger bildinställningar.</translation> </message> <message> <source>This video renderer for XvMC on nVidia cards uses XVideo for color conversion and OpenGL for scaling. The main benefit of this renderer is that it allows OpenGL OSD rendering, which frees two XvMC buffers for decoding. It requires a reasonably fast nVidia card.</source> - <translation type="unfinished"></translation> + <translation>Denna video återgivare för XvMC på nVidia grafikkort använder XVideo för färgkonvertering och OpenGL för skalering. Största fördelen med denna återgivare är att den tillåter OpenGL OSD återgivning, vilken frigör två XvMC buffrar för avkodning. Detta kräver ett snabbt nVidia grafikkort.</translation> </message> <message> <source>This video renderer uses DirectFB for scaling and color conversion. It is not as feature rich as the standard video renderer, but can run on Linux hardware without an X11 server.</source> - <translation type="unfinished"></translation> + <translation>Denna video återgivare använder DirectFB för skalering och färgkonvertering. Den är inte lika egenskapsrik som standard video återgivaren, men kan köras i Linux system utan X11 server.</translation> </message> <message> <source>Windows video renderer based on overlays. Not compatible with Vista Aero Glass.</source> - <translation type="unfinished"></translation> + <translation>Windows video återgivare baserad på overlays. Inte kompatibel med Vista Aero Glass.</translation> </message> <message> <source>Windows video renderer based on Direct3D. Requires video card compatible with Direct3D 9. This is the preferred renderer for current Windows systems.</source> - <translation type="unfinished"></translation> + <translation>Windows video återgivare baserad på Direct3D. Kräver grafikkort kompatibelt med Direct3D 9. Detta är den rekommenderade återgivaren för Windows system.</translation> </message> <message> <source>This is the standard video render for Macintosh OS X systems.</source> - <translation type="unfinished"></translation> + <translation>Detta är standard video återgivaren för Macintosh OS X system.</translation> </message> <message> <source>This is the only video renderer for the MacAccel decoder.</source> - <translation type="unfinished"></translation> + <translation>Detta är enda video återgivaren för MacAccel avkodaren.</translation> </message> <message> <source>This is only video renderer for the PVR-350 decoder.</source> - <translation type="unfinished"></translation> + <translation>Detta är enda video återgivaren för PVR-350 avkodaren.</translation> </message> <message> <source>This video renderer uses OpenGL for scaling and color conversion and can offer limited picture contols. This requires a faster GPU than XVideo. Also, when enabled, picture controls consume additional resources.</source> - <translation type="unfinished"></translation> + <translation>Denna video återgivare använder OpenGL frö skalering och färgkonvertering och kan erbjuda begränsade bildinställningar. Detta kräver en snabbare grafikpeocessor än XVideo. Bildinställningar förbrukar också mera systemresurser.</translation> </message> <message> <source>This deinterlacer requires the display to be capable of twice the frame rate as the source video.</source> - <translation type="unfinished"></translation> + <translation>Denna deinterlacer kräver att bildskärmen ska stöda videokällans bildfrekvens (bilder per sekund) dubbelt upp.</translation> </message> <message> <source>Perform no deinterlacing.</source> - <translation type="unfinished"></translation> + <translation>Utför inte deinterlacing.</translation> </message> <message> <source>Use this with an interlaced display whose resolution exactly matches the video size. This is incompatible with MythTV zoom modes.</source> - <translation type="unfinished"></translation> + <translation>Använd detta med en interlaced bildskärm vars upplösning är exakt samma som videokällans upplösning. Detta är inte kompatibelt med MythTV's zoom lägen.</translation> </message> <message> <source>Shows only one of the two fields in the frame. This looks good when displaying a high motion 1080i video on a 720p display.</source> - <translation type="unfinished"></translation> + <translation>Visar bara det ena av två fält i bilden. Detta ser bra ut när man visar 1080i video på en 720p bildskärm.</translation> </message> <message> <source>Shows one field of the frame followed by the other field displaced vertically.</source> - <translation type="unfinished"></translation> + <translation>Visar ett fält av bilden följt av det andra fältet förskjutet vertikalt.</translation> </message> <message> <source>Blends the odd and even fields linearly into one frame.</source> - <translation type="unfinished"></translation> + <translation>Blandar udda och jämna fält lineärt till en bild.</translation> </message> <message> <source>This filter disables deinterlacing when the two fields are similar, and performs linear deinterlacing otherwise.</source> - <translation type="unfinished"></translation> + <translation>Detta filter stänger av deinterlacing i dom fall då båda fälten är lika, och utför annars lineär deinterlacing.</translation> </message> <message> <source>(Hardware Accelerated)</source> - <translation type="unfinished"></translation> + <translation>(Hårdvaruaccelererat)</translation> </message> <message> <source>With workaround for broken interlaced modelines.</source> - <translation type="unfinished"></translation> + <translation>Med kringgång av problem med söndriga interlacade modelines.</translation> </message> <message> <source>This deinterlacer uses several fields to reduce motion blur. It has increased CPU requirements.</source> - <translation type="unfinished"></translation> + <translation>Denna deinterlacer använder flera fält för att minska suddighet i rörelser.</translation> </message> <message> <source>'%1' has not been documented yet.</source> - <translation type="unfinished"></translation> + <translation>'%1' har inte blivit dokumenterat ännu.</translation> </message> <message> <source>OSD rendering method</source> - <translation type="unfinished"></translation> + <translation>OSD återgivningsmetod</translation> </message> <message> <source>Render the OSD using the XVideo chromakey feature.This renderer does not alpha blend. But it is the fastest OSD renderer; and is particularly efficient compared to the ia44blend OSD renderer for XvMC.</source> - <translation type="unfinished"></translation> + <translation>Återge OSD med hjälp av XVideos chromakey egenskap. Denna återgivare kan inte använda alpha blend, men den är den snabbaste OSD återgivaren, och är särskillt effektiv jämfört med ia44blend OSD återgivaren för XvMC.</translation> </message> <message> <source>Note: nVidia hardware after the 5xxx series does not have XVideo chromakey support.</source> - <translation type="unfinished"></translation> + <translation>Notera: nVidia hårdvara nyare än 5xxx serien har inte stöd för XVideo chromakey.</translation> </message> <message> <source>Software OSD rendering uses your CPU to alpha blend the OSD.</source> - <translation type="unfinished"></translation> + <translation>Mjukvaruåtergivning av OSD använder processorn för att göra alpha blend i OSD'n.</translation> </message> <message> <source>Uses hardware support for 16 color alpha-blend surfaces for rendering the OSD. Because of the limited color range, MythTV renders the OSD in 16 level grayscale.</source> - <translation type="unfinished"></translation> + <translation>Använder hårdvarustöd för 16 färgers alpha blend ytor för återgivning av OSD'n. Beroende på begränsad färgskala, återger MythTV OSD'n i 16 gråskalor.</translation> </message> <message> <source>Note: Not recommended for nVidia or Intel chipsets. This removes two of the limited XvMC buffers from decoding duty.</source> - <translation type="unfinished"></translation> + <translation>Notera: Inte rekommenerat för nVidia eller Intel kretsuppsättningar. Detta tar bort två av dom begränsade XvMC buffrarna avkodningsprocessen. </translation> </message> <message> <source>Renders the OSD using the PVR-350 chromakey feature.</source> - <translation type="unfinished"></translation> + <translation>Återger OSD'n genom att använda PVR-350's chromakey egenskap.</translation> </message> <message> <source>Uses OpenGL to alpha blend the OSD onto the video.</source> - <translation type="unfinished"></translation> + <translation>Använder OpenGL för att göra alpha blend i OSD'n under videovisning.</translation> </message> <message> <source>Max recordings</source> - <translation type="unfinished"></translation> + <translation>Max inspelningar</translation> </message> <message> <source>Maximum number of simultaneous recordings this device should make. Some digital transmitters transmit multiple programs on a multiplex, if this is set to a value greater than one MythTV can sometimes take advantage of this.</source> - <translation type="unfinished"></translation> + <translation>Maximalt antal av samtidiga inspelningar som denna enhet bör göra. Vissa distributörer av digitala sändningar sänder flera program på samma multiplex. Om detta är satt till ett värde högre än 1 kan MythTV ibland dra nytta av detta.</translation> </message> <message> <source>Searching for installed XMLTV grabbers</source> - <translation type="unfinished"></translation> + <translation>Söker efter installerade XMLTV hämtare</translation> </message> <message> <source>DVB Device Number</source> - <translation type="unfinished"></translation> + <translation>DVB Enhet Nummer</translation> </message> <message> <source>Warning: already in use</source> - <translation type="unfinished"></translation> + <translation>Varning: redan i användning</translation> </message> <message> <source>Use DVB Card for active EIT scan</source> - <translation type="unfinished"></translation> + <translation>Använd DVB kort för aktiv EIT avsökning</translation> </message> <message> <source>This option activates the active scan for program data (EIT). With this option enabled the DVB card is constantly in-use.</source> - <translation type="unfinished"></translation> + <translation>Detta alternativ aktiverar den aktiva avsökningen av programdata (EIT). Med detta alternativ valt så är DVB kortet i konstant användning.</translation> </message> <message> <source>Input Group</source> - <translation type="unfinished"></translation> + <translation>Ingång Grupp</translation> </message> <message> <source>Leave as 'Generic' unless this input is shared with another device. Only one of the inputs in an input group will be allowed to record at any given time.</source> - <translation type="unfinished"></translation> + <translation>Lämna som 'Generisk' om inte denna ingång är delad med en annan enhet. Endast en av ingångarna i en ingångsgrupp kommer vara tillåten att spela in på given tidpunkt.</translation> </message> <message> <source>Live TV only</source> - <translation type="unfinished"></translation> + <translation>Endast TV-sändning</translation> </message> <message> <source>If enabled MythTV will tune using only the MPEG program number. The program numbers change more often than DVB or ATSC tuning parameters, so this is slightly less reliable. This will also inhibit EIT gathering during Live TV and recording.</source> - <translation type="unfinished"></translation> + <translation>Om detta är aktiverat så kommer MythTV att ställa in frekvens endast genom att använda MPEG programnummret. Programnummren ändrar mera ofta än DVB eller ATSC frekvensinställningsparametrar, så detta är något opålitligare. Detta kommer också att hämma insammling av EIT data under TV-mottagning och inspelning.</translation> </message> <message> <source>Interactions between inputs</source> - <translation type="unfinished"></translation> + <translation>Interaktivitet mellan ingångar</translation> </message> <message> <source>Create a New Input Group</source> - <translation type="unfinished"></translation> + <translation>skapa en ny ingångsgrupp</translation> </message> <message> <source>Input groups are only needed when two or more cards share the same resource such as a firewire card and an analog card input controlling the same set top box.</source> - <translation type="unfinished"></translation> + <translation>Ingångsgrupper är bara nödvändiga då två eller flera kort delar samma resurs, som t.ex. ett firewire kort och ett analogt inmatningskort kontrollerar samma set top box.</translation> </message> <message> <source>Ignore</source> - <translation type="unfinished"></translation> + <translation>Ignorera</translation> </message> <message> <source>Detect</source> - <translation type="unfinished">Detektera</translation> + <translation>Detektera</translation> </message> <message> <source>Interlaced</source> - <translation type="unfinished"></translation> + <translation>Interlaced</translation> </message> <message> <source>Interlaced (Normal)</source> - <translation type="unfinished">Interlaced (Normal)</translation> + <translation>Interlaced (Normal)</translation> </message> <message> <source>Interlaced (Reversed)</source> - <translation type="unfinished">Interlaced (Omvänd)</translation> + <translation>Interlaced (Omvänd)</translation> </message> <message> <source>Progressive</source> - <translation type="unfinished">Progressiv</translation> + <translation>Progressiv</translation> </message> <message> <source>14:9</source> - <translation type="unfinished">14:9</translation> + <translation>14:9</translation> </message> <message> <source>Black</source> - <translation type="unfinished"></translation> + <translation>Svart</translation> </message> <message> <source>Gray</source> - <translation type="unfinished"></translation> + <translation>Grå</translation> </message> <message> <source>Half</source> - <translation type="unfinished"></translation> + <translation>Halv</translation> </message> <message> <source>Full</source> - <translation type="unfinished"></translation> + <translation>Hel</translation> </message> <message> <source>Stretch</source> - <translation type="unfinished"></translation> + <translation>Tänj</translation> </message> <message> <source>[Reserved]</source> - <translation type="unfinished"></translation> + <translation>[Reserverad]</translation> </message> <message> <source>SCTE mode 1</source> - <translation type="unfinished"></translation> + <translation>SCTE läge 1</translation> </message> <message> <source>SCTE mode 2</source> - <translation type="unfinished"></translation> + <translation>SCTE läge 2</translation> </message> <message> <source>ATSC 8-VSB</source> - <translation type="unfinished"></translation> + <translation>ATSC 8-VSB</translation> </message> <message> <source>ATSC 16-VSB</source> - <translation type="unfinished"></translation> + <translation>ATSC 16-VSB</translation> </message> <message> <source>Detective/Thriller</source> - <translation type="unfinished"></translation> + <translation>Kriminal/Thriller</translation> </message> <message> <source>Adventure/Western/War</source> - <translation type="unfinished"></translation> + <translation>Äventyr/Western/Krig</translation> </message> <message> <source>Science Fiction/Fantasy/Horror</source> - <translation type="unfinished"></translation> + <translation>Science Fiction/Fantasy/Skräck</translation> </message> <message> <source>Soap/melodrama/folkloric</source> - <translation type="unfinished"></translation> + <translation>Såpa/Melodrama/Folktradition</translation> </message> <message> <source>Serious/Classical/Religious/Historical Movie/Drama</source> - <translation type="unfinished"></translation> + <translation>Allvarlig/Klassisk/Religiös/Historisk Film/Drama</translation> </message> <message> <source>Adult</source> - <comment>Adult Movie</comment> - <translation type="unfinished"></translation> + <comment>Vuxenfilm</comment> + <translation type="obsolete">Vuxenfilm</translation> </message> <message> <source>News/weather report</source> - <translation type="unfinished"></translation> + <translation>Nyheter/Väderrapport</translation> </message> <message> <source>News magazine</source> - <translation type="unfinished"></translation> + <translation>Nyhetstidning</translation> </message> <message> <source>Intelligent Programmes</source> - <translation type="unfinished"></translation> + <translation>Intellektuella Program</translation> </message> <message> <source>Game Show</source> - <translation type="unfinished"></translation> + <translation>Tävlingsprogram</translation> </message> <message> <source>Variety Show</source> - <translation type="unfinished"></translation> + <translation>Nöjesprogram</translation> </message> <message> <source>Talk Show</source> - <translation type="unfinished"></translation> + <translation>Debattprogram</translation> </message> <message> <source>Special Events (World Cup, World Series..)</source> - <translation type="unfinished"></translation> + <translation>Speciella tilldragelser (Världsmästerskap, OS..)</translation> </message> <message> <source>Sports Magazines</source> - <translation type="unfinished"></translation> + <translation>Sporttidningar</translation> </message> <message> <source>Football (Soccer)</source> - <translation type="unfinished"></translation> + <translation>Fotboll</translation> </message> <message> <source>Tennis/Squash</source> - <translation type="unfinished"></translation> + <translation>Tennis/Squash</translation> </message> <message> <source>Misc. Team Sports</source> - <translation type="unfinished"></translation> + <translation>Blandad Lagsport</translation> </message> <message> <source>Athletics</source> - <translation type="unfinished"></translation> + <translation>Friidrott</translation> </message> <message> <source>Motor Sport</source> - <translation type="unfinished"></translation> + <translation>Motorsport</translation> </message> <message> <source>Water Sport</source> - <translation type="unfinished"></translation> + <translation>Vattensport</translation> </message> <message> <source>Winter Sports</source> - <translation type="unfinished"></translation> + <translation>Vintersporter</translation> </message> <message> <source>Equestrian</source> - <translation type="unfinished"></translation> + <translation>Hästsport</translation> </message> <message> <source>Martial Sports</source> - <translation type="unfinished"></translation> + <translation>Kampsporter</translation> </message> <message> <source>Kids</source> - <translation type="unfinished"></translation> + <translation>Barn</translation> </message> <message> <source>Pre-School Children's Programmes</source> - <translation type="unfinished"></translation> + <translation>Förskole Barnprogram</translation> </message> <message> <source>Entertainment Programmes for 6 to 14</source> - <translation type="unfinished"></translation> + <translation>Underhållningsprogram för 6 till 14 år</translation> </message> <message> <source>Entertainment Programmes for 10 to 16</source> - <translation type="unfinished"></translation> + <translation>Underhållningsprogram för 10 till 16 år</translation> </message> <message> <source>Informational/Educational</source> - <translation type="unfinished"></translation> + <translation>Information/Utbildning</translation> </message> <message> <source>Cartoons/Puppets</source> - <translation type="unfinished"></translation> + <translation>Tecknat/Dockor</translation> </message> <message> <source>Music/Ballet/Dance</source> - <translation type="unfinished"></translation> + <translation>Musik/Balett/Dans</translation> </message> <message> <source>Rock/Pop</source> - <translation type="unfinished"></translation> + <translation>Rock/Pop</translation> </message> <message> <source>Classical Music</source> - <translation type="unfinished"></translation> + <translation>Klassisk Musik</translation> </message> <message> <source>Folk Music</source> - <translation type="unfinished"></translation> + <translation>Folkmusik</translation> </message> <message> <source>Jazz</source> - <translation type="unfinished"></translation> + <translation>Jazz</translation> </message> <message> <source>Musical/Opera</source> - <translation type="unfinished"></translation> + <translation>Musik/Opera</translation> </message> <message> <source>Ballet</source> - <translation type="unfinished"></translation> + <translation>Balett</translation> </message> <message> <source>Arts/Culture</source> - <translation type="unfinished"></translation> + <translation>Konst/Kultur</translation> </message> <message> <source>Performing Arts</source> - <translation type="unfinished"></translation> + <translation>Skådespelarkonst</translation> </message> <message> <source>Fine Arts</source> - <translation type="unfinished"></translation> + <translation>Konst</translation> </message> <message> <source>Religion</source> - <translation type="unfinished"></translation> + <translation>Religion</translation> </message> <message> <source>Popular Culture/Traditional Arts</source> - <translation type="unfinished"></translation> + <translation>Populärkultur/Traditionell Konst</translation> </message> <message> <source>Literature</source> - <translation type="unfinished"></translation> + <translation>Literatur</translation> </message> <message> <source>Film/Cinema</source> - <translation type="unfinished"></translation> + <translation>Film/Bio</translation> </message> <message> <source>Experimental Film/Video</source> - <translation type="unfinished"></translation> + <translation>Experimentell Film/Video</translation> </message> <message> <source>Broadcasting/Press</source> - <translation type="unfinished"></translation> + <translation>TV-sändning/Press</translation> </message> <message> <source>New Media</source> - <translation type="unfinished"></translation> + <translation>Ny Media</translation> </message> <message> <source>Arts/Culture Magazines</source> - <translation type="unfinished"></translation> + <translation>Konst/Kulturtidningar</translation> </message> <message> <source>Social/Policical/Economics</source> - <translation type="unfinished"></translation> + <translation>Socialt/Politiskt/Ekonomiskt</translation> </message> <message> <source>Magazines/Reports/Documentary</source> - <translation type="unfinished"></translation> + <translation>Tidningar/Rapporter/Dokumentärer</translation> </message> <message> <source>Economics/Social Advisory</source> - <translation type="unfinished"></translation> + <translation>Ekonomi/Socialt Rådgivande</translation> </message> <message> <source>Remarkable People</source> - <translation type="unfinished"></translation> + <translation>Anmärkningsvärda Människor</translation> </message> <message> <source>Education/Science/Factual</source> - <translation type="unfinished"></translation> + <translation>utbildning/Vetenskap/Fakta</translation> </message> <message> <source>Nature/animals/Environment</source> - <translation type="unfinished"></translation> + <translation>Natur/Djur/Miljö</translation> </message> <message> <source>Technology/Natural Sciences</source> - <translation type="unfinished"></translation> + <translation>Teknik/Naturvetenskap</translation> </message> <message> <source>Medicine/Physiology/Psychology</source> - <translation type="unfinished"></translation> + <translation>Medicin/Fysiologi/Psykologi</translation> </message> <message> <source>Foreign Countries/Expeditions</source> - <translation type="unfinished"></translation> + <translation>Främmande Länder/Expeditioner</translation> </message> <message> <source>Social/Spiritual Sciences</source> - <translation type="unfinished"></translation> + <translation>Social/Andlig Vetenskap</translation> </message> <message> <source>Further Education</source> - <translation type="unfinished"></translation> + <translation>Fortbildning</translation> </message> <message> <source>Languages</source> - <translation type="unfinished"></translation> + <translation>Språk</translation> </message> <message> <source>Leisure/Hobbies</source> - <translation type="unfinished"></translation> + <translation>Fritid/Hobby</translation> </message> <message> <source>Tourism/Travel</source> - <translation type="unfinished"></translation> + <translation>Turism/Resa</translation> </message> <message> <source>Handicraft</source> - <translation type="unfinished"></translation> + <translation>Hantverk</translation> </message> <message> <source>Motoring</source> - <translation type="unfinished"></translation> + <translation>Motorsport</translation> </message> <message> <source>Fitness & Health</source> - <translation type="unfinished"></translation> + <translation>Motion & Hälsa</translation> </message> <message> <source>Cooking</source> - <translation type="unfinished"></translation> + <translation>Matlagning</translation> </message> <message> <source>Advertizement/Shopping</source> - <translation type="unfinished"></translation> + <translation>Reklam/Shopping</translation> </message> <message> <source>Gardening</source> - <translation type="unfinished"></translation> + <translation>Trädgård</translation> </message> <message> <source>Original Language</source> - <translation type="unfinished"></translation> + <translation>Originalspråk</translation> </message> <message> <source>Black & White</source> - <translation type="unfinished"></translation> + <translation>Svart & Vit</translation> </message> <message> <source>"Unpublished" Programmes</source> - <translation type="unfinished"></translation> + <translation>"Opublicerade" Program</translation> </message> <message> <source>Live Broadcast</source> - <translation type="unfinished"></translation> + <translation>Direktsändning</translation> </message> <message> <source>currently running.</source> - <translation type="unfinished"></translation> + <translation>aktuella sändningar.</translation> </message> <message> <source>Successful.</source> - <translation type="unfinished"></translation> + <translation>Framgångsrik.</translation> </message> <message> <source>FAILED: xmltv ran but was interrupted.</source> - <translation type="unfinished"></translation> + <translation>MISSLYCKAD: xmltv kördes men avbröts.</translation> </message> <message> <source>FAILED: xmltv returned error code %1.</source> - <translation type="unfinished"></translation> + <translation>MISSLYCKAD: xmltv returnerar felkod %1.</translation> </message> <message> <source>mythfilldatabase ran, but did not insert any new data into the Guide for %1 of %2 sources. This can indicate a potential grabber failure.</source> - <translation type="unfinished"></translation> + <translation>mythfilldatabase kördes, men satte inte in någon ny data i guiden för %1 av %2 källor. Detta kan indikera ett potentiellt sökningsproblem.</translation> </message> <message> <source>Max Audio Channels</source> - <translation type="unfinished"></translation> + <translation>Max Ljudkanaler</translation> </message> <message> <source>5.1</source> - <translation type="unfinished">5.1</translation> + <translation>5.1</translation> </message> <message> <source>Set the maximum number of audio channels to be decoded. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation>Ställ maximalt antal ljudkanaler som ska avkodas. Detta är för uppspelning av flerkanal/surround ljud.</translation> </message> <message> <source>Upmix</source> - <translation type="unfinished"></translation> + <translation>Uppmix</translation> </message> <message> <source>Passive</source> - <translation type="unfinished"></translation> + <translation>Passiv</translation> </message> <message> <source>Active Simple</source> - <translation type="unfinished"></translation> + <translation>Aktiv Enkel</translation> </message> <message> <source>Active Linear</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback.</source> - <translation type="unfinished"></translation> + <translation>Aktiv Linjär</translation> </message> <message> <source>Default group filter to apply on the View Recordings screen.</source> - <translation type="unfinished"></translation> + <translation>standard gruppfilter som ska användas i Titta På Inspelningar översikten.</translation> </message> <message> <source>Default View</source> - <translation type="unfinished"></translation> + <translation>Standard Översikt</translation> </message> <message> <source>Show Titles only</source> - <translation type="unfinished"></translation> + <translation>Visa endast titlar</translation> </message> <message> <source>Show Titles and Categories</source> - <translation type="unfinished"></translation> + <translation>Visa titlar och kategorier</translation> </message> <message> <source>Show Titles, Categories, and Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Visa titlar, kategorier och inspelningsgrupper</translation> </message> <message> <source>Show Titles and Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Visa titlar och inspelningsgrupper</translation> </message> <message> <source>Show Categories only</source> - <translation type="unfinished"></translation> + <translation>Visa endast kategorier</translation> </message> <message> <source>Show Categories and Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Visa kategorier och inspelningsgrupper</translation> </message> <message> <source>Show Recording Groups only</source> - <translation type="unfinished"></translation> + <translation>Visa endast inspelningsgrupper</translation> </message> <message> <source>Select what type of grouping to show on the Watch Recordings screen by default.</source> - <translation type="unfinished"></translation> + <translation>Välj vilken typ av gruppering som ska visas i "Titta På Inspelningar" översikten.</translation> </message> <message> <source>Run commercial flagger</source> - <translation type="unfinished"></translation> + <translation>Kör reklam-markerare</translation> </message> <message> <source>Run transcoder</source> - <translation type="unfinished"></translation> + <translation>Kör transcoder</translation> </message> <message> <source>Deferral days for Auto-Transcode jobs</source> - <translation type="unfinished"></translation> + <translation>Uppskjutande dagar för Auto-Transcode jobb</translation> </message> <message> <source>If non-zero, Auto-Transcode jobs will be scheduled to run this many days after a recording completes instead of immediately afterwards.</source> - <translation type="unfinished"></translation> + <translation>Om större än noll, så kommer Auto-Transcode jobb att schemaläggas att köras så här många dagar efter att en inspelning skutförts istället för omedelbart efter.</translation> </message> <message> <source>Run User Job #%1</source> - <translation type="unfinished"></translation> + <translation>Kör användarspecifierat jobb #%1</translation> </message> <message> <source>This is the default value used for the 'Run %1' setting when a new scheduled recording is created.</source> - <translation type="unfinished"></translation> + <translation>Detta är standardvärdet som används för 'Kör %1' inställningen när en ny schemalagd inspelning skapas.</translation> </message> <message> <source>Merge short commercial breaks (in seconds)</source> - <translation type="unfinished"></translation> + <translation>Förena korta reklamavbrott (i sekunder)</translation> </message> <message> <source>Treat consecutive commercial breaks shorter than this as one break when skipping forward. Useful if you have to skip a few times during breaks. Applies to automatic skipping as well. Set to 0 to disable.</source> - <translation type="unfinished"></translation> + <translation>Behandla på varandra följande reklamavbrott som är kortare än så här som ett avbrott vid framspolning. Användbart om du måste spola fram några gånger under avbrott. Gäller också vid automatisk framspolning. Ange noll för att avaktivera.</translation> </message> <message> <source>Extra Disk Space</source> - <translation type="unfinished"></translation> + <translation>Extra Skivutrymme</translation> </message> <message> <source>Extra disk space (in Gigabytes) that you want to keep free on the recording file systems beyond what MythTV requires.</source> - <translation type="unfinished"></translation> + <translation>Extra skivutrymme (i Gigabytes) som du vill behålla oanvända i filsystemet för inspelning utöver det som MythTV kräver.</translation> </message> <message> <source>Auto Expire Instead of Delete Recording</source> - <translation type="unfinished"></translation> + <translation>Automatiskt Utgående istället för Radera Inspelningar</translation> </message> <message> <source>Instead of deleting a recording, move recording to the 'Deleted' recgroup and turn on autoexpire.</source> - <translation type="unfinished"></translation> + <translation>Istället för radering av inspelning, flytta inspelningar till 'Raderade Inspelningar' gruppen och sätt på automatiskt utgående.</translation> </message> <message> <source>Deleted Max Age</source> - <translation type="unfinished"></translation> + <translation>Raderad Max Ålder</translation> </message> <message> <source>When set to a number greater than zero, AutoExpire will force expiration of Deleted recordings when they are this many days old.</source> - <translation type="unfinished"></translation> + <translation>Då satt till en siffra större än noll, så kommer Automatiskt Utgående tvinga utgående av raderade inspelningar när de är så här många dagar gamla.</translation> </message> <message> <source>Expire in deleted order</source> - <translation type="unfinished"></translation> + <translation>Låt förfalla i raderad ordning</translation> </message> <message> <source>Expire Deleted recordings in the order which they were originally deleted.</source> - <translation type="unfinished"></translation> + <translation>Låt raderade inspelningar gå ut i den ordning som de ursprungligen raderades i.</translation> </message> <message> <source>DeletedExpireOptions</source> - <translation type="unfinished"></translation> + <translation>RaderadeUtgångnaAlternativ</translation> </message> <message> <source>Watched before UNwatched</source> - <translation type="unfinished"></translation> + <translation>Sedda förrän osedda</translation> </message> <message> <source>If set, programs that have been marked as watched will be expired before programs that have not been watched.</source> - <translation type="unfinished"></translation> + <translation>Om inställt, så kommer program som märkts som sedda att gå ut före program som inte har blivit sedda.</translation> </message> <message> <source>Priority Weight</source> - <translation type="unfinished"></translation> + <translation>Prioritet Vikt</translation> </message> <message> <source>When enabled, any new recording schedules will be marked as eligible for Auto-Expiration. Existing schedules will keep their current value.</source> - <translation type="unfinished"></translation> + <translation>När aktiverad, så kommer nya inspelnings-schemaläggningar bli märkta som valbara för Automatiskt Utgående. Existerande schemaläggningar kommer att behålla sina aktuella värden.</translation> </message> <message> <source>LiveTV Max Age</source> - <translation type="unfinished"></translation> + <translation>TV Max Ålder</translation> </message> <message> <source>AutoExpire will force expiration of LiveTV recordings when they are this many days old. LiveTV recordings may also be expired early if necessary to free up disk space.</source> - <translation type="unfinished"></translation> + <translation>Automatiskt utgående kommer att tvinga utgående av TV inspelningar då dom är så här många dagar gamla. TV inspelningar kan också gå ut tidigt om det blir nödvändigt att frigöra diskutrymme.</translation> </message> <message> <source>Re-record Watched</source> - <translation type="unfinished"></translation> + <translation>Spela in sedda program igen</translation> </message> <message> <source>For a specific category (e.g. "Sports event"), request that shows be autoextended. Only works if a show's category can be determined.</source> - <translation type="unfinished"></translation> + <translation>För en specific kategori (t.ex. "Sporthändelse"), begär att program blir automatiskt förlängda. Fungerar endast om programmets kategori kan bestämmas.</translation> </message> <message> <source>Profile Item</source> - <translation type="unfinished"></translation> + <translation>Profilartikel</translation> </message> <message> <source>Example Custom filter list: 'ivtc,denoise3d'</source> - <translation type="unfinished"></translation> + <translation>Exempel egen filterlista: 'ivtc,denoise3d'</translation> </message> <message> <source>Main deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation>Huvudsaklig deinterlacing funktion.</translation> </message> <message> <source>Fallback deinterlacing method.</source> - <translation type="unfinished"></translation> + <translation>Reserv deinterlacing metod.</translation> </message> <message> <source>&</source> <comment>and</comment> - <translation type="unfinished"></translation> + <translation>&</translation> </message> <message> <source>if rez</source> - <translation type="unfinished"></translation> + <translation>om upplösning</translation> </message> <message> <source>Edit</source> - <translation type="unfinished">Redigera</translation> + <translation>Redigera</translation> </message> <message> <source>Add New Entry</source> - <translation type="unfinished"></translation> + <translation>Lägg till ny post</translation> </message> <message> <source>Playback Profiles</source> - <translation type="unfinished"></translation> + <translation>Uppspelningsprofil</translation> </message> <message> <source>Current Video Playback Profile</source> - <translation type="unfinished"></translation> + <translation>Nuvarande ideo uppspelningsprofil</translation> </message> <message> <source>Add New</source> - <translation type="unfinished"></translation> + <translation>Lägg till ny</translation> </message> <message> <source>Enter Playback Group Name</source> - <translation type="unfinished"></translation> + <translation>Ange uppspelningsgruppnamn</translation> </message> <message> <source>Sorry, playback group name can not be blank.</source> - <translation type="unfinished"></translation> + <translation>Tyvärr, uppspelningsgrupp- +namn kan inte vara tomt.</translation> </message> <message> <source>Sorry, playback group name '%1' is already being used.</source> - <translation type="unfinished"></translation> + <translation>Tyvärr, uppspelningsgrupp- +namnet '%1' är redan använt.</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fel</translation> </message> <message> <source>Length of time an on-screen display window will be visible.</source> - <translation type="unfinished"></translation> + <translation>Tidsintervall som ett programfönster kommer vara synligt.</translation> </message> <message> <source>Length of time the on-screen display will display program information.</source> - <translation type="unfinished"></translation> + <translation>Tidsintervall under vilken programinformation kommer att visas.</translation> </message> <message> <source>Use this to enlarge or shrink captions.</source> - <translation type="unfinished"></translation> + <translation>Använd detta för att förstora eller förminska text.</translation> </message> <message> <source>ATSC Caption Settings</source> - <translation type="unfinished"></translation> + <translation>ATSC textningsinställningar</translation> </message> <message> <source>ATSC %1 closed caption font.</source> - <translation type="unfinished"></translation> + <translation>ATSC %1 teckensnitt för textning.</translation> </message> <message> <source>ATSC Caption Fonts</source> - <translation type="unfinished"></translation> + <translation>ATSC teckensnitt för textning</translation> </message> <message> <source>Monospaced Serif</source> - <translation type="unfinished"></translation> + <translation>Monospaced Serif</translation> </message> <message> <source>Proportional Serif</source> - <translation type="unfinished"></translation> + <translation>Proportional Serif</translation> </message> <message> <source>Monospaced Sans Serif</source> - <translation type="unfinished"></translation> + <translation>Monospaced Sans Serif</translation> </message> <message> <source>Proportional Sans Serif</source> - <translation type="unfinished"></translation> + <translation>Proportional Sans Serif</translation> </message> <message> <source>Regular Font</source> - <translation type="unfinished"></translation> + <translation>Vanligt Teckensnitt</translation> </message> <message> <source>Italic Font</source> - <translation type="unfinished"></translation> + <translation>Kursivt Teckensnitt</translation> </message> <message> <source>Italic</source> - <translation type="unfinished"></translation> + <translation>Kursiv</translation> </message> <message> <source>Vertical scaling</source> - <translation type="unfinished"></translation> + <translation>Vertikal skalering</translation> </message> <message> <source>Adjust this if the image does not fill your screen vertically. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation>Justera detta om bilden inte fyller skärmen vertikalt. Intervall -100% till 100%</translation> </message> <message> <source>Horizontal scaling</source> - <translation type="unfinished"></translation> + <translation>Horisontell skalering</translation> </message> <message> <source>Adjust this if the image does not fill your screen horizontally. Range -100% to 100%</source> - <translation type="unfinished"></translation> + <translation>Justera detta om bilden inte fyller skärmen horisontellt. Intervall -100% till 100%</translation> </message> <message> <source>Prefer EIA-708 over EIA-608 captions</source> - <translation type="unfinished"></translation> + <translation>Föredra EIA-708 över EIA-608 textning</translation> </message> <message> <source>When enabled the new EIA-708 captions will be preferred over the old EIA-608 captions in ATSC streams.</source> - <translation type="unfinished"></translation> + <translation>Då aktiverad så kommer den nya EIA-708 textningen föredragas över den gamla EIA-608 textningen i ATSC strömmar.</translation> </message> <message> <source>This is the default, but as of early 2008 most stations are not broadcasting useable EIA-708 captions.</source> - <translation type="unfinished"></translation> + <translation>Detta är standard, men från och med tidigt 2008 sänder dom flesta stationer inte användbara EIA-708 textningar.</translation> </message> <message> <source>Enable picture controls</source> - <translation type="unfinished"></translation> + <translation>Möjliggör bildinställningar</translation> </message> <message> <source>If enabled, MythTV attempts to initialize picture controls (brightness, contrast, etc.) that are applied during playback.</source> - <translation type="unfinished"></translation> + <translation>Om aktiverat, så kommer MythTV att försöka initialisera bildinställningar (ljus, kontrast, etc.) som används under uppspelning.</translation> </message> <message> <source>Warn on no audio output</source> - <translation type="unfinished"></translation> + <translation>Varna om ingen ljudåtergivning</translation> </message> <message> <source>If enabled, MythTV will warn you if it can't access the soundcard.</source> - <translation type="unfinished"></translation> + <translation>Om aktiverad, så kommer MythTV att varna dig om inte ljudkortet kan användas.</translation> </message> <message> <source>Always prompt (excluding Live TV)</source> - <translation type="unfinished"></translation> + <translation>Fråga alltid (utom för TV sändning)</translation> </message> <message> <source>Always prompt (including Live TV)</source> - <translation type="unfinished"></translation> + <translation>Fråga alltid (för TV sändning)</translation> </message> <message> <source>Prompt for Live TV only</source> - <translation type="unfinished"></translation> + <translation>Fråga endast flr TV sändning</translation> </message> <message> <source>Continue Playback When Embedded</source> - <translation type="unfinished"></translation> + <translation>Fortsätt uppspelning då inbäddad</translation> </message> <message> <source>This option continues TV playback when the TV window is embedded in the upcoming program list or recorded list. The default is to pause the recorded show when embedded.</source> - <translation type="unfinished"></translation> + <translation>Detta alternativ fortsätter uppspelning av TV sändning när TV fönstret är inbäddat i listan över kommande program eller listan över inspelningar. Det är standard att pausa inspelningen när TV fönstret är inbäddat.</translation> </message> <message> <source>Automatically mark a recording as watched</source> - <translation type="unfinished"></translation> + <translation>Märk automatiskt en inspelning som sedd</translation> </message> <message> <source>Customise exit menu options</source> - <translation type="unfinished"></translation> + <translation>Anpassa avslutningsmenyalternativ</translation> </message> <message> <source>Show quit</source> - <translation type="unfinished"></translation> + <translation>Visa avsluta</translation> </message> <message> <source>Show quit and shutdown</source> - <translation type="unfinished"></translation> + <translation>Visa avsluta och avstängning</translation> </message> <message> <source>Show quit, reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>Visa avsluta, omstart och avstängning</translation> </message> <message> <source>Show shutdown</source> - <translation type="unfinished"></translation> + <translation>Visa avstängning</translation> </message> <message> <source>Show reboot</source> - <translation type="unfinished"></translation> + <translation>Visa omstart</translation> </message> <message> <source>Show reboot and shutdown</source> - <translation type="unfinished"></translation> + <translation>visa omstart och avstängning</translation> </message> <message> <source>By default, only remote frontends are shown the shutdown option on the exit menu. Here you can force specific shutdown and reboot options to be displayed.</source> - <translation type="unfinished"></translation> + <translation>Som standard visas avstängningsalternativet på avslutningsmenyn endast på klienter. Här kan du tvinga specifika avstängnings- och omstartalternativ ska visas.</translation> </message> <message> <source>Reboot command</source> - <translation type="unfinished"></translation> + <translation>Kommando för omstart</translation> </message> <message> <source>Command or script to run if you select the reboot option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source> - <translation type="unfinished"></translation> + <translation>Kommando eller skript som ska köras då omstart väls i avslutningsmenyn, om alternativert visas. du måste konfigurera en avslutningsknapp för att visa avslutningsmenyn.</translation> </message> <message> <source>Command or script to run if you select the shutdown option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source> - <translation type="unfinished"></translation> + <translation>Kommando eller skript som ska köras om du väljer avstängningsalternativet i avslutningsmenyn, om alternativet visas. Du måste konfigurera en avslutningsknapp för att visa avslutningsmenyn.</translation> </message> <message> <source>The aspect ratio of a Xinerama display can not be queried from the display, so it must be specified.</source> - <translation type="unfinished"></translation> + <translation>Bredd/höjdförhållandet på en Xinerama bildskärm kan inte kan inte fås från skärmen, så det måste specifieras.</translation> </message> <message> <source>Letterboxing Color</source> - <translation type="unfinished"></translation> + <translation>Färg på utfyllnad över- och underkant vid brevlådeformat</translation> </message> <message> <source>By default MythTV uses black letterboxing to match broadcaster letterboxing, but those with plasma screens may prefer gray to minimize burn-in.</source> - <translation type="unfinished"></translation> + <translation>Som standard använder MythTV svart för utfyllnad i över- och underkant vid brevlådeformat, men för plasma tv'n kanske grått är att föredraga för att minska risken för inbränning.</translation> </message> <message> <source>Currently only works with XVideo video renderer.</source> - <translation type="unfinished"></translation> + <translation>För närvarande fungerar detta endast med XVideo video återgivaren.</translation> </message> <message> <source>Video Aspect Override</source> - <translation type="unfinished"></translation> + <translation>Åsidosättande av bredd/höjdförhållande för video</translation> </message> <message> <source>When enabled, these will override the aspect ratio specified by any broadcaster for all video streams.</source> - <translation type="unfinished"></translation> + <translation>När aktiverade, kommer dessa åsidosätta höjd/breddförhållandet som specifierats av sändaren för alla videoströmmar.</translation> </message> <message> <source>Zoom</source> - <translation type="unfinished"></translation> + <translation>Zoom</translation> </message> <message> <source>When enabled, these will apply a predefined zoom to all video playback in MythTV.</source> - <translation type="unfinished"></translation> + <translation>När aktiverade , kommer dessa ge en fördefinierad zoom i all videouppspelning i MythTV.</translation> </message> <message> <source>Horizontal size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation>Bildskärmens horisontell storlek. Används för att beräkna bildskärmens faktiska höjd/breddförhållande. Detta kommer att åsidosätta systemets bildstorlek.</translation> </message> <message> <source>Vertical size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source> - <translation type="unfinished"></translation> + <translation>Bildskärmens vertikala storlek. Används för att beräkna bildskärmens faktiska höjd/breddförhållande. Detta kommer åsidosätta systemets bildstorlek.</translation> </message> <message> <source>Hide Mouse Cursor in MythTV</source> - <translation type="unfinished"></translation> + <translation>Göm musmarkören i MythTV</translation> </message> <message> <source>Toggles mouse cursor visibility. Most of the MythTV GUI does not respond to mouse clicks. Use this option to avoid "losing" your mouse cursor.</source> - <translation type="unfinished"></translation> + <translation>Ändra musmarkörens synlighet. Det mesta av MythTV's användargränssnitt reagerar inte på musklick. Använd detta alternativ för att undvika att "tappa bort" din muskursor.</translation> </message> <message> <source>This selects what MythTV uses to draw. If you have decent hardware, select OpenGL. Changing this requires a restart.</source> - <translation type="unfinished"></translation> + <translation>Detta väljer vad MythTV använder frö att rita. Om du har relativt snabb hårdvara, välj OpenGL. Ändring av detta kräver omstart.</translation> </message> <message> <source>UI Theme</source> - <translation type="unfinished"></translation> + <translation>Tema för användargränssnitt</translation> </message> <message> <source>OSD Theme</source> - <translation type="unfinished"></translation> + <translation>Tema för OSD</translation> </message> <message> <source>Menu Theme</source> - <translation type="unfinished"></translation> + <translation>Tema för menyer</translation> </message> <message> <source>Avoid conflicts between live TV and scheduled shows</source> - <translation type="unfinished"></translation> + <translation>Undvik konflikter mellan TV sändningar och schemalagda program</translation> </message> <message> <source>Allow live TV to move scheduled shows</source> - <translation type="unfinished"></translation> + <translation>Tillåt schemalagda program att flyttas av TV sändning</translation> </message> <message> <source>If enabled, scheduled recordings will be moved to other cards (where possible), so that live TV will not be interrupted.</source> - <translation type="unfinished"></translation> + <translation>Om aktiverad, så kommer schelagda inspelningar att flyttas till andra mottagare (om möjligt), så att TV sändningar int eblir avbrutna.</translation> </message> <message> <source>Fine tune font size (%)</source> - <translation type="unfinished"></translation> + <translation>Finjustera teckenstorlek (%)</translation> </message> <message> <source>Fine tune all font sizes by this percentage. Font sizes should be the correct relative size if the X11 DPI (dots per inch) is set to 100.</source> - <translation type="unfinished"></translation> + <translation>Finjustera all teckensnitt med denna procent. Teckenstorlek borde vara korrekta relativa storleken om X11 DPI (punkter per tum) är satt till 100.</translation> </message> <message> <source>Display the channel icons</source> - <translation type="unfinished"></translation> + <translation>Visa kanalikonerna</translation> </message> <message> <source>Display the icons/logos for the channels in the guide. See section 9.5 of the Installation Guide for how to grab icons.</source> - <translation type="unfinished"></translation> + <translation>Visa ikoner/logon för kanalerna i programguiden. Se sektion 9.5 i installationsmanualen för att se hur man hämtar ikoner.</translation> </message> <message> <source>Avoid back to back recordings from different channels</source> - <translation type="unfinished"></translation> + <translation>Undvik från olika kanaler på varandra följande inspelningar</translation> </message> <message> <source>If set, the scheduler will avoid assigning shows from different channels to the same card if their end time and start time match. This will be allowed when necessary in order to resolve conflicts.</source> - <translation type="unfinished"></translation> + <translation>Om inställt, så kommer shemaläggaren att undvika att tilldela program från olika kanaler till samma mottagare om deras start- och sluttid inte är samma. Detta kommer att tillåtas för att lösa konflikter.</translation> </message> <message> <source>The 'All' Recording type will receive this additional recording priority value.</source> - <translation type="unfinished"></translation> + <translation>"Alla Inspelningar" typen kommer att få denna ytterligare inspelningsprioritet.</translation> </message> <message> <source>Ignore LiveTV Recordings</source> - <translation type="unfinished"></translation> + <translation>Ignorera TV inspelningar</translation> </message> <message> <source>Recording monitoring will ignore LiveTV recordings.</source> - <translation type="unfinished"></translation> + <translation>Inspelnings övervakning kommer att ignorera TV inspelningar.</translation> </message> <message> <source> (and other removable devices)</source> - <translation type="unfinished"></translation> + <translation> (och andra portabla enheter)</translation> </message> <message> <source>Use new media</source> - <translation type="unfinished"></translation> + <translation>Använd nytt media</translation> </message> <message> <source>This will cause MythTV to jump, to an appropriate plugin, when new media is inserted.</source> - <translation type="unfinished"></translation> + <translation>Detta kommer att förorsaka att MythTV hoppar till ett lämpligt plugin då nytt media sätts i.</translation> </message> <message> <source>Ignore Devices</source> - <translation type="unfinished"></translation> + <translation>Ignorera Enheter</translation> </message> <message> <source>If there are any devices that you do not want to be monitored, list them here with commas in-between. The plugins will ignore them</source> - <translation type="unfinished"></translation> + <translation>Om det finns någon enhet som du inte vill ska övervakas så lista dom här separerade med kommatecken. Pluginsen kommer att ignorera dem</translation> </message> <message> <source>MythMediaMonitor</source> - <translation type="unfinished"></translation> + <translation>MythMediaÖvervakare</translation> </message> <message> <source>PVR-350 Hardware Decoder Settings</source> - <translation type="unfinished"></translation> + <translation>Inställningar för PVr-350 hårdvarudekoder</translation> </message> <message> <source>This setting allows a DataDirect guide data provider to specify the next download time in order to distribute load on their servers. If this setting is enabled, mythfilldatabase Execution Start/End times are ignored.</source> - <translation type="unfinished"></translation> + <translation>Denna inställning tillåter en DataDirect guide dataleverantör att specifiera nästa nedladdningstidpunkt för att distribuera belastning på deras servrar. Om denna inställning är aktiverad så ignoreras mythfilldatabase kommandots start/stop tider.</translation> </message> <message> <source>File or directory to use for logging output from the mythfilldatabase program. Leave blank to disable logging.</source> - <translation type="unfinished"></translation> + <translation>Fil eller katalog för loggning av mythfilldatabase kommandots output. Lämna tomt för att avaktivera loggning.</translation> </message> <message> <source>Miscellaneous</source> - <translation type="unfinished"></translation> + <translation>Diverse</translation> </message> <message> <source>Settings Access</source> - <translation type="unfinished"></translation> + <translation>Inställningsåtkomst</translation> </message> <message> <source>Shutdown/Reboot Settings</source> - <translation type="unfinished"></translation> + <translation>Inställningar för avstängning/omstart</translation> </message> <message> <source>General Playback</source> - <translation type="unfinished"></translation> + <translation>allmän Uppspelning</translation> </message> <message> <source>Recording Groups</source> - <translation type="unfinished"></translation> + <translation>Inspelningsgrupper</translation> </message> <message> <source>UDP OSD Notifications</source> - <translation type="unfinished"></translation> + <translation>OSD meddelanden via UDP</translation> </message> <message> <source>Analog Closed Captions</source> - <translation type="unfinished"></translation> + <translation>Textning för analog sändning</translation> </message> <message> <source>Default JobQueue settings for new scheduled recordings</source> - <translation type="unfinished"></translation> + <translation>Standard jobbköinställningar för nya schemalagda inspelningar</translation> </message> <message> <source>Yes, Exit and Reboot</source> - <translation type="unfinished"></translation> + <translation>Ja, avsluta och starta om</translation> </message> <message> <source>DVD contains a bookmark</source> - <translation type="unfinished"></translation> + <translation>DVD'n har ett bokmärke</translation> </message> <message> <source>Play from bookmark</source> - <translation type="unfinished">Spela upp från bokmärke</translation> + <translation>Spela upp från bokmärke</translation> </message> <message> <source>Play from beginning</source> - <translation type="unfinished">Spela upp från början</translation> + <translation>Spela upp från början</translation> </message> <message> <source>The file for this recording is empty.</source> - <translation type="unfinished"></translation> + <translation>Denna inspelnings fil är tom.</translation> </message> <message> <source>This recording is not yet available.</source> - <translation type="unfinished"></translation> + <translation>Denna inspelning är inte ännu tillgänglig.</translation> </message> <message> <source>Move to Default group</source> - <translation type="unfinished"></translation> + <translation>Flytta till standardgrupp</translation> </message> <message> <source>Undelete</source> - <translation type="unfinished"></translation> + <translation>Återställ raderat</translation> </message> <message> <source>IP address</source> - <translation type="unfinished"></translation> + <translation>IP adress</translation> </message> <message> <source>Status Port</source> - <translation type="unfinished"></translation> + <translation>Status Port</translation> </message> <message> <source>Security Pin (Required)</source> - <translation type="unfinished"></translation> + <translation>Säkerhets PIN (krävs)</translation> </message> <message> <source>Pin code required for a frontend to connect to the backend. Blank prevents all connections, 0000 allows any client to connect.</source> - <translation type="unfinished"></translation> + <translation>PIN kod krävs för att MythTV klient ska ansluta till MythTV server. Tomt förhindrar alla anslutningar, 0000 tillåter vilken klient som helst att ansluta.</translation> </message> <message> <source>Disable Firewire Reset</source> - <translation type="unfinished"></translation> + <translation>Avaktivera Firewire Ställ om</translation> </message> <message> <source>By default MythTV will reset the firewire bus when a firewire recorder stops responding to commands. But if this causes problems you can disable this here for Linux firewire recorders.</source> - <translation type="unfinished"></translation> + <translation>Som standard kommer MythTV att ställa om firewire bussen när en firewire inspelare slutar svara på kommandon. Men om detta orsakar problem så kan du avaktivera detta för Linux firewire inspelare.</translation> </message> <message> <source>Miscellaneous Status Application</source> - <translation type="unfinished"></translation> + <translation>Diverse Status Program</translation> </message> <message> <source>External application or script that outputs extra information for inclusion in the backend status page. See contrib/misc_status_info/README</source> - <translation type="unfinished"></translation> + <translation>Externt program eller skript som producerar extra information som ska inkluderas i MythTV servers status</translation> </message> <message> <source>Your Local Timezone (for XMLTV)</source> - <translation type="unfinished"></translation> + <translation>Din lokala tidszon (för XMLTV)</translation> </message> <message> <source>Used if the XMLTV data comes from a different timezone than your own. This adjust the times in the XMLTV EPG data to compensate. 'Auto' converts the XMLTV time to local time using your computer's timezone. 'None' ignores the XMLTV timezone, interpreting times as local.</source> - <translation type="unfinished"></translation> + <translation>Används om XMLTV datat kommer från en annan tidszon än din egen. Detta justerar tiderna i XMLTV EPG data för att kompensera. 'Auto' konverterar XMLTV tid till lokal tid med hjälp av ditt systems tidszon. 'Ingen' gör att XMLTV tidszonerna ignoreras, och tider antas vara lokala.</translation> </message> <message> <source>Delay between wake attempts (secs)</source> - <translation type="unfinished"></translation> + <translation>Uppehåll mellan uppvakningsförsök (sekunder)</translation> </message> <message> <source>Wake Attempts</source> - <translation type="unfinished"></translation> + <translation>Uppvakningsförsök</translation> </message> <message> <source>The command used to wake up your master backend server (eg. sudo /etc/init.d/mythtv-backend restart).</source> - <translation type="unfinished"></translation> + <translation>Kommandot används för att väcka upp din MythTV server.</translation> </message> <message> <source>Idle shutdown timeout (secs)</source> - <translation type="unfinished"></translation> + <translation>Sekunder innan avstängning vid viloläge</translation> </message> <message> <source>Command to set Wakeup Time</source> - <translation type="unfinished"></translation> + <translation>Kommando för att ställa in uppvakningstid</translation> </message> <message> <source>The command used to set the wakeup time (passed as $time) for the Master Backend</source> - <translation type="unfinished"></translation> + <translation>Kommandot som används för att ställa in uppvakningstid (skickad som $time) för MythTV servern</translation> </message> <message> <source>Run Jobs only on original recording backend</source> - <translation type="unfinished"></translation> + <translation>Kör jobb endast på original inspelningsserver</translation> </message> <message> <source>User Job #%1 Command</source> - <translation type="unfinished"></translation> + <translation>Eget jobb #%1 Kommando</translation> </message> <message> <source>User Job #%1 Description</source> - <translation type="unfinished"></translation> + <translation>Eget jobb #%1 Beskrivning</translation> </message> <message> <source>User Job #%1</source> - <translation type="unfinished"></translation> + <translation>eget jobb #%1</translation> </message> <message> <source>Allow %1 jobs</source> - <translation type="unfinished"></translation> + <translation>Tillåt %1 jobb</translation> </message> <message> <source>Master Backend</source> - <translation type="unfinished"></translation> + <translation>Huvudserver</translation> </message> <message> <source>Locale Settings</source> - <translation type="unfinished"></translation> + <translation>Landsspecifika inställningar</translation> </message> <message> <source>Miscellaneous Settings</source> - <translation type="unfinished"></translation> + <translation>Diverse inställningar</translation> </message> <message> <source>File Management Settings</source> - <translation type="unfinished"></translation> + <translation>Filhanteringsinställningar</translation> </message> <message> <source>Backend Wakeup settings</source> - <translation type="unfinished"></translation> + <translation>Inställningar för serveruppvakning</translation> </message> <message> <source>Slave Backends</source> - <translation type="unfinished"></translation> + <translation>Slavservrar</translation> </message> <message> <source>Job Queue (Backend-Specific)</source> - <translation type="unfinished"></translation> + <translation>Jobbkö (specifik för server)</translation> </message> <message> <source>Tuner %1 is recording: </source> - <translation type="unfinished">TV-kort %1 spelar in: + <translation>Mottagare %1 spelar in: </translation> </message> <message> <source>Tuner %1 is not recording</source> - <translation type="unfinished">TV-kort %1 spelar inte in</translation> + <translation>Mottagare %1 spelar inte in</translation> </message> <message> <source>Date Format</source> - <translation type="unfinished"></translation> + <translation>Datumformat</translation> </message> <message> <source>This is the format to use to display the date. See http://doc.trolltech.com/3.3/qdate.html#toString for a list of valid format specifiers.</source> - <translation type="unfinished"></translation> + <translation>Detta är formatet för visning av datum. Se http://doc.trolltech.com/3.3/qdate.html#toString för giltiga format.</translation> + </message> + <message> + <source>CPU++</source> + <comment>Sample: No hardware assist</comment> + <translation>CPU++</translation> + </message> + <message> + <source>CPU+</source> + <comment>Sample: Hardware assist HD only</comment> + <translation>CPU+</translation> + </message> + <message> + <source>CPU--</source> + <comment>Sample: Hardware assist all</comment> + <translation>CPU--</translation> + </message> + <message> + <source>High Quality</source> + <comment>Sample: high quality</comment> + <translation>Hög kvalité</translation> + </message> + <message> + <source>Normal</source> + <comment>Sample: average quality</comment> + <translation>Normal</translation> + </message> + <message> + <source>Slim</source> + <comment>Sample: low CPU usage</comment> + <translation>Slim</translation> + </message> + <message> + <source>Set the audio upmix type for 2ch to 6ch conversion. This is for multi-channel/surround audio playback. 'Passive' is the least demanding on the CPU. 'Active Simple' is more demanding and 'Active Linear' is the most demanding (but highest quality).</source> + <translation>Ställ in ljud uppmixtyp för tvåkanals till sexkanals konvertering. Detta är för uppseplning av flerkanals/surround ljud.</translation> + </message> + <message> + <source>ScreenShotPath</source> + <translation>Sökväg till bildskärmskopior</translation> + </message> + <message> + <source>Path to screenshot storage location. Should be writable by the frontend</source> + <translation>Sökväg till katalog för bildskärmskopior. Katalogen ska kunna skrivas av användaren som kör MythTV</translation> + </message> + <message> + <source>Automatic Priority Range (+/-)</source> + <translation>automatisk Prioritetsintervall (+/-)</translation> + </message> + <message> + <source>Up to this number of priority points may be added for titles that are usually watched soon after recording or subtracted for titles that are often watched several days or weeks later.</source> + <translation>Upp till detta antal av prioritetspunkter kan läggas till för titlar som vanligtvis tittas på kort after inspelning eller borttagna för titlar som ofta tittas på flera dagar eller veckor senare.</translation> + </message> + <message> + <source>If other than None, override the audio sampling rate in the recording profile when this card is used. Use this if your capture card does not support all of the standard rates.</source> + <translation>Om annat än tomt, åsidosätt audio sampling frekvensen i inspelningsprofilen när detta kort används. Använd detta om ditt kort inte stöder alla standardfrekvenserna.</translation> + </message> + <message> + <source>Adult</source> + <comment>Adult Movie</comment> + <translation>Vuxenfilm</translation> + </message> + <message> + <source>Display on screen</source> + <translation>Visa på bildskärmen</translation> + </message> + <message> + <source>MythTV Frontend</source> + <translation>MythTV Klient</translation> + </message> + <message> + <source>MythTV Setup</source> + <translation>MythTV Setup</translation> </message> </context> <context> <name>RecOptDialog</name> <message> <source>Missing Element</source> - <translation type="unfinished"></translation> + <translation>Saknat element</translation> </message> <message> <source>The theme you are using does not contain a 'recording_options' element. Please contact the theme creator and ask if they could please update it.<br><br>The next screen will be empty. Press EXIT to return to the menu.</source> - <translation type="unfinished"></translation> + <translation>Temat du använder innehåller inte 'recording_options' elementet. Var god och kontakta temats upphovsmän och be dom att kan uppdatera temat. + +Nästa bild kommer att vara tom. Tryck EXIT för att gå tillbaka till menyn.</translation> </message> <message> <source>Unknown Element</source> - <translation type="unfinished"></translation> + <translation>Okänt Element</translation> </message> <message> <source>The theme you are using contains an unknown element ('%1'). It will be ignored</source> - <translation type="unfinished">Temat som används innehåller ett okänt element ('%1') som kommer att ignoreras</translation> + <translation>Temat som används innehåller ett okänt element ('%1') som kommer att ignoreras</translation> </message> </context> <context> @@ -10434,91 +10525,91 @@ <name>SIScan</name> <message> <source>Updated Channel %1</source> - <translation type="unfinished"></translation> + <translation>Uppdaterad Kanal %1</translation> </message> <message> <source>Added Channel %1</source> - <translation type="unfinished"></translation> + <translation>Tillagd Kanal %1</translation> </message> <message> <source>Failed to add channel %1</source> - <translation type="unfinished"></translation> + <translation>Misslyckades att lägga till kanal %1</translation> </message> <message> <source>Network %1 Processing</source> - <translation type="unfinished"></translation> + <translation>Nätverk %1 Körning</translation> </message> <message> <source>Finished processing Transport List</source> - <translation type="unfinished"></translation> + <translation>Avslutade behandling av transportlista</translation> </message> <message> <source>Updating Services</source> - <translation type="unfinished"></translation> + <translation>Uppdaterar Tjänster</translation> </message> <message> <source>Finished processing Services</source> - <translation type="unfinished"></translation> + <translation>Avslutade behandling av tjänster</translation> </message> <message> <source>Frequency %1</source> - <translation type="unfinished"></translation> + <translation>Frekvens %1</translation> </message> <message> <source>as</source> - <translation type="unfinished"></translation> + <translation>som</translation> </message> <message> <source>Skipping %1, not in imported channel map</source> - <translation type="unfinished"></translation> + <translation>skippar %1, inte i importerad kanalkarta</translation> </message> <message> <source>%1%2%3 on %4 (%5)</source> - <translation type="unfinished"></translation> + <translation>%1%2%3 på %4 (%5)</translation> </message> <message> <source>Adding %1</source> - <translation type="unfinished"></translation> + <translation>Lägger till %1</translation> </message> <message> <source>Updating %1</source> - <translation type="unfinished"></translation> + <translation>Uppdaterar %1</translation> </message> <message> <source>Skipping %1</source> - <translation type="unfinished"></translation> + <translation>Skippar %1</translation> </message> <message> <source>on %1</source> - <translation type="unfinished"></translation> + <translation>på %1</translation> </message> <message> <source>Data Only Channel (off-air?)</source> - <translation type="unfinished"></translation> + <translation>Endast Datakanal (inte i sändning?)</translation> </message> <message> <source>Empty Channel (off-air?)</source> - <translation type="unfinished"></translation> + <translation>Tom Kanal (inte i sändning?)</translation> </message> <message> <source>Audio Only Channel</source> - <translation type="unfinished"></translation> + <translation>Endast Ljudkanal</translation> </message> <message> <source>Encrypted Channel</source> - <translation type="unfinished"></translation> + <translation>Krypterad Kanal</translation> </message> <message> <source>%1 %2-%3 as %4 on %5 (%6)</source> - <translation type="unfinished"></translation> + <translation></translation> </message> <message> <source>Found channel, but it doesn't match existing tsid. You may wish to delete existing channels and do a full scan.</source> - <translation type="unfinished"></translation> + <translation>Hittade kanal, men den matchar inte existerande tsid. Du kanske vill radera existerande kanaler och göra en omsökning av kanaler.</translation> </message> <message> <source>Skipping %1 - already in DB, and we don't have better data.</source> - <translation type="unfinished"></translation> + <translation>Skippar %1 - redan i databas, och vi har ingen bättre data.</translation> </message> </context> <context> @@ -10729,94 +10820,95 @@ </message> <message> <source>marked as HDTV</source> - <translation type="unfinished"></translation> + <translation>markera som HDTV</translation> </message> <message> <source>from source</source> - <translation type="unfinished"></translation> + <translation>från källa</translation> </message> <message> <source>on input</source> - <translation type="unfinished"></translation> + <translation>på ingång</translation> </message> <message> <source>%1 of these are Deleted and consume %2</source> - <translation type="unfinished"></translation> + <translation>%1 av dessa är raderade och använder %2</translation> </message> </context> <context> <name>StorageGroupEditor</name> <message> <source>'%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>'%1' Kataloger för lagringsgrupper</translation> </message> <message> <source>Local '%1' Storage Group Directories</source> - <translation type="unfinished"></translation> + <translation>Lokala '%1' kataloger för lagringsgrupp</translation> </message> <message> <source>Add Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>Lägg till katalog för lagringsgrupp</translation> </message> <message> <source>Enter directory name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished"></translation> + <translation>Ange katalognamn eller tryck SELECT för att skriva med det virtuella tangentbordet</translation> </message> <message> <source>Edit Storage Group Directory</source> - <translation type="unfinished"></translation> + <translation>Redigera katalog för lagringsgrupp </translation> </message> <message> <source>Remove '%1' Directory From Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Radera '%1' +Katalog Från Lagringsgrupp?</translation> </message> <message> <source>Yes, remove directory</source> - <translation type="unfinished"></translation> + <translation>Ja, radera katalog</translation> </message> <message> <source>No, Don't remove directory</source> - <translation type="unfinished"></translation> + <translation>Nej, radera inte katalog</translation> </message> <message> <source>(Add New Directory)</source> - <translation type="unfinished"></translation> + <translation>(Lägg Till Ny Katalog)</translation> </message> </context> <context> <name>StorageGroupListEditor</name> <message> <source>Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Lagringsgrupp (kataloger för nya inspelningar)</translation> </message> <message> <source>Local Storage Groups (directories for new recordings)</source> - <translation type="unfinished"></translation> + <translation>Lokala lagringsgrupper (kataloger för nya inspelningar)</translation> </message> <message> <source>Create New Storage Group</source> - <translation type="unfinished"></translation> + <translation>Skapa Nya Lagringsgrupper</translation> </message> <message> <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source> - <translation type="unfinished">Skriv in gruppnamn eller tryck SELECT för att skriva in text med det virtuella tangentbordet</translation> + <translation>Skriv in gruppnamn eller tryck SELECT för att skriva in text med det virtuella tangentbordet</translation> </message> <message> <source>Delete '%1' Storage Group?</source> - <translation type="unfinished"></translation> + <translation>Radera '%1' lagringsgrupp?</translation> </message> <message> <source>Yes, delete group</source> - <translation type="unfinished">Ja, ta bort grupp</translation> + <translation>Ja, radera grupp</translation> </message> <message> <source>No, Don't delete group</source> - <translation type="unfinished">Nej, ta inte bort grupp</translation> + <translation>Nej, radera inte grupp</translation> </message> <message> <source>(Create %1 group)</source> - <translation type="unfinished"></translation> + <translation>(skapa %1 grupp)</translation> </message> </context> <context> @@ -11510,73 +11602,81 @@ </message> <message> <source>Exit</source> - <translation type="unfinished">Avsluta</translation> + <translation>Avsluta</translation> </message> <message> <source>MythTV wants to record "%1" on %2 in %d seconds. Do you want to:</source> - <translation type="unfinished"></translation> + <translation>MythTV kommer att spela in "%1" på %2 om %d seunder. Vill du:</translation> </message> <message> <source>Let them record and go back to the Main Menu</source> - <translation type="unfinished"></translation> + <translation>Låt dom spelas in och gå tillbaka till huvudmenyn</translation> </message> <message> <source>Record it later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Spela in senare, jag vill se på TV</translation> </message> <message> <source>Record them later, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Spela in dem senare, jag vill se på TV</translation> </message> <message> <source>Don't let them record, I want to watch TV</source> - <translation type="unfinished"></translation> + <translation>Låt dom inte spelas in, jag vill se på TV</translation> </message> <message> <source>You should have gotten a channel lock by now. You can continue to wait for a signal, or you can change the channels with %1 or %2, change video source (%3), inputs (%4), etc.</source> - <translation type="unfinished"></translation> + <translation>Du borde ha fått kanallåsning vi det här laget. Du kan fortsätta att vänta på signal, byta kanal med %1 or %2, byta videokälla (%3), ingångar (%4), etc.</translation> </message> <message> <source>Yes</source> - <translation type="unfinished">Ja</translation> + <translation>Ja</translation> </message> <message> <source>Adjust Fill</source> - <translation type="unfinished"></translation> + <translation>Justera Fyllningsgrad</translation> </message> <message> <source>Switch Input</source> - <translation type="unfinished"></translation> + <translation>Växla Ingång</translation> </message> <message> <source>C</source> <comment>Card</comment> - <translation type="unfinished">K</translation> + <translation>K</translation> </message> <message> <source>I</source> <comment>Input</comment> - <translation type="unfinished"></translation> + <translation>I</translation> </message> <message> <source>Switch Source</source> - <translation type="unfinished"></translation> + <translation>Växla Källa</translation> </message> <message> <source>Upcoming Recordings</source> - <translation type="unfinished"></translation> + <translation>Uppkommande Inspelningar</translation> </message> <message> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Fel</translation> </message> <message> <source>You are exiting %1</source> - <translation type="unfinished"></translation> + <translation>Du håller på att gå ut ur %1</translation> </message> <message> <source>Exit %1</source> - <translation type="unfinished"></translation> + <translation>Avsluta %1</translation> + </message> + <message> + <source>MythTV is using all inputs for Live TV?</source> + <translation>Använder MythTV alla ingångar för TV mottagning?</translation> + </message> + <message> + <source>MythTV has no capture cards defined. Please run the mythtv-setup program.</source> + <translation>MythTV har inga mottagare definierade. Var god och kör mythtv-setup programmet.</translation> </message> </context> <context> @@ -11813,26 +11913,26 @@ </message> <message> <source>Multiplex Editor</source> - <translation type="unfinished"></translation> + <translation>Multiplex Redigerare</translation> </message> </context> <context> <name>UIListBtnType</name> <message> <source>Search</source> - <translation type="unfinished">Sök</translation> + <translation>Sök</translation> </message> <message> <source>Starts with text</source> - <translation type="unfinished">Börjar med text</translation> + <translation>Börjar med text</translation> </message> <message> <source>Contains text</source> - <translation type="unfinished">Innehåller text</translation> + <translation>Innehåller text</translation> </message> <message> <source>Cancel</source> - <translation type="unfinished">Avbryt</translation> + <translation>Avbryt</translation> </message> </context> <context> @@ -11954,11 +12054,11 @@ </message> <message> <source>Conflict Today</source> - <translation type="unfinished"></translation> + <translation>Konflikt Idag</translation> </message> <message> <source>Conflict </source> - <translation type="unfinished"></translation> + <translation>Konflikt </translation> </message> </context> <context> @@ -12075,11 +12175,11 @@ </message> <message> <source>to</source> - <translation type="unfinished"></translation> + <translation>till </translation> </message> <message> <source>MythTV has running or pending jobs.</source> - <translation type="unfinished"></translation> + <translation>MythTV har pågående eller avvaktande jobb.</translation> </message> </context> <context> diff -uNr mythtv-0.21/libs/libavcodec/ac3dec.c mythtv/libs/libavcodec/ac3dec.c --- mythtv-0.21/libs/libavcodec/ac3dec.c 2008-02-10 21:56:11.000000000 +0100 +++ mythtv/libs/libavcodec/ac3dec.c 2008-04-21 18:28:52.000000000 +0200 @@ -35,6 +35,7 @@ #include "avcodec.h" #include "ac3_parser.h" #include "bitstream.h" +#include "crc.h" #include "dsputil.h" #include "random.h" @@ -1121,6 +1122,16 @@ return -1; } + /* check for crc mismatch */ + if(avctx->error_resilience >= FF_ER_CAREFUL) { + if(av_crc(av_crc8005, 0, &buf[2], ctx->frame_size-2)) { + av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n"); + *data_size = 0; + return ctx->frame_size; + } + /* TODO: error concealment */ + } + avctx->sample_rate = ctx->sampling_rate; avctx->bit_rate = ctx->bit_rate; diff -uNr mythtv-0.21/libs/libavcodec/bitstream.c mythtv/libs/libavcodec/bitstream.c --- mythtv-0.21/libs/libavcodec/bitstream.c 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/bitstream.c 2008-09-22 22:58:47.000000000 +0200 @@ -109,6 +109,8 @@ index = vlc->table_size; vlc->table_size += size; if (vlc->table_size > vlc->table_allocated) { + if(use_static>1) + abort(); //cant do anything, init_vlc() is used with too little memory vlc->table_allocated += (1 << vlc->bits); if(use_static) vlc->table = ff_realloc_static(vlc->table, @@ -134,7 +136,7 @@ VLC_TYPE (*table)[2]; table_size = 1 << table_nb_bits; - table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_STATIC); + table_index = alloc_table(vlc, table_size, flags & (INIT_VLC_USE_STATIC|INIT_VLC_USE_NEW_STATIC)); #ifdef DEBUG_VLC av_log(NULL,AV_LOG_DEBUG,"new table index=%d size=%d code_prefix=%x n=%d\n", table_index, table_size, code_prefix, n_prefix); @@ -263,7 +265,13 @@ int flags) { vlc->bits = nb_bits; - if(!(flags & INIT_VLC_USE_STATIC)) { + if(flags & INIT_VLC_USE_NEW_STATIC){ + if(vlc->table_size && vlc->table_size == vlc->table_allocated){ + return 0; + }else if(vlc->table_size){ + abort(); // fatal error, we are called on a partially initialized table + } + }else if(!(flags & INIT_VLC_USE_STATIC)) { vlc->table = NULL; vlc->table_allocated = 0; vlc->table_size = 0; @@ -286,6 +294,8 @@ av_freep(&vlc->table); return -1; } + if((flags & INIT_VLC_USE_NEW_STATIC) && vlc->table_size != vlc->table_allocated) + av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); return 0; } diff -uNr mythtv-0.21/libs/libavcodec/bitstream.h mythtv/libs/libavcodec/bitstream.h --- mythtv-0.21/libs/libavcodec/bitstream.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/bitstream.h 2008-09-22 22:58:47.000000000 +0200 @@ -800,10 +800,20 @@ const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags); -#define INIT_VLC_USE_STATIC 1 +#define INIT_VLC_USE_STATIC 1 ///< VERY strongly deprecated and forbidden #define INIT_VLC_LE 2 +#define INIT_VLC_USE_NEW_STATIC 4 void free_vlc(VLC *vlc); +#define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size)\ +{\ + static VLC_TYPE table[static_size][2];\ + (vlc)->table= table;\ + (vlc)->table_allocated= static_size;\ + init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC);\ +} + + /** * * if the vlc code is invalid and max_depth=1 than no bits will be removed diff -uNr mythtv-0.21/libs/libavcodec/cabac.h mythtv/libs/libavcodec/cabac.h --- mythtv-0.21/libs/libavcodec/cabac.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/cabac.h 2008-09-22 22:58:47.000000000 +0200 @@ -685,116 +685,6 @@ #endif } -//FIXME the x86 code from this file should be moved into i386/h264 or cabac something.c/h (note ill kill you if you move my code away from under my fingers before iam finished with it!) -//FIXME use some macros to avoid duplicatin get_cabac (cannot be done yet as that would make optimization work hard) -#if defined(ARCH_X86) && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) -static int decode_significance_x86(CABACContext *c, int max_coeff, uint8_t *significant_coeff_ctx_base, int *index){ - void *end= significant_coeff_ctx_base + max_coeff - 1; - int minusstart= -(int)significant_coeff_ctx_base; - int minusindex= 4-(int)index; - int coeff_count; - asm volatile( - "movl "RANGE "(%3), %%esi \n\t" - "movl "LOW "(%3), %%ebx \n\t" - - "2: \n\t" - - BRANCHLESS_GET_CABAC("%%edx", "%3", "(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") - - "test $1, %%edx \n\t" - " jz 3f \n\t" - - BRANCHLESS_GET_CABAC("%%edx", "%3", "61(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") - - "mov %2, %%"REG_a" \n\t" - "movl %4, %%ecx \n\t" - "add %1, %%"REG_c" \n\t" - "movl %%ecx, (%%"REG_a") \n\t" - - "test $1, %%edx \n\t" - " jnz 4f \n\t" - - "add $4, %%"REG_a" \n\t" - "mov %%"REG_a", %2 \n\t" - - "3: \n\t" - "add $1, %1 \n\t" - "cmp %5, %1 \n\t" - " jb 2b \n\t" - "mov %2, %%"REG_a" \n\t" - "movl %4, %%ecx \n\t" - "add %1, %%"REG_c" \n\t" - "movl %%ecx, (%%"REG_a") \n\t" - "4: \n\t" - "add %6, %%eax \n\t" - "shr $2, %%eax \n\t" - - "movl %%esi, "RANGE "(%3) \n\t" - "movl %%ebx, "LOW "(%3) \n\t" - :"=&a"(coeff_count), "+r"(significant_coeff_ctx_base), "+m"(index)\ - :"r"(c), "m"(minusstart), "m"(end), "m"(minusindex)\ - : "%"REG_c, "%ebx", "%edx", "%esi", "memory"\ - ); - return coeff_count; -} - -static int decode_significance_8x8_x86(CABACContext *c, uint8_t *significant_coeff_ctx_base, int *index, uint8_t *sig_off){ - int minusindex= 4-(int)index; - int coeff_count; - long last=0; - asm volatile( - "movl "RANGE "(%3), %%esi \n\t" - "movl "LOW "(%3), %%ebx \n\t" - - "mov %1, %%"REG_D" \n\t" - "2: \n\t" - - "mov %6, %%"REG_a" \n\t" - "movzbl (%%"REG_a", %%"REG_D"), %%edi \n\t" - "add %5, %%"REG_D" \n\t" - - BRANCHLESS_GET_CABAC("%%edx", "%3", "(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") - - "mov %1, %%edi \n\t" - "test $1, %%edx \n\t" - " jz 3f \n\t" - - "movzbl "MANGLE(last_coeff_flag_offset_8x8)"(%%edi), %%edi\n\t" - "add %5, %%"REG_D" \n\t" - - BRANCHLESS_GET_CABAC("%%edx", "%3", "15(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") - - "mov %2, %%"REG_a" \n\t" - "mov %1, %%edi \n\t" - "movl %%edi, (%%"REG_a") \n\t" - - "test $1, %%edx \n\t" - " jnz 4f \n\t" - - "add $4, %%"REG_a" \n\t" - "mov %%"REG_a", %2 \n\t" - - "3: \n\t" - "addl $1, %%edi \n\t" - "mov %%edi, %1 \n\t" - "cmpl $63, %%edi \n\t" - " jb 2b \n\t" - "mov %2, %%"REG_a" \n\t" - "movl %%edi, (%%"REG_a") \n\t" - "4: \n\t" - "addl %4, %%eax \n\t" - "shr $2, %%eax \n\t" - - "movl %%esi, "RANGE "(%3) \n\t" - "movl %%ebx, "LOW "(%3) \n\t" - :"=&a"(coeff_count),"+m"(last), "+m"(index)\ - :"r"(c), "m"(minusindex), "m"(significant_coeff_ctx_base), "m"(sig_off)\ - : "%"REG_c, "%ebx", "%edx", "%esi", "%"REG_D, "memory"\ - ); - return coeff_count; -} -#endif /* defined(ARCH_X86) && && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) */ - /** * * @return the number of bytes read or 0 if no end diff -uNr mythtv-0.21/libs/libavcodec/dsputil.h mythtv/libs/libavcodec/dsputil.h --- mythtv-0.21/libs/libavcodec/dsputil.h 2007-11-19 00:55:56.000000000 +0100 +++ mythtv/libs/libavcodec/dsputil.h 2008-09-22 22:58:47.000000000 +0200 @@ -321,7 +321,7 @@ void (*h264_h_loop_filter_chroma_intra)(uint8_t *pix, int stride, int alpha, int beta); // h264_loop_filter_strength: simd only. the C version is inlined in h264.c void (*h264_loop_filter_strength)(int16_t bS[2][4][4], uint8_t nnz[40], int8_t ref[2][40], int16_t mv[2][40][2], - int bidir, int edges, int step, int mask_mv0, int mask_mv1); + int bidir, int edges, int step, int mask_mv0, int mask_mv1, int field); void (*h263_v_loop_filter)(uint8_t *src, int stride, int qscale); void (*h263_h_loop_filter)(uint8_t *src, int stride, int qscale); diff -uNr mythtv-0.21/libs/libavcodec/h264.c mythtv/libs/libavcodec/h264.c --- mythtv-0.21/libs/libavcodec/h264.c 2008-03-04 22:05:31.000000000 +0100 +++ mythtv/libs/libavcodec/h264.c 2008-11-27 00:31:46.000000000 +0100 @@ -32,8 +32,12 @@ #include "h264data.h" #include "h264_parser.h" #include "golomb.h" +#include "rectangle.h" #include "cabac.h" +#ifdef ARCH_X86 +#include "i386/h264_i386.h" +#endif //#undef NDEBUG #include <assert.h> @@ -45,18 +49,34 @@ #define DELAYED_PIC_REF 4 static VLC coeff_token_vlc[4]; +static VLC_TYPE coeff_token_vlc_tables[520+332+280+256][2]; +static const int coeff_token_vlc_tables_size[4]={520,332,280,256}; + static VLC chroma_dc_coeff_token_vlc; +static VLC_TYPE chroma_dc_coeff_token_vlc_table[256][2]; +static const int chroma_dc_coeff_token_vlc_table_size = 256; static VLC total_zeros_vlc[15]; +static VLC_TYPE total_zeros_vlc_tables[15][512][2]; +static const int total_zeros_vlc_tables_size = 512; + static VLC chroma_dc_total_zeros_vlc[3]; +static VLC_TYPE chroma_dc_total_zeros_vlc_tables[3][8][2]; +static const int chroma_dc_total_zeros_vlc_tables_size = 8; static VLC run_vlc[6]; +static VLC_TYPE run_vlc_tables[6][8][2]; +static const int run_vlc_tables_size = 8; + static VLC run7_vlc; +static VLC_TYPE run7_vlc_table[96][2]; +static const int run7_vlc_table_size = 96; static void svq3_luma_dc_dequant_idct_c(DCTELEM *block, int qp); static void svq3_add_idct_c(uint8_t *dst, DCTELEM *block, int stride, int qp, int dc); static void filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize); static void filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize); +static Picture * remove_long(H264Context *h, int i, int ref_mask); static av_always_inline uint32_t pack16to32(int a, int b){ #ifdef WORDS_BIGENDIAN @@ -74,121 +94,34 @@ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, }; - -/** - * fill a rectangle. - * @param h height of the rectangle, should be a constant - * @param w width of the rectangle, should be a constant - * @param size the size of val (1 or 4), should be a constant - */ -static av_always_inline void fill_rectangle(void *vp, int w, int h, int stride, uint32_t val, int size){ - uint8_t *p= (uint8_t*)vp; - assert(size==1 || size==4); - assert(w<=4); - - w *= size; - stride *= size; - - assert((((long)vp)&(FFMIN(w, STRIDE_ALIGN)-1)) == 0); - assert((stride&(w-1))==0); - if(w==2){ - const uint16_t v= size==4 ? val : val*0x0101; - *(uint16_t*)(p + 0*stride)= v; - if(h==1) return; - *(uint16_t*)(p + 1*stride)= v; - if(h==2) return; - *(uint16_t*)(p + 2*stride)= v; - *(uint16_t*)(p + 3*stride)= v; - }else if(w==4){ - const uint32_t v= size==4 ? val : val*0x01010101; - *(uint32_t*)(p + 0*stride)= v; - if(h==1) return; - *(uint32_t*)(p + 1*stride)= v; - if(h==2) return; - *(uint32_t*)(p + 2*stride)= v; - *(uint32_t*)(p + 3*stride)= v; - }else if(w==8){ - //gcc can't optimize 64bit math on x86_32 -#if defined(ARCH_X86_64) || (defined(MP_WORDSIZE) && MP_WORDSIZE >= 64) - const uint64_t v= val*0x0100000001ULL; - *(uint64_t*)(p + 0*stride)= v; - if(h==1) return; - *(uint64_t*)(p + 1*stride)= v; - if(h==2) return; - *(uint64_t*)(p + 2*stride)= v; - *(uint64_t*)(p + 3*stride)= v; - }else if(w==16){ - const uint64_t v= val*0x0100000001ULL; - *(uint64_t*)(p + 0+0*stride)= v; - *(uint64_t*)(p + 8+0*stride)= v; - *(uint64_t*)(p + 0+1*stride)= v; - *(uint64_t*)(p + 8+1*stride)= v; - if(h==2) return; - *(uint64_t*)(p + 0+2*stride)= v; - *(uint64_t*)(p + 8+2*stride)= v; - *(uint64_t*)(p + 0+3*stride)= v; - *(uint64_t*)(p + 8+3*stride)= v; -#else - *(uint32_t*)(p + 0+0*stride)= val; - *(uint32_t*)(p + 4+0*stride)= val; - if(h==1) return; - *(uint32_t*)(p + 0+1*stride)= val; - *(uint32_t*)(p + 4+1*stride)= val; - if(h==2) return; - *(uint32_t*)(p + 0+2*stride)= val; - *(uint32_t*)(p + 4+2*stride)= val; - *(uint32_t*)(p + 0+3*stride)= val; - *(uint32_t*)(p + 4+3*stride)= val; - }else if(w==16){ - *(uint32_t*)(p + 0+0*stride)= val; - *(uint32_t*)(p + 4+0*stride)= val; - *(uint32_t*)(p + 8+0*stride)= val; - *(uint32_t*)(p +12+0*stride)= val; - *(uint32_t*)(p + 0+1*stride)= val; - *(uint32_t*)(p + 4+1*stride)= val; - *(uint32_t*)(p + 8+1*stride)= val; - *(uint32_t*)(p +12+1*stride)= val; - if(h==2) return; - *(uint32_t*)(p + 0+2*stride)= val; - *(uint32_t*)(p + 4+2*stride)= val; - *(uint32_t*)(p + 8+2*stride)= val; - *(uint32_t*)(p +12+2*stride)= val; - *(uint32_t*)(p + 0+3*stride)= val; - *(uint32_t*)(p + 4+3*stride)= val; - *(uint32_t*)(p + 8+3*stride)= val; - *(uint32_t*)(p +12+3*stride)= val; -#endif - }else - assert(0); - assert(h==4); -} +static const int left_block_options[4][8]={ + {0,1,2,3,7,10,8,11}, + {2,2,3,3,8,11,8,11}, + {0,0,1,1,7,10,7,10}, + {0,2,0,2,7,10,7,10} +}; static void fill_caches(H264Context *h, int mb_type, int for_deblock){ MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; int topleft_xy, top_xy, topright_xy, left_xy[2]; int topleft_type, top_type, topright_type, left_type[2]; - int left_block[8]; + int * left_block; + int topleft_partition= -1; int i; + top_xy = mb_xy - (s->mb_stride << FIELD_PICTURE); + //FIXME deblocking could skip the intra and nnz parts. - if(for_deblock && (h->slice_num == 1 || h->slice_table[mb_xy] == h->slice_table[mb_xy-s->mb_stride]) && !FRAME_MBAFF) + if(for_deblock && (h->slice_num == 1 || h->slice_table[mb_xy] == h->slice_table[top_xy]) && !FRAME_MBAFF) return; //wow what a mess, why didn't they simplify the interlacing&intra stuff, i can't imagine that these complex rules are worth it - top_xy = mb_xy - (s->mb_stride << FIELD_PICTURE); topleft_xy = top_xy - 1; topright_xy= top_xy + 1; left_xy[1] = left_xy[0] = mb_xy-1; - left_block[0]= 0; - left_block[1]= 1; - left_block[2]= 2; - left_block[3]= 3; - left_block[4]= 7; - left_block[5]= 10; - left_block[6]= 8; - left_block[7]= 11; + left_block = left_block_options[0]; if(FRAME_MBAFF){ const int pair_xy = s->mb_x + (s->mb_y & ~1)*s->mb_stride; const int top_pair_xy = pair_xy - s->mb_stride; @@ -212,6 +145,10 @@ : (!curr_mb_frame_flag && !topleft_mb_frame_flag) // top macroblock ) { topleft_xy -= s->mb_stride; + } else if(bottom && curr_mb_frame_flag && !left_mb_frame_flag) { + topleft_xy += s->mb_stride; + // take top left mv from the middle of the mb, as opposed to all other modes which use the bottom right partition + topleft_partition = 0; } if (bottom ? !curr_mb_frame_flag // bottom macroblock @@ -223,34 +160,13 @@ left_xy[1] = left_xy[0] = pair_xy - 1; if (curr_mb_frame_flag) { if (bottom) { - left_block[0]= 2; - left_block[1]= 2; - left_block[2]= 3; - left_block[3]= 3; - left_block[4]= 8; - left_block[5]= 11; - left_block[6]= 8; - left_block[7]= 11; + left_block = left_block_options[1]; } else { - left_block[0]= 0; - left_block[1]= 0; - left_block[2]= 1; - left_block[3]= 1; - left_block[4]= 7; - left_block[5]= 10; - left_block[6]= 7; - left_block[7]= 10; + left_block= left_block_options[2]; } } else { left_xy[1] += s->mb_stride; - //left_block[0]= 0; - left_block[1]= 2; - left_block[2]= 0; - left_block[3]= 2; - //left_block[4]= 7; - left_block[5]= 10; - left_block[6]= 7; - left_block[7]= 10; + left_block = left_block_options[3]; } } } @@ -265,30 +181,19 @@ left_type[0] = h->slice_table[left_xy[0] ] < 255 ? s->current_picture.mb_type[left_xy[0]] : 0; left_type[1] = h->slice_table[left_xy[1] ] < 255 ? s->current_picture.mb_type[left_xy[1]] : 0; - if(FRAME_MBAFF && !IS_INTRA(mb_type)){ + if(MB_MBAFF && !IS_INTRA(mb_type)){ int list; - int v = *(uint16_t*)&h->non_zero_count[mb_xy][14]; - for(i=0; i<16; i++) - h->non_zero_count_cache[scan8[i]] = (v>>i)&1; for(list=0; list<h->list_count; list++){ + //These values where changed for ease of performing MC, we need to change them back + //FIXME maybe we can make MC and loop filter use the same values or prevent + //the MC code from changing ref_cache and rather use a temporary array. if(USES_LIST(mb_type,list)){ - uint32_t *src = (uint32_t*)s->current_picture.motion_val[list][h->mb2b_xy[mb_xy]]; - uint32_t *dst = (uint32_t*)h->mv_cache[list][scan8[0]]; int8_t *ref = &s->current_picture.ref_index[list][h->mb2b8_xy[mb_xy]]; - for(i=0; i<4; i++, dst+=8, src+=h->b_stride){ - dst[0] = src[0]; - dst[1] = src[1]; - dst[2] = src[2]; - dst[3] = src[3]; - } *(uint32_t*)&h->ref_cache[list][scan8[ 0]] = - *(uint32_t*)&h->ref_cache[list][scan8[ 2]] = pack16to32(ref[0],ref[1])*0x0101; + *(uint32_t*)&h->ref_cache[list][scan8[ 2]] = (pack16to32(ref[0],ref[1])&0x00FF00FF)*0x0101; ref += h->b8_stride; *(uint32_t*)&h->ref_cache[list][scan8[ 8]] = - *(uint32_t*)&h->ref_cache[list][scan8[10]] = pack16to32(ref[0],ref[1])*0x0101; - }else{ - fill_rectangle(&h-> mv_cache[list][scan8[ 0]], 4, 4, 8, 0, 4); - fill_rectangle(&h->ref_cache[list][scan8[ 0]], 4, 4, 8, (uint8_t)LIST_NOT_USED, 1); + *(uint32_t*)&h->ref_cache[list][scan8[10]] = (pack16to32(ref[0],ref[1])&0x00FF00FF)*0x0101; } } } @@ -298,30 +203,49 @@ topright_type= h->slice_table[topright_xy] == h->slice_num ? s->current_picture.mb_type[topright_xy]: 0; left_type[0] = h->slice_table[left_xy[0] ] == h->slice_num ? s->current_picture.mb_type[left_xy[0]] : 0; left_type[1] = h->slice_table[left_xy[1] ] == h->slice_num ? s->current_picture.mb_type[left_xy[1]] : 0; - } if(IS_INTRA(mb_type)){ + int type_mask= h->pps.constrained_intra_pred ? IS_INTRA(-1) : -1; h->topleft_samples_available= h->top_samples_available= h->left_samples_available= 0xFFFF; h->topright_samples_available= 0xEEEA; - if(!IS_INTRA(top_type) && (top_type==0 || h->pps.constrained_intra_pred)){ + if(!(top_type & type_mask)){ h->topleft_samples_available= 0xB3FF; h->top_samples_available= 0x33FF; h->topright_samples_available= 0x26EA; } - for(i=0; i<2; i++){ - if(!IS_INTRA(left_type[i]) && (left_type[i]==0 || h->pps.constrained_intra_pred)){ + if(IS_INTERLACED(mb_type) != IS_INTERLACED(left_type[0])){ + if(IS_INTERLACED(mb_type)){ + if(!(left_type[0] & type_mask)){ + h->topleft_samples_available&= 0xDFFF; + h->left_samples_available&= 0x5FFF; + } + if(!(left_type[1] & type_mask)){ + h->topleft_samples_available&= 0xFF5F; + h->left_samples_available&= 0xFF5F; + } + }else{ + int left_typei = h->slice_table[left_xy[0] + s->mb_stride ] == h->slice_num + ? s->current_picture.mb_type[left_xy[0] + s->mb_stride] : 0; + assert(left_xy[0] == left_xy[1]); + if(!((left_typei & type_mask) && (left_type[0] & type_mask))){ + h->topleft_samples_available&= 0xDF5F; + h->left_samples_available&= 0x5F5F; + } + } + }else{ + if(!(left_type[0] & type_mask)){ h->topleft_samples_available&= 0xDF5F; h->left_samples_available&= 0x5F5F; } } - if(!IS_INTRA(topleft_type) && (topleft_type==0 || h->pps.constrained_intra_pred)) + if(!(topleft_type & type_mask)) h->topleft_samples_available&= 0x7FFF; - if(!IS_INTRA(topright_type) && (topright_type==0 || h->pps.constrained_intra_pred)) + if(!(topright_type & type_mask)) h->topright_samples_available&= 0xFBFF; if(IS_INTRA4x4(mb_type)){ @@ -332,7 +256,7 @@ h->intra4x4_pred_mode_cache[7+8*0]= h->intra4x4_pred_mode[top_xy][3]; }else{ int pred; - if(!top_type || (IS_INTER(top_type) && h->pps.constrained_intra_pred)) + if(!(top_type & type_mask)) pred= -1; else{ pred= 2; @@ -348,7 +272,7 @@ h->intra4x4_pred_mode_cache[3+8*2 + 2*8*i]= h->intra4x4_pred_mode[left_xy[i]][left_block[1+2*i]]; }else{ int pred; - if(!left_type[i] || (IS_INTER(left_type[i]) && h->pps.constrained_intra_pred)) + if(!(left_type[i] & type_mask)) pred= -1; else{ pred= 2; @@ -359,6 +283,7 @@ } } } + } /* @@ -369,7 +294,7 @@ 4 L . .L . . . . 5 L . .. . . . . */ -//FIXME constraint_intra_pred & partitioning & nnz (lets hope this is just a typo in the spec) +//FIXME constraint_intra_pred & partitioning & nnz (let us hope this is just a typo in the spec) if(top_type){ h->non_zero_count_cache[4+8*0]= h->non_zero_count[top_xy][4]; h->non_zero_count_cache[5+8*0]= h->non_zero_count[top_xy][5]; @@ -485,12 +410,12 @@ } } - if((for_deblock || (IS_DIRECT(mb_type) && !h->direct_spatial_mv_pred)) && !FRAME_MBAFF) + if(for_deblock || ((IS_DIRECT(mb_type) && !h->direct_spatial_mv_pred) && !FRAME_MBAFF)) continue; if(USES_LIST(topleft_type, list)){ - const int b_xy = h->mb2b_xy[topleft_xy] + 3 + 3*h->b_stride; - const int b8_xy= h->mb2b8_xy[topleft_xy] + 1 + h->b8_stride; + const int b_xy = h->mb2b_xy[topleft_xy] + 3 + h->b_stride + (topleft_partition & 2*h->b_stride); + const int b8_xy= h->mb2b8_xy[topleft_xy] + 1 + (topleft_partition & h->b8_stride); *(uint32_t*)h->mv_cache[list][scan8[0] - 1 - 1*8]= *(uint32_t*)s->current_picture.motion_val[list][b_xy]; h->ref_cache[list][scan8[0] - 1 - 1*8]= s->current_picture.ref_index[list][b8_xy]; }else{ @@ -558,7 +483,7 @@ *(uint32_t*)h->mvd_cache [list][scan8[4 ]]= *(uint32_t*)h->mvd_cache [list][scan8[12]]= 0; - if(h->slice_type == B_TYPE){ + if(h->slice_type_nos == B_TYPE){ fill_rectangle(&h->direct_cache[scan8[0]], 4, 4, 8, 0, 1); if(IS_DIRECT(top_type)){ @@ -627,8 +552,7 @@ } static inline void write_back_intra_pred_mode(H264Context *h){ - MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; h->intra4x4_pred_mode[mb_xy][0]= h->intra4x4_pred_mode_cache[7+8*1]; h->intra4x4_pred_mode[mb_xy][1]= h->intra4x4_pred_mode_cache[7+8*2]; @@ -660,8 +584,10 @@ } } - if(!(h->left_samples_available&0x8000)){ + if((h->left_samples_available&0x8888)!=0x8888){ + static const int mask[4]={0x8000,0x2000,0x80,0x20}; for(i=0; i<4; i++){ + if(!(h->left_samples_available&mask[i])){ int status= left[ h->intra4x4_pred_mode_cache[scan8[0] + 8*i] ]; if(status<0){ av_log(h->s.avctx, AV_LOG_ERROR, "left block unavailable for requested intra4x4 mode %d at %d %d\n", status, s->mb_x, s->mb_y); @@ -669,6 +595,7 @@ } else if(status){ h->intra4x4_pred_mode_cache[scan8[0] + 8*i]= status; } + } } } @@ -696,8 +623,11 @@ } } - if(!(h->left_samples_available&0x8000)){ + if((h->left_samples_available&0x8080) != 0x8080){ mode= left[ mode ]; + if(h->left_samples_available&0x8080){ //mad cow disease mode, aka MBAFF + constrained_intra_pred + mode= ALZHEIMER_DC_L0T_PRED8x8 + (!(h->left_samples_available&0x8000)) + 2*(mode == DC_128_PRED8x8); + } if(mode<0){ av_log(h->s.avctx, AV_LOG_ERROR, "left block unavailable for requested intra mode at %d %d\n", s->mb_x, s->mb_y); return -1; @@ -723,8 +653,7 @@ } static inline void write_back_non_zero_count(H264Context *h){ - MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; h->non_zero_count[mb_xy][0]= h->non_zero_count_cache[7+8*1]; h->non_zero_count[mb_xy][1]= h->non_zero_count_cache[7+8*2]; @@ -741,18 +670,10 @@ h->non_zero_count[mb_xy][12]=h->non_zero_count_cache[1+8*5]; h->non_zero_count[mb_xy][11]=h->non_zero_count_cache[2+8*5]; h->non_zero_count[mb_xy][10]=h->non_zero_count_cache[2+8*4]; - - if(FRAME_MBAFF){ - // store all luma nnzs, for deblocking - int v = 0, i; - for(i=0; i<16; i++) - v += (!!h->non_zero_count_cache[scan8[i]]) << i; - *(uint16_t*)&h->non_zero_count[mb_xy][14] = v; - } } /** - * gets the predicted number of non zero coefficients. + * gets the predicted number of non-zero coefficients. * @param n block index */ static inline int pred_non_zero_count(H264Context *h, int n){ @@ -787,7 +708,7 @@ #define SET_DIAG_MV(MV_OP, REF_OP, X4, Y4)\ const int x4 = X4, y4 = Y4;\ const int mb_type = mb_types[(x4>>2)+(y4>>2)*s->mb_stride];\ - if(!USES_LIST(mb_type,list) && !IS_8X8(mb_type))\ + if(!USES_LIST(mb_type,list))\ return LIST_NOT_USED;\ mv = s->current_picture_ptr->motion_val[list][x4 + y4*h->b_stride];\ h->mv_cache[list][scan8[0]-2][0] = mv[0];\ @@ -807,8 +728,8 @@ if(MB_FIELD && !IS_INTERLACED(mb_types[h->left_mb_xy[0]]) && i >= scan8[0]+8){ - // leftshift will turn LIST_NOT_USED into PART_NOT_AVAILABLE, but that's ok. - SET_DIAG_MV(>>1, <<1, s->mb_x*4-1, (s->mb_y&~1)*4 - 1 + ((i-scan8[0])>>3)*2); + // left shift will turn LIST_NOT_USED into PART_NOT_AVAILABLE, but that's OK. + SET_DIAG_MV(/2, <<1, s->mb_x*4-1, (s->mb_y&~1)*4 - 1 + ((i-scan8[0])>>3)*2); } } #undef SET_DIAG_MV @@ -972,99 +893,173 @@ return; } +static int get_scale_factor(H264Context * const h, int poc, int poc1, int i){ + int poc0 = h->ref_list[0][i].poc; + int td = av_clip(poc1 - poc0, -128, 127); + if(td == 0 || h->ref_list[0][i].long_ref){ + return 256; + }else{ + int tb = av_clip(poc - poc0, -128, 127); + int tx = (16384 + (FFABS(td) >> 1)) / td; + return av_clip((tb*tx + 32) >> 6, -1024, 1023); + } +} + static inline void direct_dist_scale_factor(H264Context * const h){ - const int poc = h->s.current_picture_ptr->poc; + MpegEncContext * const s = &h->s; + const int poc = h->s.current_picture_ptr->field_poc[ s->picture_structure == PICT_BOTTOM_FIELD ]; const int poc1 = h->ref_list[1][0].poc; - int i; + int i, field; + for(field=0; field<2; field++){ + const int poc = h->s.current_picture_ptr->field_poc[field]; + const int poc1 = h->ref_list[1][0].field_poc[field]; + for(i=0; i < 2*h->ref_count[0]; i++) + h->dist_scale_factor_field[field][i^field] = get_scale_factor(h, poc, poc1, i+16); + } + for(i=0; i<h->ref_count[0]; i++){ - int poc0 = h->ref_list[0][i].poc; - int td = av_clip(poc1 - poc0, -128, 127); - if(td == 0 /* FIXME || pic0 is a long-term ref */){ - h->dist_scale_factor[i] = 256; - }else{ - int tb = av_clip(poc - poc0, -128, 127); - int tx = (16384 + (FFABS(td) >> 1)) / td; - h->dist_scale_factor[i] = av_clip((tb*tx + 32) >> 6, -1024, 1023); - } + h->dist_scale_factor[i] = get_scale_factor(h, poc, poc1, i); } - if(FRAME_MBAFF){ - for(i=0; i<h->ref_count[0]; i++){ - h->dist_scale_factor_field[2*i] = - h->dist_scale_factor_field[2*i+1] = h->dist_scale_factor[i]; +} + +static void fill_colmap(H264Context *h, int map[2][16+32], int list, int field, int colfield, int mbafi){ + MpegEncContext * const s = &h->s; + Picture * const ref1 = &h->ref_list[1][0]; + int j, old_ref, rfield; + int start= mbafi ? 16 : 0; + int end = mbafi ? 16+2*h->ref_count[list] : h->ref_count[list]; + int interl= mbafi || s->picture_structure != PICT_FRAME; + + /* bogus; fills in for missing frames */ + memset(map[list], 0, sizeof(map[list])); + + for(rfield=0; rfield<2; rfield++){ + for(old_ref=0; old_ref<ref1->ref_count[colfield][list]; old_ref++){ + int poc = ref1->ref_poc[colfield][list][old_ref]; + + if (!interl) + poc |= 3; + else if( interl && (poc&3) == 3) //FIXME store all MBAFF references so this isnt needed + poc= (poc&~3) + rfield + 1; + + for(j=start; j<end; j++){ + if(4*h->ref_list[list][j].frame_num + (h->ref_list[list][j].reference&3) == poc){ + int cur_ref= mbafi ? (j-16)^field : j; + map[list][2*old_ref + (rfield^field) + 16] = cur_ref; + if(rfield == field) + map[list][old_ref] = cur_ref; + break; + } + } } } } + static inline void direct_ref_list_init(H264Context * const h){ MpegEncContext * const s = &h->s; Picture * const ref1 = &h->ref_list[1][0]; Picture * const cur = s->current_picture_ptr; - int list, i, j; - if(cur->pict_type == I_TYPE) - cur->ref_count[0] = 0; - if(cur->pict_type != B_TYPE) - cur->ref_count[1] = 0; + int list, j, field, rfield; + int sidx= (s->picture_structure&1)^1; + int ref1sidx= (ref1->reference&1)^1; + for(list=0; list<2; list++){ - cur->ref_count[list] = h->ref_count[list]; + cur->ref_count[sidx][list] = h->ref_count[list]; for(j=0; j<h->ref_count[list]; j++) - cur->ref_poc[list][j] = h->ref_list[list][j].poc; + cur->ref_poc[sidx][list][j] = 4*h->ref_list[list][j].frame_num + (h->ref_list[list][j].reference&3); } + + if(s->picture_structure == PICT_FRAME){ + memcpy(cur->ref_count[1], cur->ref_count[0], sizeof(cur->ref_count[0])); + memcpy(cur->ref_poc [1], cur->ref_poc [0], sizeof(cur->ref_poc [0])); + } + + cur->mbaff= FRAME_MBAFF; + if(cur->pict_type != B_TYPE || h->direct_spatial_mv_pred) return; + for(list=0; list<2; list++){ - for(i=0; i<ref1->ref_count[list]; i++){ - const int poc = ref1->ref_poc[list][i]; - h->map_col_to_list0[list][i] = 0; /* bogus; fills in for missing frames */ - for(j=0; j<h->ref_count[list]; j++) - if(h->ref_list[list][j].poc == poc){ - h->map_col_to_list0[list][i] = j; - break; - } - } - } - if(FRAME_MBAFF){ - for(list=0; list<2; list++){ - for(i=0; i<ref1->ref_count[list]; i++){ - j = h->map_col_to_list0[list][i]; - h->map_col_to_list0_field[list][2*i] = 2*j; - h->map_col_to_list0_field[list][2*i+1] = 2*j+1; - } - } + fill_colmap(h, h->map_col_to_list0, list, sidx, ref1sidx, 0); + for(field=0; field<2; field++) + fill_colmap(h, h->map_col_to_list0_field[field], list, field, field, 1); } } static inline void pred_direct_motion(H264Context * const h, int *mb_type){ MpegEncContext * const s = &h->s; - const int mb_xy = s->mb_x + s->mb_y*s->mb_stride; - const int b8_xy = 2*s->mb_x + 2*s->mb_y*h->b8_stride; - const int b4_xy = 4*s->mb_x + 4*s->mb_y*h->b_stride; - const int mb_type_col = h->ref_list[1][0].mb_type[mb_xy]; - const int16_t (*l1mv0)[2] = (const int16_t (*)[2]) &h->ref_list[1][0].motion_val[0][b4_xy]; - const int16_t (*l1mv1)[2] = (const int16_t (*)[2]) &h->ref_list[1][0].motion_val[1][b4_xy]; - const int8_t *l1ref0 = &h->ref_list[1][0].ref_index[0][b8_xy]; - const int8_t *l1ref1 = &h->ref_list[1][0].ref_index[1][b8_xy]; + int b8_stride = h->b8_stride; + int b4_stride = h->b_stride; + int mb_xy = h->mb_xy; + int mb_type_col[2]; + const int16_t (*l1mv0)[2], (*l1mv1)[2]; + const int8_t *l1ref0, *l1ref1; const int is_b8x8 = IS_8X8(*mb_type); unsigned int sub_mb_type; int i8, i4; #define MB_TYPE_16x16_OR_INTRA (MB_TYPE_16x16|MB_TYPE_INTRA4x4|MB_TYPE_INTRA16x16|MB_TYPE_INTRA_PCM) - if(IS_8X8(mb_type_col) && !h->sps.direct_8x8_inference_flag){ - /* FIXME save sub mb types from previous frames (or derive from MVs) - * so we know exactly what block size to use */ - sub_mb_type = MB_TYPE_8x8|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_4x4 */ - *mb_type = MB_TYPE_8x8|MB_TYPE_L0L1; - }else if(!is_b8x8 && (mb_type_col & MB_TYPE_16x16_OR_INTRA)){ - sub_mb_type = MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_8x8 */ - *mb_type = MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_16x16 */ - }else{ - sub_mb_type = MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_8x8 */ - *mb_type = MB_TYPE_8x8|MB_TYPE_L0L1; + + if(IS_INTERLACED(h->ref_list[1][0].mb_type[mb_xy])){ // AFL/AFR/FR/FL -> AFL/FL + if(!IS_INTERLACED(*mb_type)){ // AFR/FR -> AFL/FL + int cur_poc = s->current_picture_ptr->poc; + int *col_poc = h->ref_list[1]->field_poc; + int col_parity = FFABS(col_poc[0] - cur_poc) >= FFABS(col_poc[1] - cur_poc); + mb_xy= s->mb_x + ((s->mb_y&~1) + col_parity)*s->mb_stride; + b8_stride = 0; + }else if(!(s->picture_structure & h->ref_list[1][0].reference)){// FL -> FL & differ parity + int fieldoff= 2*(h->ref_list[1][0].reference)-3; + mb_xy += s->mb_stride*fieldoff; + } + goto single_col; + }else{ // AFL/AFR/FR/FL -> AFR/FR + if(IS_INTERLACED(*mb_type)){ // AFL /FL -> AFR/FR + mb_xy= s->mb_x + (s->mb_y&~1)*s->mb_stride; + mb_type_col[0] = h->ref_list[1][0].mb_type[mb_xy]; + mb_type_col[1] = h->ref_list[1][0].mb_type[mb_xy + s->mb_stride]; + b8_stride *= 3; + b4_stride *= 6; + //FIXME IS_8X8(mb_type_col[0]) && !h->sps.direct_8x8_inference_flag + if( (mb_type_col[0] & MB_TYPE_16x16_OR_INTRA) + && (mb_type_col[1] & MB_TYPE_16x16_OR_INTRA) + && !is_b8x8){ + sub_mb_type = MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_8x8 */ + *mb_type |= MB_TYPE_16x8 |MB_TYPE_L0L1|MB_TYPE_DIRECT2; /* B_16x8 */ + }else{ + sub_mb_type = MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_8x8 */ + *mb_type |= MB_TYPE_8x8|MB_TYPE_L0L1; + } + }else{ // AFR/FR -> AFR/FR +single_col: + mb_type_col[0] = + mb_type_col[1] = h->ref_list[1][0].mb_type[mb_xy]; + if(IS_8X8(mb_type_col[0]) && !h->sps.direct_8x8_inference_flag){ + /* FIXME save sub mb types from previous frames (or derive from MVs) + * so we know exactly what block size to use */ + sub_mb_type = MB_TYPE_8x8|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_4x4 */ + *mb_type |= MB_TYPE_8x8|MB_TYPE_L0L1; + }else if(!is_b8x8 && (mb_type_col[0] & MB_TYPE_16x16_OR_INTRA)){ + sub_mb_type = MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_8x8 */ + *mb_type |= MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_16x16 */ + }else{ + sub_mb_type = MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2; /* B_SUB_8x8 */ + *mb_type |= MB_TYPE_8x8|MB_TYPE_L0L1; + } + } } - if(!is_b8x8) - *mb_type |= MB_TYPE_DIRECT2; - if(MB_FIELD) - *mb_type |= MB_TYPE_INTERLACED; - tprintf(s->avctx, "mb_type = %08x, sub_mb_type = %08x, is_b8x8 = %d, mb_type_col = %08x\n", *mb_type, sub_mb_type, is_b8x8, mb_type_col); + l1mv0 = &h->ref_list[1][0].motion_val[0][h->mb2b_xy [mb_xy]]; + l1mv1 = &h->ref_list[1][0].motion_val[1][h->mb2b_xy [mb_xy]]; + l1ref0 = &h->ref_list[1][0].ref_index [0][h->mb2b8_xy[mb_xy]]; + l1ref1 = &h->ref_list[1][0].ref_index [1][h->mb2b8_xy[mb_xy]]; + if(!b8_stride){ + if(s->mb_y&1){ + l1ref0 += h->b8_stride; + l1ref1 += h->b8_stride; + l1mv0 += 2*b4_stride; + l1mv1 += 2*b4_stride; + } + } if(h->direct_spatial_mv_pred){ int ref[2]; @@ -1078,13 +1073,9 @@ int refa = h->ref_cache[list][scan8[0] - 1]; int refb = h->ref_cache[list][scan8[0] - 8]; int refc = h->ref_cache[list][scan8[0] - 8 + 4]; - if(refc == -2) + if(refc == PART_NOT_AVAILABLE) refc = h->ref_cache[list][scan8[0] - 8 - 1]; - ref[list] = refa; - if(ref[list] < 0 || (refb < ref[list] && refb >= 0)) - ref[list] = refb; - if(ref[list] < 0 || (refc < ref[list] && refc >= 0)) - ref[list] = refc; + ref[list] = FFMIN3((unsigned)refa, (unsigned)refb, (unsigned)refc); if(ref[list] < 0) ref[list] = -1; } @@ -1103,19 +1094,49 @@ } if(ref[1] < 0){ - *mb_type &= ~MB_TYPE_P0L1; - sub_mb_type &= ~MB_TYPE_P0L1; + if(!is_b8x8) + *mb_type &= ~MB_TYPE_L1; + sub_mb_type &= ~MB_TYPE_L1; }else if(ref[0] < 0){ - *mb_type &= ~MB_TYPE_P0L0; - sub_mb_type &= ~MB_TYPE_P0L0; + if(!is_b8x8) + *mb_type &= ~MB_TYPE_L0; + sub_mb_type &= ~MB_TYPE_L0; } - if(IS_16X16(*mb_type)){ + if(IS_INTERLACED(*mb_type) != IS_INTERLACED(mb_type_col[0])){ + for(i8=0; i8<4; i8++){ + int x8 = i8&1; + int y8 = i8>>1; + int xy8 = x8+y8*b8_stride; + int xy4 = 3*x8+y8*b4_stride; + int a=0, b=0; + + if(is_b8x8 && !IS_DIRECT(h->sub_mb_type[i8])) + continue; + h->sub_mb_type[i8] = sub_mb_type; + + fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, (uint8_t)ref[0], 1); + fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, (uint8_t)ref[1], 1); + if(!IS_INTRA(mb_type_col[y8]) + && ( (l1ref0[xy8] == 0 && FFABS(l1mv0[xy4][0]) <= 1 && FFABS(l1mv0[xy4][1]) <= 1) + || (l1ref0[xy8] < 0 && l1ref1[xy8] == 0 && FFABS(l1mv1[xy4][0]) <= 1 && FFABS(l1mv1[xy4][1]) <= 1))){ + if(ref[0] > 0) + a= pack16to32(mv[0][0],mv[0][1]); + if(ref[1] > 0) + b= pack16to32(mv[1][0],mv[1][1]); + }else{ + a= pack16to32(mv[0][0],mv[0][1]); + b= pack16to32(mv[1][0],mv[1][1]); + } + fill_rectangle(&h->mv_cache[0][scan8[i8*4]], 2, 2, 8, a, 4); + fill_rectangle(&h->mv_cache[1][scan8[i8*4]], 2, 2, 8, b, 4); + } + }else if(IS_16X16(*mb_type)){ int a=0, b=0; fill_rectangle(&h->ref_cache[0][scan8[0]], 4, 4, 8, (uint8_t)ref[0], 1); fill_rectangle(&h->ref_cache[1][scan8[0]], 4, 4, 8, (uint8_t)ref[1], 1); - if(!IS_INTRA(mb_type_col) + if(!IS_INTRA(mb_type_col[0]) && ( (l1ref0[0] == 0 && FFABS(l1mv0[0][0]) <= 1 && FFABS(l1mv0[0][1]) <= 1) || (l1ref0[0] < 0 && l1ref1[0] == 0 && FFABS(l1mv1[0][0]) <= 1 && FFABS(l1mv1[0][1]) <= 1 && (h->x264_build>33 || !h->x264_build)))){ @@ -1144,12 +1165,12 @@ fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, (uint8_t)ref[1], 1); /* col_zero_flag */ - if(!IS_INTRA(mb_type_col) && ( l1ref0[x8 + y8*h->b8_stride] == 0 - || (l1ref0[x8 + y8*h->b8_stride] < 0 && l1ref1[x8 + y8*h->b8_stride] == 0 + if(!IS_INTRA(mb_type_col[0]) && ( l1ref0[x8 + y8*b8_stride] == 0 + || (l1ref0[x8 + y8*b8_stride] < 0 && l1ref1[x8 + y8*b8_stride] == 0 && (h->x264_build>33 || !h->x264_build)))){ - const int16_t (*l1mv)[2]= l1ref0[x8 + y8*h->b8_stride] == 0 ? l1mv0 : l1mv1; + const int16_t (*l1mv)[2]= l1ref0[x8 + y8*b8_stride] == 0 ? l1mv0 : l1mv1; if(IS_SUB_8X8(sub_mb_type)){ - const int16_t *mv_col = l1mv[x8*3 + y8*3*h->b_stride]; + const int16_t *mv_col = l1mv[x8*3 + y8*3*b4_stride]; if(FFABS(mv_col[0]) <= 1 && FFABS(mv_col[1]) <= 1){ if(ref[0] == 0) fill_rectangle(&h->mv_cache[0][scan8[i8*4]], 2, 2, 8, 0, 4); @@ -1158,7 +1179,7 @@ } }else for(i4=0; i4<4; i4++){ - const int16_t *mv_col = l1mv[x8*2 + (i4&1) + (y8*2 + (i4>>1))*h->b_stride]; + const int16_t *mv_col = l1mv[x8*2 + (i4&1) + (y8*2 + (i4>>1))*b4_stride]; if(FFABS(mv_col[0]) <= 1 && FFABS(mv_col[1]) <= 1){ if(ref[0] == 0) *(uint32_t*)h->mv_cache[0][scan8[i8*4+i4]] = 0; @@ -1172,101 +1193,58 @@ }else{ /* direct temporal mv pred */ const int *map_col_to_list0[2] = {h->map_col_to_list0[0], h->map_col_to_list0[1]}; const int *dist_scale_factor = h->dist_scale_factor; + int ref_offset= 0; - if(FRAME_MBAFF){ - if(IS_INTERLACED(*mb_type)){ - map_col_to_list0[0] = h->map_col_to_list0_field[0]; - map_col_to_list0[1] = h->map_col_to_list0_field[1]; - dist_scale_factor = h->dist_scale_factor_field; - } - if(IS_INTERLACED(*mb_type) != IS_INTERLACED(mb_type_col)){ - /* FIXME assumes direct_8x8_inference == 1 */ - const int pair_xy = s->mb_x + (s->mb_y&~1)*s->mb_stride; - int mb_types_col[2]; - int y_shift; - - *mb_type = MB_TYPE_8x8|MB_TYPE_L0L1 - | (is_b8x8 ? 0 : MB_TYPE_DIRECT2) - | (*mb_type & MB_TYPE_INTERLACED); - sub_mb_type = MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2|MB_TYPE_16x16; - - if(IS_INTERLACED(*mb_type)){ - /* frame to field scaling */ - mb_types_col[0] = h->ref_list[1][0].mb_type[pair_xy]; - mb_types_col[1] = h->ref_list[1][0].mb_type[pair_xy+s->mb_stride]; - if(s->mb_y&1){ - l1ref0 -= 2*h->b8_stride; - l1ref1 -= 2*h->b8_stride; - l1mv0 -= 4*h->b_stride; - l1mv1 -= 4*h->b_stride; - } - y_shift = 0; - - if( (mb_types_col[0] & MB_TYPE_16x16_OR_INTRA) - && (mb_types_col[1] & MB_TYPE_16x16_OR_INTRA) - && !is_b8x8) - *mb_type |= MB_TYPE_16x8; - else - *mb_type |= MB_TYPE_8x8; - }else{ - /* field to frame scaling */ - /* col_mb_y = (mb_y&~1) + (topAbsDiffPOC < bottomAbsDiffPOC ? 0 : 1) - * but in MBAFF, top and bottom POC are equal */ - int dy = (s->mb_y&1) ? 1 : 2; - mb_types_col[0] = - mb_types_col[1] = h->ref_list[1][0].mb_type[pair_xy+s->mb_stride]; - l1ref0 += dy*h->b8_stride; - l1ref1 += dy*h->b8_stride; - l1mv0 += 2*dy*h->b_stride; - l1mv1 += 2*dy*h->b_stride; - y_shift = 2; - - if((mb_types_col[0] & (MB_TYPE_16x16_OR_INTRA|MB_TYPE_16x8)) - && !is_b8x8) - *mb_type |= MB_TYPE_16x16; - else - *mb_type |= MB_TYPE_8x8; + if(FRAME_MBAFF && IS_INTERLACED(*mb_type)){ + map_col_to_list0[0] = h->map_col_to_list0_field[s->mb_y&1][0]; + map_col_to_list0[1] = h->map_col_to_list0_field[s->mb_y&1][1]; + dist_scale_factor =h->dist_scale_factor_field[s->mb_y&1]; + } + if(h->ref_list[1][0].mbaff && IS_INTERLACED(mb_type_col[0])) + ref_offset += 16; + + if(IS_INTERLACED(*mb_type) != IS_INTERLACED(mb_type_col[0])){ + /* FIXME assumes direct_8x8_inference == 1 */ + int y_shift = 2*!IS_INTERLACED(*mb_type); + + for(i8=0; i8<4; i8++){ + const int x8 = i8&1; + const int y8 = i8>>1; + int ref0, scale; + const int16_t (*l1mv)[2]= l1mv0; + + if(is_b8x8 && !IS_DIRECT(h->sub_mb_type[i8])) + continue; + h->sub_mb_type[i8] = sub_mb_type; + + fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, 0, 1); + if(IS_INTRA(mb_type_col[y8])){ + fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, 0, 1); + fill_rectangle(&h-> mv_cache[0][scan8[i8*4]], 2, 2, 8, 0, 4); + fill_rectangle(&h-> mv_cache[1][scan8[i8*4]], 2, 2, 8, 0, 4); + continue; } - for(i8=0; i8<4; i8++){ - const int x8 = i8&1; - const int y8 = i8>>1; - int ref0, scale; - const int16_t (*l1mv)[2]= l1mv0; - - if(is_b8x8 && !IS_DIRECT(h->sub_mb_type[i8])) - continue; - h->sub_mb_type[i8] = sub_mb_type; - - fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, 0, 1); - if(IS_INTRA(mb_types_col[y8])){ - fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, 0, 1); - fill_rectangle(&h-> mv_cache[0][scan8[i8*4]], 2, 2, 8, 0, 4); - fill_rectangle(&h-> mv_cache[1][scan8[i8*4]], 2, 2, 8, 0, 4); - continue; - } - - ref0 = l1ref0[x8 + (y8*2>>y_shift)*h->b8_stride]; - if(ref0 >= 0) - ref0 = map_col_to_list0[0][ref0*2>>y_shift]; - else{ - ref0 = map_col_to_list0[1][l1ref1[x8 + (y8*2>>y_shift)*h->b8_stride]*2>>y_shift]; - l1mv= l1mv1; - } - scale = dist_scale_factor[ref0]; - fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, ref0, 1); + ref0 = l1ref0[x8 + y8*b8_stride]; + if(ref0 >= 0) + ref0 = map_col_to_list0[0][ref0 + ref_offset]; + else{ + ref0 = map_col_to_list0[1][l1ref1[x8 + y8*b8_stride] + ref_offset]; + l1mv= l1mv1; + } + scale = dist_scale_factor[ref0]; + fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, ref0, 1); - { - const int16_t *mv_col = l1mv[x8*3 + (y8*6>>y_shift)*h->b_stride]; - int my_col = (mv_col[1]<<y_shift)/2; - int mx = (scale * mv_col[0] + 128) >> 8; - int my = (scale * my_col + 128) >> 8; - fill_rectangle(&h->mv_cache[0][scan8[i8*4]], 2, 2, 8, pack16to32(mx,my), 4); - fill_rectangle(&h->mv_cache[1][scan8[i8*4]], 2, 2, 8, pack16to32(mx-mv_col[0],my-my_col), 4); - } + { + const int16_t *mv_col = l1mv[x8*3 + y8*b4_stride]; + int my_col = (mv_col[1]<<y_shift)/2; + int mx = (scale * mv_col[0] + 128) >> 8; + int my = (scale * my_col + 128) >> 8; + fill_rectangle(&h->mv_cache[0][scan8[i8*4]], 2, 2, 8, pack16to32(mx,my), 4); + fill_rectangle(&h->mv_cache[1][scan8[i8*4]], 2, 2, 8, pack16to32(mx-mv_col[0],my-my_col), 4); } - return; } + return; } /* one-to-one mv scaling */ @@ -1275,11 +1253,11 @@ int ref, mv0, mv1; fill_rectangle(&h->ref_cache[1][scan8[0]], 4, 4, 8, 0, 1); - if(IS_INTRA(mb_type_col)){ + if(IS_INTRA(mb_type_col[0])){ ref=mv0=mv1=0; }else{ - const int ref0 = l1ref0[0] >= 0 ? map_col_to_list0[0][l1ref0[0]] - : map_col_to_list0[1][l1ref1[0]]; + const int ref0 = l1ref0[0] >= 0 ? map_col_to_list0[0][l1ref0[0] + ref_offset] + : map_col_to_list0[1][l1ref1[0] + ref_offset]; const int scale = dist_scale_factor[ref0]; const int16_t *mv_col = l1ref0[0] >= 0 ? l1mv0[0] : l1mv1[0]; int mv_l0[2]; @@ -1303,32 +1281,32 @@ continue; h->sub_mb_type[i8] = sub_mb_type; fill_rectangle(&h->ref_cache[1][scan8[i8*4]], 2, 2, 8, 0, 1); - if(IS_INTRA(mb_type_col)){ + if(IS_INTRA(mb_type_col[0])){ fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, 0, 1); fill_rectangle(&h-> mv_cache[0][scan8[i8*4]], 2, 2, 8, 0, 4); fill_rectangle(&h-> mv_cache[1][scan8[i8*4]], 2, 2, 8, 0, 4); continue; } - ref0 = l1ref0[x8 + y8*h->b8_stride]; + ref0 = l1ref0[x8 + y8*b8_stride] + ref_offset; if(ref0 >= 0) ref0 = map_col_to_list0[0][ref0]; else{ - ref0 = map_col_to_list0[1][l1ref1[x8 + y8*h->b8_stride]]; + ref0 = map_col_to_list0[1][l1ref1[x8 + y8*b8_stride] + ref_offset]; l1mv= l1mv1; } scale = dist_scale_factor[ref0]; fill_rectangle(&h->ref_cache[0][scan8[i8*4]], 2, 2, 8, ref0, 1); if(IS_SUB_8X8(sub_mb_type)){ - const int16_t *mv_col = l1mv[x8*3 + y8*3*h->b_stride]; + const int16_t *mv_col = l1mv[x8*3 + y8*3*b4_stride]; int mx = (scale * mv_col[0] + 128) >> 8; int my = (scale * mv_col[1] + 128) >> 8; fill_rectangle(&h->mv_cache[0][scan8[i8*4]], 2, 2, 8, pack16to32(mx,my), 4); fill_rectangle(&h->mv_cache[1][scan8[i8*4]], 2, 2, 8, pack16to32(mx-mv_col[0],my-mv_col[1]), 4); }else for(i4=0; i4<4; i4++){ - const int16_t *mv_col = l1mv[x8*2 + (i4&1) + (y8*2 + (i4>>1))*h->b_stride]; + const int16_t *mv_col = l1mv[x8*2 + (i4&1) + (y8*2 + (i4>>1))*b4_stride]; int16_t *mv_l0 = h->mv_cache[0][scan8[i8*4+i4]]; mv_l0[0] = (scale * mv_col[0] + 128) >> 8; mv_l0[1] = (scale * mv_col[1] + 128) >> 8; @@ -1377,7 +1355,7 @@ } } - if(h->slice_type == B_TYPE && h->pps.cabac){ + if(h->slice_type_nos == B_TYPE && h->pps.cabac){ if(IS_8X8(mb_type)){ uint8_t *direct_table = &h->direct_table[b8_xy]; direct_table[1+0*h->b8_stride] = IS_DIRECT(h->sub_mb_type[1]) ? 1 : 0; @@ -1394,7 +1372,7 @@ * @param dst_length is the number of decoded bytes FIXME here or a decode rbsp tailing? * @returns decoded bytes, might be src+1 if no escapes */ -static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *consumed, int length){ +static const uint8_t *decode_nal(H264Context *h, const uint8_t *src, int *dst_length, int *consumed, int length){ int i, si, di; uint8_t *dst; int bufidx; @@ -1461,7 +1439,7 @@ * identifies the exact end of the bitstream * @return the length of the trailing, or 0 if damaged */ -static int decode_rbsp_trailing(H264Context *h, uint8_t *src){ +static int decode_rbsp_trailing(H264Context *h, const uint8_t *src){ int v= *src; int r; @@ -1475,7 +1453,7 @@ } /** - * idct tranforms the 16 dc values and dequantize them. + * IDCT transforms the 16 dc values and dequantizes them. * @param qp quantization parameter */ static void h264_luma_dc_dequant_idct_c(DCTELEM *block, int qp, int qmul){ @@ -1507,7 +1485,7 @@ const int z2= temp[4*1+i] - temp[4*3+i]; const int z3= temp[4*1+i] + temp[4*3+i]; - block[stride*0 +offset]= ((((z0 + z3)*qmul + 128 ) >> 8)); //FIXME think about merging this into decode_resdual + block[stride*0 +offset]= ((((z0 + z3)*qmul + 128 ) >> 8)); //FIXME think about merging this into decode_residual block[stride*2 +offset]= ((((z1 + z2)*qmul + 128 ) >> 8)); block[stride*8 +offset]= ((((z1 - z2)*qmul + 128 ) >> 8)); block[stride*10+offset]= ((((z0 - z3)*qmul + 128 ) >> 8)); @@ -1516,7 +1494,7 @@ #if 0 /** - * dct tranforms the 16 dc values. + * DCT transforms the 16 dc values. * @param qp quantization parameter ??? FIXME */ static void h264_luma_dc_dct_c(DCTELEM *block/*, int qp*/){ @@ -1605,7 +1583,7 @@ * gets the chroma qp. */ static inline int get_chroma_qp(H264Context *h, int t, int qscale){ - return h->pps.chroma_qp_table[t][qscale & 0xff]; + return h->pps.chroma_qp_table[t][qscale]; } //FIXME need to check that this does not overflow signed 32 bit for low qp, i am not sure, it's very close @@ -1705,7 +1683,7 @@ const int pic_width = 16*s->mb_width; const int pic_height = 16*s->mb_height >> MB_FIELD; - if(!pic->data[0]) //FIXME this is unacceptable, some senseable error concealment must be done for missing reference frames + if(!pic->data[0]) //FIXME this is unacceptable, some sensible error concealment must be done for missing reference frames return; if(mx&7) extra_width -= 3; @@ -1888,7 +1866,7 @@ qpel_mc_func (*qpix_avg)[16], h264_chroma_mc_func (*chroma_avg), h264_weight_func *weight_op, h264_biweight_func *weight_avg){ MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; const int mb_type= s->current_picture.mb_type[mb_xy]; assert(IS_INTER(mb_type)); @@ -1975,37 +1953,67 @@ if (!done) { int i; + int offset; done = 1; + chroma_dc_coeff_token_vlc.table = chroma_dc_coeff_token_vlc_table; + chroma_dc_coeff_token_vlc.table_allocated = chroma_dc_coeff_token_vlc_table_size; init_vlc(&chroma_dc_coeff_token_vlc, CHROMA_DC_COEFF_TOKEN_VLC_BITS, 4*5, &chroma_dc_coeff_token_len [0], 1, 1, - &chroma_dc_coeff_token_bits[0], 1, 1, 1); + &chroma_dc_coeff_token_bits[0], 1, 1, + INIT_VLC_USE_NEW_STATIC); + offset = 0; for(i=0; i<4; i++){ + coeff_token_vlc[i].table = coeff_token_vlc_tables+offset; + coeff_token_vlc[i].table_allocated = coeff_token_vlc_tables_size[i]; init_vlc(&coeff_token_vlc[i], COEFF_TOKEN_VLC_BITS, 4*17, &coeff_token_len [i][0], 1, 1, - &coeff_token_bits[i][0], 1, 1, 1); + &coeff_token_bits[i][0], 1, 1, + INIT_VLC_USE_NEW_STATIC); + offset += coeff_token_vlc_tables_size[i]; } + /* + * This is a one time safety check to make sure that + * the packed static coeff_token_vlc table sizes + * were initialized correctly. + */ + assert(offset == sizeof(coeff_token_vlc_tables)/(sizeof(VLC_TYPE)*2)); for(i=0; i<3; i++){ - init_vlc(&chroma_dc_total_zeros_vlc[i], CHROMA_DC_TOTAL_ZEROS_VLC_BITS, 4, + chroma_dc_total_zeros_vlc[i].table = chroma_dc_total_zeros_vlc_tables[i]; + chroma_dc_total_zeros_vlc[i].table_allocated = chroma_dc_total_zeros_vlc_tables_size; + init_vlc(&chroma_dc_total_zeros_vlc[i], + CHROMA_DC_TOTAL_ZEROS_VLC_BITS, 4, &chroma_dc_total_zeros_len [i][0], 1, 1, - &chroma_dc_total_zeros_bits[i][0], 1, 1, 1); + &chroma_dc_total_zeros_bits[i][0], 1, 1, + INIT_VLC_USE_NEW_STATIC); } for(i=0; i<15; i++){ - init_vlc(&total_zeros_vlc[i], TOTAL_ZEROS_VLC_BITS, 16, + total_zeros_vlc[i].table = total_zeros_vlc_tables[i]; + total_zeros_vlc[i].table_allocated = total_zeros_vlc_tables_size; + init_vlc(&total_zeros_vlc[i], + TOTAL_ZEROS_VLC_BITS, 16, &total_zeros_len [i][0], 1, 1, - &total_zeros_bits[i][0], 1, 1, 1); + &total_zeros_bits[i][0], 1, 1, + INIT_VLC_USE_NEW_STATIC); } for(i=0; i<6; i++){ - init_vlc(&run_vlc[i], RUN_VLC_BITS, 7, + run_vlc[i].table = run_vlc_tables[i]; + run_vlc[i].table_allocated = run_vlc_tables_size; + init_vlc(&run_vlc[i], + RUN_VLC_BITS, 7, &run_len [i][0], 1, 1, - &run_bits[i][0], 1, 1, 1); + &run_bits[i][0], 1, 1, + INIT_VLC_USE_NEW_STATIC); } + run7_vlc.table = run7_vlc_table, + run7_vlc.table_allocated = run7_vlc_table_size; init_vlc(&run7_vlc, RUN7_VLC_BITS, 16, &run_len [6][0], 1, 1, - &run_bits[6][0], 1, 1, 1); + &run_bits[6][0], 1, 1, + INIT_VLC_USE_NEW_STATIC); } } @@ -2037,7 +2045,6 @@ av_freep(&hx->top_borders[1]); av_freep(&hx->top_borders[0]); av_freep(&hx->s.obmc_scratchpad); - av_freep(&hx->s.allocated_edge_emu_buffer); } } @@ -2121,12 +2128,10 @@ CHECKED_ALLOCZ(h->slice_table_base , (big_mb_num+s->mb_stride) * sizeof(uint8_t)) CHECKED_ALLOCZ(h->cbp_table, big_mb_num * sizeof(uint16_t)) - if( h->pps.cabac ) { - CHECKED_ALLOCZ(h->chroma_pred_mode_table, big_mb_num * sizeof(uint8_t)) - CHECKED_ALLOCZ(h->mvd_table[0], 32*big_mb_num * sizeof(uint16_t)); - CHECKED_ALLOCZ(h->mvd_table[1], 32*big_mb_num * sizeof(uint16_t)); - CHECKED_ALLOCZ(h->direct_table, 32*big_mb_num * sizeof(uint8_t)); - } + CHECKED_ALLOCZ(h->chroma_pred_mode_table, big_mb_num * sizeof(uint8_t)) + CHECKED_ALLOCZ(h->mvd_table[0], 32*big_mb_num * sizeof(uint16_t)); + CHECKED_ALLOCZ(h->mvd_table[1], 32*big_mb_num * sizeof(uint16_t)); + CHECKED_ALLOCZ(h->direct_table, 32*big_mb_num * sizeof(uint8_t)); memset(h->slice_table_base, -1, (big_mb_num+s->mb_stride) * sizeof(uint8_t)); h->slice_table= h->slice_table_base + s->mb_stride*2 + 1; @@ -2179,15 +2184,9 @@ * Allocate buffers which are not shared amongst multiple threads. */ static int context_init(H264Context *h){ - MpegEncContext * const s = &h->s; - CHECKED_ALLOCZ(h->top_borders[0], h->s.mb_width * (16+8+8) * sizeof(uint8_t)) CHECKED_ALLOCZ(h->top_borders[1], h->s.mb_width * (16+8+8) * sizeof(uint8_t)) - // edge emu needs blocksize + filter length - 1 (=17x17 for halfpel / 21x21 for h264) - CHECKED_ALLOCZ(s->allocated_edge_emu_buffer, - (s->width+64)*2*21*2); //(width + edge + align)*interlaced*MBsize*tolerance - s->edge_emu_buffer= s->allocated_edge_emu_buffer + (s->width+64)*2*21; return 0; fail: return -1; // free_tables will clean up for us @@ -2226,7 +2225,11 @@ // s->decode_mb= ff_h263_decode_mb; s->quarter_sample = 1; s->low_delay= 1; - avctx->pix_fmt= PIX_FMT_YUV420P; + + if(avctx->codec_id == CODEC_ID_SVQ3) + avctx->pix_fmt= PIX_FMT_YUVJ420P; + else + avctx->pix_fmt= PIX_FMT_YUV420P; decode_init_vlc(); @@ -2239,6 +2242,8 @@ } h->thread_context[0] = h; + h->outputed_poc = INT_MIN; + h->prev_poc_msb= 1<<16; return 0; } @@ -2252,7 +2257,7 @@ /* * MPV_frame_start uses pict_type to derive key_frame. * This is incorrect for H.264; IDR markings must be used. - * Zero here; IDR markings per slice in frame or fields are OR'd in later. + * Zero here; IDR markings per slice in frame or fields are ORed in later. * See decode_nal_units(). */ s->current_picture_ptr->key_frame= 0; @@ -2281,36 +2286,83 @@ memset(h->slice_table, -1, (s->mb_height*s->mb_stride-1) * sizeof(uint8_t)); // s->decode= (s->flags&CODEC_FLAG_PSNR) || !s->encoding || s->current_picture.reference /*|| h->contains_intra*/ || 1; + + // We mark the current picture as non-reference after allocating it, so + // that if we break out due to an error it can be released automatically + // in the next MPV_frame_start(). + // SVQ3 as well as most other codecs have only last/next/current and thus + // get released even with set reference, besides SVQ3 and others do not + // mark frames as reference later "naturally". + if(s->codec_id != CODEC_ID_SVQ3) + s->current_picture_ptr->reference= 0; + + s->current_picture_ptr->field_poc[0]= + s->current_picture_ptr->field_poc[1]= INT_MAX; + assert(s->current_picture_ptr->long_ref==0); + return 0; } static inline void backup_mb_border(H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize, int simple){ MpegEncContext * const s = &h->s; int i; + int step = 1; + int offset = 1; + int uvoffset= 1; + int top_idx = 1; + int skiplast= 0; src_y -= linesize; src_cb -= uvlinesize; src_cr -= uvlinesize; + if(!simple && FRAME_MBAFF){ + if(s->mb_y&1){ + offset = MB_MBAFF ? 1 : 17; + uvoffset= MB_MBAFF ? 1 : 9; + if(!MB_MBAFF){ + *(uint64_t*)(h->top_borders[0][s->mb_x]+ 0)= *(uint64_t*)(src_y + 15*linesize); + *(uint64_t*)(h->top_borders[0][s->mb_x]+ 8)= *(uint64_t*)(src_y +8+15*linesize); + if(simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){ + *(uint64_t*)(h->top_borders[0][s->mb_x]+16)= *(uint64_t*)(src_cb+7*uvlinesize); + *(uint64_t*)(h->top_borders[0][s->mb_x]+24)= *(uint64_t*)(src_cr+7*uvlinesize); + } + } + }else{ + if(!MB_MBAFF){ + h->left_border[0]= h->top_borders[0][s->mb_x][15]; + if(simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){ + h->left_border[34 ]= h->top_borders[0][s->mb_x][16+7 ]; + h->left_border[34+18]= h->top_borders[0][s->mb_x][16+8+7]; + } + skiplast= 1; + } + offset = + uvoffset= + top_idx = MB_MBAFF ? 0 : 1; + } + step= MB_MBAFF ? 2 : 1; + } + // There are two lines saved, the line above the the top macroblock of a pair, // and the line above the bottom macroblock - h->left_border[0]= h->top_borders[0][s->mb_x][15]; - for(i=1; i<17; i++){ - h->left_border[i]= src_y[15+i* linesize]; + h->left_border[offset]= h->top_borders[top_idx][s->mb_x][15]; + for(i=1; i<17 - skiplast; i++){ + h->left_border[offset+i*step]= src_y[15+i* linesize]; } - *(uint64_t*)(h->top_borders[0][s->mb_x]+0)= *(uint64_t*)(src_y + 16*linesize); - *(uint64_t*)(h->top_borders[0][s->mb_x]+8)= *(uint64_t*)(src_y +8+16*linesize); + *(uint64_t*)(h->top_borders[top_idx][s->mb_x]+0)= *(uint64_t*)(src_y + 16*linesize); + *(uint64_t*)(h->top_borders[top_idx][s->mb_x]+8)= *(uint64_t*)(src_y +8+16*linesize); if(simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){ - h->left_border[17 ]= h->top_borders[0][s->mb_x][16+7]; - h->left_border[17+9]= h->top_borders[0][s->mb_x][24+7]; - for(i=1; i<9; i++){ - h->left_border[i+17 ]= src_cb[7+i*uvlinesize]; - h->left_border[i+17+9]= src_cr[7+i*uvlinesize]; + h->left_border[uvoffset+34 ]= h->top_borders[top_idx][s->mb_x][16+7]; + h->left_border[uvoffset+34+18]= h->top_borders[top_idx][s->mb_x][24+7]; + for(i=1; i<9 - skiplast; i++){ + h->left_border[uvoffset+34 +i*step]= src_cb[7+i*uvlinesize]; + h->left_border[uvoffset+34+18+i*step]= src_cr[7+i*uvlinesize]; } - *(uint64_t*)(h->top_borders[0][s->mb_x]+16)= *(uint64_t*)(src_cb+8*uvlinesize); - *(uint64_t*)(h->top_borders[0][s->mb_x]+24)= *(uint64_t*)(src_cr+8*uvlinesize); + *(uint64_t*)(h->top_borders[top_idx][s->mb_x]+16)= *(uint64_t*)(src_cb+8*uvlinesize); + *(uint64_t*)(h->top_borders[top_idx][s->mb_x]+24)= *(uint64_t*)(src_cr+8*uvlinesize); } } @@ -2321,14 +2373,30 @@ int deblock_left; int deblock_top; int mb_xy; + int step = 1; + int offset = 1; + int uvoffset= 1; + int top_idx = 1; + + if(!simple && FRAME_MBAFF){ + if(s->mb_y&1){ + offset = MB_MBAFF ? 1 : 17; + uvoffset= MB_MBAFF ? 1 : 9; + }else{ + offset = + uvoffset= + top_idx = MB_MBAFF ? 0 : 1; + } + step= MB_MBAFF ? 2 : 1; + } if(h->deblocking_filter == 2) { - mb_xy = s->mb_x + s->mb_y*s->mb_stride; + mb_xy = h->mb_xy; deblock_left = h->slice_table[mb_xy] == h->slice_table[mb_xy - 1]; deblock_top = h->slice_table[mb_xy] == h->slice_table[h->top_mb_xy]; } else { deblock_left = (s->mb_x > 0); - deblock_top = (s->mb_y > 0); + deblock_top = (s->mb_y > !!MB_FIELD); } src_y -= linesize + 1; @@ -2342,118 +2410,32 @@ b= t; if(deblock_left){ - for(i = !deblock_top; i<17; i++){ - XCHG(h->left_border[i ], src_y [i* linesize], temp8, xchg); + for(i = !deblock_top; i<16; i++){ + XCHG(h->left_border[offset+i*step], src_y [i* linesize], temp8, xchg); } + XCHG(h->left_border[offset+i*step], src_y [i* linesize], temp8, 1); } if(deblock_top){ - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+0), *(uint64_t*)(src_y +1), temp64, xchg); - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+8), *(uint64_t*)(src_y +9), temp64, 1); + XCHG(*(uint64_t*)(h->top_borders[top_idx][s->mb_x]+0), *(uint64_t*)(src_y +1), temp64, xchg); + XCHG(*(uint64_t*)(h->top_borders[top_idx][s->mb_x]+8), *(uint64_t*)(src_y +9), temp64, 1); if(s->mb_x+1 < s->mb_width){ - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x+1]), *(uint64_t*)(src_y +17), temp64, 1); + XCHG(*(uint64_t*)(h->top_borders[top_idx][s->mb_x+1]), *(uint64_t*)(src_y +17), temp64, 1); } } if(simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){ if(deblock_left){ - for(i = !deblock_top; i<9; i++){ - XCHG(h->left_border[i+17 ], src_cb[i*uvlinesize], temp8, xchg); - XCHG(h->left_border[i+17+9], src_cr[i*uvlinesize], temp8, xchg); + for(i = !deblock_top; i<8; i++){ + XCHG(h->left_border[uvoffset+34 +i*step], src_cb[i*uvlinesize], temp8, xchg); + XCHG(h->left_border[uvoffset+34+18+i*step], src_cr[i*uvlinesize], temp8, xchg); } + XCHG(h->left_border[uvoffset+34 +i*step], src_cb[i*uvlinesize], temp8, 1); + XCHG(h->left_border[uvoffset+34+18+i*step], src_cr[i*uvlinesize], temp8, 1); } if(deblock_top){ - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+16), *(uint64_t*)(src_cb+1), temp64, 1); - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+24), *(uint64_t*)(src_cr+1), temp64, 1); - } - } -} - -static inline void backup_pair_border(H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize){ - MpegEncContext * const s = &h->s; - int i; - - src_y -= 2 * linesize; - src_cb -= 2 * uvlinesize; - src_cr -= 2 * uvlinesize; - - // There are two lines saved, the line above the the top macroblock of a pair, - // and the line above the bottom macroblock - h->left_border[0]= h->top_borders[0][s->mb_x][15]; - h->left_border[1]= h->top_borders[1][s->mb_x][15]; - for(i=2; i<34; i++){ - h->left_border[i]= src_y[15+i* linesize]; - } - - *(uint64_t*)(h->top_borders[0][s->mb_x]+0)= *(uint64_t*)(src_y + 32*linesize); - *(uint64_t*)(h->top_borders[0][s->mb_x]+8)= *(uint64_t*)(src_y +8+32*linesize); - *(uint64_t*)(h->top_borders[1][s->mb_x]+0)= *(uint64_t*)(src_y + 33*linesize); - *(uint64_t*)(h->top_borders[1][s->mb_x]+8)= *(uint64_t*)(src_y +8+33*linesize); - - if(!ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){ - h->left_border[34 ]= h->top_borders[0][s->mb_x][16+7]; - h->left_border[34+ 1]= h->top_borders[1][s->mb_x][16+7]; - h->left_border[34+18 ]= h->top_borders[0][s->mb_x][24+7]; - h->left_border[34+18+1]= h->top_borders[1][s->mb_x][24+7]; - for(i=2; i<18; i++){ - h->left_border[i+34 ]= src_cb[7+i*uvlinesize]; - h->left_border[i+34+18]= src_cr[7+i*uvlinesize]; - } - *(uint64_t*)(h->top_borders[0][s->mb_x]+16)= *(uint64_t*)(src_cb+16*uvlinesize); - *(uint64_t*)(h->top_borders[0][s->mb_x]+24)= *(uint64_t*)(src_cr+16*uvlinesize); - *(uint64_t*)(h->top_borders[1][s->mb_x]+16)= *(uint64_t*)(src_cb+17*uvlinesize); - *(uint64_t*)(h->top_borders[1][s->mb_x]+24)= *(uint64_t*)(src_cr+17*uvlinesize); - } -} - -static inline void xchg_pair_border(H264Context *h, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, int linesize, int uvlinesize, int xchg){ - MpegEncContext * const s = &h->s; - int temp8, i; - uint64_t temp64; - int deblock_left = (s->mb_x > 0); - int deblock_top = (s->mb_y > 1); - - tprintf(s->avctx, "xchg_pair_border: src_y:%p src_cb:%p src_cr:%p ls:%d uvls:%d\n", src_y, src_cb, src_cr, linesize, uvlinesize); - - src_y -= 2 * linesize + 1; - src_cb -= 2 * uvlinesize + 1; - src_cr -= 2 * uvlinesize + 1; - -#define XCHG(a,b,t,xchg)\ -t= a;\ -if(xchg)\ - a= b;\ -b= t; - - if(deblock_left){ - for(i = (!deblock_top)<<1; i<34; i++){ - XCHG(h->left_border[i ], src_y [i* linesize], temp8, xchg); - } - } - - if(deblock_top){ - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+0), *(uint64_t*)(src_y +1), temp64, xchg); - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+8), *(uint64_t*)(src_y +9), temp64, 1); - XCHG(*(uint64_t*)(h->top_borders[1][s->mb_x]+0), *(uint64_t*)(src_y +1 +linesize), temp64, xchg); - XCHG(*(uint64_t*)(h->top_borders[1][s->mb_x]+8), *(uint64_t*)(src_y +9 +linesize), temp64, 1); - if(s->mb_x+1 < s->mb_width){ - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x+1]), *(uint64_t*)(src_y +17), temp64, 1); - XCHG(*(uint64_t*)(h->top_borders[1][s->mb_x+1]), *(uint64_t*)(src_y +17 +linesize), temp64, 1); - } - } - - if(!ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){ - if(deblock_left){ - for(i = (!deblock_top) << 1; i<18; i++){ - XCHG(h->left_border[i+34 ], src_cb[i*uvlinesize], temp8, xchg); - XCHG(h->left_border[i+34+18], src_cr[i*uvlinesize], temp8, xchg); - } - } - if(deblock_top){ - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+16), *(uint64_t*)(src_cb+1), temp64, 1); - XCHG(*(uint64_t*)(h->top_borders[0][s->mb_x]+24), *(uint64_t*)(src_cr+1), temp64, 1); - XCHG(*(uint64_t*)(h->top_borders[1][s->mb_x]+16), *(uint64_t*)(src_cb+1 +uvlinesize), temp64, 1); - XCHG(*(uint64_t*)(h->top_borders[1][s->mb_x]+24), *(uint64_t*)(src_cr+1 +uvlinesize), temp64, 1); + XCHG(*(uint64_t*)(h->top_borders[top_idx][s->mb_x]+16), *(uint64_t*)(src_cb+1), temp64, 1); + XCHG(*(uint64_t*)(h->top_borders[top_idx][s->mb_x]+24), *(uint64_t*)(src_cr+1), temp64, 1); } } } @@ -2462,13 +2444,12 @@ MpegEncContext * const s = &h->s; const int mb_x= s->mb_x; const int mb_y= s->mb_y; - const int mb_xy= mb_x + mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; const int mb_type= s->current_picture.mb_type[mb_xy]; uint8_t *dest_y, *dest_cb, *dest_cr; int linesize, uvlinesize /*dct_offset*/; int i; int *block_offset = &h->block_offset[0]; - const unsigned int bottom = mb_y & 1; const int transform_bypass = (s->qscale == 0 && h->sps.transform_bypass), is_h264 = (simple || s->codec_id == CODEC_ID_H264); void (*idct_add)(uint8_t *dst, DCTELEM *block, int stride); void (*idct_dc_add)(uint8_t *dst, DCTELEM *block, int stride); @@ -2484,7 +2465,7 @@ linesize = h->mb_linesize = s->linesize * 2; uvlinesize = h->mb_uvlinesize = s->uvlinesize * 2; block_offset = &h->block_offset[24]; - if(mb_y&1){ //FIXME move out of this func? + if(mb_y&1){ //FIXME move out of this function? dest_y -= s->linesize*15; dest_cb-= s->uvlinesize*7; dest_cr-= s->uvlinesize*7; @@ -2496,13 +2477,12 @@ continue; if(IS_16X16(mb_type)){ int8_t *ref = &h->ref_cache[list][scan8[0]]; - fill_rectangle(ref, 4, 4, 8, 16+*ref^(s->mb_y&1), 1); + fill_rectangle(ref, 4, 4, 8, (16+*ref)^(s->mb_y&1), 1); }else{ for(i=0; i<16; i+=4){ - //FIXME can refs be smaller than 8x8 when !direct_8x8_inference ? int ref = h->ref_cache[list][scan8[i]]; if(ref >= 0) - fill_rectangle(&h->ref_cache[list][scan8[i]], 2, 2, 8, 16+ref^(s->mb_y&1), 1); + fill_rectangle(&h->ref_cache[list][scan8[i]], 2, 2, 8, (16+ref)^(s->mb_y&1), 1); } } } @@ -2524,44 +2504,17 @@ idct_add = s->dsp.h264_idct_add; } - if(!simple && FRAME_MBAFF && h->deblocking_filter && IS_INTRA(mb_type) - && (!bottom || !IS_INTRA(s->current_picture.mb_type[mb_xy-s->mb_stride]))){ - int mbt_y = mb_y&~1; - uint8_t *top_y = s->current_picture.data[0] + (mbt_y * 16* s->linesize ) + mb_x * 16; - uint8_t *top_cb = s->current_picture.data[1] + (mbt_y * 8 * s->uvlinesize) + mb_x * 8; - uint8_t *top_cr = s->current_picture.data[2] + (mbt_y * 8 * s->uvlinesize) + mb_x * 8; - xchg_pair_border(h, top_y, top_cb, top_cr, s->linesize, s->uvlinesize, 1); - } - if (!simple && IS_INTRA_PCM(mb_type)) { - unsigned int x, y; - - // The pixels are stored in h->mb array in the same order as levels, - // copy them in output in the correct order. - for(i=0; i<16; i++) { - for (y=0; y<4; y++) { - for (x=0; x<4; x++) { - *(dest_y + block_offset[i] + y*linesize + x) = h->mb[i*16+y*4+x]; - } - } + for (i=0; i<16; i++) { + memcpy(dest_y + i* linesize, h->mb + i*8, 16); } - for(i=16; i<16+4; i++) { - for (y=0; y<4; y++) { - for (x=0; x<4; x++) { - *(dest_cb + block_offset[i] + y*uvlinesize + x) = h->mb[i*16+y*4+x]; - } - } - } - for(i=20; i<20+4; i++) { - for (y=0; y<4; y++) { - for (x=0; x<4; x++) { - *(dest_cr + block_offset[i] + y*uvlinesize + x) = h->mb[i*16+y*4+x]; - } - } + for (i=0; i<8; i++) { + memcpy(dest_cb+ i*uvlinesize, h->mb + 128 + i*4, 8); + memcpy(dest_cr+ i*uvlinesize, h->mb + 160 + i*4, 8); } } else { if(IS_INTRA(mb_type)){ - if(h->deblocking_filter && (simple || !FRAME_MBAFF)) + if(h->deblocking_filter) xchg_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, 1, simple); if(simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){ @@ -2624,7 +2577,7 @@ }else svq3_luma_dc_dequant_idct_c(h->mb, s->qscale); } - if(h->deblocking_filter && (simple || !FRAME_MBAFF)) + if(h->deblocking_filter) xchg_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, 0, simple); }else if(is_h264){ hl_motion(h, dest_y, dest_cb, dest_cr, @@ -2693,42 +2646,13 @@ } } if(h->deblocking_filter) { + backup_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, simple); + fill_caches(h, mb_type, 1); //FIXME don't fill stuff which isn't used by filter_mb + h->chroma_qp[0] = get_chroma_qp(h, 0, s->current_picture.qscale_table[mb_xy]); + h->chroma_qp[1] = get_chroma_qp(h, 1, s->current_picture.qscale_table[mb_xy]); if (!simple && FRAME_MBAFF) { - //FIXME try deblocking one mb at a time? - // the reduction in load/storing mvs and such might outweigh the extra backup/xchg_border - const int mb_y = s->mb_y - 1; - uint8_t *pair_dest_y, *pair_dest_cb, *pair_dest_cr; - const int mb_xy= mb_x + mb_y*s->mb_stride; - const int mb_type_top = s->current_picture.mb_type[mb_xy]; - const int mb_type_bottom= s->current_picture.mb_type[mb_xy+s->mb_stride]; - if (!bottom) return; - pair_dest_y = s->current_picture.data[0] + (mb_y * 16* s->linesize ) + mb_x * 16; - pair_dest_cb = s->current_picture.data[1] + (mb_y * 8 * s->uvlinesize) + mb_x * 8; - pair_dest_cr = s->current_picture.data[2] + (mb_y * 8 * s->uvlinesize) + mb_x * 8; - - if(IS_INTRA(mb_type_top | mb_type_bottom)) - xchg_pair_border(h, pair_dest_y, pair_dest_cb, pair_dest_cr, s->linesize, s->uvlinesize, 0); - - backup_pair_border(h, pair_dest_y, pair_dest_cb, pair_dest_cr, s->linesize, s->uvlinesize); - // deblock a pair - // top - s->mb_y--; - tprintf(h->s.avctx, "call mbaff filter_mb mb_x:%d mb_y:%d pair_dest_y = %p, dest_y = %p\n", mb_x, mb_y, pair_dest_y, dest_y); - fill_caches(h, mb_type_top, 1); //FIXME don't fill stuff which isn't used by filter_mb - h->chroma_qp[0] = get_chroma_qp(h, 0, s->current_picture.qscale_table[mb_xy]); - h->chroma_qp[1] = get_chroma_qp(h, 1, s->current_picture.qscale_table[mb_xy]); - filter_mb(h, mb_x, mb_y, pair_dest_y, pair_dest_cb, pair_dest_cr, linesize, uvlinesize); - // bottom - s->mb_y++; - tprintf(h->s.avctx, "call mbaff filter_mb\n"); - fill_caches(h, mb_type_bottom, 1); //FIXME don't fill stuff which isn't used by filter_mb - h->chroma_qp[0] = get_chroma_qp(h, 0, s->current_picture.qscale_table[mb_xy+s->mb_stride]); - h->chroma_qp[1] = get_chroma_qp(h, 1, s->current_picture.qscale_table[mb_xy+s->mb_stride]); - filter_mb(h, mb_x, mb_y+1, dest_y, dest_cb, dest_cr, linesize, uvlinesize); + filter_mb (h, mb_x, mb_y, dest_y, dest_cb, dest_cr, linesize, uvlinesize); } else { - tprintf(h->s.avctx, "call filter_mb\n"); - backup_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, simple); - fill_caches(h, mb_type, 1); //FIXME don't fill stuff which isn't used by filter_mb filter_mb_fast(h, mb_x, mb_y, dest_y, dest_cb, dest_cr, linesize, uvlinesize); } } @@ -2750,13 +2674,12 @@ static void hl_decode_mb(H264Context *h){ MpegEncContext * const s = &h->s; - const int mb_x= s->mb_x; - const int mb_y= s->mb_y; - const int mb_xy= mb_x + mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; const int mb_type= s->current_picture.mb_type[mb_xy]; - int is_complex = FRAME_MBAFF || MB_FIELD || IS_INTRA_PCM(mb_type) || s->codec_id != CODEC_ID_H264 || (ENABLE_GRAY && (s->flags&CODEC_FLAG_GRAY)) || s->encoding; + int is_complex = FRAME_MBAFF || MB_FIELD || IS_INTRA_PCM(mb_type) || s->codec_id != CODEC_ID_H264 || + (ENABLE_GRAY && (s->flags&CODEC_FLAG_GRAY)) || (ENABLE_H264_ENCODER && s->encoding) || ENABLE_SMALL; - if(!s->decode) + if(ENABLE_H264_ENCODER && !s->decode) return; if (is_complex) @@ -2772,6 +2695,7 @@ pic->reference = parity; pic->linesize[i] *= 2; } + pic->poc= pic->field_poc[parity == PICT_BOTTOM_FIELD]; } static int split_field_copy(Picture *dest, Picture *src, @@ -2780,87 +2704,57 @@ if (match) { *dest = *src; - pic_as_field(dest, parity); - dest->pic_id *= 2; - dest->pic_id += id_add; + if(parity != PICT_FRAME){ + pic_as_field(dest, parity); + dest->pic_id *= 2; + dest->pic_id += id_add; + } } return match; } -/** - * Split one reference list into field parts, interleaving by parity - * as per H.264 spec section 8.2.4.2.5. Output fields have their data pointers - * set to look at the actual start of data for that field. - * - * @param dest output list - * @param dest_len maximum number of fields to put in dest - * @param src the source reference list containing fields and/or field pairs - * (aka short_ref/long_ref, or - * refFrameListXShortTerm/refFrameListLongTerm in spec-speak) - * @param src_len number of Picture's in source (pairs and unmatched fields) - * @param parity the parity of the picture being decoded/needing - * these ref pics (PICT_{TOP,BOTTOM}_FIELD) - * @return number of fields placed in dest - */ -static int split_field_half_ref_list(Picture *dest, int dest_len, - Picture *src, int src_len, int parity){ - int same_parity = 1; - int same_i = 0; - int opp_i = 0; - int out_i; - int field_output; - - for (out_i = 0; out_i < dest_len; out_i += field_output) { - if (same_parity && same_i < src_len) { - field_output = split_field_copy(dest + out_i, src + same_i, - parity, 1); - same_parity = !field_output; - same_i++; - - } else if (opp_i < src_len) { - field_output = split_field_copy(dest + out_i, src + opp_i, - PICT_FRAME - parity, 0); - same_parity = field_output; - opp_i++; +static int build_def_list(Picture *def, Picture **in, int len, int is_long, int sel){ + int i[2]={0}; + int index=0; - } else { - break; + while(i[0]<len || i[1]<len){ + while(i[0]<len && !(in[ i[0] ] && (in[ i[0] ]->reference & sel))) + i[0]++; + while(i[1]<len && !(in[ i[1] ] && (in[ i[1] ]->reference & (sel^3)))) + i[1]++; + if(i[0] < len){ + in[ i[0] ]->pic_id= is_long ? i[0] : in[ i[0] ]->frame_num; + split_field_copy(&def[index++], in[ i[0]++ ], sel , 1); + } + if(i[1] < len){ + in[ i[1] ]->pic_id= is_long ? i[1] : in[ i[1] ]->frame_num; + split_field_copy(&def[index++], in[ i[1]++ ], sel^3, 0); } } - return out_i; + return index; } -/** - * Split the reference frame list into a reference field list. - * This implements H.264 spec 8.2.4.2.5 for a combined input list. - * The input list contains both reference field pairs and - * unmatched reference fields; it is ordered as spec describes - * RefPicListX for frames in 8.2.4.2.1 and 8.2.4.2.3, except that - * unmatched field pairs are also present. Conceptually this is equivalent - * to concatenation of refFrameListXShortTerm with refFrameListLongTerm. - * - * @param dest output reference list where ordered fields are to be placed - * @param dest_len max number of fields to place at dest - * @param src source reference list, as described above - * @param src_len number of pictures (pairs and unmatched fields) in src - * @param parity parity of field being currently decoded - * (one of PICT_{TOP,BOTTOM}_FIELD) - * @param long_i index into src array that holds first long reference picture, - * or src_len if no long refs present. - */ -static int split_field_ref_list(Picture *dest, int dest_len, - Picture *src, int src_len, - int parity, int long_i){ - - int i = split_field_half_ref_list(dest, dest_len, src, long_i, parity); - dest += i; - dest_len -= i; - - i += split_field_half_ref_list(dest, dest_len, src + long_i, - src_len - long_i, parity); - return i; +static int add_sorted(Picture **sorted, Picture **src, int len, int limit, int dir){ + int i, best_poc; + int out_i= 0; + + for(;;){ + best_poc= dir ? INT_MIN : INT_MAX; + + for(i=0; i<len; i++){ + const int poc= src[i]->poc; + if(((poc > limit) ^ dir) && ((poc < best_poc) ^ dir)){ + best_poc= poc; + sorted[out_i]= src[i]; + } + } + if(best_poc == (dir ? INT_MIN : INT_MAX)) + break; + limit= sorted[out_i++]->poc - dir; + } + return out_i; } /** @@ -2868,149 +2762,50 @@ */ static int fill_default_ref_list(H264Context *h){ MpegEncContext * const s = &h->s; - int i; - int smallest_poc_greater_than_current = -1; - int structure_sel; - Picture sorted_short_ref[32]; - Picture field_entry_list[2][32]; - Picture *frame_list[2]; - - if (FIELD_PICTURE) { - structure_sel = PICT_FRAME; - frame_list[0] = field_entry_list[0]; - frame_list[1] = field_entry_list[1]; - } else { - structure_sel = 0; - frame_list[0] = h->default_ref_list[0]; - frame_list[1] = h->default_ref_list[1]; - } - - if(h->slice_type==B_TYPE){ - int list; - int len[2]; - int short_len[2]; - int out_i; - int limit= INT_MIN; + int i, len; - /* sort frame according to poc in B slice */ - for(out_i=0; out_i<h->short_ref_count; out_i++){ - int best_i=INT_MIN; - int best_poc=INT_MAX; - - for(i=0; i<h->short_ref_count; i++){ - const int poc= h->short_ref[i]->poc; - if(poc > limit && poc < best_poc){ - best_poc= poc; - best_i= i; - } - } + if(h->slice_type_nos==B_TYPE){ + Picture *sorted[32]; + int cur_poc, list; + int lens[2]; - assert(best_i != INT_MIN); - - limit= best_poc; - sorted_short_ref[out_i]= *h->short_ref[best_i]; - tprintf(h->s.avctx, "sorted poc: %d->%d poc:%d fn:%d\n", best_i, out_i, sorted_short_ref[out_i].poc, sorted_short_ref[out_i].frame_num); - if (-1 == smallest_poc_greater_than_current) { - if (h->short_ref[best_i]->poc >= s->current_picture_ptr->poc) { - smallest_poc_greater_than_current = out_i; - } - } - } - - tprintf(h->s.avctx, "current poc: %d, smallest_poc_greater_than_current: %d\n", s->current_picture_ptr->poc, smallest_poc_greater_than_current); - - // find the largest poc - for(list=0; list<2; list++){ - int index = 0; - int j= -99; - int step= list ? -1 : 1; - - for(i=0; i<h->short_ref_count && index < h->ref_count[list]; i++, j+=step) { - int sel; - while(j<0 || j>= h->short_ref_count){ - if(j != -99 && step == (list ? -1 : 1)) - return -1; - step = -step; - j= smallest_poc_greater_than_current + (step>>1); - } - sel = sorted_short_ref[j].reference | structure_sel; - if(sel != PICT_FRAME) continue; - frame_list[list][index ]= sorted_short_ref[j]; - frame_list[list][index++].pic_id= sorted_short_ref[j].frame_num; - } - short_len[list] = index; - - for(i = 0; i < 16 && index < h->ref_count[ list ]; i++){ - int sel; - if(h->long_ref[i] == NULL) continue; - sel = h->long_ref[i]->reference | structure_sel; - if(sel != PICT_FRAME) continue; - - frame_list[ list ][index ]= *h->long_ref[i]; - frame_list[ list ][index++].pic_id= i;; - } - len[list] = index; - - if(list && (smallest_poc_greater_than_current<=0 || smallest_poc_greater_than_current>=h->short_ref_count) && (1 < index)){ - // swap the two first elements of L1 when - // L0 and L1 are identical - Picture temp= frame_list[1][0]; - frame_list[1][0] = frame_list[1][1]; - frame_list[1][1] = temp; - } - - } - - for(list=0; list<2; list++){ - if (FIELD_PICTURE) - len[list] = split_field_ref_list(h->default_ref_list[list], - h->ref_count[list], - frame_list[list], - len[list], - s->picture_structure, - short_len[list]); + if(FIELD_PICTURE) + cur_poc= s->current_picture_ptr->field_poc[ s->picture_structure == PICT_BOTTOM_FIELD ]; + else + cur_poc= s->current_picture_ptr->poc; - if(len[list] < h->ref_count[ list ]) - memset(&h->default_ref_list[list][len[list]], 0, sizeof(Picture)*(h->ref_count[ list ] - len[list])); + for(list= 0; list<2; list++){ + len= add_sorted(sorted , h->short_ref, h->short_ref_count, cur_poc, 1^list); + len+=add_sorted(sorted+len, h->short_ref, h->short_ref_count, cur_poc, 0^list); + assert(len<=32); + len= build_def_list(h->default_ref_list[list] , sorted , len, 0, s->picture_structure); + len+=build_def_list(h->default_ref_list[list]+len, h->long_ref, 16 , 1, s->picture_structure); + assert(len<=32); + + if(len < h->ref_count[list]) + memset(&h->default_ref_list[list][len], 0, sizeof(Picture)*(h->ref_count[list] - len)); + lens[list]= len; + } + + if(lens[0] == lens[1] && lens[1] > 1){ + for(i=0; h->default_ref_list[0][i].data[0] == h->default_ref_list[1][i].data[0] && i<lens[0]; i++); + if(i == lens[0]) + FFSWAP(Picture, h->default_ref_list[1][0], h->default_ref_list[1][1]); } - - }else{ - int index=0; - int short_len; - for(i=0; i<h->short_ref_count; i++){ - int sel; - sel = h->short_ref[i]->reference | structure_sel; - if(sel != PICT_FRAME) continue; - frame_list[0][index ]= *h->short_ref[i]; - frame_list[0][index++].pic_id= h->short_ref[i]->frame_num; - } - short_len = index; - for(i = 0; i < 16; i++){ - int sel; - if(h->long_ref[i] == NULL) continue; - sel = h->long_ref[i]->reference | structure_sel; - if(sel != PICT_FRAME) continue; - frame_list[0][index ]= *h->long_ref[i]; - frame_list[0][index++].pic_id= i;; - } - - if (FIELD_PICTURE) - index = split_field_ref_list(h->default_ref_list[0], - h->ref_count[0], frame_list[0], - index, s->picture_structure, - short_len); - - if(index < h->ref_count[0]) - memset(&h->default_ref_list[0][index], 0, sizeof(Picture)*(h->ref_count[0] - index)); + len = build_def_list(h->default_ref_list[0] , h->short_ref, h->short_ref_count, 0, s->picture_structure); + len+= build_def_list(h->default_ref_list[0]+len, h-> long_ref, 16 , 1, s->picture_structure); + assert(len <= 32); + if(len < h->ref_count[0]) + memset(&h->default_ref_list[0][len], 0, sizeof(Picture)*(h->ref_count[0] - len)); } #ifdef TRACE for (i=0; i<h->ref_count[0]; i++) { tprintf(h->s.avctx, "List0: %s fn:%d 0x%p\n", (h->default_ref_list[0][i].long_ref ? "LT" : "ST"), h->default_ref_list[0][i].pic_id, h->default_ref_list[0][i].data[0]); } - if(h->slice_type==B_TYPE){ + if(h->slice_type_nos==B_TYPE){ for (i=0; i<h->ref_count[1]; i++) { - tprintf(h->s.avctx, "List1: %s fn:%d 0x%p\n", (h->default_ref_list[1][i].long_ref ? "LT" : "ST"), h->default_ref_list[1][i].pic_id, h->default_ref_list[0][i].data[0]); + tprintf(h->s.avctx, "List1: %s fn:%d 0x%p\n", (h->default_ref_list[1][i].long_ref ? "LT" : "ST"), h->default_ref_list[1][i].pic_id, h->default_ref_list[1][i].data[0]); } } #endif @@ -3050,7 +2845,6 @@ print_short_term(h); print_long_term(h); - if(h->slice_type==I_TYPE || h->slice_type==SI_TYPE) return 0; //FIXME move before func for(list=0; list<h->list_count; list++){ memcpy(h->ref_list[list], h->default_ref_list[list], sizeof(Picture)*h->ref_count[list]); @@ -3092,10 +2886,10 @@ ref = h->short_ref[i]; assert(ref->reference); assert(!ref->long_ref); - if(ref->data[0] != NULL && + if( ref->frame_num == frame_num && - (ref->reference & pic_structure) && - ref->long_ref == 0) // ignore non existing pictures by testing data[0] pointer + (ref->reference & pic_structure) + ) break; } if(i>=0) @@ -3146,14 +2940,13 @@ } for(list=0; list<h->list_count; list++){ for(index= 0; index < h->ref_count[list]; index++){ - if(!h->ref_list[list][index].data[0]) - h->ref_list[list][index]= s->current_picture; + if(!h->ref_list[list][index].data[0]){ + av_log(h->s.avctx, AV_LOG_ERROR, "Missing reference picture\n"); + h->ref_list[list][index]= s->current_picture; //FIXME this is not a sensible solution + } } } - if(h->slice_type==B_TYPE && !h->direct_spatial_mv_pred) - direct_dist_scale_factor(h); - direct_ref_list_init(h); return 0; } @@ -3167,10 +2960,12 @@ for(j=0; j<3; j++) field[0].linesize[j] <<= 1; field[0].reference = PICT_TOP_FIELD; + field[0].poc= field[0].field_poc[0]; field[1] = field[0]; for(j=0; j<3; j++) field[1].data[j] += frame->linesize[j]; field[1].reference = PICT_BOTTOM_FIELD; + field[1].poc= field[1].field_poc[1]; h->luma_weight[list][16+2*i] = h->luma_weight[list][16+2*i+1] = h->luma_weight[list][i]; h->luma_offset[list][16+2*i] = h->luma_offset[list][16+2*i+1] = h->luma_offset[list][i]; @@ -3216,25 +3011,27 @@ h->luma_offset[list][i]= 0; } - chroma_weight_flag= get_bits1(&s->gb); - if(chroma_weight_flag){ - int j; - for(j=0; j<2; j++){ - h->chroma_weight[list][i][j]= get_se_golomb(&s->gb); - h->chroma_offset[list][i][j]= get_se_golomb(&s->gb); - if( h->chroma_weight[list][i][j] != chroma_def - || h->chroma_offset[list][i][j] != 0) - h->use_weight_chroma= 1; - } - }else{ - int j; - for(j=0; j<2; j++){ - h->chroma_weight[list][i][j]= chroma_def; - h->chroma_offset[list][i][j]= 0; + if(CHROMA){ + chroma_weight_flag= get_bits1(&s->gb); + if(chroma_weight_flag){ + int j; + for(j=0; j<2; j++){ + h->chroma_weight[list][i][j]= get_se_golomb(&s->gb); + h->chroma_offset[list][i][j]= get_se_golomb(&s->gb); + if( h->chroma_weight[list][i][j] != chroma_def + || h->chroma_offset[list][i][j] != 0) + h->use_weight_chroma= 1; + } + }else{ + int j; + for(j=0; j<2; j++){ + h->chroma_weight[list][i][j]= chroma_def; + h->chroma_offset[list][i][j]= 0; + } } } } - if(h->slice_type != B_TYPE) break; + if(h->slice_type_nos != B_TYPE) break; } h->use_weight= h->use_weight || h->use_weight_chroma; return 0; @@ -3292,15 +3089,11 @@ if (pic->reference &= refmask) { return 0; } else { - if(pic == h->delayed_output_pic) - pic->reference=DELAYED_PIC_REF; - else{ - for(i = 0; h->delayed_pic[i]; i++) - if(pic == h->delayed_pic[i]){ - pic->reference=DELAYED_PIC_REF; - break; - } - } + for(i = 0; h->delayed_pic[i]; i++) + if(pic == h->delayed_pic[i]){ + pic->reference=DELAYED_PIC_REF; + break; + } return 1; } } @@ -3312,32 +3105,31 @@ int i; for(i=0; i<16; i++){ - if (h->long_ref[i] != NULL) { - unreference_pic(h, h->long_ref[i], 0); - h->long_ref[i]= NULL; - } + remove_long(h, i, 0); } - h->long_ref_count=0; + assert(h->long_ref_count==0); for(i=0; i<h->short_ref_count; i++){ unreference_pic(h, h->short_ref[i], 0); h->short_ref[i]= NULL; } h->short_ref_count=0; + h->prev_frame_num= 0; + h->prev_frame_num_offset= 0; + h->prev_poc_msb= + h->prev_poc_lsb= 0; } /* forget old pics after a seek */ static void flush_dpb(AVCodecContext *avctx){ H264Context *h= avctx->priv_data; int i; - for(i=0; i<16; i++) { + for(i=0; i<MAX_DELAYED_PIC_COUNT; i++) { if(h->delayed_pic[i]) h->delayed_pic[i]->reference= 0; h->delayed_pic[i]= NULL; } - if(h->delayed_output_pic) - h->delayed_output_pic->reference= 0; - h->delayed_output_pic= NULL; + h->outputed_poc= INT_MIN; idr(h); if(h->s.current_picture_ptr) h->s.current_picture_ptr->reference= 0; @@ -3376,7 +3168,7 @@ * @param i index into h->short_ref of picture to remove. */ static void remove_short_at_index(H264Context *h, int i){ - assert(i > 0 && i < h->short_ref_count); + assert(i >= 0 && i < h->short_ref_count); h->short_ref[i]= NULL; if (--h->short_ref_count) memmove(&h->short_ref[i], &h->short_ref[i+1], (h->short_ref_count - i)*sizeof(Picture*)); @@ -3386,7 +3178,7 @@ * * @return the removed picture or NULL if an error occurs */ -static Picture * remove_short(H264Context *h, int frame_num){ +static Picture * remove_short(H264Context *h, int frame_num, int ref_mask){ MpegEncContext * const s = &h->s; Picture *pic; int i; @@ -3395,33 +3187,31 @@ av_log(h->s.avctx, AV_LOG_DEBUG, "remove short %d count %d\n", frame_num, h->short_ref_count); pic = find_short(h, frame_num, &i); - if (pic) + if (pic){ + if(unreference_pic(h, pic, ref_mask)) remove_short_at_index(h, i); + } return pic; } /** * Remove a picture from the long term reference list by its index in - * that list. This does no checking on the provided index; it is assumed - * to be valid. The removed entry is set to NULL. Other entries are unaffected. - * @param i index into h->long_ref of picture to remove. - */ -static void remove_long_at_index(H264Context *h, int i){ - h->long_ref[i]= NULL; - h->long_ref_count--; -} - -/** - * + * that list. * @return the removed picture or NULL if an error occurs */ -static Picture * remove_long(H264Context *h, int i){ +static Picture * remove_long(H264Context *h, int i, int ref_mask){ Picture *pic; pic= h->long_ref[i]; - if (pic) - remove_long_at_index(h, i); + if (pic){ + if(unreference_pic(h, pic, ref_mask)){ + assert(h->long_ref[i]->long_ref == 1); + h->long_ref[i]->long_ref= 0; + h->long_ref[i]= NULL; + h->long_ref_count--; + } + } return pic; } @@ -3469,73 +3259,58 @@ av_log(h->s.avctx, AV_LOG_DEBUG, "no mmco here\n"); for(i=0; i<mmco_count; i++){ - int structure, frame_num, unref_pic; + int structure, frame_num; if(s->avctx->debug&FF_DEBUG_MMCO) av_log(h->s.avctx, AV_LOG_DEBUG, "mmco:%d %d %d\n", h->mmco[i].opcode, h->mmco[i].short_pic_num, h->mmco[i].long_arg); + if( mmco[i].opcode == MMCO_SHORT2UNUSED + || mmco[i].opcode == MMCO_SHORT2LONG){ + frame_num = pic_num_extract(h, mmco[i].short_pic_num, &structure); + pic = find_short(h, frame_num, &j); + if(!pic){ + if(mmco[i].opcode != MMCO_SHORT2LONG || !h->long_ref[mmco[i].long_arg] + || h->long_ref[mmco[i].long_arg]->frame_num != frame_num) + av_log(h->s.avctx, AV_LOG_ERROR, "mmco: unref short failure\n"); + continue; + } + } + switch(mmco[i].opcode){ case MMCO_SHORT2UNUSED: if(s->avctx->debug&FF_DEBUG_MMCO) av_log(h->s.avctx, AV_LOG_DEBUG, "mmco: unref short %d count %d\n", h->mmco[i].short_pic_num, h->short_ref_count); - frame_num = pic_num_extract(h, mmco[i].short_pic_num, &structure); - pic = find_short(h, frame_num, &j); - if (pic) { - if (unreference_pic(h, pic, structure ^ PICT_FRAME)) - remove_short_at_index(h, j); - } else if(s->avctx->debug&FF_DEBUG_MMCO) - av_log(h->s.avctx, AV_LOG_DEBUG, "mmco: unref short failure\n"); + remove_short(h, frame_num, structure ^ PICT_FRAME); break; case MMCO_SHORT2LONG: - if (FIELD_PICTURE && mmco[i].long_arg < h->long_ref_count && - h->long_ref[mmco[i].long_arg]->frame_num == - mmco[i].short_pic_num / 2) { - /* do nothing, we've already moved this field pair. */ - } else { - int frame_num = mmco[i].short_pic_num >> FIELD_PICTURE; + if (h->long_ref[mmco[i].long_arg] != pic) + remove_long(h, mmco[i].long_arg, 0); - pic= remove_long(h, mmco[i].long_arg); - if(pic) unreference_pic(h, pic, 0); - - h->long_ref[ mmco[i].long_arg ]= remove_short(h, frame_num); + remove_short_at_index(h, j); + h->long_ref[ mmco[i].long_arg ]= pic; if (h->long_ref[ mmco[i].long_arg ]){ h->long_ref[ mmco[i].long_arg ]->long_ref=1; h->long_ref_count++; } - } break; case MMCO_LONG2UNUSED: j = pic_num_extract(h, mmco[i].long_arg, &structure); pic = h->long_ref[j]; if (pic) { - if (unreference_pic(h, pic, structure ^ PICT_FRAME)) - remove_long_at_index(h, j); + remove_long(h, j, structure ^ PICT_FRAME); } else if(s->avctx->debug&FF_DEBUG_MMCO) av_log(h->s.avctx, AV_LOG_DEBUG, "mmco: unref long failure\n"); break; case MMCO_LONG: - unref_pic = 1; - if (FIELD_PICTURE && !s->first_field) { - if (h->long_ref[mmco[i].long_arg] == s->current_picture_ptr) { - /* Just mark second field as referenced */ - unref_pic = 0; - } else if (s->current_picture_ptr->reference) { + // Comment below left from previous code as it is an interresting note. /* First field in pair is in short term list or * at a different long term index. - * This is not allowed; see 7.4.3, notes 2 and 3. + * This is not allowed; see 7.4.3.3, notes 2 and 3. * Report the problem and keep the pair where it is, * and mark this field valid. */ - av_log(h->s.avctx, AV_LOG_ERROR, - "illegal long term reference assignment for second " - "field in complementary field pair (first field is " - "short term or has non-matching long index)\n"); - unref_pic = 0; - } - } - if (unref_pic) { - pic= remove_long(h, mmco[i].long_arg); - if(pic) unreference_pic(h, pic, 0); + if (h->long_ref[mmco[i].long_arg] != s->current_picture_ptr) { + remove_long(h, mmco[i].long_arg, 0); h->long_ref[ mmco[i].long_arg ]= s->current_picture_ptr; h->long_ref[ mmco[i].long_arg ]->long_ref=1; @@ -3549,32 +3324,34 @@ assert(mmco[i].long_arg <= 16); // just remove the long term which index is greater than new max for(j = mmco[i].long_arg; j<16; j++){ - pic = remove_long(h, j); - if (pic) unreference_pic(h, pic, 0); + remove_long(h, j, 0); } break; case MMCO_RESET: while(h->short_ref_count){ - pic= remove_short(h, h->short_ref[0]->frame_num); - if(pic) unreference_pic(h, pic, 0); + remove_short(h, h->short_ref[0]->frame_num, 0); } for(j = 0; j < 16; j++) { - pic= remove_long(h, j); - if(pic) unreference_pic(h, pic, 0); + remove_long(h, j, 0); } + s->current_picture_ptr->poc= + s->current_picture_ptr->field_poc[0]= + s->current_picture_ptr->field_poc[1]= + h->poc_lsb= + h->poc_msb= + h->frame_num= + s->current_picture_ptr->frame_num= 0; break; default: assert(0); } } - if (!current_ref_assigned && FIELD_PICTURE && - !s->first_field && s->current_picture_ptr->reference) { - + if (!current_ref_assigned) { /* Second field of complementary field pair; the first field of * which is already referenced. If short referenced, it * should be first entry in short_ref. If not, it must exist * in long_ref; trying to put it on the short list here is an - * error in the encoded bit stream (ref: 7.4.3, NOTE 2 and 3). + * error in the encoded bit stream (ref: 7.4.3.3, NOTE 2 and 3). */ if (h->short_ref_count && h->short_ref[0] == s->current_picture_ptr) { /* Just mark the second field valid */ @@ -3585,30 +3362,41 @@ "in complementary field pair " "(first field is long term)\n"); } else { - /* - * First field in reference, but not in any sensible place on our - * reference lists. This shouldn't happen unless reference - * handling somewhere else is wrong. - */ - assert(0); - } - current_ref_assigned = 1; - } - - if(!current_ref_assigned){ - pic= remove_short(h, s->current_picture_ptr->frame_num); - if(pic){ - unreference_pic(h, pic, 0); - av_log(h->s.avctx, AV_LOG_ERROR, "illegal short term buffer state detected\n"); - } - - if(h->short_ref_count) - memmove(&h->short_ref[1], &h->short_ref[0], h->short_ref_count*sizeof(Picture*)); - - h->short_ref[0]= s->current_picture_ptr; - h->short_ref[0]->long_ref=0; - h->short_ref_count++; - s->current_picture_ptr->reference |= s->picture_structure; + pic= remove_short(h, s->current_picture_ptr->frame_num, 0); + if(pic){ + av_log(h->s.avctx, AV_LOG_ERROR, "illegal short term buffer state detected\n"); + } + + if(h->short_ref_count) + memmove(&h->short_ref[1], &h->short_ref[0], h->short_ref_count*sizeof(Picture*)); + + h->short_ref[0]= s->current_picture_ptr; + h->short_ref_count++; + s->current_picture_ptr->reference |= s->picture_structure; + } + } + + if (h->long_ref_count + h->short_ref_count > h->sps.ref_frame_count){ + + /* We have too many reference frames, probably due to corrupted + * stream. Need to discard one frame. Prevents overrun of the + * short_ref and long_ref buffers. + */ + av_log(h->s.avctx, AV_LOG_ERROR, + "number of reference frames exceeds max (probably " + "corrupt input), discarding one\n"); + + if (h->long_ref_count && !h->short_ref_count) { + for (i = 0; i < 16; ++i) + if (h->long_ref[i]) + break; + + assert(i < 16); + remove_long(h, i, 0); + } else { + pic = h->short_ref[h->short_ref_count - 1]; + remove_short(h, pic->frame_num, 0); + } } print_short_term(h); @@ -3620,13 +3408,12 @@ MpegEncContext * const s = &h->s; int i; + h->mmco_index= 0; if(h->nal_unit_type == NAL_IDR_SLICE){ //FIXME fields s->broken_link= get_bits1(gb) -1; - h->mmco[0].long_arg= get_bits1(gb) - 1; // current_long_term_idx - if(h->mmco[0].long_arg == -1) - h->mmco_index= 0; - else{ + if(get_bits1(gb)){ h->mmco[0].opcode= MMCO_LONG; + h->mmco[0].long_arg= 0; h->mmco_index= 1; } }else{ @@ -3662,7 +3449,7 @@ }else{ assert(h->long_ref_count + h->short_ref_count <= h->sps.ref_frame_count); - if(h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count && + if(h->short_ref_count && h->long_ref_count + h->short_ref_count == h->sps.ref_frame_count && !(FIELD_PICTURE && !s->first_field && s->current_picture_ptr->reference)) { h->mmco[0].opcode= MMCO_SHORT2UNUSED; h->mmco[0].short_pic_num= h->short_ref[ h->short_ref_count - 1 ]->frame_num; @@ -3673,8 +3460,7 @@ h->mmco[1].short_pic_num= h->mmco[0].short_pic_num + 1; h->mmco_index= 2; } - }else - h->mmco_index= 0; + } } } @@ -3685,24 +3471,15 @@ MpegEncContext * const s = &h->s; const int max_frame_num= 1<<h->sps.log2_max_frame_num; int field_poc[2]; + Picture *cur = s->current_picture_ptr; - if(h->nal_unit_type == NAL_IDR_SLICE){ - h->frame_num_offset= 0; - }else{ - if(h->frame_num < h->prev_frame_num) - h->frame_num_offset= h->prev_frame_num_offset + max_frame_num; - else - h->frame_num_offset= h->prev_frame_num_offset; - } + h->frame_num_offset= h->prev_frame_num_offset; + if(h->frame_num < h->prev_frame_num) + h->frame_num_offset += max_frame_num; if(h->sps.poc_type==0){ const int max_poc_lsb= 1<<h->sps.log2_max_poc_lsb; - if(h->nal_unit_type == NAL_IDR_SLICE){ - h->prev_poc_msb= - h->prev_poc_lsb= 0; - } - if (h->poc_lsb < h->prev_poc_lsb && h->prev_poc_lsb - h->poc_lsb >= max_poc_lsb/2) h->poc_msb = h->prev_poc_msb + max_poc_lsb; else if(h->poc_lsb > h->prev_poc_lsb && h->prev_poc_lsb - h->poc_lsb < -max_poc_lsb/2) @@ -3749,29 +3526,20 @@ if(s->picture_structure == PICT_FRAME) field_poc[1] += h->delta_poc[1]; }else{ - int poc; - if(h->nal_unit_type == NAL_IDR_SLICE){ - poc= 0; - }else{ - if(h->nal_ref_idc) poc= 2*(h->frame_num_offset + h->frame_num); - else poc= 2*(h->frame_num_offset + h->frame_num) - 1; - } + int poc= 2*(h->frame_num_offset + h->frame_num); + + if(!h->nal_ref_idc) + poc--; + field_poc[0]= poc; field_poc[1]= poc; } - if(s->picture_structure != PICT_BOTTOM_FIELD) { + if(s->picture_structure != PICT_BOTTOM_FIELD) s->current_picture_ptr->field_poc[0]= field_poc[0]; - s->current_picture_ptr->poc = field_poc[0]; - } - if(s->picture_structure != PICT_TOP_FIELD) { + if(s->picture_structure != PICT_TOP_FIELD) s->current_picture_ptr->field_poc[1]= field_poc[1]; - s->current_picture_ptr->poc = field_poc[1]; - } - if(!FIELD_PICTURE || !s->first_field) { - Picture *cur = s->current_picture_ptr; - cur->poc= FFMIN(cur->field_poc[0], cur->field_poc[1]); - } + cur->poc= FFMIN(cur->field_poc[0], cur->field_poc[1]); return 0; } @@ -3855,7 +3623,7 @@ /** * decodes a slice header. - * this will allso call MPV_common_init() and frame_start() as needed + * This will also call MPV_common_init() and frame_start() as needed. * * @param h h264context * @param h0 h264 master context (differs from 'h' when doing sliced based parallel decoding) @@ -3869,12 +3637,20 @@ unsigned int pps_id; int num_ref_idx_active_override_flag; static const uint8_t slice_type_map[5]= {P_TYPE, B_TYPE, I_TYPE, SP_TYPE, SI_TYPE}; - unsigned int slice_type, tmp, i; + unsigned int slice_type, tmp, i, j; int default_ref_list_done = 0; int last_pic_structure; s->dropable= h->nal_ref_idc == 0; + if((s->avctx->flags2 & CODEC_FLAG2_FAST) && !h->nal_ref_idc){ + s->me.qpel_put= s->dsp.put_2tap_qpel_pixels_tab; + s->me.qpel_avg= s->dsp.avg_2tap_qpel_pixels_tab; + }else{ + s->me.qpel_put= s->dsp.put_h264_qpel_pixels_tab; + s->me.qpel_avg= s->dsp.avg_h264_qpel_pixels_tab; + } + first_mb_in_slice= get_ue_golomb(&s->gb); if((s->flags2 & CODEC_FLAG2_CHUNKS) && first_mb_in_slice == 0){ @@ -3900,8 +3676,9 @@ default_ref_list_done = 1; } h->slice_type= slice_type; + h->slice_type_nos= slice_type & 3; - s->pict_type= h->slice_type; // to make a few old func happy, it's wrong though + s->pict_type= h->slice_type; // to make a few old functions happy, it's wrong though if (s->pict_type == B_TYPE && s0->last_picture_ptr == NULL) { av_log(h->s.avctx, AV_LOG_ERROR, "B picture before any references, skipping\n"); @@ -3914,13 +3691,13 @@ return -1; } if(!h0->pps_buffers[pps_id]) { - av_log(h->s.avctx, AV_LOG_ERROR, "non existing PPS referenced\n"); + av_log(h->s.avctx, AV_LOG_ERROR, "non-existing PPS referenced\n"); return -1; } h->pps= *h0->pps_buffers[pps_id]; if(!h0->sps_buffers[h->pps.sps_id]) { - av_log(h->s.avctx, AV_LOG_ERROR, "non existing SPS referenced\n"); + av_log(h->s.avctx, AV_LOG_ERROR, "non-existing SPS referenced\n"); return -1; } h->sps = *h0->sps_buffers[h->pps.sps_id]; @@ -3936,11 +3713,11 @@ h->b_stride= s->mb_width*4; h->b8_stride= s->mb_width*2; - s->width = 16*s->mb_width - 2*(h->sps.crop_left + h->sps.crop_right ); + s->width = 16*s->mb_width - 2*FFMIN(h->sps.crop_right, 7); if(h->sps.frame_mbs_only_flag) - s->height= 16*s->mb_height - 2*(h->sps.crop_top + h->sps.crop_bottom); + s->height= 16*s->mb_height - 2*FFMIN(h->sps.crop_bottom, 7); else - s->height= 16*s->mb_height - 4*(h->sps.crop_top + h->sps.crop_bottom); //FIXME recheck + s->height= 16*s->mb_height - 4*FFMIN(h->sps.crop_bottom, 3); if (s->context_initialized && ( s->width != s->avctx->width || s->height != s->avctx->height)) { @@ -3962,7 +3739,7 @@ for(i = 1; i < s->avctx->thread_count; i++) { H264Context *c; c = h->thread_context[i] = av_malloc(sizeof(H264Context)); - memcpy(c, h, sizeof(MpegEncContext)); + memcpy(c, h->s.thread_context[i], sizeof(MpegEncContext)); memset(&c->s + 1, 0, sizeof(H264Context) - sizeof(MpegEncContext)); c->sps = h->sps; c->pps = h->pps; @@ -4004,8 +3781,19 @@ h->mb_aff_frame = h->sps.mb_aff; } } + h->mb_field_decoding_flag= s->picture_structure != PICT_FRAME; if(h0->current_slice == 0){ + while(h->frame_num != h->prev_frame_num && + h->frame_num != (h->prev_frame_num+1)%(1<<h->sps.log2_max_frame_num)){ + av_log(NULL, AV_LOG_DEBUG, "Frame num gap %d %d\n", h->frame_num, h->prev_frame_num); + frame_start(h); + h->prev_frame_num++; + h->prev_frame_num %= 1<<h->sps.log2_max_frame_num; + s->current_picture_ptr->frame_num= h->prev_frame_num; + execute_ref_pic_marking(h, NULL, 0); + } + /* See if we have a decoded first field looking for a pair... */ if (s0->first_field) { assert(s0->current_picture_ptr); @@ -4101,21 +3889,19 @@ h->redundant_pic_count= get_ue_golomb(&s->gb); } - //set defaults, might be overriden a few line later + //set defaults, might be overridden a few lines later h->ref_count[0]= h->pps.ref_count[0]; h->ref_count[1]= h->pps.ref_count[1]; - if(h->slice_type == P_TYPE || h->slice_type == SP_TYPE || h->slice_type == B_TYPE){ - if(h->slice_type == B_TYPE){ + if(h->slice_type_nos != I_TYPE){ + if(h->slice_type_nos == B_TYPE){ h->direct_spatial_mv_pred= get_bits1(&s->gb); - if(FIELD_OR_MBAFF_PICTURE && h->direct_spatial_mv_pred) - av_log(h->s.avctx, AV_LOG_ERROR, "Interlaced pictures + spatial direct mode is not implemented\n"); } num_ref_idx_active_override_flag= get_bits1(&s->gb); if(num_ref_idx_active_override_flag){ h->ref_count[0]= get_ue_golomb(&s->gb) + 1; - if(h->slice_type==B_TYPE) + if(h->slice_type_nos==B_TYPE) h->ref_count[1]= get_ue_golomb(&s->gb) + 1; if(h->ref_count[0]-1 > 32-1 || h->ref_count[1]-1 > 32-1){ @@ -4124,7 +3910,7 @@ return -1; } } - if(h->slice_type == B_TYPE) + if(h->slice_type_nos == B_TYPE) h->list_count= 2; else h->list_count= 1; @@ -4135,13 +3921,13 @@ fill_default_ref_list(h); } - if(decode_ref_pic_list_reordering(h) < 0) + if(h->slice_type_nos!=I_TYPE && decode_ref_pic_list_reordering(h) < 0) return -1; - if( (h->pps.weighted_pred && (h->slice_type == P_TYPE || h->slice_type == SP_TYPE )) - || (h->pps.weighted_bipred_idc==1 && h->slice_type==B_TYPE ) ) + if( (h->pps.weighted_pred && h->slice_type_nos == P_TYPE ) + || (h->pps.weighted_bipred_idc==1 && h->slice_type_nos== B_TYPE ) ) pred_weight_table(h); - else if(h->pps.weighted_bipred_idc==2 && h->slice_type==B_TYPE) + else if(h->pps.weighted_bipred_idc==2 && h->slice_type_nos== B_TYPE) implicit_weight_table(h); else h->use_weight = 0; @@ -4152,7 +3938,11 @@ if(FRAME_MBAFF) fill_mbaff_ref_list(h); - if( h->slice_type != I_TYPE && h->slice_type != SI_TYPE && h->pps.cabac ){ + if(h->slice_type_nos==B_TYPE && !h->direct_spatial_mv_pred) + direct_dist_scale_factor(h); + direct_ref_list_init(h); + + if( h->slice_type_nos != I_TYPE && h->pps.cabac ){ tmp = get_ue_golomb(&s->gb); if(tmp > 2){ av_log(s->avctx, AV_LOG_ERROR, "cabac_init_idc overflow\n"); @@ -4198,15 +3988,15 @@ } if( s->avctx->skip_loop_filter >= AVDISCARD_ALL - ||(s->avctx->skip_loop_filter >= AVDISCARD_NONKEY && h->slice_type != I_TYPE) - ||(s->avctx->skip_loop_filter >= AVDISCARD_BIDIR && h->slice_type == B_TYPE) + ||(s->avctx->skip_loop_filter >= AVDISCARD_NONKEY && h->slice_type_nos != I_TYPE) + ||(s->avctx->skip_loop_filter >= AVDISCARD_BIDIR && h->slice_type_nos == B_TYPE) ||(s->avctx->skip_loop_filter >= AVDISCARD_NONREF && h->nal_ref_idc == 0)) h->deblocking_filter= 0; if(h->deblocking_filter == 1 && h0->max_contexts > 1) { if(s->avctx->flags2 & CODEC_FLAG2_FAST) { /* Cheat slightly for speed: - Dont bother to deblock across slices */ + Do not bother to deblock across slices. */ h->deblocking_filter = 2; } else { h0->max_contexts = 1; @@ -4227,11 +4017,25 @@ h0->last_slice_type = slice_type; h->slice_num = ++h0->current_slice; + for(j=0; j<2; j++){ + int *ref2frm= h->ref2frm[h->slice_num&15][j]; + ref2frm[0]= + ref2frm[1]= -1; + for(i=0; i<16; i++) + ref2frm[i+2]= 4*h->ref_list[j][i].frame_num + +(h->ref_list[j][i].reference&3); + ref2frm[18+0]= + ref2frm[18+1]= -1; + for(i=16; i<48; i++) + ref2frm[i+4]= 4*h->ref_list[j][i].frame_num + +(h->ref_list[j][i].reference&3); + } + h->emu_edge_width= (s->flags&CODEC_FLAG_EMU_EDGE) ? 0 : 16; h->emu_edge_height= (FRAME_MBAFF || FIELD_PICTURE) ? 0 : h->emu_edge_width; if(s->avctx->debug&FF_DEBUG_PICT_INFO){ - av_log(h->s.avctx, AV_LOG_DEBUG, "slice:%d %s mb:%d %c pps:%u frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s\n", + av_log(h->s.avctx, AV_LOG_DEBUG, "slice:%d %s mb:%d %c pps:%u frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s %s\n", h->slice_num, (s->picture_structure==PICT_FRAME ? "F" : s->picture_structure==PICT_TOP_FIELD ? "T" : "B"), first_mb_in_slice, @@ -4242,18 +4046,11 @@ s->qscale, h->deblocking_filter, h->slice_alpha_c0_offset/2, h->slice_beta_offset/2, h->use_weight, - h->use_weight==1 && h->use_weight_chroma ? "c" : "" + h->use_weight==1 && h->use_weight_chroma ? "c" : "", + h->slice_type == B_TYPE ? (h->direct_spatial_mv_pred ? "SPAT" : "TEMP") : "" ); } - if((s->avctx->flags2 & CODEC_FLAG2_FAST) && !h->nal_ref_idc){ - s->me.qpel_put= s->dsp.put_2tap_qpel_pixels_tab; - s->me.qpel_avg= s->dsp.avg_2tap_qpel_pixels_tab; - }else{ - s->me.qpel_put= s->dsp.put_h264_qpel_pixels_tab; - s->me.qpel_avg= s->dsp.avg_h264_qpel_pixels_tab; - } - return 0; } @@ -4354,12 +4151,11 @@ level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part else level_code= prefix + get_bits(gb, 4); //part - }else if(prefix==15){ - level_code= (prefix<<suffix_length) + get_bits(gb, 12); //part - if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense }else{ - av_log(h->s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y); - return -1; + level_code= (15<<suffix_length) + get_bits(gb, prefix-3); //part + if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense + if(prefix>=16) + level_code += (1<<(prefix-3))-4096; } if(trailing_ones < 3) level_code += 2; @@ -4377,11 +4173,10 @@ prefix = get_level_prefix(gb); if(prefix<15){ level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length); - }else if(prefix==15){ - level_code = (prefix<<suffix_length) + get_bits(gb, 12); }else{ - av_log(h->s.avctx, AV_LOG_ERROR, "prefix too large at %d %d\n", s->mb_x, s->mb_y); - return -1; + level_code = (15<<suffix_length) + get_bits(gb, prefix-3); + if(prefix>=16) + level_code += (1<<(prefix-3))-4096; } mask= -(level_code&1); level[i]= (((2+level_code)>>1) ^ mask) - mask; @@ -4445,7 +4240,7 @@ static void predict_field_decoding_flag(H264Context *h){ MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; int mb_type = (h->slice_table[mb_xy-1] == h->slice_num) ? s->current_picture.mb_type[mb_xy-1] : (h->slice_table[mb_xy-s->mb_stride] == h->slice_num) @@ -4459,7 +4254,7 @@ */ static void decode_mb_skip(H264Context *h){ MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + const int mb_xy= h->mb_xy; int mb_type=0; memset(h->non_zero_count[mb_xy], 0, 16); @@ -4468,10 +4263,10 @@ if(MB_FIELD) mb_type|= MB_TYPE_INTERLACED; - if( h->slice_type == B_TYPE ) + if( h->slice_type_nos == B_TYPE ) { // just for fill_caches. pred_direct_motion will set the real mb_type - mb_type|= MB_TYPE_16x16|MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2|MB_TYPE_SKIP; + mb_type|= MB_TYPE_P0L0|MB_TYPE_P0L1|MB_TYPE_DIRECT2|MB_TYPE_SKIP; fill_caches(h, mb_type, 0); //FIXME check what is needed and what not ... pred_direct_motion(h, &mb_type); @@ -4497,21 +4292,23 @@ /** * decodes a macroblock - * @returns 0 if ok, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed + * @returns 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed */ static int decode_mb_cavlc(H264Context *h){ MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + int mb_xy; int partition_count; unsigned int mb_type, cbp; int dct8x8_allowed= h->pps.transform_8x8_mode; + mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride; + s->dsp.clear_blocks(h->mb); //FIXME avoid if already clear (move after skip handlong? tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y); cbp = 0; /* avoid warning. FIXME: find a solution without slowing down the code */ - if(h->slice_type != I_TYPE && h->slice_type != SI_TYPE){ + if(h->slice_type_nos != I_TYPE){ if(s->mb_skip_run==-1) s->mb_skip_run= get_ue_golomb(&s->gb); @@ -4529,13 +4326,12 @@ if(FRAME_MBAFF){ if( (s->mb_y&1) == 0 ) h->mb_mbaff = h->mb_field_decoding_flag = get_bits1(&s->gb); - }else - h->mb_field_decoding_flag= (s->picture_structure!=PICT_FRAME); + } h->prev_mb_skipped= 0; mb_type= get_ue_golomb(&s->gb); - if(h->slice_type == B_TYPE){ + if(h->slice_type_nos == B_TYPE){ if(mb_type < 23){ partition_count= b_mb_type_info[mb_type].partition_count; mb_type= b_mb_type_info[mb_type].type; @@ -4543,7 +4339,7 @@ mb_type -= 23; goto decode_intra_mb; } - }else if(h->slice_type == P_TYPE /*|| h->slice_type == SP_TYPE */){ + }else if(h->slice_type_nos == P_TYPE){ if(mb_type < 5){ partition_count= p_mb_type_info[mb_type].partition_count; mb_type= p_mb_type_info[mb_type].type; @@ -4552,7 +4348,9 @@ goto decode_intra_mb; } }else{ - assert(h->slice_type == I_TYPE); + assert(h->slice_type_nos == I_TYPE); + if(h->slice_type == SI_TYPE && mb_type) + mb_type--; decode_intra_mb: if(mb_type > 25){ av_log(h->s.avctx, AV_LOG_ERROR, "mb_type %d in %c slice too large at %d %d\n", mb_type, av_get_pict_type_char(h->slice_type), s->mb_x, s->mb_y); @@ -4570,38 +4368,18 @@ h->slice_table[ mb_xy ]= h->slice_num; if(IS_INTRA_PCM(mb_type)){ - unsigned int x, y; + unsigned int x; // We assume these blocks are very rare so we do not optimize it. align_get_bits(&s->gb); // The pixels are stored in the same order as levels in h->mb array. - for(y=0; y<16; y++){ - const int index= 4*(y&3) + 32*((y>>2)&1) + 128*(y>>3); - for(x=0; x<16; x++){ - tprintf(s->avctx, "LUMA ICPM LEVEL (%3d)\n", show_bits(&s->gb, 8)); - h->mb[index + (x&3) + 16*((x>>2)&1) + 64*(x>>3)]= get_bits(&s->gb, 8); - } - } - for(y=0; y<8; y++){ - const int index= 256 + 4*(y&3) + 32*(y>>2); - for(x=0; x<8; x++){ - tprintf(s->avctx, "CHROMA U ICPM LEVEL (%3d)\n", show_bits(&s->gb, 8)); - h->mb[index + (x&3) + 16*(x>>2)]= get_bits(&s->gb, 8); - } - } - for(y=0; y<8; y++){ - const int index= 256 + 64 + 4*(y&3) + 32*(y>>2); - for(x=0; x<8; x++){ - tprintf(s->avctx, "CHROMA V ICPM LEVEL (%3d)\n", show_bits(&s->gb, 8)); - h->mb[index + (x&3) + 16*(x>>2)]= get_bits(&s->gb, 8); - } + for(x=0; x < (CHROMA ? 384 : 256); x++){ + ((uint8_t*)h->mb)[x]= get_bits(&s->gb, 8); } // In deblocking, the quantizer is 0 s->current_picture.qscale_table[mb_xy]= 0; - h->chroma_qp[0] = get_chroma_qp(h, 0, 0); - h->chroma_qp[1] = get_chroma_qp(h, 1, 0); // All coeffs are present memset(h->non_zero_count[mb_xy], 16, 16); @@ -4618,47 +4396,48 @@ //mb_pred if(IS_INTRA(mb_type)){ - int pred_mode; + int pred_mode; // init_top_left_availability(h); - if(IS_INTRA4x4(mb_type)){ - int i; - int di = 1; - if(dct8x8_allowed && get_bits1(&s->gb)){ - mb_type |= MB_TYPE_8x8DCT; - di = 4; - } + if(IS_INTRA4x4(mb_type)){ + int i; + int di = 1; + if(dct8x8_allowed && get_bits1(&s->gb)){ + mb_type |= MB_TYPE_8x8DCT; + di = 4; + } // fill_intra4x4_pred_table(h); - for(i=0; i<16; i+=di){ - int mode= pred_intra_mode(h, i); - - if(!get_bits1(&s->gb)){ - const int rem_mode= get_bits(&s->gb, 3); - mode = rem_mode + (rem_mode >= mode); - } + for(i=0; i<16; i+=di){ + int mode= pred_intra_mode(h, i); - if(di==4) - fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 ); - else - h->intra4x4_pred_mode_cache[ scan8[i] ] = mode; + if(!get_bits1(&s->gb)){ + const int rem_mode= get_bits(&s->gb, 3); + mode = rem_mode + (rem_mode >= mode); } - write_back_intra_pred_mode(h); - if( check_intra4x4_pred_mode(h) < 0) - return -1; - }else{ - h->intra16x16_pred_mode= check_intra_pred_mode(h, h->intra16x16_pred_mode); - if(h->intra16x16_pred_mode < 0) - return -1; - } + if(di==4) + fill_rectangle( &h->intra4x4_pred_mode_cache[ scan8[i] ], 2, 2, 8, mode, 1 ); + else + h->intra4x4_pred_mode_cache[ scan8[i] ] = mode; + } + write_back_intra_pred_mode(h); + if( check_intra4x4_pred_mode(h) < 0) + return -1; + }else{ + h->intra16x16_pred_mode= check_intra_pred_mode(h, h->intra16x16_pred_mode); + if(h->intra16x16_pred_mode < 0) + return -1; + } + if(CHROMA){ pred_mode= check_intra_pred_mode(h, get_ue_golomb(&s->gb)); if(pred_mode < 0) return -1; h->chroma_pred_mode= pred_mode; + } }else if(partition_count==4){ int i, j, sub_partition_count[4], list, ref[2][4]; - if(h->slice_type == B_TYPE){ + if(h->slice_type_nos == B_TYPE){ for(i=0; i<4; i++){ h->sub_mb_type[i]= get_ue_golomb(&s->gb); if(h->sub_mb_type[i] >=13){ @@ -4677,7 +4456,7 @@ h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE; } }else{ - assert(h->slice_type == P_TYPE || h->slice_type == SP_TYPE); //FIXME SP correct ? + assert(h->slice_type_nos == P_TYPE); //FIXME SP correct ? for(i=0; i<4; i++){ h->sub_mb_type[i]= get_ue_golomb(&s->gb); if(h->sub_mb_type[i] >=4){ @@ -4860,16 +4639,21 @@ return -1; } - if(IS_INTRA4x4(mb_type)) - cbp= golomb_to_intra4x4_cbp[cbp]; - else - cbp= golomb_to_inter_cbp[cbp]; + if(CHROMA){ + if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp[cbp]; + else cbp= golomb_to_inter_cbp [cbp]; + }else{ + if(IS_INTRA4x4(mb_type)) cbp= golomb_to_intra4x4_cbp_gray[cbp]; + else cbp= golomb_to_inter_cbp_gray[cbp]; + } } h->cbp = cbp; if(dct8x8_allowed && (cbp&15) && !IS_INTRA(mb_type)){ - if(get_bits1(&s->gb)) + if(get_bits1(&s->gb)){ mb_type |= MB_TYPE_8x8DCT; + h->cbp_table[mb_xy]= cbp; + } } s->current_picture.mb_type[mb_xy]= mb_type; @@ -5048,9 +4832,9 @@ static int decode_cabac_mb_type( H264Context *h ) { MpegEncContext * const s = &h->s; - if( h->slice_type == I_TYPE ) { + if( h->slice_type_nos == I_TYPE ) { return decode_cabac_intra_mb_type(h, 3, 1); - } else if( h->slice_type == P_TYPE ) { + } else if( h->slice_type_nos == P_TYPE ) { if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) { /* P-type */ if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) { @@ -5063,7 +4847,7 @@ } else { return decode_cabac_intra_mb_type(h, 17, 0) + 5; } - } else if( h->slice_type == B_TYPE ) { + } else if( h->slice_type_nos == B_TYPE ) { const int mba_xy = h->left_mb_xy[0]; const int mbb_xy = h->top_mb_xy; int ctx = 0; @@ -5123,7 +4907,7 @@ }else mbb_xy = mb_x + (mb_y-1)*s->mb_stride; }else{ - int mb_xy = mb_x + mb_y*s->mb_stride; + int mb_xy = h->mb_xy; mba_xy = mb_xy - 1; mbb_xy = mb_xy - (s->mb_stride << FIELD_PICTURE); } @@ -5133,7 +4917,7 @@ if( h->slice_table[mbb_xy] == h->slice_num && !IS_SKIP( s->current_picture.mb_type[mbb_xy] )) ctx++; - if( h->slice_type == B_TYPE ) + if( h->slice_type_nos == B_TYPE ) ctx += 13; return get_cabac_noinline( &h->cabac, &h->cabac_state[11+ctx] ); } @@ -5270,7 +5054,7 @@ int ref = 0; int ctx = 0; - if( h->slice_type == B_TYPE) { + if( h->slice_type_nos == B_TYPE) { if( refa > 0 && !h->direct_cache[scan8[n] - 1] ) ctx++; if( refb > 0 && !h->direct_cache[scan8[n] - 8] ) @@ -5338,23 +5122,27 @@ return get_cabac_bypass_sign( &h->cabac, -mvd ); } -static inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx ) { +static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx, int is_dc ) { int nza, nzb; int ctx = 0; - if( cat == 0 ) { - nza = h->left_cbp&0x100; - nzb = h-> top_cbp&0x100; - } else if( cat == 1 || cat == 2 ) { - nza = h->non_zero_count_cache[scan8[idx] - 1]; - nzb = h->non_zero_count_cache[scan8[idx] - 8]; - } else if( cat == 3 ) { - nza = (h->left_cbp>>(6+idx))&0x01; - nzb = (h-> top_cbp>>(6+idx))&0x01; + if( is_dc ) { + if( cat == 0 ) { + nza = h->left_cbp&0x100; + nzb = h-> top_cbp&0x100; + } else { + nza = (h->left_cbp>>(6+idx))&0x01; + nzb = (h-> top_cbp>>(6+idx))&0x01; + } } else { - assert(cat == 4); - nza = h->non_zero_count_cache[scan8[16+idx] - 1]; - nzb = h->non_zero_count_cache[scan8[16+idx] - 8]; + if( cat == 4 ) { + nza = h->non_zero_count_cache[scan8[16+idx] - 1]; + nzb = h->non_zero_count_cache[scan8[16+idx] - 8]; + } else { + assert(cat == 1 || cat == 2); + nza = h->non_zero_count_cache[scan8[idx] - 1]; + nzb = h->non_zero_count_cache[scan8[idx] - 8]; + } } if( nza > 0 ) @@ -5366,15 +5154,14 @@ return ctx + 4 * cat; } -static const attribute_used uint8_t last_coeff_flag_offset_8x8[63] = { +DECLARE_ASM_CONST(1, uint8_t, last_coeff_flag_offset_8x8[63]) = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8 }; -static void decode_cabac_residual( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff) { - const int mb_xy = h->s.mb_x + h->s.mb_y*h->s.mb_stride; +static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff, int is_dc ) { static const int significant_coeff_flag_offset[2][6] = { { 105+0, 105+15, 105+29, 105+44, 105+47, 402 }, { 277+0, 277+15, 277+29, 277+44, 277+47, 436 } @@ -5396,14 +5183,24 @@ 9, 9,10,10, 8,11,12,11, 9, 9,10,10, 8,13,13, 9, 9,10,10, 8,13,13, 9, 9,10,10,14,14,14,14,14 } }; + /* node ctx: 0..3: abslevel1 (with abslevelgt1 == 0). + * 4..7: abslevelgt1 + 3 (and abslevel1 doesn't matter). + * map node ctx => cabac ctx for level=1 */ + static const uint8_t coeff_abs_level1_ctx[8] = { 1, 2, 3, 4, 0, 0, 0, 0 }; + /* map node ctx => cabac ctx for level>1 */ + static const uint8_t coeff_abs_levelgt1_ctx[8] = { 5, 5, 5, 5, 6, 7, 8, 9 }; + static const uint8_t coeff_abs_level_transition[2][8] = { + /* update node ctx after decoding a level=1 */ + { 1, 2, 3, 3, 4, 5, 6, 7 }, + /* update node ctx after decoding a level>1 */ + { 4, 4, 4, 4, 5, 6, 7, 7 } + }; int index[64]; int av_unused last; int coeff_count = 0; - - int abslevel1 = 1; - int abslevelgt1 = 0; + int node_ctx = 0; uint8_t *significant_coeff_ctx_base; uint8_t *last_coeff_ctx_base; @@ -5432,12 +5229,15 @@ */ /* read coded block flag */ - if( cat != 5 ) { - if( get_cabac( CC, &h->cabac_state[85 + get_cabac_cbf_ctx( h, cat, n ) ] ) == 0 ) { - if( cat == 1 || cat == 2 ) - h->non_zero_count_cache[scan8[n]] = 0; - else if( cat == 4 ) - h->non_zero_count_cache[scan8[16+n]] = 0; + if( is_dc || cat != 5 ) { + if( get_cabac( CC, &h->cabac_state[85 + get_cabac_cbf_ctx( h, cat, n, is_dc ) ] ) == 0 ) { + if( !is_dc ) { + if( cat == 4 ) + h->non_zero_count_cache[scan8[16+n]] = 0; + else + h->non_zero_count_cache[scan8[n]] = 0; + } + #ifdef CABAC_ON_STACK h->cabac.range = cc.range ; h->cabac.low = cc.low ; @@ -5454,7 +5254,7 @@ abs_level_m1_ctx_base = h->cabac_state + coeff_abs_level_m1_offset[cat]; - if( cat == 5 ) { + if( !is_dc && cat == 5 ) { #define DECODE_SIGNIFICANCE( coefs, sig_off, last_off ) \ for(last= 0; last < coefs; last++) { \ uint8_t *sig_ctx = significant_coeff_ctx_base + sig_off; \ @@ -5483,34 +5283,39 @@ } assert(coeff_count > 0); - if( cat == 0 ) - h->cbp_table[mb_xy] |= 0x100; - else if( cat == 1 || cat == 2 ) - h->non_zero_count_cache[scan8[n]] = coeff_count; - else if( cat == 3 ) - h->cbp_table[mb_xy] |= 0x40 << n; - else if( cat == 4 ) - h->non_zero_count_cache[scan8[16+n]] = coeff_count; - else { - assert( cat == 5 ); - fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1); - } - - for( coeff_count--; coeff_count >= 0; coeff_count-- ) { - uint8_t *ctx = (abslevelgt1 != 0 ? 0 : FFMIN( 4, abslevel1 )) + abs_level_m1_ctx_base; - int j= scantable[index[coeff_count]]; + if( is_dc ) { + if( cat == 0 ) + h->cbp_table[h->mb_xy] |= 0x100; + else + h->cbp_table[h->mb_xy] |= 0x40 << n; + } else { + if( cat == 5 ) + fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1); + else if( cat == 4 ) + h->non_zero_count_cache[scan8[16+n]] = coeff_count; + else { + assert( cat == 1 || cat == 2 ); + h->non_zero_count_cache[scan8[n]] = coeff_count; + } + } + + do { + uint8_t *ctx = coeff_abs_level1_ctx[node_ctx] + abs_level_m1_ctx_base; + + int j= scantable[index[--coeff_count]]; if( get_cabac( CC, ctx ) == 0 ) { - if( !qmul ) { + node_ctx = coeff_abs_level_transition[0][node_ctx]; + if( is_dc ) { block[j] = get_cabac_bypass_sign( CC, -1); }else{ - block[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6;; + block[j] = (get_cabac_bypass_sign( CC, -qmul[j]) + 32) >> 6; } - - abslevel1++; } else { int coeff_abs = 2; - ctx = 5 + FFMIN( 4, abslevelgt1 ) + abs_level_m1_ctx_base; + ctx = coeff_abs_levelgt1_ctx[node_ctx] + abs_level_m1_ctx_base; + node_ctx = coeff_abs_level_transition[1][node_ctx]; + while( coeff_abs < 15 && get_cabac( CC, ctx ) ) { coeff_abs++; } @@ -5528,17 +5333,13 @@ coeff_abs+= 14; } - if( !qmul ) { - if( get_cabac_bypass( CC ) ) block[j] = -coeff_abs; - else block[j] = coeff_abs; + if( is_dc ) { + block[j] = get_cabac_bypass_sign( CC, -coeff_abs ); }else{ - if( get_cabac_bypass( CC ) ) block[j] = (-coeff_abs * qmul[j] + 32) >> 6; - else block[j] = ( coeff_abs * qmul[j] + 32) >> 6; + block[j] = (get_cabac_bypass_sign( CC, -coeff_abs ) * qmul[j] + 32) >> 6; } - - abslevelgt1++; } - } + } while( coeff_count ); #ifdef CABAC_ON_STACK h->cabac.range = cc.range ; h->cabac.low = cc.low ; @@ -5547,10 +5348,29 @@ } +#ifndef CONFIG_SMALL +static void decode_cabac_residual_dc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) { + decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 1); +} + +static void decode_cabac_residual_nondc( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) { + decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, 0); +} +#endif + +static void decode_cabac_residual( H264Context *h, DCTELEM *block, int cat, int n, const uint8_t *scantable, const uint32_t *qmul, int max_coeff ) { +#ifdef CONFIG_SMALL + decode_cabac_residual_internal(h, block, cat, n, scantable, qmul, max_coeff, cat == 0 || cat == 3); +#else + if( cat == 0 || cat == 3 ) decode_cabac_residual_dc(h, block, cat, n, scantable, qmul, max_coeff); + else decode_cabac_residual_nondc(h, block, cat, n, scantable, qmul, max_coeff); +#endif +} + static inline void compute_mb_neighbors(H264Context *h) { MpegEncContext * const s = &h->s; - const int mb_xy = s->mb_x + s->mb_y*s->mb_stride; + const int mb_xy = h->mb_xy; h->top_mb_xy = mb_xy - s->mb_stride; h->left_mb_xy[0] = mb_xy - 1; if(FRAME_MBAFF){ @@ -5577,18 +5397,20 @@ /** * decodes a macroblock - * @returns 0 if ok, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed + * @returns 0 if OK, AC_ERROR / DC_ERROR / MV_ERROR if an error is noticed */ static int decode_mb_cabac(H264Context *h) { MpegEncContext * const s = &h->s; - const int mb_xy= s->mb_x + s->mb_y*s->mb_stride; + int mb_xy; int mb_type, partition_count, cbp = 0; int dct8x8_allowed= h->pps.transform_8x8_mode; + mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride; + s->dsp.clear_blocks(h->mb); //FIXME avoid if already clear (move after skip handlong?) tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y); - if( h->slice_type != I_TYPE && h->slice_type != SI_TYPE ) { + if( h->slice_type_nos != I_TYPE ) { int skip; /* a skipped mb needs the aff flag from the following mb */ if( FRAME_MBAFF && s->mb_x==0 && (s->mb_y&1)==0 ) @@ -5622,8 +5444,7 @@ if( (s->mb_y&1) == 0 ) h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h); - }else - h->mb_field_decoding_flag= (s->picture_structure!=PICT_FRAME); + } h->prev_mb_skipped = 0; @@ -5633,7 +5454,7 @@ return -1; } - if( h->slice_type == B_TYPE ) { + if( h->slice_type_nos == B_TYPE ) { if( mb_type < 23 ){ partition_count= b_mb_type_info[mb_type].partition_count; mb_type= b_mb_type_info[mb_type].type; @@ -5641,7 +5462,7 @@ mb_type -= 23; goto decode_intra_mb; } - } else if( h->slice_type == P_TYPE ) { + } else if( h->slice_type_nos == P_TYPE ) { if( mb_type < 5) { partition_count= p_mb_type_info[mb_type].partition_count; mb_type= p_mb_type_info[mb_type].type; @@ -5650,7 +5471,9 @@ goto decode_intra_mb; } } else { - assert(h->slice_type == I_TYPE); + if(h->slice_type == SI_TYPE && mb_type) + mb_type--; + assert(h->slice_type_nos == I_TYPE); decode_intra_mb: partition_count = 0; cbp= i_mb_type_info[mb_type].cbp; @@ -5664,7 +5487,6 @@ if(IS_INTRA_PCM(mb_type)) { const uint8_t *ptr; - unsigned int x, y; // We assume these blocks are very rare so we do not optimize it. // FIXME The two following lines get the bitstream position in the cabac @@ -5676,26 +5498,9 @@ } // The pixels are stored in the same order as levels in h->mb array. - for(y=0; y<16; y++){ - const int index= 4*(y&3) + 32*((y>>2)&1) + 128*(y>>3); - for(x=0; x<16; x++){ - tprintf(s->avctx, "LUMA ICPM LEVEL (%3d)\n", *ptr); - h->mb[index + (x&3) + 16*((x>>2)&1) + 64*(x>>3)]= *ptr++; - } - } - for(y=0; y<8; y++){ - const int index= 256 + 4*(y&3) + 32*(y>>2); - for(x=0; x<8; x++){ - tprintf(s->avctx, "CHROMA U ICPM LEVEL (%3d)\n", *ptr); - h->mb[index + (x&3) + 16*(x>>2)]= *ptr++; - } - } - for(y=0; y<8; y++){ - const int index= 256 + 64 + 4*(y&3) + 32*(y>>2); - for(x=0; x<8; x++){ - tprintf(s->avctx, "CHROMA V ICPM LEVEL (%3d)\n", *ptr); - h->mb[index + (x&3) + 16*(x>>2)]= *ptr++; - } + memcpy(h->mb, ptr, 256); ptr+=256; + if(CHROMA){ + memcpy(h->mb+128, ptr, 128); ptr+=128; } ff_init_cabac_decoder(&h->cabac, ptr, h->cabac.bytestream_end - ptr); @@ -5705,11 +5510,10 @@ h->chroma_pred_mode_table[mb_xy] = 0; // In deblocking, the quantizer is 0 s->current_picture.qscale_table[mb_xy]= 0; - h->chroma_qp[0] = get_chroma_qp(h, 0, 0); - h->chroma_qp[1] = get_chroma_qp(h, 1, 0); // All coeffs are present memset(h->non_zero_count[mb_xy], 16, 16); s->current_picture.mb_type[mb_xy]= mb_type; + h->last_qscale_diff = 0; return 0; } @@ -5744,16 +5548,18 @@ h->intra16x16_pred_mode= check_intra_pred_mode( h, h->intra16x16_pred_mode ); if( h->intra16x16_pred_mode < 0 ) return -1; } - h->chroma_pred_mode_table[mb_xy] = - pred_mode = decode_cabac_mb_chroma_pre_mode( h ); + if(CHROMA){ + h->chroma_pred_mode_table[mb_xy] = + pred_mode = decode_cabac_mb_chroma_pre_mode( h ); - pred_mode= check_intra_pred_mode( h, pred_mode ); - if( pred_mode < 0 ) return -1; - h->chroma_pred_mode= pred_mode; + pred_mode= check_intra_pred_mode( h, pred_mode ); + if( pred_mode < 0 ) return -1; + h->chroma_pred_mode= pred_mode; + } } else if( partition_count == 4 ) { int i, j, sub_partition_count[4], list, ref[2][4]; - if( h->slice_type == B_TYPE ) { + if( h->slice_type_nos == B_TYPE ) { for( i = 0; i < 4; i++ ) { h->sub_mb_type[i] = decode_cabac_b_mb_sub_type( h ); sub_partition_count[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].partition_count; @@ -5951,7 +5757,8 @@ if( !IS_INTRA16x16( mb_type ) ) { cbp = decode_cabac_mb_cbp_luma( h ); - cbp |= decode_cabac_mb_cbp_chroma( h ) << 4; + if(CHROMA) + cbp |= decode_cabac_mb_cbp_chroma( h ) << 4; } h->cbp_table[mb_xy] = h->cbp = cbp; @@ -6381,9 +6188,10 @@ int mb_xy, mb_type; int qp, qp0, qp1, qpc, qpc0, qpc1, qp_thresh; - mb_xy = mb_x + mb_y*s->mb_stride; + mb_xy = h->mb_xy; if(mb_x==0 || mb_y==mb_y_firstrow || !s->dsp.h264_loop_filter_strength || h->pps.chroma_qp_diff || +1 || (h->deblocking_filter == 2 && (h->slice_table[mb_xy] != h->slice_table[h->top_mb_xy] || h->slice_table[mb_xy] != h->slice_table[mb_xy - 1]))) { filter_mb(h, mb_x, mb_y, img_y, img_cb, img_cr, linesize, uvlinesize); @@ -6451,7 +6259,7 @@ int step = IS_8x8DCT(mb_type) ? 2 : 1; edges = (mb_type & MB_TYPE_16x16) && !(h->cbp & 15) ? 1 : 4; s->dsp.h264_loop_filter_strength( bS, h->non_zero_count_cache, h->ref_cache, h->mv_cache, - (h->slice_type == B_TYPE), edges, step, mask_edge0, mask_edge1 ); + (h->slice_type_nos == B_TYPE), edges, step, mask_edge0, mask_edge1, FIELD_PICTURE); } if( IS_INTRA(s->current_picture.mb_type[mb_xy-1]) ) bSv[0][0] = 0x0004000400040004ULL; @@ -6495,16 +6303,11 @@ const int mvy_limit = IS_INTERLACED(mb_type) ? 2 : 4; int first_vertical_edge_done = 0; int dir; - /* FIXME: A given frame may occupy more than one position in - * the reference list. So ref2frm should be populated with - * frame numbers, not indices. */ - static const int ref2frm[34] = {-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, - 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; //for sufficiently low qp, filtering wouldn't do anything //this is a conservative estimate: could also check beta_offset and more accurate chroma_qp if(!FRAME_MBAFF){ - int qp_thresh = 15 - h->slice_alpha_c0_offset - FFMAX(0, FFMAX(h->pps.chroma_qp_index_offset[0], h->pps.chroma_qp_index_offset[1])); + int qp_thresh = 15 - h->slice_alpha_c0_offset - FFMAX3(0, h->pps.chroma_qp_index_offset[0], h->pps.chroma_qp_index_offset[1]); int qp = s->current_picture.qscale_table[mb_xy]; if(qp <= qp_thresh && (mb_x == 0 || ((qp + s->current_picture.qscale_table[mb_xy-1] + 1)>>1) <= qp_thresh) @@ -6513,6 +6316,43 @@ } } + // CAVLC 8x8dct requires NNZ values for residual decoding that differ from what the loop filter needs + if(!h->pps.cabac && h->pps.transform_8x8_mode){ + int top_type, left_type[2]; + top_type = s->current_picture.mb_type[h->top_mb_xy] ; + left_type[0] = s->current_picture.mb_type[h->left_mb_xy[0]]; + left_type[1] = s->current_picture.mb_type[h->left_mb_xy[1]]; + + if(IS_8x8DCT(top_type)){ + h->non_zero_count_cache[4+8*0]= + h->non_zero_count_cache[5+8*0]= h->cbp_table[h->top_mb_xy] & 4; + h->non_zero_count_cache[6+8*0]= + h->non_zero_count_cache[7+8*0]= h->cbp_table[h->top_mb_xy] & 8; + } + if(IS_8x8DCT(left_type[0])){ + h->non_zero_count_cache[3+8*1]= + h->non_zero_count_cache[3+8*2]= h->cbp_table[h->left_mb_xy[0]]&2; //FIXME check MBAFF + } + if(IS_8x8DCT(left_type[1])){ + h->non_zero_count_cache[3+8*3]= + h->non_zero_count_cache[3+8*4]= h->cbp_table[h->left_mb_xy[1]]&8; //FIXME check MBAFF + } + + if(IS_8x8DCT(mb_type)){ + h->non_zero_count_cache[scan8[0 ]]= h->non_zero_count_cache[scan8[1 ]]= + h->non_zero_count_cache[scan8[2 ]]= h->non_zero_count_cache[scan8[3 ]]= h->cbp_table[mb_xy] & 1; + + h->non_zero_count_cache[scan8[0+ 4]]= h->non_zero_count_cache[scan8[1+ 4]]= + h->non_zero_count_cache[scan8[2+ 4]]= h->non_zero_count_cache[scan8[3+ 4]]= h->cbp_table[mb_xy] & 2; + + h->non_zero_count_cache[scan8[0+ 8]]= h->non_zero_count_cache[scan8[1+ 8]]= + h->non_zero_count_cache[scan8[2+ 8]]= h->non_zero_count_cache[scan8[3+ 8]]= h->cbp_table[mb_xy] & 4; + + h->non_zero_count_cache[scan8[0+12]]= h->non_zero_count_cache[scan8[1+12]]= + h->non_zero_count_cache[scan8[2+12]]= h->non_zero_count_cache[scan8[3+12]]= h->cbp_table[mb_xy] & 8; + } + } + if (FRAME_MBAFF // left mb is in picture && h->slice_table[mb_xy-1] != 255 @@ -6577,6 +6417,8 @@ int edge; const int mbm_xy = dir == 0 ? mb_xy -1 : h->top_mb_xy; const int mbm_type = s->current_picture.mb_type[mbm_xy]; + int (*ref2frm) [64] = h->ref2frm[ h->slice_num &15 ][0] + (MB_MBAFF ? 20 : 2); + int (*ref2frmm)[64] = h->ref2frm[ h->slice_table[mbm_xy]&15 ][0] + (MB_MBAFF ? 20 : 2); int start = h->slice_table[mbm_xy] == 255 ? 1 : 0; const int edges = (mb_type & (MB_TYPE_16x16|MB_TYPE_SKIP)) @@ -6645,6 +6487,7 @@ /* mbn_xy: neighbor macroblock */ const int mbn_xy = edge > 0 ? mb_xy : mbm_xy; const int mbn_type = s->current_picture.mb_type[mbn_xy]; + int (*ref2frmn)[64] = edge > 0 ? ref2frm : ref2frmm; int16_t bS[4]; int qp; @@ -6682,11 +6525,23 @@ int b_idx= 8 + 4 + edge * (dir ? 8:1); int bn_idx= b_idx - (dir ? 8:1); int v = 0; - for( l = 0; !v && l < 1 + (h->slice_type == B_TYPE); l++ ) { - v |= ref2frm[h->ref_cache[l][b_idx]+2] != ref2frm[h->ref_cache[l][bn_idx]+2] || + + for( l = 0; !v && l < 1 + (h->slice_type_nos == B_TYPE); l++ ) { + v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] || FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 || FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit; } + + if(h->slice_type_nos == B_TYPE && v){ + v=0; + for( l = 0; !v && l < 2; l++ ) { + int ln= 1-l; + v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] || + FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] ) >= 4 || + FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit; + } + } + bS[0] = bS[1] = bS[2] = bS[3] = v; mv_done = 1; } @@ -6706,14 +6561,27 @@ else if(!mv_done) { bS[i] = 0; - for( l = 0; l < 1 + (h->slice_type == B_TYPE); l++ ) { - if( ref2frm[h->ref_cache[l][b_idx]+2] != ref2frm[h->ref_cache[l][bn_idx]+2] || + for( l = 0; l < 1 + (h->slice_type_nos == B_TYPE); l++ ) { + if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] || FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 || FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit ) { bS[i] = 1; break; } } + + if(h->slice_type_nos == B_TYPE && bS[i]){ + bS[i] = 0; + for( l = 0; l < 2; l++ ) { + int ln= 1-l; + if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] || + FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] ) >= 4 || + FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit ) { + bS[i] = 1; + break; + } + } + } } } @@ -6769,7 +6637,7 @@ /* calculate pre-state */ for( i= 0; i < 460; i++ ) { int pre; - if( h->slice_type == I_TYPE ) + if( h->slice_type_nos == I_TYPE ) pre = av_clip( ((cabac_context_init_I[i][0] * s->qscale) >>4 ) + cabac_context_init_I[i][1], 1, 126 ); else pre = av_clip( ((cabac_context_init_PB[h->cabac_init_idc][i][0] * s->qscale) >>4 ) + cabac_context_init_PB[h->cabac_init_idc][i][1], 1, 126 ); @@ -7014,7 +6882,7 @@ if( aspect_ratio_idc == EXTENDED_SAR ) { sps->sar.num= get_bits(&s->gb, 16); sps->sar.den= get_bits(&s->gb, 16); - }else if(aspect_ratio_idc < 14){ + }else if(aspect_ratio_idc < sizeof(pixel_aspect)/sizeof(*pixel_aspect)){ sps->sar= pixel_aspect[aspect_ratio_idc]; }else{ av_log(h->s.avctx, AV_LOG_ERROR, "illegal aspect ratio\n"); @@ -7125,9 +6993,6 @@ decode_scaling_list(h,scaling_matrix8[0],64,default_scaling8[0],fallback[2]); // Intra, Y decode_scaling_list(h,scaling_matrix8[1],64,default_scaling8[1],fallback[3]); // Inter, Y } - } else if(fallback_sps) { - memcpy(scaling_matrix4, sps->scaling_matrix4, 6*16*sizeof(uint8_t)); - memcpy(scaling_matrix8, sps->scaling_matrix8, 2*64*sizeof(uint8_t)); } } @@ -7174,15 +7039,21 @@ sps->profile_idc= profile_idc; sps->level_idc= level_idc; + memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4)); + memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8)); + sps->scaling_matrix_present = 0; + if(sps->profile_idc >= 100){ //high profile - if(get_ue_golomb(&s->gb) == 3) //chroma_format_idc + sps->chroma_format_idc= get_ue_golomb(&s->gb); + if(sps->chroma_format_idc == 3) get_bits1(&s->gb); //residual_color_transform_flag get_ue_golomb(&s->gb); //bit_depth_luma_minus8 get_ue_golomb(&s->gb); //bit_depth_chroma_minus8 sps->transform_bypass = get_bits1(&s->gb); decode_scaling_matrices(h, sps, NULL, 1, sps->scaling_matrix4, sps->scaling_matrix8); - }else - sps->scaling_matrix_present = 0; + }else{ + sps->chroma_format_idc= 1; + } sps->log2_max_frame_num= get_ue_golomb(&s->gb) + 4; sps->poc_type= get_ue_golomb(&s->gb); @@ -7209,8 +7080,9 @@ } tmp= get_ue_golomb(&s->gb); - if(tmp > MAX_PICTURE_COUNT-2){ + if(tmp > MAX_PICTURE_COUNT-2 || tmp >= 32){ av_log(h->s.avctx, AV_LOG_ERROR, "too many reference frames\n"); + return -1; } sps->ref_frame_count= tmp; sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb); @@ -7236,9 +7108,6 @@ if(sps->mb_aff) av_log(h->s.avctx, AV_LOG_ERROR, "MBAFF support not included; enable it at compile-time.\n"); #endif - if(!sps->direct_8x8_inference_flag && sps->mb_aff) - av_log(h->s.avctx, AV_LOG_ERROR, "MBAFF + !direct_8x8_inference is not implemented\n"); - sps->crop= get_bits1(&s->gb); if(sps->crop){ sps->crop_left = get_ue_golomb(&s->gb); @@ -7248,6 +7117,9 @@ if(sps->crop_left || sps->crop_top){ av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); } + if(sps->crop_right >= 8 || sps->crop_bottom >= (8>> !sps->frame_mbs_only_flag)){ + av_log(h->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n"); + } }else{ sps->crop_left = sps->crop_right = @@ -7260,7 +7132,7 @@ decode_vui_parameters(h, sps); if(s->avctx->debug&FF_DEBUG_PICT_INFO){ - av_log(h->s.avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s\n", + av_log(h->s.avctx, AV_LOG_DEBUG, "sps:%u profile:%d/%d poc:%d ref:%d %dx%d %s %s crop:%d/%d/%d/%d %s %s\n", sps_id, sps->profile_idc, sps->level_idc, sps->poc_type, sps->ref_frame_count, @@ -7269,7 +7141,8 @@ sps->direct_8x8_inference_flag ? "8B8" : "", sps->crop_left, sps->crop_right, sps->crop_top, sps->crop_bottom, - sps->vui_parameters_present_flag ? "VUI" : "" + sps->vui_parameters_present_flag ? "VUI" : "", + ((const char*[]){"Gray","420","422","444"})[sps->chroma_format_idc] ); } return 0; @@ -7279,8 +7152,8 @@ build_qp_table(PPS *pps, int t, int index) { int i; - for(i = 0; i < 255; i++) - pps->chroma_qp_table[t][i & 0xff] = chroma_qp[av_clip(i + index, 0, 51)]; + for(i = 0; i < 52; i++) + pps->chroma_qp_table[t][i] = chroma_qp[av_clip(i + index, 0, 51)]; } static inline int decode_picture_parameter_set(H264Context *h, int bit_length){ @@ -7358,8 +7231,8 @@ pps->transform_8x8_mode= 0; h->dequant_coeff_pps= -1; //contents of sps/pps can change even if id doesn't, so reinit - memset(pps->scaling_matrix4, 16, 6*16*sizeof(uint8_t)); - memset(pps->scaling_matrix8, 16, 2*64*sizeof(uint8_t)); + memcpy(pps->scaling_matrix4, h->sps_buffers[pps->sps_id]->scaling_matrix4, sizeof(pps->scaling_matrix4)); + memcpy(pps->scaling_matrix8, h->sps_buffers[pps->sps_id]->scaling_matrix8, sizeof(pps->scaling_matrix8)); if(get_bits_count(&s->gb) < bit_length){ pps->transform_8x8_mode= get_bits1(&s->gb); @@ -7370,11 +7243,9 @@ } build_qp_table(pps, 0, pps->chroma_qp_index_offset[0]); - if(pps->chroma_qp_index_offset[0] != pps->chroma_qp_index_offset[1]) { - build_qp_table(pps, 1, pps->chroma_qp_index_offset[1]); + build_qp_table(pps, 1, pps->chroma_qp_index_offset[1]); + if(pps->chroma_qp_index_offset[0] != pps->chroma_qp_index_offset[1]) h->pps.chroma_qp_diff= 1; - } else - memcpy(pps->chroma_qp_table[1], pps->chroma_qp_table[0], 256); if(s->avctx->debug&FF_DEBUG_PICT_INFO){ av_log(h->s.avctx, AV_LOG_DEBUG, "pps:%u sps:%u %s slice_groups:%d ref:%d/%d %s qp:%d/%d/%d/%d %s %s %s %s\n", @@ -7430,7 +7301,7 @@ } -static int decode_nal_units(H264Context *h, uint8_t *buf, int buf_size){ +static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){ MpegEncContext * const s = &h->s; AVCodecContext * const avctx= s->avctx; int buf_index=0; @@ -7454,7 +7325,7 @@ int consumed; int dst_length; int bit_length; - uint8_t *ptr; + const uint8_t *ptr; int i, nalsize = 0; int err; @@ -7499,8 +7370,10 @@ av_log(h->s.avctx, AV_LOG_DEBUG, "NAL %d at %d/%d length %d\n", hx->nal_unit_type, buf_index, buf_size, dst_length); } - if (h->is_avc && (nalsize != consumed)) + if (h->is_avc && (nalsize != consumed)){ av_log(h->s.avctx, AV_LOG_ERROR, "AVC: Consumed only %d bytes instead of %d\n", consumed, nalsize); + consumed= nalsize; + } buf_index += consumed; @@ -7529,8 +7402,8 @@ s->current_picture_ptr->key_frame|= (hx->nal_unit_type == NAL_IDR_SLICE); if(hx->redundant_pic_count==0 && hx->s.hurry_up < 5 && (avctx->skip_frame < AVDISCARD_NONREF || hx->nal_ref_idc) - && (avctx->skip_frame < AVDISCARD_BIDIR || hx->slice_type!=B_TYPE) - && (avctx->skip_frame < AVDISCARD_NONKEY || hx->slice_type==I_TYPE) + && (avctx->skip_frame < AVDISCARD_BIDIR || hx->slice_type_nos!=B_TYPE) + && (avctx->skip_frame < AVDISCARD_NONKEY || hx->slice_type_nos==I_TYPE) && avctx->skip_frame < AVDISCARD_ALL) context_count++; break; @@ -7554,8 +7427,8 @@ && s->context_initialized && s->hurry_up < 5 && (avctx->skip_frame < AVDISCARD_NONREF || hx->nal_ref_idc) - && (avctx->skip_frame < AVDISCARD_BIDIR || hx->slice_type!=B_TYPE) - && (avctx->skip_frame < AVDISCARD_NONKEY || hx->slice_type==I_TYPE) + && (avctx->skip_frame < AVDISCARD_BIDIR || hx->slice_type_nos!=B_TYPE) + && (avctx->skip_frame < AVDISCARD_NONKEY || hx->slice_type_nos==I_TYPE) && avctx->skip_frame < AVDISCARD_ALL) context_count++; break; @@ -7600,7 +7473,7 @@ else if(err == 1) { /* Slice could not be decoded in parallel mode, copy down * NAL unit stuff to context 0 and restart. Note that - * rbsp_buffer is not transfered, but since we no longer + * rbsp_buffer is not transferred, but since we no longer * run in parallel mode this should not be an issue. */ h->nal_unit_type = hx->nal_unit_type; h->nal_ref_idc = hx->nal_ref_idc; @@ -7617,22 +7490,15 @@ * returns the number of bytes consumed for building the current frame */ static int get_consumed_bytes(MpegEncContext *s, int pos, int buf_size){ - if(s->flags&CODEC_FLAG_TRUNCATED){ - pos -= s->parse_context.last_index; - if(pos<0) pos=0; // FIXME remove (unneeded?) - - return pos; - }else{ if(pos==0) pos=1; //avoid infinite loops (i doubt that is needed but ...) if(pos+10>buf_size) pos=buf_size; // oops ;) return pos; - } } static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, - uint8_t *buf, int buf_size) + const uint8_t *buf, int buf_size) { H264Context *h = avctx->priv_data; MpegEncContext *s = &h->s; @@ -7642,7 +7508,7 @@ s->flags= avctx->flags; s->flags2= avctx->flags2; - /* no supplementary picture */ + /* end of stream, output what is still in the buffers */ if (buf_size == 0) { Picture *out; int i, out_idx; @@ -7650,7 +7516,7 @@ //FIXME factorize this with the output code below out = h->delayed_pic[0]; out_idx = 0; - for(i=1; h->delayed_pic[i] && !h->delayed_pic[i]->key_frame; i++) + for(i=1; h->delayed_pic[i] && (h->delayed_pic[i]->poc && !h->delayed_pic[i]->key_frame); i++) if(h->delayed_pic[i]->poc < out->poc){ out = h->delayed_pic[i]; out_idx = i; @@ -7667,14 +7533,6 @@ return 0; } - if(s->flags&CODEC_FLAG_TRUNCATED){ - int next= ff_h264_find_frame_end(h, buf, buf_size); - - if( ff_combine_frame(&s->parse_context, next, (const uint8_t **)&buf, &buf_size) < 0 ) - return buf_size; -//printf("next:%d buf_size:%d last_index:%d\n", next, buf_size, s->parse_context.last_index); - } - if(h->is_avc && !h->got_avcC) { int i, cnt, nalsize; unsigned char *p = avctx->extradata; @@ -7716,9 +7574,10 @@ h->got_avcC = 1; } - if(avctx->frame_number==0 && !h->is_avc && s->avctx->extradata_size){ + if(!h->got_avcC && !h->is_avc && s->avctx->extradata_size){ if(decode_nal_units(h, s->avctx->extradata, s->avctx->extradata_size) < 0) return -1; + h->got_avcC = 1; } buf_index=decode_nal_units(h, buf, buf_size); @@ -7734,7 +7593,6 @@ if(!(s->flags2 & CODEC_FLAG2_CHUNKS) || (s->mb_y >= s->mb_height && s->mb_height)){ Picture *out = s->current_picture_ptr; Picture *cur = s->current_picture_ptr; - Picture *prev = h->delayed_output_pic; int i, pics, cross_idr, out_of_order, out_idx; s->mb_y= 0; @@ -7742,13 +7600,13 @@ s->current_picture_ptr->qscale_type= FF_QSCALE_TYPE_H264; s->current_picture_ptr->pict_type= s->pict_type; - h->prev_frame_num_offset= h->frame_num_offset; - h->prev_frame_num= h->frame_num; if(!s->dropable) { + execute_ref_pic_marking(h, h->mmco, h->mmco_index); h->prev_poc_msb= h->poc_msb; h->prev_poc_lsb= h->poc_lsb; - execute_ref_pic_marking(h, h->mmco, h->mmco_index); } + h->prev_frame_num_offset= h->frame_num_offset; + h->prev_frame_num= h->frame_num; /* * FIXME: Error handling code does not seem to support interlaced @@ -7767,7 +7625,7 @@ MPV_frame_end(s); - if (s->first_field) { + if (cur->field_poc[0]==INT_MAX || cur->field_poc[1]==INT_MAX) { /* Wait for second field. */ *data_size = 0; @@ -7778,9 +7636,6 @@ //FIXME do something with unavailable reference frames -#if 0 //decode order - *data_size = sizeof(AVFrame); -#else /* Sort B-frames into display order */ if(h->sps.bitstream_restriction_flag @@ -7789,63 +7644,56 @@ s->low_delay = 0; } + if( s->avctx->strict_std_compliance >= FF_COMPLIANCE_STRICT + && !h->sps.bitstream_restriction_flag){ + s->avctx->has_b_frames= MAX_DELAYED_PIC_COUNT; + s->low_delay= 0; + } + pics = 0; while(h->delayed_pic[pics]) pics++; - assert(pics+1 < sizeof(h->delayed_pic) / sizeof(h->delayed_pic[0])); + assert(pics <= MAX_DELAYED_PIC_COUNT); h->delayed_pic[pics++] = cur; if(cur->reference == 0) cur->reference = DELAYED_PIC_REF; - cross_idr = 0; - for(i=0; h->delayed_pic[i]; i++) - if(h->delayed_pic[i]->key_frame || h->delayed_pic[i]->poc==0) - cross_idr = 1; - out = h->delayed_pic[0]; out_idx = 0; - for(i=1; h->delayed_pic[i] && !h->delayed_pic[i]->key_frame; i++) + for(i=1; h->delayed_pic[i] && (h->delayed_pic[i]->poc && !h->delayed_pic[i]->key_frame); i++) if(h->delayed_pic[i]->poc < out->poc){ out = h->delayed_pic[i]; out_idx = i; } + cross_idr = !h->delayed_pic[0]->poc || !!h->delayed_pic[i] || h->delayed_pic[0]->key_frame; + + out_of_order = !cross_idr && out->poc < h->outputed_poc; - out_of_order = !cross_idr && prev && out->poc < prev->poc; if(h->sps.bitstream_restriction_flag && s->avctx->has_b_frames >= h->sps.num_reorder_frames) { } - else if(prev && pics <= s->avctx->has_b_frames) - out = prev; - else if((out_of_order && pics-1 == s->avctx->has_b_frames && pics < 15) + else if((out_of_order && pics-1 == s->avctx->has_b_frames && s->avctx->has_b_frames < MAX_DELAYED_PIC_COUNT) || (s->low_delay && - ((!cross_idr && prev && out->poc > prev->poc + 2) + ((!cross_idr && out->poc > h->outputed_poc + 2) || cur->pict_type == B_TYPE))) { s->low_delay = 0; s->avctx->has_b_frames++; - out = prev; } - else if(out_of_order) - out = prev; if(out_of_order || pics > s->avctx->has_b_frames){ + out->reference &= ~DELAYED_PIC_REF; for(i=out_idx; h->delayed_pic[i]; i++) h->delayed_pic[i] = h->delayed_pic[i+1]; } - - if(prev == out) - *data_size = 0; - else + if(!out_of_order && pics > s->avctx->has_b_frames){ *data_size = sizeof(AVFrame); - if(prev && prev != out && prev->reference == DELAYED_PIC_REF) - prev->reference = 0; - h->delayed_output_pic = out; -#endif - if(out) + h->outputed_poc = out->poc; *pict= *(AVFrame*)out; - else + }else{ av_log(avctx, AV_LOG_DEBUG, "no picture\n"); + } } } @@ -7855,7 +7703,7 @@ #if 0 //? /* Return the Picture timestamp as the frame number */ - /* we substract 1 because it is added on utils.c */ + /* we subtract 1 because it is added on utils.c */ avctx->frame_number = s->picture_number - 1; #endif return get_consumed_bytes(s, buf_index, buf_size); @@ -7880,11 +7728,12 @@ } #endif -#if 0 //selftest +#ifdef TEST +#undef printf #undef random #define COUNT 8000 #define SIZE (COUNT*40) -int main(){ +int main(void){ int i; uint8_t temp[SIZE]; PutBitContext pb; @@ -7944,6 +7793,7 @@ STOP_TIMER("get_se_golomb"); } +#if 0 printf("testing 4x4 (I)DCT\n"); DCTELEM block[16]; @@ -7983,14 +7833,12 @@ } } printf("error=%f max_error=%d\n", ((float)error)/COUNT/16, (int)max_error ); -#if 0 printf("testing quantizer\n"); for(qp=0; qp<52; qp++){ for(i=0; i<16; i++) src1_block[i]= src2_block[i]= random()%255; } -#endif printf("Testing NAL layer\n"); uint8_t bitstream[COUNT]; @@ -8046,13 +7894,14 @@ return -1; } } +#endif printf("Testing RBSP\n"); return 0; } -#endif +#endif /* TEST */ static int decode_end(AVCodecContext *avctx) @@ -8080,7 +7929,7 @@ NULL, decode_end, decode_frame, - /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY, + /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_DELAY, .flush= flush_dpb, }; diff -uNr mythtv-0.21/libs/libavcodec/h264data.h mythtv/libs/libavcodec/h264data.h --- mythtv-0.21/libs/libavcodec/h264data.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/h264data.h 2008-09-22 22:58:47.000000000 +0200 @@ -54,7 +54,7 @@ NAL_AUXILIARY_SLICE=19 }; -static const AVRational pixel_aspect[14]={ +static const AVRational pixel_aspect[17]={ {0, 1}, {1, 1}, {12, 11}, @@ -69,6 +69,9 @@ {15, 11}, {64, 33}, {160,99}, + {4, 3}, + {3, 2}, + {2, 1}, }; static const uint8_t golomb_to_pict_type[5]= @@ -109,6 +112,14 @@ 6, 24, 25, 20, 26, 21, 46, 28, 27, 47, 22, 29, 23, 30, 31, 12 }; +static const uint8_t golomb_to_inter_cbp_gray[16]={ + 0, 1, 2, 4, 8, 3, 5,10,12,15, 7,11,13,14, 6, 9, +}; + +static const uint8_t golomb_to_intra4x4_cbp_gray[16]={ +15, 0, 7,11,13,14, 3, 5,10,12, 1, 2, 4, 8, 6, 9, +}; + static const uint8_t chroma_dc_coeff_token_len[4*5]={ 2, 0, 0, 0, 6, 1, 0, 0, diff -uNr mythtv-0.21/libs/libavcodec/h264.h mythtv/libs/libavcodec/h264.h --- mythtv-0.21/libs/libavcodec/h264.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/h264.h 2008-09-23 00:19:20.000000000 +0200 @@ -51,10 +51,14 @@ #define MAX_MMCO_COUNT 66 +#define MAX_DELAYED_PIC_COUNT 16 + /* Compiling in interlaced support reduces the speed * of progressive decoding by about 2%. */ #define ALLOW_INTERLACE +#define ALLOW_NOCHROMA + #ifdef ALLOW_INTERLACE #define MB_MBAFF h->mb_mbaff #define MB_FIELD h->mb_field_decoding_flag @@ -70,6 +74,16 @@ #endif #define FIELD_OR_MBAFF_PICTURE (FRAME_MBAFF || FIELD_PICTURE) +#ifdef ALLOW_NOCHROMA +#define CHROMA h->sps.chroma_format_idc +#else +#define CHROMA 1 +#endif + +#ifndef ENABLE_H264_ENCODER +#define ENABLE_H264_ENCODER 0 +#endif + /** * Sequence parameter set */ @@ -77,6 +91,7 @@ int profile_idc; int level_idc; + int chroma_format_idc; int transform_bypass; ///< qpprime_y_zero_transform_bypass_flag int log2_max_frame_num; ///< log2_max_frame_num_minus4 + 4 int poc_type; ///< pic_order_cnt_type @@ -132,7 +147,7 @@ int transform_8x8_mode; ///< transform_8x8_mode_flag uint8_t scaling_matrix4[6][16]; uint8_t scaling_matrix8[2][64]; - uint8_t chroma_qp_table[2][256]; ///< pre-scaled (with chroma_qp_index_offset) version of qp_table + uint8_t chroma_qp_table[2][64]; ///< pre-scaled (with chroma_qp_index_offset) version of qp_table int chroma_qp_diff; }PPS; @@ -264,6 +279,7 @@ uint8_t *slice_table_base; uint8_t *slice_table; ///< slice_table_base + 2*mb_stride + 1 int slice_type; + int slice_type_nos; ///< S free slice type (SI/SP are remapped to I/P) int slice_type_fixed; //interlacing specific flags @@ -315,9 +331,9 @@ int direct_spatial_mv_pred; int dist_scale_factor[16]; - int dist_scale_factor_field[32]; - int map_col_to_list0[2][16]; - int map_col_to_list0_field[2][32]; + int dist_scale_factor_field[2][32]; + int map_col_to_list0[2][16+32]; + int map_col_to_list0_field[2][2][16+32]; /** * num_ref_idx_l0/1_active_minus1 + 1 @@ -330,8 +346,9 @@ Picture ref_list[2][48]; /**< 0..15: frame refs, 16..47: mbaff field refs. Reordered version of default_ref_list according to picture reordering in slice header */ - Picture *delayed_pic[18]; //FIXME size? - Picture *delayed_output_pic; + int ref2frm[16][2][64]; ///< reference to frame number lists, used in the loop filter, the first 2 are for -2,-1 + Picture *delayed_pic[MAX_DELAYED_PIC_COUNT+2]; //FIXME size? + int outputed_poc; /** * memory management control operations buffer. @@ -414,6 +431,8 @@ int last_slice_type; /** @} */ + int mb_xy; + }H264Context; #endif /* FFMPEG_H264_H */ diff -uNr mythtv-0.21/libs/libavcodec/h264pred.c mythtv/libs/libavcodec/h264pred.c --- mythtv-0.21/libs/libavcodec/h264pred.c 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/h264pred.c 2008-09-22 22:58:47.000000000 +0200 @@ -677,6 +677,29 @@ } } +//the following 4 function should not be optimized! +static void pred8x8_mad_cow_dc_l0t(uint8_t *src, int stride){ + pred8x8_top_dc_c(src, stride); + pred4x4_dc_c(src, NULL, stride); +} + +static void pred8x8_mad_cow_dc_0lt(uint8_t *src, int stride){ + pred8x8_dc_c(src, stride); + pred4x4_top_dc_c(src, NULL, stride); +} + +static void pred8x8_mad_cow_dc_l00(uint8_t *src, int stride){ + pred8x8_left_dc_c(src, stride); + pred4x4_128_dc_c(src + 4*stride , NULL, stride); + pred4x4_128_dc_c(src + 4*stride + 4, NULL, stride); +} + +static void pred8x8_mad_cow_dc_0l0(uint8_t *src, int stride){ + pred8x8_left_dc_c(src, stride); + pred4x4_128_dc_c(src , NULL, stride); + pred4x4_128_dc_c(src + 4, NULL, stride); +} + static void pred8x8_dc_rv40_c(uint8_t *src, int stride){ int i; int dc0=0; @@ -1032,6 +1055,10 @@ h->pred8x8[DC_PRED8x8 ]= pred8x8_dc_c; h->pred8x8[LEFT_DC_PRED8x8]= pred8x8_left_dc_c; h->pred8x8[TOP_DC_PRED8x8 ]= pred8x8_top_dc_c; + h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8 ]= pred8x8_mad_cow_dc_l0t; + h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8 ]= pred8x8_mad_cow_dc_0lt; + h->pred8x8[ALZHEIMER_DC_L00_PRED8x8 ]= pred8x8_mad_cow_dc_l00; + h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8 ]= pred8x8_mad_cow_dc_0l0; }else{ h->pred8x8[DC_PRED8x8 ]= pred8x8_dc_rv40_c; h->pred8x8[LEFT_DC_PRED8x8]= pred8x8_left_dc_rv40_c; diff -uNr mythtv-0.21/libs/libavcodec/h264pred.h mythtv/libs/libavcodec/h264pred.h --- mythtv-0.21/libs/libavcodec/h264pred.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/h264pred.h 2008-09-22 22:58:47.000000000 +0200 @@ -59,6 +59,11 @@ #define LEFT_DC_PRED8x8 4 #define TOP_DC_PRED8x8 5 #define DC_128_PRED8x8 6 + +#define ALZHEIMER_DC_L0T_PRED8x8 7 +#define ALZHEIMER_DC_0LT_PRED8x8 8 +#define ALZHEIMER_DC_L00_PRED8x8 9 +#define ALZHEIMER_DC_0L0_PRED8x8 10 //@} /** @@ -67,7 +72,7 @@ typedef struct H264PredContext{ void (*pred4x4 [9+3+2])(uint8_t *src, uint8_t *topright, int stride);//FIXME move to dsp? void (*pred8x8l [9+3])(uint8_t *src, int topleft, int topright, int stride); - void (*pred8x8 [4+3])(uint8_t *src, int stride); + void (*pred8x8 [4+3+4])(uint8_t *src, int stride); void (*pred16x16[4+3])(uint8_t *src, int stride); }H264PredContext; diff -uNr mythtv-0.21/libs/libavcodec/i386/h264dsp_mmx.c mythtv/libs/libavcodec/i386/h264dsp_mmx.c --- mythtv-0.21/libs/libavcodec/i386/h264dsp_mmx.c 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/i386/h264dsp_mmx.c 2008-09-22 22:58:47.000000000 +0200 @@ -19,6 +19,9 @@ */ +DECLARE_ALIGNED_8 (static const uint64_t, ff_pb_3_1 ) = 0x0103010301030103ULL; +DECLARE_ALIGNED_8 (static const uint64_t, ff_pb_7_3 ) = 0x0307030703070307ULL; + /***********************************/ /* IDCT */ @@ -547,7 +550,7 @@ } static void h264_loop_filter_strength_mmx2( int16_t bS[2][4][4], uint8_t nnz[40], int8_t ref[2][40], int16_t mv[2][40][2], - int bidir, int edges, int step, int mask_mv0, int mask_mv1 ) { + int bidir, int edges, int step, int mask_mv0, int mask_mv1, int field ) { int dir; asm volatile( "pxor %%mm7, %%mm7 \n\t" @@ -556,6 +559,13 @@ "movq %2, %%mm4 \n\t" ::"m"(ff_pb_1), "m"(ff_pb_3), "m"(ff_pb_7) ); + if(field) + asm volatile( + "movq %0, %%mm5 \n\t" + "movq %1, %%mm4 \n\t" + ::"m"(ff_pb_3_1), "m"(ff_pb_7_3) + ); + // could do a special case for dir==0 && edges==1, but it only reduces the // average filter time by 1.2% for( dir=1; dir>=0; dir-- ) { diff -uNr mythtv-0.21/libs/libavcodec/i386/h264_i386.h mythtv/libs/libavcodec/i386/h264_i386.h --- mythtv-0.21/libs/libavcodec/i386/h264_i386.h 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libavcodec/i386/h264_i386.h 2008-09-22 22:58:47.000000000 +0200 @@ -0,0 +1,144 @@ +/* + * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder + * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file h264_i386.h + * H.264 / AVC / MPEG4 part10 codec. + * non-MMX i386-specific optimizations for H.264 + * @author Michael Niedermayer <michaelni@gmx.at> + */ + +#ifndef FFMPEG_H264_I386_H +#define FFMPEG_H264_I386_H + + +#include "cabac.h" + +//FIXME use some macros to avoid duplicatin get_cabac (cannot be done yet as that would make optimization work hard) +#if defined(ARCH_X86) && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) +static int decode_significance_x86(CABACContext *c, int max_coeff, uint8_t *significant_coeff_ctx_base, int *index){ + void *end= significant_coeff_ctx_base + max_coeff - 1; + int minusstart= -(int)significant_coeff_ctx_base; + int minusindex= 4-(int)index; + int coeff_count; + asm volatile( + "movl "RANGE "(%3), %%esi \n\t" + "movl "LOW "(%3), %%ebx \n\t" + + "2: \n\t" + + BRANCHLESS_GET_CABAC("%%edx", "%3", "(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") + + "test $1, %%edx \n\t" + " jz 3f \n\t" + + BRANCHLESS_GET_CABAC("%%edx", "%3", "61(%1)", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") + + "mov %2, %%"REG_a" \n\t" + "movl %4, %%ecx \n\t" + "add %1, %%"REG_c" \n\t" + "movl %%ecx, (%%"REG_a") \n\t" + + "test $1, %%edx \n\t" + " jnz 4f \n\t" + + "add $4, %%"REG_a" \n\t" + "mov %%"REG_a", %2 \n\t" + + "3: \n\t" + "add $1, %1 \n\t" + "cmp %5, %1 \n\t" + " jb 2b \n\t" + "mov %2, %%"REG_a" \n\t" + "movl %4, %%ecx \n\t" + "add %1, %%"REG_c" \n\t" + "movl %%ecx, (%%"REG_a") \n\t" + "4: \n\t" + "add %6, %%eax \n\t" + "shr $2, %%eax \n\t" + + "movl %%esi, "RANGE "(%3) \n\t" + "movl %%ebx, "LOW "(%3) \n\t" + :"=&a"(coeff_count), "+r"(significant_coeff_ctx_base), "+m"(index) + :"r"(c), "m"(minusstart), "m"(end), "m"(minusindex) + : "%"REG_c, "%ebx", "%edx", "%esi", "memory" + ); + return coeff_count; +} + +static int decode_significance_8x8_x86(CABACContext *c, uint8_t *significant_coeff_ctx_base, int *index, const uint8_t *sig_off){ + int minusindex= 4-(int)index; + int coeff_count; + long last=0; + asm volatile( + "movl "RANGE "(%3), %%esi \n\t" + "movl "LOW "(%3), %%ebx \n\t" + + "mov %1, %%"REG_D" \n\t" + "2: \n\t" + + "mov %6, %%"REG_a" \n\t" + "movzbl (%%"REG_a", %%"REG_D"), %%edi \n\t" + "add %5, %%"REG_D" \n\t" + + BRANCHLESS_GET_CABAC("%%edx", "%3", "(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") + + "mov %1, %%edi \n\t" + "test $1, %%edx \n\t" + " jz 3f \n\t" + + "movzbl "MANGLE(last_coeff_flag_offset_8x8)"(%%edi), %%edi\n\t" + "add %5, %%"REG_D" \n\t" + + BRANCHLESS_GET_CABAC("%%edx", "%3", "15(%%"REG_D")", "%%ebx", "%%bx", "%%esi", "%%eax", "%%al") + + "mov %2, %%"REG_a" \n\t" + "mov %1, %%edi \n\t" + "movl %%edi, (%%"REG_a") \n\t" + + "test $1, %%edx \n\t" + " jnz 4f \n\t" + + "add $4, %%"REG_a" \n\t" + "mov %%"REG_a", %2 \n\t" + + "3: \n\t" + "addl $1, %%edi \n\t" + "mov %%edi, %1 \n\t" + "cmpl $63, %%edi \n\t" + " jb 2b \n\t" + "mov %2, %%"REG_a" \n\t" + "movl %%edi, (%%"REG_a") \n\t" + "4: \n\t" + "addl %4, %%eax \n\t" + "shr $2, %%eax \n\t" + + "movl %%esi, "RANGE "(%3) \n\t" + "movl %%ebx, "LOW "(%3) \n\t" + :"=&a"(coeff_count),"+m"(last), "+m"(index) + :"r"(c), "m"(minusindex), "m"(significant_coeff_ctx_base), "m"(sig_off) + : "%"REG_c, "%ebx", "%edx", "%esi", "%"REG_D, "memory" + ); + return coeff_count; +} +#endif /* defined(ARCH_X86) && && defined(HAVE_7REGS) && defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) */ + +#endif /* FFMPEG_H264_I386_H */ diff -uNr mythtv-0.21/libs/libavcodec/i386/motion_est_mmx.c mythtv/libs/libavcodec/i386/motion_est_mmx.c --- mythtv-0.21/libs/libavcodec/i386/motion_est_mmx.c 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/i386/motion_est_mmx.c 2008-09-22 22:58:47.000000000 +0200 @@ -24,13 +24,13 @@ #include "dsputil.h" #include "x86_cpu.h" -static const __attribute__ ((aligned(8))) uint64_t round_tab[3]={ +DECLARE_ASM_CONST(8, uint64_t, round_tab[3])={ 0x0000000000000000ULL, 0x0001000100010001ULL, 0x0002000200020002ULL, }; -static attribute_used __attribute__ ((aligned(8))) uint64_t bone= 0x0101010101010101LL; +DECLARE_ASM_CONST(8, uint64_t, bone)= 0x0101010101010101LL; static inline void sad8_1_mmx(uint8_t *blk1, uint8_t *blk2, int stride, int h) { diff -uNr mythtv-0.21/libs/libavcodec/i386/simple_idct_mmx.c mythtv/libs/libavcodec/i386/simple_idct_mmx.c --- mythtv-0.21/libs/libavcodec/i386/simple_idct_mmx.c 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/i386/simple_idct_mmx.c 2008-09-22 22:58:47.000000000 +0200 @@ -48,8 +48,8 @@ #define ROW_SHIFT 11 #define COL_SHIFT 20 // 6 -static const uint64_t attribute_used __attribute__((aligned(8))) wm1010= 0xFFFF0000FFFF0000ULL; -static const uint64_t attribute_used __attribute__((aligned(8))) d40000= 0x0000000000040000ULL; +DECLARE_ASM_CONST(8, uint64_t, wm1010)= 0xFFFF0000FFFF0000ULL; +DECLARE_ASM_CONST(8, uint64_t, d40000)= 0x0000000000040000ULL; static const int16_t __attribute__((aligned(8))) coeffs[]= { 1<<(ROW_SHIFT-1), 0, 1<<(ROW_SHIFT-1), 0, diff -uNr mythtv-0.21/libs/libavcodec/libavcodec.pro mythtv/libs/libavcodec/libavcodec.pro --- mythtv-0.21/libs/libavcodec/libavcodec.pro 2008-02-06 04:02:47.000000000 +0100 +++ mythtv/libs/libavcodec/libavcodec.pro 2008-11-05 06:18:59.000000000 +0100 @@ -27,8 +27,6 @@ QMAKE_CFLAGS_SHLIB = } -mingw:target.path = $${PREFIX}/bin - !profile:QMAKE_CFLAGS_DEBUG += -O QMAKE_CLEAN += $(TARGET) $(TARGETA) $(TARGETD) $(TARGET0) $(TARGET1) $(TARGET2) @@ -410,7 +408,7 @@ } contains( HAVE_ARMV5TE, yes ) { - SOURCES += armv4l/simple_idct_armv5te.S armv4l/mpegvideo_armv5te.S + SOURCES += armv4l/simple_idct_armv5te.S armv4l/mpegvideo_armv5te.c } contains( HAVE_ARMV6, yes ) { SOURCES += armv4l/simple_idct_armv6.S } @@ -467,3 +465,4 @@ SOURCES += bfin/vp3_idct_bfin.S } +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libavcodec/mpegvideo.c mythtv/libs/libavcodec/mpegvideo.c --- mythtv-0.21/libs/libavcodec/mpegvideo.c 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/mpegvideo.c 2008-09-22 22:58:47.000000000 +0200 @@ -591,9 +591,7 @@ s->context_initialized = 1; s->thread_context[0]= s; - /* h264 does thread context setup itself, but it needs context[0] - * to be fully initialized for the error resilience code */ - threads = s->codec_id == CODEC_ID_H264 ? 1 : s->avctx->thread_count; + threads = s->avctx->thread_count; for(i=1; i<threads; i++){ s->thread_context[i]= av_malloc(sizeof(MpegEncContext)); diff -uNr mythtv-0.21/libs/libavcodec/mpegvideo.h mythtv/libs/libavcodec/mpegvideo.h --- mythtv-0.21/libs/libavcodec/mpegvideo.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavcodec/mpegvideo.h 2008-09-23 00:19:20.000000000 +0200 @@ -142,8 +142,9 @@ int pic_id; /**< h264 pic_num (short -> no wrap version of pic_num, pic_num & max_pic_num; long -> long_pic_num) */ int long_ref; ///< 1->long term reference 0->short term reference - int ref_poc[2][16]; ///< h264 POCs of the frames used as reference - int ref_count[2]; ///< number of entries in ref_poc + int ref_poc[2][2][16]; ///< h264 POCs of the frames used as reference (FIXME need per slice) + int ref_count[2][2]; ///< number of entries in ref_poc (FIXME need per slice) + int mbaff; ///< h264 1 -> MBAFF frame 0-> not MBAFF int mb_var_sum; ///< sum of MB variance for current frame int mc_mb_var_sum; ///< motion compensated MB variance for current frame diff -uNr mythtv-0.21/libs/libavcodec/rectangle.h mythtv/libs/libavcodec/rectangle.h --- mythtv-0.21/libs/libavcodec/rectangle.h 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libavcodec/rectangle.h 2008-09-22 22:58:47.000000000 +0200 @@ -0,0 +1,121 @@ +/* + * rectangle filling function + * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file rectangle.h + * useful rectangle filling function + * @author Michael Niedermayer <michaelni@gmx.at> + */ + +#ifndef FFMPEG_RECTANGLE_H +#define FFMPEG_RECTANGLE_H + +#include "common.h" + +/** + * fill a rectangle. + * @param h height of the rectangle, should be a constant + * @param w width of the rectangle, should be a constant + * @param size the size of val (1 or 4), should be a constant + */ +static av_always_inline void fill_rectangle(void *vp, int w, int h, int stride, uint32_t val, int size){ + uint8_t *p= (uint8_t*)vp; + assert(size==1 || size==4); + assert(w<=4); + + w *= size; + stride *= size; + + assert((((long)vp)&(FFMIN(w, STRIDE_ALIGN)-1)) == 0); + assert((stride&(w-1))==0); + if(w==2){ + const uint16_t v= size==4 ? val : val*0x0101; + *(uint16_t*)(p + 0*stride)= v; + if(h==1) return; + *(uint16_t*)(p + 1*stride)= v; + if(h==2) return; + *(uint16_t*)(p + 2*stride)= v; + *(uint16_t*)(p + 3*stride)= v; + }else if(w==4){ + const uint32_t v= size==4 ? val : val*0x01010101; + *(uint32_t*)(p + 0*stride)= v; + if(h==1) return; + *(uint32_t*)(p + 1*stride)= v; + if(h==2) return; + *(uint32_t*)(p + 2*stride)= v; + *(uint32_t*)(p + 3*stride)= v; + }else if(w==8){ + //gcc can't optimize 64bit math on x86_32 +#if defined(ARCH_X86_64) || (defined(MP_WORDSIZE) && MP_WORDSIZE >= 64) + const uint64_t v= val*0x0100000001ULL; + *(uint64_t*)(p + 0*stride)= v; + if(h==1) return; + *(uint64_t*)(p + 1*stride)= v; + if(h==2) return; + *(uint64_t*)(p + 2*stride)= v; + *(uint64_t*)(p + 3*stride)= v; + }else if(w==16){ + const uint64_t v= val*0x0100000001ULL; + *(uint64_t*)(p + 0+0*stride)= v; + *(uint64_t*)(p + 8+0*stride)= v; + *(uint64_t*)(p + 0+1*stride)= v; + *(uint64_t*)(p + 8+1*stride)= v; + if(h==2) return; + *(uint64_t*)(p + 0+2*stride)= v; + *(uint64_t*)(p + 8+2*stride)= v; + *(uint64_t*)(p + 0+3*stride)= v; + *(uint64_t*)(p + 8+3*stride)= v; +#else + *(uint32_t*)(p + 0+0*stride)= val; + *(uint32_t*)(p + 4+0*stride)= val; + if(h==1) return; + *(uint32_t*)(p + 0+1*stride)= val; + *(uint32_t*)(p + 4+1*stride)= val; + if(h==2) return; + *(uint32_t*)(p + 0+2*stride)= val; + *(uint32_t*)(p + 4+2*stride)= val; + *(uint32_t*)(p + 0+3*stride)= val; + *(uint32_t*)(p + 4+3*stride)= val; + }else if(w==16){ + *(uint32_t*)(p + 0+0*stride)= val; + *(uint32_t*)(p + 4+0*stride)= val; + *(uint32_t*)(p + 8+0*stride)= val; + *(uint32_t*)(p +12+0*stride)= val; + *(uint32_t*)(p + 0+1*stride)= val; + *(uint32_t*)(p + 4+1*stride)= val; + *(uint32_t*)(p + 8+1*stride)= val; + *(uint32_t*)(p +12+1*stride)= val; + if(h==2) return; + *(uint32_t*)(p + 0+2*stride)= val; + *(uint32_t*)(p + 4+2*stride)= val; + *(uint32_t*)(p + 8+2*stride)= val; + *(uint32_t*)(p +12+2*stride)= val; + *(uint32_t*)(p + 0+3*stride)= val; + *(uint32_t*)(p + 4+3*stride)= val; + *(uint32_t*)(p + 8+3*stride)= val; + *(uint32_t*)(p +12+3*stride)= val; +#endif + }else + assert(0); + assert(h==4); +} + +#endif /* FFMPEG_RECTANGLE_H */ diff -uNr mythtv-0.21/libs/libavformat/libavformat.pro mythtv/libs/libavformat/libavformat.pro --- mythtv-0.21/libs/libavformat/libavformat.pro 2008-02-06 04:02:47.000000000 +0100 +++ mythtv/libs/libavformat/libavformat.pro 2008-06-04 06:05:51.000000000 +0200 @@ -13,8 +13,6 @@ LIBS += $$LOCAL_LIBDIR_X11 $$EXTRALIBS -mingw: target.path = $${PREFIX}/bin - QMAKE_CLEAN += $(TARGET) $(TARGETA) $(TARGETD) $(TARGET0) $(TARGET1) $(TARGET2) # Input @@ -198,3 +196,5 @@ } mingw:SOURCES -= audio.c + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libavformat/utils.c mythtv/libs/libavformat/utils.c --- mythtv-0.21/libs/libavformat/utils.c 2008-02-21 23:29:22.000000000 +0100 +++ mythtv/libs/libavformat/utils.c 2008-03-26 16:51:18.000000000 +0100 @@ -580,6 +580,10 @@ *pnum = 0; *pden = 0; + + if (!st || !st->codec) + return; + switch(st->codec->codec_type) { case CODEC_TYPE_VIDEO: if(st->time_base.num*1000LL > st->time_base.den){ @@ -792,7 +796,7 @@ for(;;) { /* select current input stream component */ st = s->cur_st; - if (st) { + if (st && st->codec) { if (!st->need_parsing || !st->parser) { /* no parsing needed: we just output the packet as is */ /* raw data support */ @@ -867,7 +871,7 @@ s->cur_pkt.pos = startpos; st = s->streams[s->cur_pkt.stream_index]; - if(st->codec->debug & FF_DEBUG_PTS) + if(st && st->codec && st->codec->debug & FF_DEBUG_PTS) av_log(s, AV_LOG_DEBUG, "av_read_packet stream=%d, pts=%"PRId64", dts=%"PRId64", size=%d\n", s->cur_pkt.stream_index, s->cur_pkt.pts, @@ -877,7 +881,7 @@ s->cur_st = st; s->cur_ptr = s->cur_pkt.data; s->cur_len = s->cur_pkt.size; - if (st->need_parsing && !st->parser) { + if (st && st->codec && st->need_parsing && !st->parser) { st->parser = av_parser_init(st->codec->codec_id); if (!st->parser) { /* no parser available : just output the raw packets */ @@ -892,7 +896,7 @@ } } } - if(st->codec->debug & FF_DEBUG_PTS) + if(st->codec && st->codec->debug & FF_DEBUG_PTS) av_log(s, AV_LOG_DEBUG, "av_read_frame_internal stream=%d, pts=%"PRId64", dts=%"PRId64", size=%d\n", pkt->stream_index, pkt->pts, diff -uNr mythtv-0.21/libs/libavutil/common.h mythtv/libs/libavutil/common.h --- mythtv-0.21/libs/libavutil/common.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavutil/common.h 2008-09-22 22:58:47.000000000 +0200 @@ -89,7 +89,9 @@ #define FFSIGN(a) ((a) > 0 ? 1 : -1) #define FFMAX(a,b) ((a) > (b) ? (a) : (b)) +#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) #define FFMIN(a,b) ((a) > (b) ? (b) : (a)) +#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) #define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) diff -uNr mythtv-0.21/libs/libavutil/libavutil.pro mythtv/libs/libavutil/libavutil.pro --- mythtv-0.21/libs/libavutil/libavutil.pro 2007-12-11 15:56:01.000000000 +0100 +++ mythtv/libs/libavutil/libavutil.pro 2008-06-04 06:05:51.000000000 +0200 @@ -53,4 +53,4 @@ QMAKE_LFLAGS_SHLIB += -seg1addr 0xC2000000 } -mingw: target.path = $${PREFIX}/bin +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libavutil/mem.h mythtv/libs/libavutil/mem.h --- mythtv-0.21/libs/libavutil/mem.h 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libavutil/mem.h 2008-09-22 22:58:47.000000000 +0200 @@ -28,8 +28,10 @@ #ifdef __GNUC__ #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n))) + #define DECLARE_ASM_CONST(n,t,v) static const t v attribute_used __attribute__ ((aligned (n))) #else #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v + #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v #endif /** diff -uNr mythtv-0.21/libs/libmyth/audiopulseutil.cpp mythtv/libs/libmyth/audiopulseutil.cpp --- mythtv-0.21/libs/libmyth/audiopulseutil.cpp 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libmyth/audiopulseutil.cpp 2009-04-20 05:33:44.000000000 +0200 @@ -0,0 +1,383 @@ +/*** + * This file was part of PulseAudio, the license has been upgraded to GPL v2 + * or later as per the LGPL grant this was originally distributed under. + * + * Copyright 2004-2006 Lennart Poettering + * + * MythTV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "audiopulseutil.h" +#include "util.h" // for IsPulseAudioRunning() +#include "exitcodes.h" +#include "mythcontext.h" + +#ifdef USING_PULSE + +#include <sys/types.h> +#include <sys/wait.h> + +#include <signal.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <limits.h> +#include <getopt.h> +#include <locale.h> + +#ifdef __linux__ +#include <sys/prctl.h> +#endif + +#include <pulse/pulseaudio.h> + +#include <qthread.h> +#include <qmutex.h> +#include <qwaitcondition.h> + +#define BUFSIZE 1024 + +#define LOC QString("AudioPulseUtil: ") +#define LOC_WARN QString("AudioPulseUtil, Warning: ") +#define LOC_ERR QString("AudioPulseUtil, Error: ") + +enum pa_values { + kPA_undefined = -1, + kPA_suspended = +0, + kPA_not_suspended_remote_server = +1, + kPA_not_suspended_error = +2, + kPA_not_suspended_success = +3, + kPA_unsuspended_error = +4, + kPA_unsuspended_success = +5, +}; + +static pa_context *pau_context = NULL; +static pa_mainloop_api *pau_mainloop_api = NULL; +static QMutex pau_lock; +static QWaitCondition pau_wait; +static int pau_value = kPA_undefined; + +static void pau_set_value(int new_value) +{ + QMutexLocker ml(&pau_lock); + pau_value = new_value; + pau_wait.wakeAll(); +} + +static void pau_quit(int ret) +{ + if (pau_mainloop_api) + pau_mainloop_api->quit(pau_mainloop_api, ret); +} + +static void pau_context_drain_complete(pa_context *c, void *userdata) +{ + if (c) + pa_context_disconnect(c); +} + +static void pau_drain(void) +{ + if (!pau_context) + return; + + pa_operation *operation = pa_context_drain(pau_context, pau_context_drain_complete, NULL); + if (!operation) + pa_context_disconnect(pau_context); + else + pa_operation_unref(operation); +} + +static void pau_suspend_complete(pa_context *c, int success, void *userdata) +{ + if (!success) + { + if (!c) + return; + + VERBOSE(VB_IMPORTANT, LOC_ERR + QString("Failure to suspend: %1") + .arg(pa_strerror(pa_context_errno(c)))); + + pau_set_value(kPA_not_suspended_error); + + return; + } + + { + QMutexLocker ml(&pau_lock); + if (kPA_suspended == pau_value) + return; + } + + VERBOSE(VB_GENERAL, LOC + "Suspend Success"); + + pau_set_value(kPA_suspended); +} + +static void pau_resume_complete(pa_context *c, int success, void *userdata) +{ + static int n = 0; + + n++; + + if (!success) + { + if (!c) + return; + + VERBOSE(VB_IMPORTANT, LOC_ERR + QString("Failure to resume: %1") + .arg(pa_strerror(pa_context_errno(c)))); + + pau_set_value(kPA_unsuspended_error); + + return; + } + + if (n >= 2) + pau_drain(); /* drain and quit */ + + { + QMutexLocker ml(&pau_lock); + if (kPA_unsuspended_success == pau_value) + return; + } + + VERBOSE(VB_GENERAL, LOC + "Resume Success"); + + pau_set_value(kPA_unsuspended_success); +} + +static void pau_context_state_callback(pa_context *c, void *userdata) +{ + if (!c) + return; + + switch (pa_context_get_state(c)) + { + case PA_CONTEXT_CONNECTING: + case PA_CONTEXT_AUTHORIZING: + case PA_CONTEXT_SETTING_NAME: + break; + + case PA_CONTEXT_READY: + if (pa_context_is_local(c)) + { + pa_operation *operation_sink = + pa_context_suspend_sink_by_index( + c, PA_INVALID_INDEX, 1, pau_suspend_complete, NULL); + pa_operation_unref(operation_sink); + + pa_operation *operation_source = + pa_context_suspend_source_by_index( + c, PA_INVALID_INDEX, 1, pau_suspend_complete, NULL); + pa_operation_unref(operation_source); + } + else + { + VERBOSE(VB_IMPORTANT, LOC_ERR + + "Sound server is not local, can not suspend."); + + pau_set_value(kPA_not_suspended_remote_server); + } + + break; + + case PA_CONTEXT_TERMINATED: + pau_quit(0); + break; + + case PA_CONTEXT_FAILED: + default: + VERBOSE(VB_IMPORTANT, LOC_WARN + + "Can not connect to sound server, can not suspend." + + QString("\n\t\t\t%1") + .arg(pa_strerror(pa_context_errno(c)))); + + pau_set_value(kPA_not_suspended_error); + + if (pau_context) + { + pa_context_unref(pau_context); + pau_context = NULL; + } + + break; + } +} + +void pau_pulseaudio_suspend_internal(void) +{ + pa_mainloop* m = NULL; + int ret = 1; + char *server = NULL; + const char *bn = "mythtv"; + + if (!(m = pa_mainloop_new())) + { + VERBOSE(VB_IMPORTANT, LOC_ERR + "pa_mainloop_new() failed."); + goto quit; + } + + pau_mainloop_api = pa_mainloop_get_api(m); + if (!pau_mainloop_api) + goto quit; + + if (pa_signal_init(pau_mainloop_api) != 0) + goto quit; + + if (!(pau_context = pa_context_new(pau_mainloop_api, bn))) + { + VERBOSE(VB_IMPORTANT, LOC_ERR + "pa_context_new() failed."); + goto quit; + } + + pa_context_set_state_callback(pau_context, pau_context_state_callback, NULL); + pa_context_connect(pau_context, server, PA_CONTEXT_NOAUTOSPAWN, NULL); + + if (pa_mainloop_run(m, &ret) < 0) + { + VERBOSE(VB_IMPORTANT, LOC_ERR + "pa_mainloop_run() failed.\n"); + goto quit; + } + +quit: + if (pau_context) + pa_context_unref(pau_context); + + if (m) { + pa_signal_done(); + pa_mainloop_free(m); + } + + pa_xfree(server); +} + +class PAThread : public QThread +{ + public: + void run(void) + { + pau_pulseaudio_suspend_internal(); + } +}; + +/// \returns true if successful +bool pulseaudio_suspend(void) +{ + QThread *t = new PAThread(); + t->start(); + + QMutexLocker ml(&pau_lock); + while (kPA_undefined == pau_value) + pau_wait.wait(&pau_lock); + + return kPA_suspended == pau_value; +} + +/// \returns true if successful +bool pulseaudio_unsuspend(void) +{ + if (!pau_context) + { + pau_quit(0); + return false; + } + + if (pa_context_is_local(pau_context)) + { + pa_operation *operation_sink = + pa_context_suspend_sink_by_index( + pau_context, PA_INVALID_INDEX, 0, pau_resume_complete, NULL); + pa_operation_unref(operation_sink); + + pa_operation *operation_source = + pa_context_suspend_source_by_index( + pau_context, PA_INVALID_INDEX, 0, pau_resume_complete, NULL); + pa_operation_unref(operation_source); + + QMutexLocker ml(&pau_lock); + while ((kPA_unsuspended_error != pau_value) && + (kPA_unsuspended_success != pau_value)) + { + pau_wait.wait(&pau_lock); + } + + return kPA_unsuspended_success == pau_value; + } + else + { + pau_drain(); + } + + return false; +} + +#endif // USING_PULSE + +int pulseaudio_handle_startup(void) +{ +#ifdef USING_PULSE + if (getenv("EXPERIMENTALLY_ALLOW_PULSE_AUDIO")) + { + VERBOSE(VB_IMPORTANT, "WARNING: "); + VERBOSE(VB_IMPORTANT, "WARNING: ***Pulse Audio is running!!!!***"); + VERBOSE(VB_IMPORTANT, "WARNING: "); + VERBOSE(VB_IMPORTANT, "WARNING: You have told MythTV to ignore it."); + VERBOSE(VB_IMPORTANT, "WARNING: "); + } + else if (IsPulseAudioRunning() && !pulseaudio_suspend()) + { + VERBOSE(VB_IMPORTANT, "ERROR: ***Pulse Audio is running!!!!***"); + VERBOSE(VB_IMPORTANT, + "ERROR: But MythTV was not able to suspend it. EXITING!"); + + return GENERIC_EXIT_NOT_OK; + } +#else + if (IsPulseAudioRunning()) + { + VERBOSE(VB_IMPORTANT, "ERROR: ***Pulse Audio is running!!!!***"); + VERBOSE(VB_IMPORTANT, "ERROR: But MythTV has not been compiled " + "with Pulse Audio disabling support. EXITING!"); + return GENERIC_EXIT_NOT_OK; + } +#endif + + return GENERIC_EXIT_OK; +} + +int pulseaudio_handle_teardown(void) +{ +#ifdef USING_PULSE + if (getenv("EXPERIMENTALLY_ALLOW_PULSE_AUDIO")) + return GENERIC_EXIT_OK; + + { + QMutexLocker ml(&pau_lock); + if (kPA_suspended != pau_value) + return GENERIC_EXIT_OK; + } + + if (!pulseaudio_unsuspend()) + { + VERBOSE(VB_IMPORTANT, "ERROR: Encountered error re-enabling pulse audio"); + } +#endif + + return GENERIC_EXIT_OK; +} diff -uNr mythtv-0.21/libs/libmyth/audiopulseutil.h mythtv/libs/libmyth/audiopulseutil.h --- mythtv-0.21/libs/libmyth/audiopulseutil.h 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libmyth/audiopulseutil.h 2009-04-20 05:33:44.000000000 +0200 @@ -0,0 +1,6 @@ +#include "mythexp.h" + +MPUBLIC bool pulseaudio_suspend(void); +MPUBLIC bool pulseaudio_unsuspend(void); +MPUBLIC int pulseaudio_handle_startup(void); +MPUBLIC int pulseaudio_handle_teardown(void); diff -uNr mythtv-0.21/libs/libmyth/compat.h mythtv/libs/libmyth/compat.h --- mythtv-0.21/libs/libmyth/compat.h 2008-02-18 08:35:01.000000000 +0100 +++ mythtv/libs/libmyth/compat.h 2008-10-22 05:27:57.000000000 +0200 @@ -259,6 +259,10 @@ #endif // USING_MINGW +#include <sys/param.h> // Defines BSD on FreeBSD, Mac OS X +#include <sys/stat.h> // S_IREAD/WRITE on MinGW, umask() on BSD + + // suseconds_t #include <sys/types.h> @@ -271,9 +275,9 @@ typedef int32_t suseconds_t; // 10.3 or earlier don't have this #endif -// Libdvdnav now uses off64_t lseek64(), which Darwin doesn't have. +// Libdvdnav now uses off64_t lseek64(), which BSD/Darwin doesn't have. // Luckily, its lseek() is already 64bit compatible -#ifdef CONFIG_DARWIN +#ifdef BSD typedef off_t off64_t; #define lseek64(f,o,w) lseek(f,o,w) #endif diff -uNr mythtv-0.21/libs/libmyth/lcddevice.cpp mythtv/libs/libmyth/lcddevice.cpp --- mythtv-0.21/libs/libmyth/lcddevice.cpp 2007-12-11 15:56:01.000000000 +0100 +++ mythtv/libs/libmyth/lcddevice.cpp 2008-09-02 16:09:29.000000000 +0200 @@ -144,8 +144,10 @@ if (res == 0) { - // we need to start the mythlcdserver + // we need to start the mythlcdserver + VERBOSE(VB_GENERAL, "Starting mythlcdserver"); system(gContext->GetInstallPrefix() + "/bin/mythlcdserver -v none&"); + usleep(500000); } if (!bConnected) @@ -153,7 +155,6 @@ int count = 0; do { - usleep(500000); ++count; VERBOSE(VB_GENERAL, QString("Connecting to lcd server: " @@ -162,6 +163,7 @@ if (socket) socket->DownRef(); + socket = new MythSocket(); socket->setCallbacks(this); socket->connect(hostname, port); @@ -176,14 +178,22 @@ if (socket->state() == MythSocket::Connected) { - lcd_ready = true; + lcd_ready = false; bConnected = true; QTextStream os(socket); os << "HELLO\n"; + + // HACK make sure the readyread_thread is awake + usleep(1000); + socket->Lock(); + socket->Unlock(); + break; } } + + usleep(500000); } while (count < 10 && !bConnected); } @@ -198,15 +208,12 @@ { QMutexLocker locker(&socketLock); - if (!socket) + if (!socket || !lcd_ready) return; // Check the socket, make sure the connection is still up if (socket->state() == MythSocket::Idle) { - if (!lcd_ready) - return; - lcd_ready = false; // Ack, connection to server has been severed try to re-establish the @@ -289,8 +296,6 @@ if (aList[0] == "CONNECTED") { // We got "CONNECTED", which is a response to "HELLO" - lcd_ready = true; - // get lcd width & height if (aList.count() != 3) { @@ -362,7 +367,7 @@ lcd_showrecstatus = (gContext->GetSetting("LCDShowRecStatus", "1") == "1"); lcd_keystring = gContext->GetSetting("LCDKeyString", "ABCDEF"); - bConnected = TRUE; + bConnected = true; lcd_ready = true; // send buffer if there's anything in there @@ -472,6 +477,9 @@ void LCD::outputLEDs() { + if (!lcd_ready) + return; + QString aString; int mask = 0; if (0 && GetLEDMask) diff -uNr mythtv-0.21/libs/libmyth/libmyth.pro mythtv/libs/libmyth/libmyth.pro --- mythtv-0.21/libs/libmyth/libmyth.pro 2008-03-04 18:08:41.000000000 +0100 +++ mythtv/libs/libmyth/libmyth.pro 2009-04-19 23:30:15.000000000 +0200 @@ -26,6 +26,7 @@ HEADERS += volumebase.h volumecontrol.h virtualkeyboard.h visual.h xmlparse.h HEADERS += mythhdd.h mythcdrom.h storagegroup.h dbutil.h HEADERS += compat.h +HEADERS += audiopulseutil.h SOURCES += audiooutput.cpp audiooutputbase.cpp audiooutputnull.cpp SOURCES += audiooutputdigitalencoder.cpp @@ -42,6 +43,7 @@ SOURCES += uilistbtntype.cpp uitypes.cpp util.cpp util-x11.cpp SOURCES += volumebase.cpp volumecontrol.cpp virtualkeyboard.cpp xmlparse.cpp SOURCES += mythhdd.cpp mythcdrom.cpp storagegroup.cpp dbutil.cpp +SOURCES += audiopulseutil.cpp INCLUDEPATH += ../libmythsamplerate ../libmythsoundtouch ../libmythfreesurround INCLUDEPATH += ../libavcodec ../libavutil @@ -83,12 +85,21 @@ inc2.files = $${inc.files} +DEFINES += RUNPREFIX=\"$${RUNPREFIX}\" +DEFINES += LIBDIRNAME=\"$${LIBDIRNAME}\" + + using_oss { DEFINES += USING_OSS SOURCES += audiooutputoss.cpp HEADERS += audiooutputoss.h } +using_pulse { + DEFINES += USING_PULSE + LIBS += $$PULSE_LIBS +} + unix:!cygwin { SOURCES += mediamonitor-unix.cpp HEADERS += mediamonitor-unix.h @@ -107,9 +118,6 @@ LIBS += -lpthread - # For easier debugging: - target.path = $${PREFIX}/bin - LIBS -= -lmythui-$$LIBVERSION -lmythupnp-$$LIBVERSION LIBS += -L. -lmythui-bootstrap -lmythupnp-bootstrap POST_TARGETDEPS += libmythui-bootstrap.a libmythupnp-bootstrap.a @@ -241,3 +249,5 @@ contains( CONFIG_LIBFFTW3, yes ) { LIBS += -lfftw3f } + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmyth/mythcdrom.cpp mythtv/libs/libmyth/mythcdrom.cpp --- mythtv-0.21/libs/libmyth/mythcdrom.cpp 2008-01-10 01:35:48.000000000 +0100 +++ mythtv/libs/libmyth/mythcdrom.cpp 2009-04-02 08:13:16.000000000 +0200 @@ -47,20 +47,6 @@ { } -bool MythCDROM::openDevice() -{ - if (MythMediaDevice::openDevice()) - { - // If allow eject is on, unlock the door. - if (m_AllowEject) - unlock(); - - return true; - } - - return false; -} - void MythCDROM::onDeviceMounted() { if (!QDir(m_MountPath).exists()) @@ -119,7 +105,19 @@ if (MEDIATYPE_DATA == m_MediaType) MythMediaDevice::onDeviceMounted(); + + // Unlock the door, and if appropriate unmount the media, + // so the user can press the manual eject button if (m_AllowEject) + { unlock(); + if (m_MediaType == MEDIATYPE_DVD || m_MediaType == MEDIATYPE_VCD) + unmount(); + } } +void MythCDROM::setSpeed(const char *devicePath, int speed) +{ + VERBOSE(VB_MEDIA, QString("SetSpeed(%1,%2) - not implemented on this OS.") + .arg(devicePath).arg(speed)); +} diff -uNr mythtv-0.21/libs/libmyth/mythcdrom.h mythtv/libs/libmyth/mythcdrom.h --- mythtv-0.21/libs/libmyth/mythcdrom.h 2006-10-08 01:01:31.000000000 +0200 +++ mythtv/libs/libmyth/mythcdrom.h 2009-04-02 08:13:16.000000000 +0200 @@ -14,11 +14,11 @@ virtual bool mediaChanged(void) { return false; } virtual bool checkOK(void) { return true; } - virtual bool openDevice(void); virtual MediaStatus checkMedia(void) { return setStatus(MEDIASTAT_UNKNOWN, false); } + virtual void setSpeed(const char *devicePath, int speed); static MythCDROM* get(QObject* par, const char* devicePath, bool SuperMount, bool AllowEject); diff -uNr mythtv-0.21/libs/libmyth/mythcdrom-linux.cpp mythtv/libs/libmyth/mythcdrom-linux.cpp --- mythtv-0.21/libs/libmyth/mythcdrom-linux.cpp 2008-01-17 11:46:04.000000000 +0100 +++ mythtv/libs/libmyth/mythcdrom-linux.cpp 2009-04-02 08:13:16.000000000 +0200 @@ -20,7 +20,7 @@ #define ASSUME_WANT_AUDIO 1 // This class is verbose enough, but if you really need more output: -//#define EXTRA_VERBOSITY 1 +#define EXTRA_VERBOSITY 1 // Some features cannot be detected (reliably) using the standard @@ -133,6 +133,7 @@ virtual MediaStatus checkMedia(void); virtual MediaError eject(bool open_close = true); virtual void setSpeed(int speed); + virtual void setSpeed(const char *device, int speed); virtual bool isSameDevice(const QString &path); virtual MediaError lock(void); virtual MediaError unlock(void); @@ -162,7 +163,13 @@ { int drive_status = ioctl(m_DeviceHandle, CDROM_DRIVE_STATUS, CDSL_CURRENT); - if (drive_status == CDS_TRAY_OPEN && getDevicePath().contains("/dev/scd")) + if (drive_status == -1) // Very unlikely, but we should check + { + VERBOSE(VB_MEDIA, LOC + ":driveStatus() - ioctl() failed: " + ENO); + return CDS_NO_INFO; + } + + if (drive_status == CDS_TRAY_OPEN && m_DevicePath.contains("/dev/scd")) return SCSIstatus(); return drive_status; @@ -193,7 +200,7 @@ VERBOSE(VB_MEDIA, LOC + ":hasWritableMedia() - failed to send packet to " + m_DevicePath); - return 0; + return false; } di = (CDROMdiscInfo *) buffer; @@ -327,7 +334,7 @@ { #ifdef EXTRA_VERBOSITY VERBOSE(VB_MEDIA, LOC + ":testMedia - failed to open " - + getDevicePath() + ENO); + + m_DevicePath + ENO); #endif if (errno == EBUSY) return isMounted(true) ? MEDIAERR_OK : MEDIAERR_FAILED; @@ -350,8 +357,8 @@ if (Stat == -1) { - VERBOSE(VB_MEDIA, LOC + ":testMedia - Failed to get drive status of " - + getDevicePath() + ENO); + VERBOSE(VB_MEDIA, LOC + ":testMedia - Failed to get drive status of '" + + m_DevicePath + "' : " + ENO); return MEDIAERR_FAILED; } @@ -362,198 +369,182 @@ { bool OpenedHere = false; - if (testMedia() != MEDIAERR_OK) - { - m_MediaType = MEDIATYPE_UNKNOWN; - return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); - } - // If it's not already open we need to at least // TRY to open it for most of these checks to work. if (!isDeviceOpen()) + { OpenedHere = openDevice(); - if (isDeviceOpen()) + if (!OpenedHere) + { + VERBOSE(VB_MEDIA, LOC + ":checkMedia() - cannot open device '" + + m_DevicePath + "' : " + + ENO + "- returning UNKNOWN"); + m_MediaType = MEDIATYPE_UNKNOWN; + return setStatus(MEDIASTAT_UNKNOWN, false); + } + } + + switch (driveStatus()) + { + case CDS_DISC_OK: + VERBOSE(VB_MEDIA, m_DevicePath + " Disk OK, type = " + + MediaTypeString(m_MediaType) ); + // further checking is required + break; + case CDS_TRAY_OPEN: + VERBOSE(VB_MEDIA, m_DevicePath + " Tray open or no disc"); + // First, send a message to the + // plugins to forget the current media type + setStatus(MEDIASTAT_OPEN, OpenedHere); + // then reset + m_MediaType = MEDIATYPE_UNKNOWN; + return MEDIASTAT_OPEN; + break; + case CDS_NO_DISC: + VERBOSE(VB_MEDIA, m_DevicePath + " No disc"); + m_MediaType = MEDIATYPE_UNKNOWN; + return setStatus(MEDIASTAT_NODISK, OpenedHere); + break; + case CDS_NO_INFO: + case CDS_DRIVE_NOT_READY: + VERBOSE(VB_MEDIA, m_DevicePath + " No info or drive not ready"); + m_MediaType = MEDIATYPE_UNKNOWN; + return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); + default: + VERBOSE(VB_IMPORTANT, "Failed to get drive status of " + + m_DevicePath + " : " + ENO); + m_MediaType = MEDIATYPE_UNKNOWN; + return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); + } + + if (mediaChanged()) + { + VERBOSE(VB_MEDIA, m_DevicePath + " Media changed"); + // Regardless of the actual status lie here and say + // it's open for now, so we can cover the case of a missed open. + return setStatus(MEDIASTAT_OPEN, OpenedHere); + } + + + if (isUsable()) + { +#ifdef EXTRA_VERBOSITY + VERBOSE(VB_MEDIA, "Disc useable, media unchanged. All good!"); +#endif + if (OpenedHere) + closeDevice(); + return MEDIASTAT_USEABLE; + } + + // If we have tried to mount and failed, don't keep trying + if (m_Status == MEDIASTAT_ERROR) { #ifdef EXTRA_VERBOSITY - VERBOSE(VB_MEDIA, LOC + ":checkMedia - Device is open..."); + VERBOSE(VB_MEDIA, "Disc is unmountable?"); #endif - switch (driveStatus()) + if (OpenedHere) + closeDevice(); + return m_Status; + } + + if ((m_Status == MEDIASTAT_OPEN) || + (m_Status == MEDIASTAT_UNKNOWN)) + { + VERBOSE(VB_MEDIA, m_DevicePath + " Current status " + + MythMediaDevice::MediaStatusStrings[m_Status]); + int type = ioctl(m_DeviceHandle, CDROM_DISC_STATUS, CDSL_CURRENT); + switch (type) { - case CDS_DISC_OK: - VERBOSE(VB_MEDIA, getDevicePath() + " Disk OK, type = " - + MediaTypeString(m_MediaType) ); - // 1. Audio CDs are not mounted - // 2. If we don't know the media type yet, - // test the disk after this switch exits - if (m_MediaType == MEDIATYPE_AUDIO || - m_MediaType == MEDIATYPE_UNKNOWN) - break; - // If we have tried to mount and failed, don't keep trying: - if (m_Status == MEDIASTAT_ERROR) - return m_Status; - // If the disc is ok and we already know it's mediatype - // returns MOUNTED. + case CDS_DATA_1: + case CDS_DATA_2: + m_MediaType = MEDIATYPE_DATA; + VERBOSE(VB_MEDIA, "Found a data disk"); + //grab information from iso9660 (& udf) + struct iso_primary_descriptor buf; + lseek(this->m_DeviceHandle,(off_t) 2048*16,SEEK_SET); + read(this->m_DeviceHandle, &buf,2048); + this->m_VolumeID = QString(buf.volume_id).stripWhiteSpace(); + this->m_KeyID = QString("%1%2").arg(this->m_VolumeID) + .arg(QString(buf.creation_date).left(16)); + + // the base class's onDeviceMounted will do fine + // grained detection of the type of data on this disc if (isMounted(true)) + onDeviceMounted(); + else + if (mount()) + ; // onDeviceMounted() called as side-effect + else + return setStatus(MEDIASTAT_ERROR, OpenedHere); + + if (isMounted(true)) + { + // pretend we're NOTMOUNTED so setStatus emits a signal + m_Status = MEDIASTAT_NOTMOUNTED; return setStatus(MEDIASTAT_MOUNTED, OpenedHere); + } + else if (m_MediaType == MEDIATYPE_DVD) + { + // pretend we're NOTMOUNTED so setStatus emits a signal + m_Status = MEDIASTAT_NOTMOUNTED; + return setStatus(MEDIASTAT_USEABLE, OpenedHere); + } + else + return setStatus(MEDIASTAT_NOTMOUNTED, OpenedHere); break; - case CDS_TRAY_OPEN: - VERBOSE(VB_MEDIA, getDevicePath() + " Tray open or no disc"); - setStatus(MEDIASTAT_OPEN, OpenedHere); - m_MediaType = MEDIATYPE_UNKNOWN; - return MEDIASTAT_OPEN; + case CDS_AUDIO: + VERBOSE(VB_MEDIA, "found an audio disk"); + m_MediaType = MEDIATYPE_AUDIO; + return setStatus(MEDIASTAT_USEABLE, OpenedHere); break; - case CDS_NO_DISC: - VERBOSE(VB_MEDIA, getDevicePath() + " No disc"); - m_MediaType = MEDIATYPE_UNKNOWN; - return setStatus(MEDIASTAT_NODISK, OpenedHere); + case CDS_MIXED: + m_MediaType = MEDIATYPE_MIXED; + VERBOSE(VB_MEDIA, "found a mixed CD"); + // Note: Mixed mode CDs require an explixit mount call + // since we'll usually want the audio portion. + // undefine ASSUME_WANT_AUDIO to change this behavior. + #ifdef ASSUME_WANT_AUDIO + return setStatus(MEDIASTAT_USEABLE, OpenedHere); + #else + mount(); + if (isMounted(true)) + { + // pretend we're NOTMOUNTED so setStatus + // emits a signal + m_Status = MEDIASTAT_NOTMOUNTED; + return setStatus(MEDIASTAT_MOUNTED, OpenedHere); + } + else + { + return setStatus(MEDIASTAT_USEABLE, OpenedHere); + } + #endif break; case CDS_NO_INFO: - case CDS_DRIVE_NOT_READY: - VERBOSE(VB_MEDIA, getDevicePath() - + " No info or drive not ready"); + case CDS_NO_DISC: + if (hasWritableMedia()) + { + VERBOSE(VB_MEDIA, "found a blank or writable disk"); + return setStatus(MEDIASTAT_UNFORMATTED, OpenedHere); + } + + VERBOSE(VB_MEDIA, "found no disk"); m_MediaType = MEDIATYPE_UNKNOWN; return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); + break; default: - VERBOSE(VB_IMPORTANT, "Failed to get drive status of " - + getDevicePath() + " : " + ENO); + VERBOSE(VB_MEDIA, "found unknown disk type: " + + QString().setNum(type)); m_MediaType = MEDIATYPE_UNKNOWN; return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); } + } - if (mediaChanged()) - { - VERBOSE(VB_MEDIA, getDevicePath() + " Media changed"); - // Regardless of the actual status lie here and say - // it's open for now, so we can cover the case of a missed open. - return setStatus(MEDIASTAT_OPEN, OpenedHere); - } - else - { -#ifdef EXTRA_VERBOSITY - VERBOSE(VB_MEDIA, getDevicePath() + " Media unchanged..."); -#endif - if ((m_Status == MEDIASTAT_OPEN) || - (m_Status == MEDIASTAT_UNKNOWN)) - { - VERBOSE(VB_MEDIA, getDevicePath() + " Current status " + - MythMediaDevice::MediaStatusStrings[m_Status]); - int type = ioctl(m_DeviceHandle, - CDROM_DISC_STATUS, CDSL_CURRENT); - switch (type) - { - case CDS_DATA_1: - case CDS_DATA_2: - m_MediaType = MEDIATYPE_DATA; - VERBOSE(VB_MEDIA, "Found a data disk"); - //grab information from iso9660 (& udf) - struct iso_primary_descriptor buf; - lseek(this->m_DeviceHandle,(off_t) 2048*16,SEEK_SET); - read(this->m_DeviceHandle, &buf,2048); - this->m_VolumeID = QString(buf.volume_id) - .stripWhiteSpace(); - this->m_KeyID = QString("%1%2") - .arg(this->m_VolumeID) - .arg(QString(buf.creation_date).left(16)); - - // the base class's onDeviceMounted will do fine - // grained detection of the type of data on this disc - if (isMounted(true)) - onDeviceMounted(); - else - if (mount()) - ; // onDeviceMounted() called as side-effect - else - return setStatus(MEDIASTAT_ERROR, OpenedHere); - - if (isMounted(true)) - { - // pretend we're NOTMOUNTED so setStatus emits - // a signal - m_Status = MEDIASTAT_NOTMOUNTED; - return setStatus(MEDIASTAT_MOUNTED, OpenedHere); - } - else if (m_MediaType == MEDIATYPE_DVD) - { - // pretend we're NOTMOUNTED so setStatus emits - // a signal - m_Status = MEDIASTAT_NOTMOUNTED; - return setStatus(MEDIASTAT_USEABLE, OpenedHere); - } - else - return setStatus(MEDIASTAT_NOTMOUNTED, OpenedHere); - break; - case CDS_AUDIO: - VERBOSE(VB_MEDIA, "found an audio disk"); - m_MediaType = MEDIATYPE_AUDIO; - return setStatus(MEDIASTAT_USEABLE, OpenedHere); - break; - case CDS_MIXED: - m_MediaType = MEDIATYPE_MIXED; - VERBOSE(VB_MEDIA, "found a mixed CD"); - // Note: Mixed mode CDs require an explixit mount call - // since we'll usually want the audio portion. - // undefine ASSUME_WANT_AUDIO to change this behavior. - #ifdef ASSUME_WANT_AUDIO - return setStatus(MEDIASTAT_USEABLE, OpenedHere); - #else - mount(); - if (isMounted(true)) - { - // pretend we're NOTMOUNTED so setStatus - // emits a signal - m_Status = MEDIASTAT_NOTMOUNTED; - return setStatus(MEDIASTAT_MOUNTED, - OpenedHere); - } - else - { - return setStatus(MEDIASTAT_USEABLE, - OpenedHere); - } - #endif - break; - case CDS_NO_INFO: - case CDS_NO_DISC: - if (hasWritableMedia()) - { - VERBOSE(VB_MEDIA, "found a blank or writable disk"); - return setStatus(MEDIASTAT_UNFORMATTED, OpenedHere); - } - - VERBOSE(VB_MEDIA, "found no disk"); - m_MediaType = MEDIATYPE_UNKNOWN; - return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); - break; - default: - VERBOSE(VB_MEDIA, "found unknown disk type: " - + QString().setNum(type)); - m_MediaType = MEDIATYPE_UNKNOWN; - return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); - } - } - else if (m_Status == MEDIASTAT_MOUNTED || - m_Status == MEDIASTAT_NOTMOUNTED) - { - VERBOSE(VB_MEDIA, QString("Current status == ") + - MythMediaDevice::MediaStatusStrings[m_Status]); - VERBOSE(VB_MEDIA, "Setting status to not mounted?"); - if (isMounted(true)) - setStatus(MEDIASTAT_MOUNTED, OpenedHere); - else - setStatus(MEDIASTAT_NOTMOUNTED, OpenedHere); - } - - if (m_AllowEject) - ioctl(m_DeviceHandle, CDROM_LOCKDOOR, 0); - }// mediaChanged() - } // isDeviceOpen(); + if (m_AllowEject) + unlock(); else - { - VERBOSE(VB_MEDIA, "Device not open - returning UNKNOWN"); - m_MediaType = MEDIATYPE_UNKNOWN; - return setStatus(MEDIASTAT_UNKNOWN, OpenedHere); - } + lock(); if (OpenedHere) closeDevice(); @@ -623,6 +614,11 @@ */ void MythCDROMLinux::setSpeed(int speed) { + MythCDROMLinux::setSpeed(m_DevicePath, speed); +} + +void MythCDROMLinux::setSpeed(const char *device, int speed) +{ int fd; unsigned char buffer[28]; unsigned char cmd[16]; @@ -637,11 +633,11 @@ memset(cmd, 0, sizeof(cmd)); memset(&st, 0, sizeof(st)); - if (stat(m_DevicePath, &st) == -1) + if (stat(device, &st) == -1) { VERBOSE(VB_MEDIA, LOC_ERR + QString("setSpeed() Failed. device %1 not found") - .arg(m_DevicePath)); + .arg(device)); return; } @@ -651,7 +647,7 @@ return; } - if ((fd = open(m_DevicePath, O_RDWR | O_NONBLOCK)) == -1) + if ((fd = open(device, O_RDWR | O_NONBLOCK)) == -1) { VERBOSE(VB_MEDIA, LOC_ERR + "Changing CD/DVD speed needs write access"); return; @@ -712,17 +708,22 @@ buffer[18] = buffer[26] = 0x03; buffer[19] = buffer[27] = 0xe8; - // On my system (2.6.18 + ide-cd), SG_IO succeeds without doing anything, - // while CDROM_SELECT_SPEED works... - if (ioctl(fd, CDROM_SELECT_SPEED, speed) < 0) + if (ioctl(fd, SG_IO, &sghdr) < 0) { - if (ioctl(fd, SG_IO, &sghdr) < 0) - VERBOSE(VB_MEDIA, LOC_ERR + "Limit CD/DVD Speed Failed"); + VERBOSE(VB_MEDIA, LOC_ERR + "Limit CD/DVD Speed Failed"); } else + { + // On my system (2.6.18 + ide-cd), SG_IO succeeds without doing anything, + // while CDROM_SELECT_SPEED works... + if (ioctl(fd, CDROM_SELECT_SPEED, speed) < 0) + { + VERBOSE(VB_MEDIA, LOC_ERR + + "Limit CD/DVD CDROM_SELECT_SPEED Failed"); + } VERBOSE(VB_MEDIA, LOC + ":setSpeed() - CD/DVD Speed Set Successful"); + } close(fd); } #endif - diff -uNr mythtv-0.21/libs/libmyth/mythcontext.cpp mythtv/libs/libmyth/mythcontext.cpp --- mythtv-0.21/libs/libmyth/mythcontext.cpp 2008-03-07 01:50:20.000000000 +0100 +++ mythtv/libs/libmyth/mythcontext.cpp 2009-02-09 09:59:19.000000000 +0100 @@ -87,7 +87,7 @@ else { QStringList verboseOpts = QStringList::split(',', arg); - for (QStringList::Iterator it = verboseOpts.begin(); + for (QStringList::Iterator it = verboseOpts.begin(); it != verboseOpts.end(); ++it ) { option = *it; @@ -198,7 +198,7 @@ void LoadLogSettings(void); void LoadDatabaseSettings(void); - + bool LoadSettingsFile(void); bool WriteSettingsFile(const DatabaseParams ¶ms, bool overwrite = false); @@ -224,9 +224,9 @@ Settings *m_settings; ///< connection stuff, theme, button style Settings *m_qtThemeSettings; ///< everything else theme-related - QString m_installprefix; ///< Compile-time PREFIX, or generated + QString m_installprefix; ///< Compile-time RUNPREFIX, or generated ///< from enviroment ($MYTHTVDIR or $cwd) - QString m_installlibdir; ///< Compile-time LIBDIR, or generated + QString m_libname; ///< Compile-time LIBDIRNAME bool m_gui; ///< Should this context use GUI elements? bool m_backend; ///< Is this host any sort of backend? @@ -246,7 +246,7 @@ // Dimensions of the theme int m_baseWidth, m_baseHeight; - + QMutex m_hostnamelock; ///< Locking for thread-safe copying of: QString m_localhostname; ///< hostname from mysql.txt or gethostname() @@ -261,7 +261,7 @@ bool attemptingToConnect; MDBManager m_dbmanager; - + QMap<QString, QImage> imageCache; QString language; @@ -314,7 +314,7 @@ MythContextPrivate::MythContextPrivate(MythContext *lparent) : parent(lparent), m_settings(new Settings()), m_qtThemeSettings(new Settings()), - m_installprefix(PREFIX), m_installlibdir(LIBDIR), + m_installprefix(RUNPREFIX), m_libname(LIBDIRNAME), m_gui(false), m_backend(false), m_themeloaded(false), m_menuthemepathname(QString::null), m_themepathname(QString::null), m_backgroundimage(NULL), @@ -356,21 +356,15 @@ // If the PREFIX is relative, evaluate it relative to our // executable directory. This can be fragile on Unix, so // use relative PREFIX values with care. + + VERBOSE(VB_IMPORTANT, + "Relative PREFIX! (" + m_installprefix + + ")\n\t\tappDir=" + prefixDir.canonicalPath()); prefixDir.cd(m_installprefix); m_installprefix = prefixDir.canonicalPath(); } - else if (prefixDir.path().contains(".app/Contents/MacOS")) - { - prefixDir.cd("../Resources"); - if (QDir(prefixDir.canonicalPath() + "/bin").exists() || - QDir(prefixDir.canonicalPath() + "/share").exists()) - m_installprefix = prefixDir.canonicalPath(); - if (QDir(prefixDir.canonicalPath() + "/lib").exists()) - m_installlibdir = prefixDir.canonicalPath() + "/lib"; - } - VERBOSE(VB_IMPORTANT, QString("Using runtime prefix = %1, libdir = %2") - .arg(m_installprefix).arg(m_installlibdir)); + VERBOSE(VB_IMPORTANT, "Using runtime prefix = " + m_installprefix); } MythContextPrivate::~MythContextPrivate() @@ -463,19 +457,33 @@ } QDesktopWidget * desktop = QApplication::desktop(); + bool hasXinerama = GetNumberOfXineramaScreens() > 1; + int numScreens = desktop->numScreens(); + int screen; - VERBOSE(VB_IMPORTANT, - QString("Total desktop dim: %1x%2, with %3 screen[s].") - .arg(desktop->width()).arg(desktop->height()) - .arg(desktop->numScreens())); + if (hasXinerama) + VERBOSE(VB_GENERAL, + QString("Total desktop dim: %1x%2, over %3 screen[s].") + .arg(desktop->width()).arg(desktop->height()).arg(numScreens)); + if (numScreens > 1) + for (screen = 0; screen < numScreens; ++screen) + { + QRect dim = desktop->screenGeometry(screen); + VERBOSE(VB_GENERAL, + QString("Screen %1 dim: %2x%3.") + .arg(screen).arg(dim.width()).arg(dim.height())); + } + + screen = desktop->primaryScreen(); + VERBOSE(VB_GENERAL, QString("Primary screen %1.").arg(screen)); - int screen = parent->GetNumSetting("XineramaScreen", - desktop->primaryScreen()); + if (hasXinerama) + screen = parent->GetNumSetting("XineramaScreen", screen); if (screen == -1) // Special case - span all screens { - VERBOSE(VB_GENERAL, QString("Using all screens (currently %1)") - .arg(desktop->numScreens())); + VERBOSE(VB_GENERAL, QString("Using all %1 screens.") + .arg(numScreens)); m_xbase = 0; m_ybase = 0; m_width = desktop->width(); @@ -483,19 +491,23 @@ VERBOSE(VB_GENERAL, QString("Total width = %1, height = %2") .arg(m_width).arg(m_height)); + return; } - else // User specified a single screen + + if (hasXinerama) // User specified a single screen { - if (screen < 0 || screen >= desktop->numScreens()) + if (screen < 0 || screen >= numScreens) { VERBOSE(VB_IMPORTANT, QString( "Xinerama screen %1 was specified," " but only %2 available, so using screen 0.") - .arg(screen).arg(desktop->numScreens())); + .arg(screen).arg(numScreens)); screen = 0; } + } + { QRect bounds; bool inWindow = parent->GetNumSetting("RunFrontendInWindow", 0); @@ -528,7 +540,9 @@ if (UPnPclient) { m_UPnP = UPnPclient; +#ifndef _WIN32 m_XML = (XmlConfiguration *)UPnp::g_pConfig; +#endif } // Creates screen saver control if we will have a GUI @@ -616,7 +630,7 @@ manualSelect = !noPrompt; // If allowed, prompt user } - if (!m_gui) + if (!m_gui) manualSelect = false; // no interactive command-line chooser yet @@ -624,19 +638,19 @@ // Last, get the user to select a backend from a possible list: if (manualSelect) { - switch (ChooseBackend(QString::null)) - { - case -1: // User asked to configure database manually + switch (ChooseBackend(QString::null)) + { + case -1: // User asked to configure database manually if (PromptForDatabaseParams("")) break; else goto NoDBfound; // User cancelled - changed their mind? - - case 0: // User cancelled. Exit application + + case 0: // User cancelled. Exit application goto NoDBfound; - case 1: // User selected a backend, so m_DBparams - break; // should now contain the database details + case 1: // User selected a backend, so m_DBparams + break; // should now contain the database details default: goto NoDBfound; @@ -645,12 +659,12 @@ } - // Queries the user for the DB info, using the command + // Queries the user for the DB info, using the command // line or the GUI depending on the application. while (failure.length()) { VERBOSE(VB_IMPORTANT, QString("%1").arg(failure)); - if (( manualSelect && ChooseBackend(failure)) || + if (( manualSelect && ChooseBackend(failure)) || (!manualSelect && PromptForDatabaseParams(failure))) { failure = TestDBconnection(); @@ -734,7 +748,7 @@ font.setPointSize((int)floor(14 * m_hmult)); QApplication::setFont(font); - + //VERBOSE(VB_IMPORTANT, QString("GUI multipliers are: width %1, height %2").arg(m_wmult).arg(m_hmult)); } @@ -746,7 +760,7 @@ m_logprintlevel = parent->GetNumSetting("LogPrintLevel", LP_ERROR); } -/** +/** * Load database and host settings from mysql.txt, or set some defaults * * \returns true if mysql.txt was parsed @@ -830,7 +844,7 @@ { QString path = MythContext::GetConfDir() + "/mysql.txt"; QFile * f = new QFile(path); - + if (!overwrite && f->exists()) { return false; @@ -854,7 +868,7 @@ "for writing").arg(path)); return false; } - + VERBOSE(VB_IMPORTANT, QString("Writing settings file %1").arg(path)); QTextStream s(f); s << "DBHostName=" << params.dbHostName << endl; @@ -883,12 +897,12 @@ << "# will need to reconfigure mythtv (or futz with the DB) every time.\n" << "# TWO HOSTS MUST NOT USE THE SAME VALUE\n" << "#\n"; - + if (params.localEnabled) s << "LocalHostName=" << params.localHostName << endl; else s << "#LocalHostName=my-unique-identifier-goes-here\n"; - + s << endl << "# If you want your frontend to be able to wake your MySQL server\n" << "# using WakeOnLan, have a look at the following settings:\n" @@ -902,28 +916,28 @@ s << "WOLsqlReconnectWaitTime=" << params.wolReconnect << endl; else s << "#WOLsqlReconnectWaitTime=0\n"; - + s << "#\n" << "#\n" << "# This is the number of retries to wake the MySQL server\n" << "# until the frontend gives up\n" << "#\n"; - + if (params.wolEnabled) s << "WOLsqlConnectRetry=" << params.wolRetry << endl; else s << "#WOLsqlConnectRetry=5\n"; - + s << "#\n" << "#\n" << "# This is the command executed to wake your MySQL server.\n" << "#\n"; - + if (params.wolEnabled) s << "WOLsqlCommand=" << params.wolCommand << endl; else s << "#WOLsqlCommand=echo 'WOLsqlServerCommand not set'\n"; - + f->close(); return true; } @@ -931,7 +945,7 @@ bool MythContextPrivate::FindSettingsProbs(void) { bool problems = false; - + if (m_DBparams.dbHostName.isEmpty()) { problems = true; @@ -1012,7 +1026,7 @@ // Tell the user what went wrong: if (error.length()) MythPopupBox::showOkPopup(mainWindow, "DB connect failure", error); - + // ask user for database parameters DatabaseSettings settings(m_DBhostCp); accepted = (settings.exec() == QDialog::Accepted); @@ -1025,7 +1039,7 @@ { DatabaseParams params = parent->GetDatabaseParams(); QString response; - + // give user chance to skip config cout << endl << error << endl << endl; response = getResponse("Would you like to configure the database " @@ -1033,7 +1047,7 @@ "yes"); if (!response || response.left(1).lower() != "y") return false; - + params.dbHostName = getResponse("Database host name:", params.dbHostName); response = getResponse("Should I test connectivity to this host " @@ -1048,13 +1062,13 @@ params.dbUserName); params.dbPassword = getResponse("Database password:", params.dbPassword); - + params.localHostName = getResponse("Unique identifier for this machine " "(if empty, the local host name " "will be used):", params.localHostName); params.localEnabled = !params.localHostName.isEmpty(); - + response = getResponse("Would you like to use Wake-On-LAN to retry " "database connections?", (params.wolEnabled ? "yes" : "no")); @@ -1071,7 +1085,7 @@ params.wolCommand = getResponse("Command to use to wake server:", params.wolCommand); } - + accepted = parent->SaveDatabaseParams(params); } return accepted; @@ -1236,17 +1250,17 @@ * Search for backends via UPnP, put up a UI for the user to choose one */ int MythContextPrivate::ChooseBackend(const QString &error) -{ +{ if (!InitUPnP()) return -1; - TempMainWindow(); - + TempMainWindow(); + // Tell the user what went wrong: if (error.length()) MythPopupBox::showOkPopup(mainWindow, "DB connect failure", error); - VERBOSE(VB_GENERAL, "Putting up the UPnP backend chooser"); + VERBOSE(VB_GENERAL, "Putting up the UPnP backend chooser"); BackendSelect *BEsel = new BackendSelect(mainWindow, &m_DBparams); switch (BEsel->exec()) @@ -1290,10 +1304,10 @@ } delete BEsel; - EndTempWindow(); + EndTempWindow(); - return 1; -} + return 1; +} /** * Try to store the current location of this backend in config.xml @@ -1388,17 +1402,17 @@ // only work for ones that have PIN access disabled (i.e. 0000) if (UPnPconnect(BE, QString::null)) return 1; - + return -1; // Try to force chooser & PIN } -/** - * Get the default backend from config.xml, use UPnP to find it. +/** + * Get the default backend from config.xml, use UPnP to find it. * * Sets a string if there any connection problems - */ + */ bool MythContextPrivate::DefaultUPnP(QString &error) -{ +{ XmlConfiguration *XML = new XmlConfiguration("config.xml"); QString loc = "MCP::DefaultUPnP() - "; QString localHostName = XML->GetValue(kDefaultBE + "LocalHostName", ""); @@ -1425,7 +1439,7 @@ m_UPnP->PerformSearch(gBackendURI); DeviceLocation *pDevLoc = m_UPnP->g_SSDPCache.Find(gBackendURI, USN); - if (!pDevLoc) + if (!pDevLoc) { error = "Cannot find default UPnP backend"; return false; @@ -1442,22 +1456,22 @@ return true; } - + error = "Cannot connect to default backend via UPnP. Wrong saved PIN?"; return false; } -/** +/** * Query a backend via UPnP for its database connection parameters - */ + */ bool MythContextPrivate::UPnPconnect(const DeviceLocation *backend, const QString &PIN) { - QString error; + QString error; QString LOC = "UPnPconnect() - "; QString URL = backend->m_sLocation; MythXMLClient XML(URL); - + VERBOSE(VB_UPNP, LOC + QString("Trying host at %1").arg(URL)); switch (XML.GetConnectionInfo(PIN, &m_DBparams, error)) { @@ -1466,8 +1480,8 @@ case UPnPResult_ActionNotAuthorized: // The stored PIN is probably not correct. - // We could prompt for the PIN and try again, but that needs a UI. - // Easier to fail for now, and put up the full UI selector later + // We could prompt for the PIN and try again, but that needs a UI. + // Easier to fail for now, and put up the full UI selector later VERBOSE(VB_UPNP, LOC + error + ". Wrong PIN?"); return false; @@ -1524,20 +1538,20 @@ return false; } -#ifdef _WIN32 - // HOME environment variable might not be defined - // some libraries will fail without it - char *home = getenv("HOME"); - if (!home) - { +#ifdef _WIN32 + // HOME environment variable might not be defined + // some libraries will fail without it + char *home = getenv("HOME"); + if (!home) + { home = getenv("LOCALAPPDATA"); // Vista if (!home) home = getenv("APPDATA"); // XP if (!home) home = "."; // getenv("TEMP")? - _putenv(QString("HOME=%1").arg(home)); - } + _putenv(QString("HOME=%1").arg(home)); + } #endif if (QDir::homeDirPath() == "/" && ! getenv("MYTHCONFDIR")) @@ -1570,6 +1584,15 @@ bool MythContext::ConnectToMasterServer(bool blockingClient) { + if (gContext->IsMasterBackend()) + { + // Should never get here unless there is a bug in the code somewhere. + // If this happens, it can cause endless event loops. + VERBOSE(VB_IMPORTANT, "ERROR: Master backend tried to connect back " + "to itself!"); + return false; + } + QString server = gContext->GetSetting("MasterServerIP", "localhost"); int port = gContext->GetNumSetting("MasterServerPort", 6543); @@ -1610,12 +1633,12 @@ { serverSock->DownRef(); serverSock = NULL; - + if (d->attemptingToConnect) break; d->attemptingToConnect = true; - // only inform the user of a failure if WOL is disabled + // only inform the user of a failure if WOL is disabled if (sleepTime <= 0) { VERBOSE( @@ -1631,7 +1654,7 @@ manageLock = true; d->serverSockLock.unlock(); } - MythPopupBox::showOkPopup(d->mainWindow, + MythPopupBox::showOkPopup(d->mainWindow, "connection failure", tr("Could not connect to the " "master backend server -- is " @@ -1687,14 +1710,14 @@ serverSock->writeStringList(strlist); serverSock->readStringList(strlist, true); - if (eventSock && eventSock->state() == MythSocket::Idle) + if (eventSock && eventSock->state() == MythSocket::Idle) { // Assume that since we _just_ connected the one socket, this one // will work, too. eventSock->connect(hostname, port); eventSock->Lock(); - + QString str = QString("ANN Monitor %1 %2") .arg(d->m_localhostname).arg(true); QStringList strlist = str; @@ -1718,7 +1741,7 @@ if (d->serverSock == NULL) return; - + strlist << "BLOCK_SHUTDOWN"; d->serverSock->writeStringList(strlist); d->serverSock->readStringList(strlist); @@ -1730,7 +1753,7 @@ strlist << "BLOCK_SHUTDOWN"; d->eventSock->Lock(); - + d->eventSock->writeStringList(strlist); d->eventSock->readStringList(strlist); @@ -1740,14 +1763,14 @@ void MythContext::AllowShutdown(void) { QStringList strlist; - + if (d->serverSock == NULL) - return; - + return; + strlist << "ALLOW_SHUTDOWN"; d->serverSock->writeStringList(strlist); d->serverSock->readStringList(strlist); - + if (d->eventSock == NULL || d->eventSock->state() != MythSocket::Connected) return; @@ -1755,7 +1778,7 @@ strlist << "ALLOW_SHUTDOWN"; d->eventSock->Lock(); - + d->eventSock->writeStringList(strlist); d->eventSock->readStringList(strlist); @@ -1810,7 +1833,7 @@ if (QString(strlist[0]) == "FALSE") backendOnLocalhost = false; - else + else backendOnLocalhost = true; return !backendOnLocalhost; @@ -1826,7 +1849,7 @@ ConnectToMasterServer(); d->serverSockLock.unlock(); } - + if (d->serverSock) ret = QString("myth://%1:%2/") .arg(d->serverSock->peerAddress().toString()) @@ -1884,9 +1907,9 @@ return GetSetting("RecordFilePrefix"); } -QString MythContext::GetInstallPrefix(void) -{ - return d->m_installprefix; +QString MythContext::GetInstallPrefix(void) +{ + return d->m_installprefix; } QString MythContext::GetConfDir(void) @@ -1906,70 +1929,70 @@ return dir; } -QString MythContext::GetShareDir(void) -{ - return d->m_installprefix + "/share/mythtv/"; +QString MythContext::GetShareDir(void) +{ + return d->m_installprefix + "/share/mythtv/"; } -QString MythContext::GetLibraryDir(void) -{ - return d->m_installlibdir + "/mythtv/"; +QString MythContext::GetLibraryDir(void) +{ + return d->m_installprefix + "/" + d->m_libname + "/mythtv/"; } -QString MythContext::GetThemesParentDir(void) -{ - return GetShareDir() + "themes/"; +QString MythContext::GetThemesParentDir(void) +{ + return GetShareDir() + "themes/"; } -QString MythContext::GetPluginsDir(void) -{ - return GetLibraryDir() + "plugins/"; +QString MythContext::GetPluginsDir(void) +{ + return GetLibraryDir() + "plugins/"; } -QString MythContext::GetPluginsNameFilter(void) -{ - return kPluginLibPrefix + "*" + kPluginLibSuffix; +QString MythContext::GetPluginsNameFilter(void) +{ + return kPluginLibPrefix + "*" + kPluginLibSuffix; } -QString MythContext::FindPlugin(const QString &plugname) -{ - return GetPluginsDir() + kPluginLibPrefix + plugname + kPluginLibSuffix; +QString MythContext::FindPlugin(const QString &plugname) +{ + return GetPluginsDir() + kPluginLibPrefix + plugname + kPluginLibSuffix; } -QString MythContext::GetTranslationsDir(void) -{ - return GetShareDir() + "i18n/"; +QString MythContext::GetTranslationsDir(void) +{ + return GetShareDir() + "i18n/"; } -QString MythContext::GetTranslationsNameFilter(void) -{ - return "mythfrontend_*.qm"; +QString MythContext::GetTranslationsNameFilter(void) +{ + return "mythfrontend_*.qm"; } -QString MythContext::FindTranslation(const QString &translation) -{ +QString MythContext::FindTranslation(const QString &translation) +{ return GetTranslationsDir() - + "mythfrontend_" + translation.lower() + ".qm"; + + "mythfrontend_" + translation.lower() + ".qm"; } -QString MythContext::GetFontsDir(void) -{ +QString MythContext::GetFontsDir(void) +{ return GetShareDir(); } -QString MythContext::GetFontsNameFilter(void) -{ - return "*ttf"; +QString MythContext::GetFontsNameFilter(void) +{ + return "*ttf"; } -QString MythContext::FindFont(const QString &fontname) -{ - return GetFontsDir() + fontname + ".ttf"; +QString MythContext::FindFont(const QString &fontname) +{ + return GetFontsDir() + fontname + ".ttf"; } -QString MythContext::GetFiltersDir(void) -{ - return GetLibraryDir() + "filters/"; +QString MythContext::GetFiltersDir(void) +{ + return GetLibraryDir() + "filters/"; } @@ -2002,7 +2025,7 @@ if (style != "") qApp->setStyle(style); - QString themename = GetSetting("Theme"); + QString themename = GetSetting("Theme"); QString themedir = FindThemeDir(themename); ThemeInfo *themeinfo = new ThemeInfo(themedir); @@ -2022,12 +2045,12 @@ if (themeinfo) delete themeinfo; - + // Recalculate GUI dimensions d->StoreGUIsettings(); - + d->m_themepathname = themedir + "/"; - + themedir += "/qtlook.txt"; d->m_qtThemeSettings->ReadSettings(themedir); d->m_themeloaded = false; @@ -2061,8 +2084,8 @@ { QString cachedirname = MythContext::GetConfDir() + "/themecache/"; - d->themecachedir = cachedirname + GetSetting("Theme") + "." + - QString::number(d->m_screenwidth) + "." + + d->themecachedir = cachedirname + GetSetting("Theme") + "." + + QString::number(d->m_screenwidth) + "." + QString::number(d->m_screenheight); QDir dir(cachedirname); @@ -2158,7 +2181,7 @@ dir.rmdir(dirname); } - + void MythContext::CacheThemeImages(void) { if (d->m_screenwidth == d->m_baseWidth && @@ -2175,7 +2198,7 @@ const QString &subdirname) { QDir dir(dirname); - + if (!dir.exists()) return; @@ -2220,7 +2243,7 @@ else if (fi->isDir()) continue; - if (fi->extension().lower() != "png" && + if (fi->extension().lower() != "png" && fi->extension().lower() != "jpg" && fi->extension().lower() != "gif" && fi->extension().lower() != "jpeg") @@ -2245,7 +2268,7 @@ QString("Failed to save cached image: %1") .arg(d->themecachedir + filename)); } - + delete tmpimage; } } @@ -2254,7 +2277,7 @@ if (caching) { caching->Close(); - caching->deleteLater(); + caching->deleteLater(); } } @@ -2263,7 +2286,7 @@ { xbase = d->m_xbase; ybase = d->m_ybase; - + width = d->m_width; height = d->m_height; } @@ -2274,7 +2297,7 @@ hmult = d->m_hmult; } -void MythContext::GetScreenSettings(int &width, float &wmult, +void MythContext::GetScreenSettings(int &width, float &wmult, int &height, float &hmult) { height = d->m_screenheight; @@ -2284,12 +2307,12 @@ hmult = d->m_hmult; } -void MythContext::GetScreenSettings(int &xbase, int &width, float &wmult, +void MythContext::GetScreenSettings(int &xbase, int &width, float &wmult, int &ybase, int &height, float &hmult) { xbase = d->m_screenxbase; ybase = d->m_screenybase; - + height = d->m_screenheight; width = d->m_screenwidth; @@ -2300,7 +2323,7 @@ void MythContext::GetResolutionSetting(const QString &type, int &width, int &height, double &forced_aspect, - short &refresh_rate, + short &refresh_rate, int index) { bool ok = false, ok0 = false, ok1 = false; @@ -2461,11 +2484,17 @@ QDir dir(testdir); if (dir.exists()) return testdir; + else + VERBOSE(VB_IMPORTANT, "No theme dir: " + dir.absPath()); + testdir = GetThemesParentDir() + themename; dir.setPath(testdir); if (dir.exists()) return testdir; + else + VERBOSE(VB_IMPORTANT, "No theme dir: " + dir.absPath()); + testdir = GetThemesParentDir() + "G.A.N.T"; dir.setPath(testdir); @@ -2476,6 +2505,8 @@ SaveSetting("Theme", "G.A.N.T"); return testdir; } + else + VERBOSE(VB_IMPORTANT, "No theme dir: " + dir.absPath()); VERBOSE(VB_IMPORTANT, QString("Could not find theme: %1").arg(themename)); return ""; @@ -2556,7 +2587,7 @@ return &d->m_dbmanager; } -void MythContext::DBError(const QString &where, const QSqlQuery& query) +void MythContext::DBError(const QString &where, const QSqlQuery& query) { QString str = QString("DB Error (%1):\n").arg(where); @@ -2710,14 +2741,15 @@ } else { - VERBOSE(VB_IMPORTANT, + VERBOSE(VB_IMPORTANT, QString("Database not open while trying to load setting: %1") .arg(key)); } if (!found) - value = d->m_settings->GetSetting(key, defaultval); + return d->m_settings->GetSetting(key, defaultval); + // Store the value (only if we have actually found it in the database) if (!value.isNull() && d && d->useSettingsCache) { d->settingsCacheLock.lock(); @@ -2796,7 +2828,7 @@ } else { - VERBOSE(VB_IMPORTANT, + VERBOSE(VB_IMPORTANT, QString("Database not open while trying to load setting: %1") .arg(key)); } @@ -2837,7 +2869,7 @@ QColorGroup disabled = pal.disabled(); QColorGroup inactive = pal.inactive(); - const QString names[] = { "Foreground", "Button", "Light", "Midlight", + const QString names[] = { "Foreground", "Button", "Light", "Midlight", "Dark", "Mid", "Text", "BrightText", "ButtonText", "Base", "Background", "Shadow", "Highlight", "HighlightedText" }; @@ -2893,7 +2925,7 @@ { QString pmapname = d->m_themepathname + d->m_qtThemeSettings->GetSetting("BackgroundPixmap"); - + bgpixmap = LoadScalePixmap(pmapname); if (bgpixmap) { @@ -3061,7 +3093,7 @@ return ret; } -QPixmap *MythContext::LoadScalePixmap(QString filename, bool fromcache) +QPixmap *MythContext::LoadScalePixmap(QString filename, bool fromcache) { if (filename.left(5) == "myth:") return NULL; @@ -3143,7 +3175,7 @@ QImage tmp2 = tmpimage.smoothScale((int)(tmpimage.width() * wmult), (int)(tmpimage.height() * hmult)); ret->convertFromImage(tmp2); - } + } else { if (!ret->load(filename)) @@ -3164,7 +3196,7 @@ QUrl qurl = url; if (qurl.host() == "") return NULL; - + if ((d->imageCache.contains(url)) && (reCache == false)) return &(d->imageCache[url]); @@ -3184,7 +3216,7 @@ return &(d->imageCache[url]); } } - + return NULL; } @@ -3200,7 +3232,7 @@ * This allows defining settings for the session only, without touching the * settings in the data base. */ -void MythContext::OverrideSettingForSession(const QString &key, +void MythContext::OverrideSettingForSession(const QString &key, const QString &value) { d->overriddenSettings[key] = value; @@ -3210,7 +3242,7 @@ bool quickTimeout, bool block) { d->serverSockLock.lock(); - + if (!d->serverSock) { ConnectToMasterServer(false); @@ -3218,7 +3250,7 @@ } bool ok = false; - + if (d->serverSock) { d->serverSock->writeStringList(strlist); @@ -3277,10 +3309,10 @@ d->serverSockLock.lock(); qApp->unlock(); } - } + } d->serverSockLock.unlock(); - + return ok; } @@ -3331,7 +3363,14 @@ socket->writeStringList(strlist); socket->readStringList(strlist, true); - if (strlist[0] == "REJECT") + if (strlist.empty()) + { + VERBOSE(VB_IMPORTANT, "Protocol version check failure. The response " + "to MYTH_PROTO_VERSION was empty."); + + return false; + } + else if (strlist[0] == "REJECT") { VERBOSE(VB_GENERAL, QString("Protocol version mismatch (frontend=%1," "backend=%2)\n") @@ -3340,7 +3379,7 @@ if (d->m_height && d->m_width) { qApp->lock(); - MythPopupBox::showOkPopup(d->mainWindow, + MythPopupBox::showOkPopup(d->mainWindow, "Connection failure", tr(QString("The server uses network " "protocol version %1, " @@ -3483,7 +3522,7 @@ // No current DBSchemaVer? Empty database, so upgrade to create tables - if (dbver.isEmpty()) + if (dbver.isEmpty() || dbver == "0") { VERBOSE(VB_GENERAL, "No current database version. Auto upgrading"); return MYTH_SCHEMA_UPGRADE; @@ -3690,7 +3729,7 @@ return MYTH_SCHEMA_UPGRADE; } -bool MythContext::TestPopupVersion(const QString &name, +bool MythContext::TestPopupVersion(const QString &name, const QString &libversion, const QString &pluginversion) { @@ -3704,7 +3743,7 @@ "make distclean."; if (GetMainWindow() && !d->disablelibrarypopup) - { + { DialogBox *dlg = new DialogBox(gContext->GetMainWindow(), err); dlg->AddButton("OK"); dlg->exec(); @@ -3808,7 +3847,7 @@ { if (0 < d->lastLogCounts[module]) { - LogEntry(module, priority, + LogEntry(module, priority, QString("Last message repeated %1 times") .arg(d->lastLogCounts[module]), d->lastLogStrings[module]); @@ -3838,7 +3877,7 @@ if (d->m_logmaxcount > 0) { query.prepare("SELECT logid FROM mythlog WHERE " - "module= :MODULE ORDER BY logdate ASC ;"); + "module= :MODULE ORDER BY logdate ASC ;"); query.bindValue(":MODULE", module); if (!query.exec() || !query.isActive()) { @@ -3848,7 +3887,7 @@ { howmany = query.size(); if (howmany > d->m_logmaxcount) - { + { MSqlQuery delquery(MSqlQuery::InitCon()); while (howmany > d->m_logmaxcount) { @@ -3857,7 +3896,7 @@ delquery.prepare("DELETE FROM mythlog WHERE " "logid= :LOGID ;"); delquery.bindValue(":LOGID", logid); - + if (!delquery.exec() || !delquery.isActive()) { MythContext::DBError("DelLogEntry#2", delquery); @@ -3911,22 +3950,22 @@ { bool ret = true; DatabaseParams cur_params = GetDatabaseParams(); - + // only rewrite file if it has changed - if (params.dbHostName != cur_params.dbHostName || - params.dbHostPing != cur_params.dbHostPing || - params.dbPort != cur_params.dbPort || - params.dbUserName != cur_params.dbUserName || - params.dbPassword != cur_params.dbPassword || - params.dbName != cur_params.dbName || - params.dbType != cur_params.dbType || - params.localEnabled != cur_params.localEnabled || - params.wolEnabled != cur_params.wolEnabled || - (params.localEnabled && - (params.localHostName != cur_params.localHostName)) || - (params.wolEnabled && - (params.wolReconnect != cur_params.wolReconnect || - params.wolRetry != cur_params.wolRetry || + if (params.dbHostName != cur_params.dbHostName || + params.dbHostPing != cur_params.dbHostPing || + params.dbPort != cur_params.dbPort || + params.dbUserName != cur_params.dbUserName || + params.dbPassword != cur_params.dbPassword || + params.dbName != cur_params.dbName || + params.dbType != cur_params.dbType || + params.localEnabled != cur_params.localEnabled || + params.wolEnabled != cur_params.wolEnabled || + (params.localEnabled && + (params.localHostName != cur_params.localHostName)) || + (params.wolEnabled && + (params.wolReconnect != cur_params.wolReconnect || + params.wolRetry != cur_params.wolRetry || params.wolCommand != cur_params.wolCommand))) { ret = d->WriteSettingsFile(params, true); diff -uNr mythtv-0.21/libs/libmyth/mythmedia.cpp mythtv/libs/libmyth/mythmedia.cpp --- mythtv-0.21/libs/libmyth/mythmedia.cpp 2008-02-12 22:41:50.000000000 +0100 +++ mythtv/libs/libmyth/mythmedia.cpp 2009-04-02 08:13:16.000000000 +0200 @@ -288,13 +288,20 @@ bool MythMediaDevice::isSameDevice(const QString &path) { +#ifdef Q_OS_MAC + // The caller may be using a raw device instead of the BSD 'leaf' name + if (path == "/dev/r" + m_DevicePath) + return true; +#endif + return (path == m_DevicePath); } void MythMediaDevice::setSpeed(int speed) { - (void)speed; - return; + VERBOSE(VB_MEDIA, + QString("Cannot setSpeed(%1) for device %2 - not implemented.") + .arg(speed).arg(m_DevicePath)); } MediaError MythMediaDevice::lock() diff -uNr mythtv-0.21/libs/libmyth/mythmediamonitor.cpp mythtv/libs/libmyth/mythmediamonitor.cpp --- mythtv-0.21/libs/libmyth/mythmediamonitor.cpp 2008-01-11 07:16:25.000000000 +0100 +++ mythtv/libs/libmyth/mythmediamonitor.cpp 2009-04-02 08:13:16.000000000 +0200 @@ -15,6 +15,7 @@ // MythTV headers #include "mythmediamonitor.h" +#include "mythcdrom.h" #include "mythcontext.h" #include "mythdialogs.h" #include "mythconfig.h" @@ -81,8 +82,13 @@ { pMedia->setSpeed(speed); mon->Unlock(pMedia); + return; } } + + MythCDROM *cd = MythCDROM::get(NULL, device, false, false); + cd->setSpeed(device, speed); + delete cd; } // When ejecting one of multiple devices, present a nice name to the user diff -uNr mythtv-0.21/libs/libmyth/screensaver-x11.cpp mythtv/libs/libmyth/screensaver-x11.cpp --- mythtv-0.21/libs/libmyth/screensaver-x11.cpp 2007-12-21 18:06:10.000000000 +0100 +++ mythtv/libs/libmyth/screensaver-x11.cpp 2008-12-03 05:36:29.000000000 +0100 @@ -1,5 +1,6 @@ #define QT_CLEAN_NAMESPACE // no qt 1.x compatability, INT32 conflicts with X #include "screensaver-x11.h" +#include <qdatetime.h> #include <qtimer.h> #include <X11/Xlib.h> @@ -135,10 +136,19 @@ void ResetScreenSaver() { - if (m_xscreensaverRunning) - myth_system("xscreensaver-command -deactivate >&- 2>&- &"); - else - myth_system("gnome-screensaver-command --poke >&- 2>&- &"); + if (IsScreenSaverRunning()) + { + QDateTime current_time = QDateTime::currentDateTime (); + if ((!m_last_deactivated.isValid()) || + (m_last_deactivated.secsTo(current_time) > 30)) + { + if (m_xscreensaverRunning) + myth_system("xscreensaver-command -deactivate >&- 2>&- &"); + else if (m_gscreensaverRunning) + myth_system("gnome-screensaver-command --poke >&- 2>&- &"); + m_last_deactivated = current_time; + } + } } private: @@ -162,6 +172,8 @@ int m_timeoutInterval; QTimer *m_resetTimer; + QDateTime m_last_deactivated; + ScreenSaverState m_state; }; diff -uNr mythtv-0.21/libs/libmyth/storagegroup.cpp mythtv/libs/libmyth/storagegroup.cpp --- mythtv-0.21/libs/libmyth/storagegroup.cpp 2008-02-15 01:30:26.000000000 +0100 +++ mythtv/libs/libmyth/storagegroup.cpp 2008-07-06 08:27:55.000000000 +0200 @@ -394,6 +394,9 @@ if (result == SGPopup_CANCEL) return; + if (name == "") + return; + if (name.right(1) != "/") name.append("/"); diff -uNr mythtv-0.21/libs/libmyth/util.cpp mythtv/libs/libmyth/util.cpp --- mythtv-0.21/libs/libmyth/util.cpp 2008-02-24 16:19:20.000000000 +0100 +++ mythtv/libs/libmyth/util.cpp 2009-04-19 23:30:15.000000000 +0200 @@ -24,6 +24,9 @@ # include <sys/sysinfo.h> # else # include <sys/param.h> +# ifdef __FreeBSD__ +# include <sys/mount.h> +# endif # ifdef CONFIG_CYGWIN # include <sys/statfs.h> # else // if !CONFIG_CYGWIN @@ -62,6 +65,8 @@ #include "jsmenuevent.h" #endif +#include "mythconfig.h" // for CONFIG_DARWIN + /** \fn mythCurrentDateTime() * \brief Returns the current QDateTime object, stripped of its msec component */ @@ -293,10 +298,11 @@ return GENERIC_EXIT_NOT_OK; } + qApp->processEvents(); + if (res > 0) return WEXITSTATUS(status); - qApp->processEvents(); usleep(100000); } } @@ -955,3 +961,18 @@ return approx_size; #endif } + +bool IsPulseAudioRunning(void) +{ +#if defined(CONFIG_DARWIN) || (__FreeBSD__) || defined(__OpenBSD__) + const char *command = "ps -ax | grep -i pulseaudio | grep -v grep > /dev/null"; +#else + const char *command = "ps -ae | grep pulseaudio > /dev/null"; +#endif + bool res = myth_system(command, + MYTH_SYSTEM_DONT_BLOCK_LIRC | + MYTH_SYSTEM_DONT_BLOCK_JOYSTICK_MENU); + return !res; +} + +/* vim: set expandtab tabstop=4 shiftwidth=4: */ diff -uNr mythtv-0.21/libs/libmyth/util.h mythtv/libs/libmyth/util.h --- mythtv-0.21/libs/libmyth/util.h 2008-02-19 12:43:05.000000000 +0100 +++ mythtv/libs/libmyth/util.h 2009-04-19 23:30:15.000000000 +0200 @@ -84,6 +84,9 @@ MPUBLIC double MythGetPixelAspectRatio(void); +/// Is A/V Sync destruction daemon is running on this host? +MPUBLIC bool IsPulseAudioRunning(void); + // CPU Tick timing function #ifdef MMX #ifdef _WIN32 diff -uNr mythtv-0.21/libs/libmythdvdnav/libmythdvdnav.pro mythtv/libs/libmythdvdnav/libmythdvdnav.pro --- mythtv-0.21/libs/libmythdvdnav/libmythdvdnav.pro 2007-12-11 15:56:01.000000000 +0100 +++ mythtv/libs/libmythdvdnav/libmythdvdnav.pro 2008-06-04 06:05:51.000000000 +0200 @@ -38,3 +38,5 @@ } mingw:DEFINES += STDC_HEADERS + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythdvdnav/nav_read.c mythtv/libs/libmythdvdnav/nav_read.c --- mythtv-0.21/libs/libmythdvdnav/nav_read.c 2006-02-15 08:18:03.000000000 +0100 +++ mythtv/libs/libmythdvdnav/nav_read.c 2008-06-21 17:07:33.000000000 +0200 @@ -353,6 +353,8 @@ /* Asserts */ /* dsi dsi gi */ +#ifdef LOG_DEBUG CHECK_VALUE(dsi->dsi_gi.zero1 == 0); +#endif } diff -uNr mythtv-0.21/libs/libmythdvdnav/searching.c mythtv/libs/libmythdvdnav/searching.c --- mythtv-0.21/libs/libmythdvdnav/searching.c 2008-02-19 14:38:46.000000000 +0100 +++ mythtv/libs/libmythdvdnav/searching.c 2008-07-14 00:54:26.000000000 +0200 @@ -478,15 +478,11 @@ if (menu == DVD_MENU_Escape) menu = DVD_MENU_Root; if (vm_jump_menu(try_vm, menu) && !try_vm->stopped) { - vm_get_next_cell(try_vm); - if (!try_vm->pgcN_invalid) - { - vm_free_copy(try_vm); - pthread_mutex_unlock(&this->vm_lock); - return DVDNAV_STATUS_OK; - } + vm_free_copy(try_vm); + pthread_mutex_unlock(&this->vm_lock); + return DVDNAV_STATUS_OK; } - + vm_free_copy(try_vm); printerr("No such menu or menu not reachable."); pthread_mutex_unlock(&this->vm_lock); @@ -495,7 +491,7 @@ dvdnav_status_t dvdnav_menu_call(dvdnav_t *this, DVDMenuID_t menu) { vm_t *try_vm; - + if(!this) { printerr("Passed a NULL pointer."); return DVDNAV_STATUS_ERR; @@ -660,7 +656,7 @@ return DVDNAV_STATUS_ERR; } - uint32_t cur_vobu, new_vobu, start, offset; + uint32_t cur_vobu, new_vobu = 0, start, offset; uint32_t first_cell_nr, last_cell_nr, cell_nr; cell_playback_t *cell; int i, length, scan_admap; @@ -690,7 +686,7 @@ { dsi = dvdnav_get_current_nav_dsi(this); if (length > 0) { - for (i = 1; i <= 19; i++) { + for (i = 0; i < 19; i++) { if (stime[i]/2.0 <= length/2.0) { offset = dsi->vobu_sri.fwda[i]; if (offset >> 31) { @@ -708,16 +704,14 @@ } } } else { - for (i = 1; i <= 19; i++) { + for (i = 0; i < 19; i++) { if (stime[18 - i]/2.0 >= abs(length)/2.0) { offset = dsi->vobu_sri.bwda[i]; if (offset >> 31) { new_vobu = cur_vobu - (offset & 0xffff); } else { - if (cell_nr == first_cell_nr) { - new_vobu = 0; - } else { + if (cell_nr != first_cell_nr) { cell_nr--; offset = state->pgc->cell_playback[cell_nr].last_sector; scan_admap = 1; diff -uNr mythtv-0.21/libs/libmythfreemheg/Actions.cpp mythtv/libs/libmythfreemheg/Actions.cpp --- mythtv-0.21/libs/libmythfreemheg/Actions.cpp 2007-01-05 16:26:11.000000000 +0100 +++ mythtv/libs/libmythfreemheg/Actions.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* Actions.cpp - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -93,8 +93,8 @@ case C_GET_ENTRY_POINT: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // EntryField case C_GET_FILL_COLOUR: pAction = new MHGetFillColour; break; case C_GET_FIRST_ITEM: pAction = new MHGetFirstItem; break; - case C_GET_HIGHLIGHT_STATUS: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// ? - case C_GET_INTERACTION_STATUS: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// ? + case C_GET_HIGHLIGHT_STATUS: pAction = new MHGetHighlightStatus; break; + case C_GET_INTERACTION_STATUS: pAction = new MHGetInteractionStatus; break; case C_GET_ITEM_STATUS: pAction = new MHGetItemStatus; break; case C_GET_LABEL: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// PushButton case C_GET_LAST_ANCHOR_FIRED: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// HyperText @@ -104,11 +104,11 @@ case C_GET_LIST_ITEM: pAction = new MHGetListItem; break; case C_GET_LIST_SIZE: pAction = new MHGetListSize; break; case C_GET_OVERWRITE_MODE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// ? - case C_GET_PORTION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// Slider + case C_GET_PORTION: pAction = new MHGetPortion; break; case C_GET_POSITION: pAction = new MHGetPosition; break; case C_GET_RUNNING_STATUS: pAction = new MHGetRunningStatus; break; case C_GET_SELECTION_STATUS: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// ? - case C_GET_SLIDER_VALUE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// Slider + case C_GET_SLIDER_VALUE: pAction = new MHGetSliderValue; break; case C_GET_TEXT_CONTENT: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break;// Text case C_GET_TEXT_DATA: pAction = new MHGetTextData; break; case C_GET_TOKEN_POSITION: pAction = new MHGetTokenPosition; break; @@ -145,24 +145,24 @@ case C_SET_FILL_COLOUR: pAction = new MHSetFillColour; break; case C_SET_FIRST_ITEM: pAction = new MHSetFirstItem; break; case C_SET_FONT_REF: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // Text - case C_SET_HIGHLIGHT_STATUS: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // ? - case C_SET_INTERACTION_STATUS: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // ? + case C_SET_HIGHLIGHT_STATUS: pAction = new MHSetHighlightStatus; break; + case C_SET_INTERACTION_STATUS: pAction = new MHSetInteractionStatus; break; case C_SET_LABEL: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // PushButton case C_SET_LINE_COLOUR: pAction = new MHSetLineColour; break; case C_SET_LINE_STYLE: pAction = new MHSetLineStyle; break; case C_SET_LINE_WIDTH: pAction = new MHSetLineWidth; break; case C_SET_OVERWRITE_MODE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // EntryField case C_SET_PALETTE_REF: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // Visible - case C_SET_PORTION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // Slider + case C_SET_PORTION: pAction = new MHSetPortion; break; case C_SET_POSITION: pAction = new MHSetPosition; break; - case C_SET_SLIDER_VALUE: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // Slider + case C_SET_SLIDER_VALUE: pAction = new MHSetSliderValue; break; case C_SET_SPEED: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // ? case C_SET_TIMER: pAction = new MHSetTimer; break; case C_SET_TRANSPARENCY: pAction = new MHSetTransparency; break; case C_SET_VARIABLE: pAction = new MHSetVariable; break; case C_SET_VOLUME: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // ? case C_SPAWN: pAction = new MHSpawn; break; - case C_STEP: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // Slider + case C_STEP: pAction = new MHStep; break; case C_STOP: pAction = new MHStop; break; case C_STORE_PERSISTENT: pAction = new MHPersistent(":StorePersistent", false); break; case C_SUBTRACT: pAction = new MHSubtract; break; @@ -184,7 +184,7 @@ case C_SET_FOCUS_POSITION: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // HyperText case C_SET_BITMAP_DECODE_OFFSET: pAction = new MHSetBitmapDecodeOffset; break; case C_GET_BITMAP_DECODE_OFFSET: pAction = new MHGetBitmapDecodeOffset; break; - case C_SET_SLIDER_PARAMETERS: pAction = new MHUnimplementedAction(pElemAction->GetTagNo()); break; // ? + case C_SET_SLIDER_PARAMETERS: pAction = new MHSetSliderParameters; break; default: MHLOG(MHLogWarning, QString("Unknown action %1").arg(pElemAction->GetTagNo())); diff -uNr mythtv-0.21/libs/libmythfreemheg/BaseActions.cpp mythtv/libs/libmythfreemheg/BaseActions.cpp --- mythtv-0.21/libs/libmythfreemheg/BaseActions.cpp 2006-04-06 22:23:34.000000000 +0200 +++ mythtv/libs/libmythfreemheg/BaseActions.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* BaseActions.cpp - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -87,6 +87,26 @@ m_ResultVar2.Initialise(p->GetArgN(2), engine); } +void MHActionInt3::Initialise(MHParseNode *p, MHEngine *engine) +{ + MHElemAction::Initialise(p, engine); + m_Argument1.Initialise(p->GetArgN(1), engine); + m_Argument2.Initialise(p->GetArgN(2), engine); + m_Argument3.Initialise(p->GetArgN(3), engine); +} + +void MHActionInt3::PrintArgs(FILE *fd, int /*nTabs*/) const +{ + m_Argument1.PrintMe(fd, 0); + m_Argument2.PrintMe(fd, 0); + m_Argument3.PrintMe(fd, 0); +} + +void MHActionInt3::Perform(MHEngine *engine) +{ + CallAction(engine, Target(engine), m_Argument1.GetValue(engine), m_Argument2.GetValue(engine), m_Argument3.GetValue(engine)); +} + void MHActionInt4::Initialise(MHParseNode *p, MHEngine *engine) { MHElemAction::Initialise(p, engine); @@ -160,3 +180,15 @@ { CallAction(engine, Target(engine), engine->FindObject(m_ResultVar1), engine->FindObject(m_ResultVar2)); } + +void MHActionBool::Initialise(MHParseNode *p, MHEngine *engine) +{ + MHElemAction::Initialise(p, engine); + m_Argument.Initialise(p->GetArgN(1), engine); +} + + +void MHActionBool::Perform(MHEngine *engine) +{ + CallAction(engine, Target(engine), m_Argument.GetValue(engine)); +} diff -uNr mythtv-0.21/libs/libmythfreemheg/BaseActions.h mythtv/libs/libmythfreemheg/BaseActions.h --- mythtv-0.21/libs/libmythfreemheg/BaseActions.h 2006-04-06 22:23:34.000000000 +0200 +++ mythtv/libs/libmythfreemheg/BaseActions.h 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* BaseActions.h - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -73,6 +73,19 @@ MHGenericInteger m_Argument1, m_Argument2; }; +// Base class for actions with three integers. Used for SetSliderParameters +class MHActionInt3: public MHElemAction +{ +public: + MHActionInt3(const char *name): MHElemAction(name) {} + virtual void Initialise(MHParseNode *p, MHEngine *engine); + virtual void PrintArgs(FILE *fd, int nTabs) const; + virtual void Perform(MHEngine *engine); + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg1, int nArg2, int nArg3) = 0; +protected: + MHGenericInteger m_Argument1, m_Argument2, m_Argument3; +}; + // Base class for actions with four integers. Used in the DynamicLineArt class class MHActionInt4: public MHElemAction { @@ -139,4 +152,17 @@ }; +// Base class for actions with a single boolean argument. +class MHActionBool: public MHElemAction +{ +public: + MHActionBool(const char *name): MHElemAction(name) {} + virtual void Initialise(MHParseNode *p, MHEngine *engine); + virtual void PrintArgs(FILE *fd, int) const { m_Argument.PrintMe(fd, 0); } + virtual void Perform(MHEngine *engine); + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, bool fArg) = 0; +protected: + MHGenericBoolean m_Argument; +}; + #endif diff -uNr mythtv-0.21/libs/libmythfreemheg/Bitmap.cpp mythtv/libs/libmythfreemheg/Bitmap.cpp --- mythtv-0.21/libs/libmythfreemheg/Bitmap.cpp 2007-01-05 16:26:11.000000000 +0100 +++ mythtv/libs/libmythfreemheg/Bitmap.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* Bitmap.cpp - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -111,7 +111,10 @@ if (nCHook == 4) { // PNG. m_pContent->CreateFromPNG(data, length); } - else if (nCHook == 2) { // MPEG I-frame. + // CHook 5 seems to be used by the BBC on Freesat for an MPEG I-frame for the + // background but enabling it here results in it overlaying the video. + // Presumably it is not simply the same as CHook 2. + else if (nCHook == 2 /* ||nCHook == 5 */) { // MPEG I-frame. m_pContent->CreateFromMPEG(data, length); } diff -uNr mythtv-0.21/libs/libmythfreemheg/Engine.cpp mythtv/libs/libmythfreemheg/Engine.cpp --- mythtv-0.21/libs/libmythfreemheg/Engine.cpp 2007-01-05 16:26:11.000000000 +0100 +++ mythtv/libs/libmythfreemheg/Engine.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* Engine.cpp - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -31,6 +31,7 @@ #include "ASN1Codes.h" #include "Logging.h" #include "freemheg.h" +#include "Visible.h" // For MHInteractible #include <stdio.h> #include <stdlib.h> @@ -50,6 +51,7 @@ m_ExternContentTable.setAutoDelete(true); m_fBooting = true; + m_Interacting = 0; } MHEngine::~MHEngine() @@ -307,6 +309,7 @@ pApp->m_pCurrentScene = NULL; } + m_Interacting = 0; // Switch to the new scene. CurrentApp()->m_pCurrentScene = (MHScene*) pProgram; @@ -604,7 +607,29 @@ { MHScene *pScene = CurrentScene(); if (! pScene) return; - EventTriggered(pScene, EventUserInput, nCode); + // Various keys generate engine events as well as user events. + // These are generated before the user events and even if there + // is an interactible. + switch (nCode) + { + case 104: + case 105: // Text key + EventTriggered(pScene, EventEngineEvent, 4); + break; + case 16: // Text Exit/Cancel key + case 100: // Red + case 101: // Green + case 102: // Yellow + case 103: // Blue + EventTriggered(pScene, EventEngineEvent, nCode); + break; + } + + // If we are interacting with an interactible send the key + // there otherwise generate a user event. + if (m_Interacting) + m_Interacting->KeyEvent(this, nCode); + else EventTriggered(pScene, EventUserInput, nCode); } // Called by an ingredient wanting external content. diff -uNr mythtv-0.21/libs/libmythfreemheg/Engine.h mythtv/libs/libmythfreemheg/Engine.h --- mythtv-0.21/libs/libmythfreemheg/Engine.h 2006-04-06 22:23:34.000000000 +0200 +++ mythtv/libs/libmythfreemheg/Engine.h 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* Engine.h - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -63,6 +63,8 @@ MHIngredient *m_pRequester; }; +class MHInteractible; + class MHEngine: public MHEG { public: MHEngine(MHContext *context); @@ -148,6 +150,10 @@ static const char *MHEGEngineProviderIdString; + // Interaction: Set if an Interactible has the focus and is receiving key presses. + MHInteractible *GetInteraction(void) { return m_Interacting; } + void SetInteraction(MHInteractible *p) { m_Interacting = p; } + protected: void CheckLinks(const MHObjectRef &sourceRef, enum EventType ev, const MHUnion &un); MHGroup *ParseProgram(QByteArray &text); @@ -187,6 +193,8 @@ MHContext *m_Context; // Pointer to the context providing drawing and other operations bool m_fBooting; + + MHInteractible *m_Interacting; // Set to current interactive object if any. }; #endif diff -uNr mythtv-0.21/libs/libmythfreemheg/libmythfreemheg.pro mythtv/libs/libmythfreemheg/libmythfreemheg.pro --- mythtv-0.21/libs/libmythfreemheg/libmythfreemheg.pro 2007-12-12 03:53:59.000000000 +0100 +++ mythtv/libs/libmythfreemheg/libmythfreemheg.pro 2008-06-04 06:05:51.000000000 +0200 @@ -24,4 +24,4 @@ LIBS += $$EXTRA_LIBS -mingw: target.path = $${PREFIX}/bin +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythfreemheg/Link.cpp mythtv/libs/libmythfreemheg/Link.cpp --- mythtv-0.21/libs/libmythfreemheg/Link.cpp 2007-01-05 16:26:11.000000000 +0100 +++ mythtv/libs/libmythfreemheg/Link.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* Link.cpp - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -76,7 +76,7 @@ m_LinkEffect.Initialise(pLinkEffect, engine); } -static char *rchEventType[] = +static const char *rchEventType[] = { "IsAvailable", "ContentAvailable", diff -uNr mythtv-0.21/libs/libmythfreemheg/ParseText.cpp mythtv/libs/libmythfreemheg/ParseText.cpp --- mythtv-0.21/libs/libmythfreemheg/ParseText.cpp 2007-01-05 16:26:11.000000000 +0100 +++ mythtv/libs/libmythfreemheg/ParseText.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* ParseText.cpp - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -536,6 +536,10 @@ if (m_nInt > 0) return; m_nInt = MHText::GetStartCorner(buff); if (m_nInt > 0) return; + m_nInt = MHSlider::GetOrientation(buff); + if (m_nInt > 0) return; + m_nInt = MHSlider::GetStyle(buff); + if (m_nInt > 0) return; // Check the colour table. If it's there generate a string containing the colour info. for (int i = 0; i < (int)(sizeof(colourTable)/sizeof(colourTable[0])); i++) { diff -uNr mythtv-0.21/libs/libmythfreemheg/Programs.cpp mythtv/libs/libmythfreemheg/Programs.cpp --- mythtv-0.21/libs/libmythfreemheg/Programs.cpp 2007-03-29 21:44:23.000000000 +0200 +++ mythtv/libs/libmythfreemheg/Programs.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -30,7 +30,11 @@ #include "freemheg.h" #include <sys/timeb.h> +#ifdef __FreeBSD__ +#include <sys/time.h> +#else #include <time.h> +#endif #include "../../config.h" @@ -486,7 +490,31 @@ } else if (m_Name.Equal("DBG")) { // Debug - optional - MHERROR("Debug ResidentProgram is not implemented"); + QString message = "DEBUG: "; + for (int i = 0; i < args.Size(); i++) { + MHUnion un; + un.GetValueFrom(*(args.GetAt(i)), engine); + switch (un.m_Type) { + case MHUnion::U_Int: + message.append(QString("%1").arg(un.m_nIntVal)); + break; + case MHParameter::P_Bool: + message.append(un.m_fBoolVal ? "True" : "False"); + break; + case MHParameter::P_String: + message.append(QString::fromUtf8((const char *)un.m_StrVal.Bytes(), un.m_StrVal.Size())); + break; + case MHParameter::P_ObjRef: + message.append(un.m_ObjRefVal.Printable()); + break; + case MHParameter::P_ContentRef: + message.append(un.m_ContentRefVal.Printable()); + break; + case MHParameter::P_Null: + break; + } + } + MHLOG(MHLogNotifications, message); } else { diff -uNr mythtv-0.21/libs/libmythfreemheg/Root.h mythtv/libs/libmythfreemheg/Root.h --- mythtv-0.21/libs/libmythfreemheg/Root.h 2006-04-06 22:23:34.000000000 +0200 +++ mythtv/libs/libmythfreemheg/Root.h 2008-12-11 23:59:27.000000000 +0100 @@ -176,6 +176,22 @@ virtual void SetVideoDecodeOffset(int /*newXOffset*/, int /*newYOffset*/, MHEngine *) { InvalidAction("SetVideoDecodeOffset"); } virtual void GetVideoDecodeOffset(MHRoot * /*pXOffset*/, MHRoot */*pYOffset*/, MHEngine *) { InvalidAction("GetVideoDecodeOffset"); } + // Actions on Interactibles. + virtual void SetInteractionStatus(bool /*newStatus*/, MHEngine *) { InvalidAction("SetInteractionStatus"); } + virtual bool GetInteractionStatus(void) { InvalidAction("GetInteractionStatus"); return false; } + virtual void SetHighlightStatus(bool /*newStatus*/, MHEngine *engine) { InvalidAction("SetHighlightStatus"); } + virtual bool GetHighlightStatus(void) { InvalidAction("GetHighlightStatus"); return false; } + + // Actions on Sliders. + virtual void Step(int /*nbSteps*/, MHEngine */*engine*/) { InvalidAction("Step"); } + virtual void SetSliderValue(int /*nbSteps*/, MHEngine */*engine*/) { InvalidAction("SetSliderValue"); } + virtual int GetSliderValue(void) { InvalidAction("GetSliderValue"); return 0; } + virtual void SetPortion(int /*newPortion*/, MHEngine */*engine*/) { InvalidAction("SetPortion"); } + virtual int GetPortion(void) { InvalidAction("GetPortion"); return 0; } + // Additional action defined in UK MHEG. + virtual void SetSliderParameters(int /*newMin*/, int /*newMax*/, int /*newStep*/, MHEngine */*engine*/) + { InvalidAction("SetSliderParameters"); } + protected: void InvalidAction(const char *actionName); diff -uNr mythtv-0.21/libs/libmythfreemheg/Text.cpp mythtv/libs/libmythfreemheg/Text.cpp --- mythtv-0.21/libs/libmythfreemheg/Text.cpp 2007-01-05 16:26:11.000000000 +0100 +++ mythtv/libs/libmythfreemheg/Text.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* Text.cpp - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -463,6 +463,11 @@ pNewLine->m_Items.Append(pNewItem); pNewItem->m_Unicode = pItem->m_Unicode.mid(nNewStart, nNewWidth); pNewItem->m_nUnicode = nNewWidth; + // Move any remaining items, e.g. in a different colour, from this line onto the new line. + while (pLine->m_Items.Size() > j+1) { + pNewLine->m_Items.Append(pLine->m_Items.GetAt(j+1)); + pLine->m_Items.RemoveAt(j+1); + } } // Remove any spaces at the end of the old section. If we don't do that and // we are centering or right aligning the text we'll get it wrong. @@ -534,7 +539,7 @@ } -MHHyperText::MHHyperText() +MHHyperText::MHHyperText(): MHInteractible(this) { } diff -uNr mythtv-0.21/libs/libmythfreemheg/Text.h mythtv/libs/libmythfreemheg/Text.h --- mythtv-0.21/libs/libmythfreemheg/Text.h 2006-04-06 22:23:34.000000000 +0200 +++ mythtv/libs/libmythfreemheg/Text.h 2008-12-11 23:59:27.000000000 +0100 @@ -90,7 +90,7 @@ void CreateContent(const unsigned char *p, int s, MHEngine *engine); }; -class MHHyperText : public MHText, public MHInteractible +class MHHyperText : public MHText, public MHInteractible { public: MHHyperText(); @@ -98,6 +98,15 @@ virtual ~MHHyperText(); virtual void Initialise(MHParseNode *p, MHEngine *engine); virtual void PrintMe(FILE *fd, int nTabs) const; + + // Implement the actions in the main inheritance line. + virtual void SetInteractionStatus(bool newStatus, MHEngine *engine) + { InteractSetInteractionStatus(newStatus, engine); } + virtual bool GetInteractionStatus(void) { return InteractGetInteractionStatus(); } + virtual void SetHighlightStatus(bool newStatus, MHEngine *engine) + { InteractSetHighlightStatus(newStatus, engine); } + virtual bool GetHighlightStatus(void) { return InteractGetHighlightStatus(); } + virtual void Deactivation(MHEngine *engine) { InteractDeactivation(); } }; // Get Text Data - get the data out of a text object. diff -uNr mythtv-0.21/libs/libmythfreemheg/TokenGroup.cpp mythtv/libs/libmythfreemheg/TokenGroup.cpp --- mythtv-0.21/libs/libmythfreemheg/TokenGroup.cpp 2006-04-06 22:23:34.000000000 +0200 +++ mythtv/libs/libmythfreemheg/TokenGroup.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -54,7 +54,8 @@ for (int i = 0; i < m_ActionSlots.Size(); i++) { PrintTabs(fd, nTabs+2); fprintf(fd, "(\n"); MHActionSequence *pActions = m_ActionSlots.GetAt(i); - if (pActions->Size() == 0) fprintf(fd, "NULL\n"); + if (pActions->Size() == 0) + { PrintTabs(fd, nTabs+2); fprintf(fd, "NULL\n"); } else pActions->PrintMe(fd, nTabs+2); PrintTabs(fd, nTabs+2); fprintf(fd, ")\n"); } diff -uNr mythtv-0.21/libs/libmythfreemheg/Visible.cpp mythtv/libs/libmythfreemheg/Visible.cpp --- mythtv-0.21/libs/libmythfreemheg/Visible.cpp 2007-01-05 16:26:11.000000000 +0100 +++ mythtv/libs/libmythfreemheg/Visible.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -345,9 +345,11 @@ } -MHInteractible::MHInteractible() +MHInteractible::MHInteractible(MHVisible *parent): m_parent(parent) { - + m_fEngineResp = true; + m_fHighlightStatus = false; + m_fInteractionStatus = false; } MHInteractible::~MHInteractible() @@ -355,41 +357,389 @@ } -void MHInteractible::Initialise(MHParseNode */*p*/, MHEngine */*engine*/) +void MHInteractible::Initialise(MHParseNode *p, MHEngine *engine) { + // Engine Resp - optional + MHParseNode *pEngineResp = p->GetNamedArg(C_ENGINE_RESP); + if (pEngineResp) m_fEngineResp = pEngineResp->GetArgN(0)->GetBoolValue(); + // Highlight colour. + MHParseNode *phlCol = p->GetNamedArg(C_HIGHLIGHT_REF_COLOUR); + if (phlCol) m_highlightRefColour.Initialise(phlCol->GetArgN(0), engine); + else engine->GetDefaultHighlightRefColour(m_highlightRefColour); + m_fHighlightStatus = false; + m_fInteractionStatus = false; } -void MHInteractible::PrintMe(FILE */*fd*/, int /*nTabs*/) const +void MHInteractible::PrintMe(FILE *fd, int nTabs) const { + if (! m_fEngineResp) { PrintTabs(fd, nTabs); fprintf(fd, ":EngineResp false\n"); } + + if (m_highlightRefColour.IsSet()) { + PrintTabs(fd, nTabs); + fprintf(fd, ":HighlightRefColour "); + m_highlightRefColour.PrintMe(fd, nTabs+1); + fprintf(fd, "\n"); + } } -MHSlider::MHSlider() +void MHInteractible::Interaction(MHEngine *engine) { + m_fInteractionStatus = true; + engine->SetInteraction(this); + // The MHEG standard says: "generate visual feedback" here + // but it appears that any visual feedback is controlled only + // by the highlight status combined with engine-resp. +} +void MHInteractible::InteractSetInteractionStatus(bool newStatus, MHEngine *engine) +{ + if (newStatus) { // Turning interaction on. + if (engine->GetInteraction() == 0) // No current interactible + Interaction(engine); // virtual function + } + else { // Turning interaction off. + if (m_fInteractionStatus) { + m_fInteractionStatus = false; + engine->SetInteraction(0); + InteractionCompleted(engine); // Interaction is interrupted. + engine->EventTriggered(m_parent, EventInteractionCompleted); + } + } } -MHSlider::~MHSlider() +void MHInteractible::InteractSetHighlightStatus(bool newStatus, MHEngine *engine) { + if (newStatus == m_fHighlightStatus) return; + m_fHighlightStatus = newStatus; + // If active redraw to show change of status. + if (m_parent->GetRunningStatus() && m_fEngineResp) + engine->Redraw(m_parent->GetVisibleArea()); + // Generate the event for the change of highlight status. + engine->EventTriggered(m_parent, m_fHighlightStatus ? EventHighlightOn: EventHighlightOff); +} +MHSlider::MHSlider(): MHInteractible(this) +{ + m_orientation = SliderLeft; + orig_max_value = -1; + orig_min_value = initial_value = orig_step_size = 1; + initial_portion = 0; + m_style = SliderNormal; +} + +MHSlider::~MHSlider() +{ } void MHSlider::Initialise(MHParseNode *p, MHEngine *engine) { MHVisible::Initialise(p, engine); MHInteractible::Initialise(p, engine); - // + // + MHParseNode *pOrientation = p->GetNamedArg(C_ORIENTATION); + if (pOrientation) + m_orientation = (enum SliderOrientation)pOrientation->GetArgN(0)->GetEnumValue(); + // This is not optional. + + MHParseNode *pMin = p->GetNamedArg(C_MIN_VALUE); + if (pMin) orig_min_value = pMin->GetArgN(0)->GetIntValue(); + else orig_min_value = 1; + + MHParseNode *pMax = p->GetNamedArg(C_MAX_VALUE); + if (pMax) orig_max_value = pMax->GetArgN(0)->GetIntValue(); + else orig_max_value = orig_min_value-1; // Unset + + MHParseNode *pInit = p->GetNamedArg(C_INITIAL_VALUE); + if (pInit) initial_value = pInit->GetArgN(0)->GetIntValue(); + else initial_value = orig_min_value; // Default is min_value + + MHParseNode *pPortion = p->GetNamedArg(C_INITIAL_PORTION); + if (pPortion) initial_portion = pPortion->GetArgN(0)->GetIntValue(); + else initial_portion = orig_min_value-1; // Unset + + MHParseNode *pStep = p->GetNamedArg(C_STEP_SIZE); + if (pStep) orig_step_size = pStep->GetArgN(0)->GetIntValue(); + else orig_step_size = 1; // Unset + + MHParseNode *pStyle = p->GetNamedArg(C_SLIDER_STYLE); + if (pStyle) m_style = (enum SliderStyle)pStyle->GetArgN(0)->GetEnumValue(); + else m_style = SliderNormal; + + MHParseNode *pslCol = p->GetNamedArg(C_SLIDER_REF_COLOUR); + if (pslCol) m_sliderRefColour.Initialise(pslCol->GetArgN(0), engine); + else engine->GetDefaultSliderRefColour(m_sliderRefColour); +} + +static const char *rchOrientation[] = +{ + "left", // 1 + "right", + "up", + "down" // 4 +}; + +// Look up the Orientation. Returns zero if it doesn't match. Used in the text parser only. +int MHSlider::GetOrientation(const char *str) +{ + for (int i = 0; i < (int)(sizeof(rchOrientation)/sizeof(rchOrientation[0])); i++) { + if (strcasecmp(str, rchOrientation[i]) == 0) return (i+1); // Numbered from 1 + } + return 0; +} + +static const char *rchStyle[] = +{ + "normal", // 1 + "thermometer", + "proportional" // 3 +}; + +int MHSlider::GetStyle(const char *str) +{ + for (int i = 0; i < (int)(sizeof(rchStyle)/sizeof(rchStyle[0])); i++) { + if (strcasecmp(str, rchStyle[i]) == 0) return (i+1); // Numbered from 1 + } + return 0; } void MHSlider::PrintMe(FILE *fd, int nTabs) const { PrintTabs(fd, nTabs); fprintf(fd, "{:Slider "); - MHVisible::PrintMe(fd, nTabs); + MHVisible::PrintMe(fd, nTabs+1); MHInteractible::PrintMe(fd, nTabs+1); - fprintf(fd, "****TODO\n"); + + PrintTabs(fd, nTabs); fprintf(fd, ":Orientation %s\n", rchOrientation[m_orientation-1]); + + if (initial_value >= orig_min_value) { + PrintTabs(fd, nTabs+1); fprintf(fd, ":InitialValue %d\n", initial_value); + } + + if (orig_min_value != 1) { + PrintTabs(fd, nTabs+1); fprintf(fd, ":MinValue %d\n", orig_min_value); + } + + if (orig_max_value > orig_min_value) { + PrintTabs(fd, nTabs+1); fprintf(fd, ":MaxValue %d\n", orig_max_value); + } + + if (initial_portion >= orig_min_value) { + PrintTabs(fd, nTabs+1); fprintf(fd, ":InitialPortion %d\n", initial_portion); + } + + if (orig_step_size != 1) { + PrintTabs(fd, nTabs+1); fprintf(fd, ":StepSize %d\n", orig_step_size); + } + + if (m_style != SliderNormal) + { + PrintTabs(fd, nTabs+1); + fprintf(fd, ":SliderStyle %s\n", rchStyle[m_style-1]); + } + + if (m_sliderRefColour.IsSet()) { + PrintTabs(fd, nTabs+1); + fprintf(fd, ":SliderRefColour "); + m_sliderRefColour.PrintMe(fd, nTabs+2); + fprintf(fd, "\n"); + } + PrintTabs(fd, nTabs); fprintf(fd, "}\n"); } -MHEntryField::MHEntryField() +// The MHEG standard doesn't define where the internal values are +// initialised. Assume it's during preparation. +void MHSlider::Preparation(MHEngine *engine) +{ + MHVisible::Preparation(engine); + max_value = orig_max_value; + min_value = orig_min_value; + step_size = orig_step_size; + slider_value = initial_value; + portion = initial_portion; +} + +void MHSlider::Display(MHEngine *engine) +{ + MHContext *d = engine->GetContext(); + MHRgba colour; + if (m_fHighlightStatus && m_fEngineResp) + colour = GetColour(m_highlightRefColour); + else colour = GetColour(m_sliderRefColour); + + int major; // Direction of change. + if (m_orientation == SliderLeft || m_orientation == SliderRight) + major = m_nBoxWidth; + else major = m_nBoxHeight; + + if (max_value <= min_value) return; // Avoid divide by zero if error. + + if (m_style == SliderNormal) + { + // This is drawn as a 9 pixel wide "thumb" at the position. + major -= 9; // Width of "thumb" + int posn = major * (slider_value-min_value) / (max_value-min_value); + switch (m_orientation) + { + case SliderLeft: + d->DrawRect(m_nPosX + posn, m_nPosY, 9, m_nBoxHeight, colour); + break; + case SliderRight: + d->DrawRect(m_nPosX + m_nBoxWidth - posn - 9, m_nPosY, 9, m_nBoxHeight, colour); + break; + case SliderUp: + d->DrawRect(m_nPosX, m_nPosY + m_nBoxHeight - posn - 9, m_nBoxWidth, 9, colour); + break; + case SliderDown: + d->DrawRect(m_nPosX, m_nPosY + posn, m_nBoxWidth, 9, colour); + break; + } + } + else { + // Thermometer and proportional sliders are drawn as bars. Thermometers + // run from the start to the position, proportional sliders from the + // position for the "portion". + int start = 0; + int end = major * (slider_value-min_value) / (max_value-min_value); + if (m_style == SliderProp) + { + start = end; + end = major * (slider_value+portion -min_value) / (max_value-min_value); + } + switch (m_orientation) + { + case SliderLeft: + d->DrawRect(m_nPosX + start, m_nPosY, end-start, m_nBoxHeight, colour); + break; + case SliderRight: + d->DrawRect(m_nPosX + m_nBoxWidth - end, m_nPosY, end-start, m_nBoxHeight, colour); + break; + case SliderUp: + d->DrawRect(m_nPosX, m_nPosY + m_nBoxHeight - end, m_nBoxWidth, end-start, colour); + break; + case SliderDown: + d->DrawRect(m_nPosX, m_nPosY + start, m_nBoxWidth, end-start, colour); + break; + } + + } +} + +void MHSlider::Interaction(MHEngine *engine) +{ + MHInteractible::Interaction(engine); + // All the interaction is handled by KeyEvent. +} + +// Called when the interaction has been terminated and we need +// to restore the state to non-interacting. +void MHSlider::InteractionCompleted(MHEngine *engine) +{ + MHInteractible::InteractionCompleted(engine); + // Redraw with the interaction highlighting turned off + engine->Redraw(GetVisibleArea()); +} + +// Called when a key is pressed. The only keys that have an effect are +// the Select and Cancel keys which both terminate the action and the +// arrow keys. The effect of the arrow keys depends on the orientation of +// the slider. +void MHSlider::KeyEvent(MHEngine *engine, int nCode) +{ + switch (nCode) + { + case 15: // Select key + case 16: // Cancel key + m_fInteractionStatus = false; + engine->SetInteraction(0); + InteractionCompleted(engine); // Interaction is interrupted. + engine->EventTriggered(this, EventInteractionCompleted); + break; + + case 1: // Up + if (m_orientation == SliderUp) + Increment(engine); + else if (m_orientation == SliderDown) + Decrement(engine); + break; + + case 2: // Down + if (m_orientation == SliderUp) + Decrement(engine); + else if (m_orientation == SliderDown) + Increment(engine); + break; + + case 3: // Left + if (m_orientation == SliderLeft) + Increment(engine); + else if (m_orientation == SliderRight) + Decrement(engine); + break; + + case 4: // Right + if (m_orientation == SliderLeft) + Decrement(engine); + else if (m_orientation == SliderRight) + Increment(engine); + break; + + } +} + +void MHSlider::Increment(MHEngine *engine) +{ + if (slider_value+step_size <= max_value) + { + slider_value += step_size; + engine->Redraw(GetVisibleArea()); + engine->EventTriggered(this, EventSliderValueChanged); + } +} + +void MHSlider::Decrement(MHEngine *engine) +{ + if (slider_value-step_size >= min_value) + { + slider_value -= step_size; + engine->Redraw(GetVisibleArea()); + engine->EventTriggered(this, EventSliderValueChanged); + } +} + +void MHSlider::Step(int nbSteps, MHEngine *engine) +{ + step_size = nbSteps; + if (m_fRunning) engine->Redraw(GetVisibleArea()); + engine->EventTriggered(this, EventSliderValueChanged); +} + +void MHSlider::SetSliderValue(int newValue, MHEngine *engine) +{ + slider_value = newValue; + if (m_fRunning) engine->Redraw(GetVisibleArea()); + engine->EventTriggered(this, EventSliderValueChanged); +} + +void MHSlider::SetPortion(int newPortion, MHEngine *engine) +{ + portion = newPortion; + if (m_fRunning) engine->Redraw(GetVisibleArea()); + engine->EventTriggered(this, EventSliderValueChanged); +} + +// Additional action defined in UK MHEG. +void MHSlider::SetSliderParameters(int newMin, int newMax, int newStep, MHEngine *engine) +{ + min_value = newMin; + max_value = newMax; + step_size = newStep; + slider_value = newMin; + if (m_fRunning) engine->Redraw(GetVisibleArea()); + engine->EventTriggered(this, EventSliderValueChanged); +} + + +MHEntryField::MHEntryField(): MHInteractible(this) { } diff -uNr mythtv-0.21/libs/libmythfreemheg/Visible.h mythtv/libs/libmythfreemheg/Visible.h --- mythtv-0.21/libs/libmythfreemheg/Visible.h 2006-04-06 22:23:34.000000000 +0200 +++ mythtv/libs/libmythfreemheg/Visible.h 2008-12-11 23:59:27.000000000 +0100 @@ -1,6 +1,6 @@ /* Visible.h - Copyright (C) David C. J. Matthews 2004 dm at prolingua.co.uk + Copyright (C) David C. J. Matthews 2004, 2008 dm at prolingua.co.uk This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -124,13 +124,41 @@ virtual MHIngredient *Clone(MHEngine *) { return new MHRectangle(*this); } // Create a clone of this ingredient. }; +// The Interactible class is described as a "mix-in" class. It is used +// in various classes which complicates inheritance. class MHInteractible { public: - MHInteractible(); + MHInteractible(MHVisible *parent); virtual ~MHInteractible(); - virtual void Initialise(MHParseNode *p, MHEngine *engine); - virtual void PrintMe(FILE *fd, int nTabs) const; + void Initialise(MHParseNode *p, MHEngine *engine); + void PrintMe(FILE *fd, int nTabs) const; + + virtual void Interaction(MHEngine *engine); + + // This is called whenever a key is pressed while this + // interactible is set to interactive. + virtual void KeyEvent(MHEngine */*engine*/, int /*nCode*/) {} + virtual void InteractionCompleted(MHEngine */*engine*/) {} + + void InteractSetInteractionStatus(bool newStatus, MHEngine *engine); + bool InteractGetInteractionStatus(void) { return m_fInteractionStatus; } + void InteractSetHighlightStatus(bool newStatus, MHEngine *engine); + bool InteractGetHighlightStatus(void) { return m_fHighlightStatus; } + // InteractDeactivation should be applied in every Deactivation action + // of derived classes. + void InteractDeactivation(void) { m_fInteractionStatus = false; } + +protected: + // Exchanged attributes + bool m_fEngineResp; + MHColour m_highlightRefColour; + // Internal attributes + bool m_fHighlightStatus; + bool m_fInteractionStatus; + +private: + MHVisible *m_parent; }; class MHSlider : public MHVisible, public MHInteractible @@ -141,7 +169,54 @@ virtual const char *ClassName() { return "Slider"; } virtual void Initialise(MHParseNode *p, MHEngine *engine); virtual void PrintMe(FILE *fd, int nTabs) const; - virtual void Display(MHEngine *) {} // Not (yet?) supported + virtual void Display(MHEngine *); + virtual void Preparation(MHEngine *engine); + + virtual void Interaction(MHEngine *engine); + virtual void InteractionCompleted(MHEngine *engine); + virtual void KeyEvent(MHEngine *engine, int nCode); + + // Implement the actions in the main inheritance line. + virtual void SetInteractionStatus(bool newStatus, MHEngine *engine) + { InteractSetInteractionStatus(newStatus, engine); } + virtual bool GetInteractionStatus(void) { return InteractGetInteractionStatus(); } + virtual void SetHighlightStatus(bool newStatus, MHEngine *engine) + { InteractSetHighlightStatus(newStatus, engine); } + virtual bool GetHighlightStatus(void) { return InteractGetHighlightStatus(); } + virtual void Deactivation(MHEngine *engine) { InteractDeactivation(); } + + // Actions + virtual void Step(int nbSteps, MHEngine *engine); + virtual void SetSliderValue(int newValue, MHEngine *engine); + virtual int GetSliderValue(void) { return slider_value; } + virtual void SetPortion(int newPortion, MHEngine *engine); + virtual int GetPortion(void) { return portion; } + // Additional action defined in UK MHEG. + virtual void SetSliderParameters(int newMin, int newMax, int newStep, MHEngine *engine); + + // Enumerated type lookup functions for the text parser. + static int GetOrientation(const char *str); + static int GetStyle(const char *str); +protected: + void Increment(MHEngine *engine); + void Decrement(MHEngine *engine); + + // Exchanged attributes + // Orientation and direction of increasing value. + enum SliderOrientation { SliderLeft = 1, SliderRight, SliderUp, SliderDown } + m_orientation; + int initial_value, initial_portion; + int orig_max_value, orig_min_value, orig_step_size; + // Style of slider. Normal represents a mark on a scale, + // Thermometer a range from the start up to the mark and Proportional + // a range from the slider to the portion. + enum SliderStyle { SliderNormal = 1, SliderThermo, SliderProp } + m_style; + MHColour m_sliderRefColour; + // Internal attributes + // In UK MHEG min_value, max_value and step_size can be changed. + int max_value, min_value, step_size; + int slider_value, portion; }; class MHEntryField : public MHVisible, public MHInteractible @@ -153,6 +228,15 @@ virtual void Initialise(MHParseNode *p, MHEngine *engine); virtual void PrintMe(FILE *fd, int nTabs) const; virtual void Display(MHEngine *) {} // Not (yet?) supported + + // Implement the actions in the main inheritance line. + virtual void SetInteractionStatus(bool newStatus, MHEngine *engine) + { InteractSetInteractionStatus(newStatus, engine); } + virtual bool GetInteractionStatus(void) { return InteractGetInteractionStatus(); } + virtual void SetHighlightStatus(bool newStatus, MHEngine *engine) + { InteractSetHighlightStatus(newStatus, engine); } + virtual bool GetHighlightStatus(void) { return InteractGetHighlightStatus(); } + virtual void Deactivation(MHEngine *engine) { InteractDeactivation(); } }; // Button - not needed for UK MHEG. @@ -311,4 +395,81 @@ virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->SetLineStyle(nArg, engine); }; }; +class MHSetInteractionStatus: public MHActionBool +{ +public: + MHSetInteractionStatus(): MHActionBool("SetInteractionStatus") {} + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, bool newStatus) + { Target(engine)->SetInteractionStatus(newStatus, engine); } +}; + +class MHGetInteractionStatus: public MHActionObjectRef +{ +public: + MHGetInteractionStatus(): MHActionObjectRef(":GetInteractionStatus") {} + virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult) + { pResult->SetVariableValue(pTarget->GetInteractionStatus());} +}; + +class MHSetHighlightStatus: public MHActionBool +{ +public: + MHSetHighlightStatus(): MHActionBool("SetHighlightStatus") {} + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, bool newStatus) + { Target(engine)->SetHighlightStatus(newStatus, engine); } +}; + +class MHGetHighlightStatus: public MHActionObjectRef +{ +public: + MHGetHighlightStatus(): MHActionObjectRef(":GetHighlightStatus") {} + virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult) + { pResult->SetVariableValue(pTarget->GetHighlightStatus());} +}; + +class MHStep: public MHActionInt +{ +public: + MHStep(): MHActionInt(":Step") {} + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->Step(nArg, engine); }; +}; + +class MHSetSliderValue: public MHActionInt +{ +public: + MHSetSliderValue(): MHActionInt(":SetSliderValue") {} + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->SetSliderValue(nArg, engine); }; +}; + +class MHGetSliderValue: public MHActionObjectRef +{ +public: + MHGetSliderValue(): MHActionObjectRef(":GetSliderValue") {} + virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult) + { pResult->SetVariableValue(pTarget->GetSliderValue());} +}; + +class MHSetPortion: public MHActionInt +{ +public: + MHSetPortion(): MHActionInt(":SetPortion") {} + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int nArg) { pTarget->SetPortion(nArg, engine); }; +}; + +class MHGetPortion: public MHActionObjectRef +{ +public: + MHGetPortion(): MHActionObjectRef(":GetPortion") {} + virtual void CallAction(MHEngine *, MHRoot *pTarget, MHRoot *pResult) + { pResult->SetVariableValue(pTarget->GetPortion());} +}; + +class MHSetSliderParameters: public MHActionInt3 +{ +public: + MHSetSliderParameters(): MHActionInt3(":SetSliderParameters") {} + virtual void CallAction(MHEngine *engine, MHRoot *pTarget, int newMin, int newMax, int newStep) + { pTarget->SetSliderParameters(newMin, newMax, newStep, engine); }; +}; + #endif diff -uNr mythtv-0.21/libs/libmythfreesurround/libmythfreesurround.pro mythtv/libs/libmythfreesurround/libmythfreesurround.pro --- mythtv-0.21/libs/libmythfreesurround/libmythfreesurround.pro 2008-02-14 00:47:17.000000000 +0100 +++ mythtv/libs/libmythfreesurround/libmythfreesurround.pro 2008-06-04 06:05:51.000000000 +0200 @@ -28,3 +28,5 @@ LIBS += -L../libavcodec -lavcodec INCLUDEPATH += ../libavutil } + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythlivemedia/groupsock/GroupsockHelper.cpp mythtv/libs/libmythlivemedia/groupsock/GroupsockHelper.cpp --- mythtv-0.21/libs/libmythlivemedia/groupsock/GroupsockHelper.cpp 2006-06-21 23:20:20.000000000 +0200 +++ mythtv/libs/libmythlivemedia/groupsock/GroupsockHelper.cpp 2008-11-05 01:58:33.000000000 +0100 @@ -34,6 +34,7 @@ // By default, use INADDR_ANY for the sending and receiving interfaces: netAddressBits SendingInterfaceAddr = INADDR_ANY; netAddressBits ReceivingInterfaceAddr = INADDR_ANY; +netAddressBits ReceivingSocketAddr = INADDR_ANY; static void socketErr(UsageEnvironment& env, char* errorMsg) { env.setResultErrMsg(errorMsg); @@ -93,7 +94,7 @@ #else if (port.num() != 0 || ReceivingInterfaceAddr != INADDR_ANY) { #endif - MAKE_SOCKADDR_IN(name, ReceivingInterfaceAddr, port.num()); + MAKE_SOCKADDR_IN(name, ReceivingSocketAddr, port.num()); if (bind(newSocket, (struct sockaddr*)&name, sizeof name) != 0) { char tmpBuffer[100]; sprintf(tmpBuffer, "bind() error (port number: %d): ", @@ -560,6 +561,8 @@ testAddr.s_addr = our_inet_addr("228.67.43.91"); // arbitrary Port testPort(15947); // ditto + ReceivingSocketAddr = INADDR_ANY; + sock = setupDatagramSocket(env, testPort); if (sock < 0) break; diff -uNr mythtv-0.21/libs/libmythlivemedia/groupsock/include/GroupsockHelper.hh mythtv/libs/libmythlivemedia/groupsock/include/GroupsockHelper.hh --- mythtv-0.21/libs/libmythlivemedia/groupsock/include/GroupsockHelper.hh 2006-06-21 23:20:20.000000000 +0200 +++ mythtv/libs/libmythlivemedia/groupsock/include/GroupsockHelper.hh 2008-11-05 01:58:33.000000000 +0100 @@ -79,6 +79,7 @@ // are INADDR_ANY (i.e., 0), specifying the default interface.) extern netAddressBits SendingInterfaceAddr; extern netAddressBits ReceivingInterfaceAddr; +extern netAddressBits ReceivingSocketAddr; // Allocates a randomly-chosen IPv4 SSM (multicast) address: netAddressBits chooseRandomIPv4SSMAddress(UsageEnvironment& env); diff -uNr mythtv-0.21/libs/libmythlivemedia/libmythlivemedia.pro mythtv/libs/libmythlivemedia/libmythlivemedia.pro --- mythtv-0.21/libs/libmythlivemedia/libmythlivemedia.pro 2007-09-26 22:02:25.000000000 +0200 +++ mythtv/libs/libmythlivemedia/libmythlivemedia.pro 2008-06-04 06:05:51.000000000 +0200 @@ -304,3 +304,5 @@ SOURCES += liveMedia/WAVAudioFileServerMediaSubsession.cpp SOURCES += liveMedia/WAVAudioFileSource.cpp } + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythlivemedia/liveMedia/RTSPClient.cpp mythtv/libs/libmythlivemedia/liveMedia/RTSPClient.cpp --- mythtv-0.21/libs/libmythlivemedia/liveMedia/RTSPClient.cpp 2008-02-12 22:33:20.000000000 +0100 +++ mythtv/libs/libmythlivemedia/liveMedia/RTSPClient.cpp 2008-03-29 20:01:18.000000000 +0100 @@ -2124,11 +2124,11 @@ Boolean haveSeenNonCRLF = False; int bytesRead = 1; // because we've already read the first byte while (bytesRead < (int)responseBufferSize) { - unsigned bytesReadNow + int bytesReadNow = readSocket(envir(), fInputSocketNum, (unsigned char*)(responseBuffer+bytesRead), 1, fromAddress); - if (bytesReadNow == 0) { + if (bytesReadNow <= 0) { envir().setResultMsg("RTSP response was truncated"); break; } diff -uNr mythtv-0.21/libs/libmythlivemedia/liveMedia/RTSPCommon.cpp mythtv/libs/libmythlivemedia/liveMedia/RTSPCommon.cpp --- mythtv-0.21/libs/libmythlivemedia/liveMedia/RTSPCommon.cpp 2006-06-21 23:20:20.000000000 +0200 +++ mythtv/libs/libmythlivemedia/liveMedia/RTSPCommon.cpp 2008-03-29 20:01:18.000000000 +0100 @@ -50,7 +50,7 @@ // Skip over the prefix of any "rtsp://" or "rtsp:/" URL that follows: unsigned j = i+1; while (j < reqStrSize && (reqStr[j] == ' ' || reqStr[j] == '\t')) ++j; // skip over any additional white space - for (j = i+1; j < reqStrSize-8; ++j) { + for (j = i+1; (int)j < (int)(reqStrSize-8); ++j) { if ((reqStr[j] == 'r' || reqStr[j] == 'R') && (reqStr[j+1] == 't' || reqStr[j+1] == 'T') && (reqStr[j+2] == 's' || reqStr[j+2] == 'S') @@ -72,7 +72,7 @@ // Look for the URL suffix (before the following "RTSP/"): parseSucceeded = False; - for (unsigned k = i+1; k < reqStrSize-5; ++k) { + for (unsigned k = i+1; (int)k < (int)(reqStrSize-5); ++k) { if (reqStr[k] == 'R' && reqStr[k+1] == 'T' && reqStr[k+2] == 'S' && reqStr[k+3] == 'P' && reqStr[k+4] == '/') { while (--k >= i && reqStr[k] == ' ') {} // go back over all spaces before "RTSP/" @@ -107,7 +107,7 @@ // Look for "CSeq:", skip whitespace, // then read everything up to the next \r or \n as 'CSeq': parseSucceeded = False; - for (j = i; j < reqStrSize-5; ++j) { + for (j = i; (int)j < (int)(reqStrSize-5); ++j) { if (reqStr[j] == 'C' && reqStr[j+1] == 'S' && reqStr[j+2] == 'e' && reqStr[j+3] == 'q' && reqStr[j+4] == ':') { j += 5; diff -uNr mythtv-0.21/libs/libmythmpeg2/libmythmpeg2.pro mythtv/libs/libmythmpeg2/libmythmpeg2.pro --- mythtv-0.21/libs/libmythmpeg2/libmythmpeg2.pro 2007-11-05 22:12:23.000000000 +0100 +++ mythtv/libs/libmythmpeg2/libmythmpeg2.pro 2008-06-04 06:05:51.000000000 +0200 @@ -39,3 +39,5 @@ HEADERS += alpha_asm.h SOURCES += motion_comp_alpha.c idct_alpha.c } + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythsamplerate/libmythsamplerate.pro mythtv/libs/libmythsamplerate/libmythsamplerate.pro --- mythtv-0.21/libs/libmythsamplerate/libmythsamplerate.pro 2007-09-26 22:02:25.000000000 +0200 +++ mythtv/libs/libmythsamplerate/libmythsamplerate.pro 2008-06-04 06:05:51.000000000 +0200 @@ -23,3 +23,5 @@ inc.files = samplerate.h INSTALLS += inc + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythsoundtouch/AAFilter.cpp mythtv/libs/libmythsoundtouch/AAFilter.cpp --- mythtv-0.21/libs/libmythsoundtouch/AAFilter.cpp 2006-05-23 19:40:36.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/AAFilter.cpp 2006-05-23 19:40:36.000000000 +0200 @@ -12,7 +12,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 17:40:36 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 19:40:36 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9996 $ // // $Id: AAFilter.cpp 9996 2006-05-23 17:40:36Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/AAFilter.h mythtv/libs/libmythsoundtouch/AAFilter.h --- mythtv-0.21/libs/libmythsoundtouch/AAFilter.h 2004-11-13 23:29:45.000000000 +0100 +++ mythtv/libs/libmythsoundtouch/AAFilter.h 2004-11-13 23:29:45.000000000 +0100 @@ -13,7 +13,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2004-11-13 22:29:45 +0000 (Sat, 13 Nov 2004) $ +// Last changed : $Date: 2004-11-13 23:29:45 +0100 (Sa, 13. Nov 2004) $ // File revision : $Revision: 4714 $ // // $Id: AAFilter.h 4714 2004-11-13 22:29:45Z ijr $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/BPMDetect.h mythtv/libs/libmythsoundtouch/BPMDetect.h --- mythtv-0.21/libs/libmythsoundtouch/BPMDetect.h 2006-05-23 19:40:36.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/BPMDetect.h 2006-05-23 19:40:36.000000000 +0200 @@ -26,7 +26,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 17:40:36 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 19:40:36 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9996 $ // // $Id: BPMDetect.h 9996 2006-05-23 17:40:36Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/cpu_detect.h mythtv/libs/libmythsoundtouch/cpu_detect.h --- mythtv-0.21/libs/libmythsoundtouch/cpu_detect.h 2006-03-16 11:00:28.000000000 +0100 +++ mythtv/libs/libmythsoundtouch/cpu_detect.h 2006-03-16 11:00:28.000000000 +0100 @@ -12,7 +12,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-03-16 10:00:28 +0000 (Thu, 16 Mar 2006) $ +// Last changed : $Date: 2006-03-16 11:00:28 +0100 (Do, 16. Mär 2006) $ // File revision : $Revision: 9376 $ // // $Id: cpu_detect.h 9376 2006-03-16 10:00:28Z ijr $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/cpu_detect_x86_gcc.cpp mythtv/libs/libmythsoundtouch/cpu_detect_x86_gcc.cpp --- mythtv-0.21/libs/libmythsoundtouch/cpu_detect_x86_gcc.cpp 2007-11-12 15:10:42.000000000 +0100 +++ mythtv/libs/libmythsoundtouch/cpu_detect_x86_gcc.cpp 2007-11-12 15:10:42.000000000 +0100 @@ -12,7 +12,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2007-11-12 14:10:42 +0000 (Mon, 12 Nov 2007) $ +// Last changed : $Date: 2007-11-12 15:10:42 +0100 (Mo, 12. Nov 2007) $ // File revision : $Revision: 14852 $ // // $Id: cpu_detect_x86_gcc.cpp 14852 2007-11-12 14:10:42Z janne $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/FIFOSampleBuffer.cpp mythtv/libs/libmythsoundtouch/FIFOSampleBuffer.cpp --- mythtv-0.21/libs/libmythsoundtouch/FIFOSampleBuffer.cpp 2006-05-23 19:40:36.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/FIFOSampleBuffer.cpp 2006-05-23 19:40:36.000000000 +0200 @@ -15,7 +15,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 17:40:36 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 19:40:36 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9996 $ // // $Id: FIFOSampleBuffer.cpp 9996 2006-05-23 17:40:36Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/FIFOSampleBuffer.h mythtv/libs/libmythsoundtouch/FIFOSampleBuffer.h --- mythtv-0.21/libs/libmythsoundtouch/FIFOSampleBuffer.h 2006-05-23 19:40:36.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/FIFOSampleBuffer.h 2006-05-23 19:40:36.000000000 +0200 @@ -15,7 +15,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 17:40:36 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 19:40:36 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9996 $ // // $Id: FIFOSampleBuffer.h 9996 2006-05-23 17:40:36Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/FIFOSamplePipe.h mythtv/libs/libmythsoundtouch/FIFOSamplePipe.h --- mythtv-0.21/libs/libmythsoundtouch/FIFOSamplePipe.h 2005-05-23 22:39:12.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/FIFOSamplePipe.h 2005-05-23 22:39:12.000000000 +0200 @@ -17,7 +17,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2005-05-23 20:39:12 +0000 (Mon, 23 May 2005) $ +// Last changed : $Date: 2005-05-23 22:39:12 +0200 (Mo, 23. Mai 2005) $ // File revision : $Revision: 6468 $ // // $Id: FIFOSamplePipe.h 6468 2005-05-23 20:39:12Z ijr $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/FIRFilter.cpp mythtv/libs/libmythsoundtouch/FIRFilter.cpp --- mythtv-0.21/libs/libmythsoundtouch/FIRFilter.cpp 2006-04-01 08:19:12.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/FIRFilter.cpp 2006-04-01 08:19:12.000000000 +0200 @@ -11,7 +11,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-04-01 06:19:12 +0000 (Sat, 01 Apr 2006) $ +// Last changed : $Date: 2006-04-01 08:19:12 +0200 (Sa, 01. Apr 2006) $ // File revision : $Revision: 9588 $ // // $Id: FIRFilter.cpp 9588 2006-04-01 06:19:12Z ijr $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/FIRFilter.h mythtv/libs/libmythsoundtouch/FIRFilter.h --- mythtv-0.21/libs/libmythsoundtouch/FIRFilter.h 2004-11-13 23:29:45.000000000 +0100 +++ mythtv/libs/libmythsoundtouch/FIRFilter.h 2004-11-13 23:29:45.000000000 +0100 @@ -11,7 +11,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2004-11-13 22:29:45 +0000 (Sat, 13 Nov 2004) $ +// Last changed : $Date: 2004-11-13 23:29:45 +0100 (Sa, 13. Nov 2004) $ // File revision : $Revision: 4714 $ // // $Id: FIRFilter.h 4714 2004-11-13 22:29:45Z ijr $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/libmythsoundtouch.pro mythtv/libs/libmythsoundtouch/libmythsoundtouch.pro --- mythtv-0.21/libs/libmythsoundtouch/libmythsoundtouch.pro 2007-09-26 22:02:25.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/libmythsoundtouch.pro 2008-06-04 06:05:51.000000000 +0200 @@ -27,3 +27,5 @@ SOURCES += TDStretch.cpp SOURCES += cpu_detect_x86_gcc.cpp SOURCES += mmx_gcc.cpp + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythsoundtouch/mmx_gcc.cpp mythtv/libs/libmythsoundtouch/mmx_gcc.cpp --- mythtv-0.21/libs/libmythsoundtouch/mmx_gcc.cpp 2006-05-23 21:14:24.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/mmx_gcc.cpp 2006-05-23 21:14:24.000000000 +0200 @@ -15,7 +15,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 19:14:24 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 21:14:24 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9998 $ // // $Id: mmx_gcc.cpp 9998 2006-05-23 19:14:24Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/RateTransposer.cpp mythtv/libs/libmythsoundtouch/RateTransposer.cpp --- mythtv-0.21/libs/libmythsoundtouch/RateTransposer.cpp 2006-05-23 21:14:24.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/RateTransposer.cpp 2006-05-23 21:14:24.000000000 +0200 @@ -10,7 +10,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 19:14:24 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 21:14:24 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9998 $ // // $Id: RateTransposer.cpp 9998 2006-05-23 19:14:24Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/RateTransposer.h mythtv/libs/libmythsoundtouch/RateTransposer.h --- mythtv-0.21/libs/libmythsoundtouch/RateTransposer.h 2004-11-13 23:29:45.000000000 +0100 +++ mythtv/libs/libmythsoundtouch/RateTransposer.h 2004-11-13 23:29:45.000000000 +0100 @@ -14,7 +14,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2004-11-13 22:29:45 +0000 (Sat, 13 Nov 2004) $ +// Last changed : $Date: 2004-11-13 23:29:45 +0100 (Sa, 13. Nov 2004) $ // File revision : $Revision: 4714 $ // // $Id: RateTransposer.h 4714 2004-11-13 22:29:45Z ijr $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/SoundTouch.cpp mythtv/libs/libmythsoundtouch/SoundTouch.cpp --- mythtv-0.21/libs/libmythsoundtouch/SoundTouch.cpp 2006-05-24 12:48:15.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/SoundTouch.cpp 2006-05-24 12:48:15.000000000 +0200 @@ -41,7 +41,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-24 10:48:15 +0000 (Wed, 24 May 2006) $ +// Last changed : $Date: 2006-05-24 12:48:15 +0200 (Mi, 24. Mai 2006) $ // File revision : $Revision: 10003 $ // // $Id: SoundTouch.cpp 10003 2006-05-24 10:48:15Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/SoundTouch.h mythtv/libs/libmythsoundtouch/SoundTouch.h --- mythtv-0.21/libs/libmythsoundtouch/SoundTouch.h 2006-05-23 19:40:36.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/SoundTouch.h 2006-05-23 19:40:36.000000000 +0200 @@ -41,7 +41,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 17:40:36 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 19:40:36 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9996 $ // // $Id: SoundTouch.h 9996 2006-05-23 17:40:36Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/STTypes.h mythtv/libs/libmythsoundtouch/STTypes.h --- mythtv-0.21/libs/libmythsoundtouch/STTypes.h 2006-05-24 16:56:37.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/STTypes.h 2006-05-24 16:56:37.000000000 +0200 @@ -8,7 +8,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-24 14:56:37 +0000 (Wed, 24 May 2006) $ +// Last changed : $Date: 2006-05-24 16:56:37 +0200 (Mi, 24. Mai 2006) $ // File revision : $Revision: 10005 $ // // $Id: STTypes.h 10005 2006-05-24 14:56:37Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/TDStretch.cpp mythtv/libs/libmythsoundtouch/TDStretch.cpp --- mythtv-0.21/libs/libmythsoundtouch/TDStretch.cpp 2006-05-23 21:14:24.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/TDStretch.cpp 2006-05-23 21:14:24.000000000 +0200 @@ -13,7 +13,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 19:14:24 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 21:14:24 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9998 $ // // $Id: TDStretch.cpp 9998 2006-05-23 19:14:24Z danielk $ diff -uNr mythtv-0.21/libs/libmythsoundtouch/TDStretch.h mythtv/libs/libmythsoundtouch/TDStretch.h --- mythtv-0.21/libs/libmythsoundtouch/TDStretch.h 2006-05-23 21:14:24.000000000 +0200 +++ mythtv/libs/libmythsoundtouch/TDStretch.h 2006-05-23 21:14:24.000000000 +0200 @@ -13,7 +13,7 @@ /// //////////////////////////////////////////////////////////////////////////////// // -// Last changed : $Date: 2006-05-23 19:14:24 +0000 (Tue, 23 May 2006) $ +// Last changed : $Date: 2006-05-23 21:14:24 +0200 (Di, 23. Mai 2006) $ // File revision : $Revision: 9998 $ // // $Id: TDStretch.h 9998 2006-05-23 19:14:24Z danielk $ diff -uNr mythtv-0.21/libs/libmythtv/avformatdecoder.cpp mythtv/libs/libmythtv/avformatdecoder.cpp --- mythtv-0.21/libs/libmythtv/avformatdecoder.cpp 2008-03-08 21:17:24.000000000 +0100 +++ mythtv/libs/libmythtv/avformatdecoder.cpp 2008-12-05 22:48:41.000000000 +0100 @@ -1,6 +1,7 @@ // C headers #include <cassert> #include <unistd.h> +#include <cmath> // C++ headers #include <algorithm> @@ -51,6 +52,8 @@ #define MAX_AC3_FRAME_SIZE 6144 +static const float eps = 1E-5; + static int cc608_parity(uint8_t byte); static int cc608_good_parity(const int *parity_table, uint16_t data); static void cc608_build_parity_table(int *parity_table); @@ -410,11 +413,10 @@ disable_passthru(false), max_channels(2), dummy_frame(NULL), // DVD - lastdvdtitle(-1), lastcellstart(0), + lastdvdtitle(-1), decodeStillFrame(false), dvd_xvmc_enabled(false), dvd_video_codec_changed(false), - dvdTitleChanged(false), mpeg_seq_end_seen(false), - lastDVDStillFrame(NULL) + dvdTitleChanged(false), mpeg_seq_end_seen(false) { bzero(¶ms, sizeof(AVFormatParameters)); bzero(audioSamples, AVCODEC_MAX_AUDIO_FRAME_SIZE * sizeof(short int)); @@ -446,9 +448,6 @@ delete pkt; } - if (lastDVDStillFrame) - av_free_packet(lastDVDStillFrame); - CloseContext(); delete ccd608; delete ccd708; @@ -1444,6 +1443,13 @@ map<int,uint> lang_sub_cnt; map<int,uint> lang_aud_cnt; + if (ringBuffer->isDVD() && + ringBuffer->DVD()->AudioStreamsChanged()) + { + ringBuffer->DVD()->AudioStreamsChanged(false); + RemoveAudioStreams(); + } + for (uint i = 0; i < ic->nb_streams; i++) { AVCodecContext *enc = ic->streams[i]->codec; @@ -1511,7 +1517,7 @@ // HACK -- end bool force_xv = false; - if (ringBuffer->isDVD()) + if (ringBuffer && ringBuffer->isDVD()) { if (dec.left(4) == "xvmc") dvd_xvmc_enabled = true; @@ -1536,7 +1542,8 @@ enc->codec_id = (CodecID) myth2av_codecid(mcid, vcd, idct, mc); - if (ringBuffer->isDVD() && (mcid == video_codec_id) && + if (ringBuffer && ringBuffer->isDVD() && + (mcid == video_codec_id) && dvd_video_codec_changed) { dvd_video_codec_changed = false; @@ -1617,9 +1624,9 @@ InitVideoCodec(ic->streams[i], enc, selectedVideoIndex == (int) i); - + ScanATSCCaptionStreams(i); - + VERBOSE(VB_PLAYBACK, LOC + QString("Using %1 for video decoding") .arg(GetCodecDecoderName())); @@ -1798,7 +1805,7 @@ ringBuffer->UpdateRawBitrate(bitrate); } - if (ringBuffer->isDVD()) + if (ringBuffer && ringBuffer->isDVD()) { if (tracks[kTrackTypeAudio].size() > 1) { @@ -1859,6 +1866,8 @@ { GetNVP()->SetAudioParams(-1, -1, -1, false /* AC3/DTS pass-through */); GetNVP()->ReinitAudio(); + if (ringBuffer && ringBuffer->isDVD()) + audioIn = AudioInfo(); } // if we don't have a video stream we still need to make sure some @@ -1980,6 +1989,9 @@ */ void AvFormatDecoder::RemoveAudioStreams() { + if (!GetNVP() || !GetNVP()->HasAudioIn()) + return; + QMutexLocker locker(&avcodeclock); for (uint i = 0; i < ic->nb_streams;) { @@ -2337,7 +2349,7 @@ bool changed = (seqFPS > fps+0.01) || (seqFPS < fps-0.01); changed |= (width != (uint)current_width ); changed |= (height != (uint)current_height); - changed |= (aspect != current_aspect); + changed |= fabs(aspect - current_aspect) > eps; if (changed) { @@ -2414,7 +2426,7 @@ bool changed = (seqFPS > fps+0.01) || (seqFPS < fps-0.01); changed |= (width != (uint)current_width ); changed |= (height != (uint)current_height); - changed |= (aspect_ratio != current_aspect); + changed |= fabs(aspect_ratio - current_aspect) > eps; if (changed) { @@ -3014,14 +3026,15 @@ int dvdtitle = 0; int dvdpart = 0; ringBuffer->DVD()->GetPartAndTitle(dvdpart, dvdtitle); - uint cellstart = ringBuffer->DVD()->GetCellStart(); + bool cellChanged = ringBuffer->DVD()->CellChanged(); + bool inDVDStill = ringBuffer->DVD()->InStillFrame(); + bool inDVDMenu = ringBuffer->DVD()->IsInMenu(); selectedVideoIndex = 0; if (dvdTitleChanged) { if ((storedPackets.count() > 10 && !decodeStillFrame) || decodeStillFrame) { - RemoveAudioStreams(); storevideoframes = false; dvdTitleChanged = false; ScanStreams(true); @@ -3032,45 +3045,23 @@ else { storevideoframes = false; - int numVidFrames = 0; - if (GetNVP() && GetNVP()->getVideoOutput()) - numVidFrames = GetNVP()->getVideoOutput()->ValidVideoFrames(); - bool inDVDStill = ringBuffer->DVD()->InStillFrame(); - + if (decodeStillFrame && !inDVDStill) - { decodeStillFrame = false; - } + + if (storedPackets.count() < 2 && !decodeStillFrame) + storevideoframes = true; - if (numVidFrames == 0 && inDVDStill) - { - if (lastDVDStillFrame) - { - VERBOSE(VB_PLAYBACK, LOC + "DVD: in still frame but " - "there is no picture. Using last stored still " - "frame"); - storedPackets.append(lastDVDStillFrame); - ringBuffer->DVD()->SeekCellStart(); - lastDVDStillFrame = NULL; - decodeStillFrame = true; - } - else - ringBuffer->DVD()->SeekCellStart(); - } - else - { - if (storedPackets.count() < 2 && !decodeStillFrame) - storevideoframes = true; - } + if (inDVDMenu && storedPackets.count() > 0) + ringBuffer->DVD()->SetRunSeekCellStart(false); + else if (inDVDStill) + ringBuffer->DVD()->RunSeekCellStart(); } if (GetNVP()->AtNormalSpeed() && - ((lastcellstart != cellstart) || (lastdvdtitle != dvdtitle))) + ((cellChanged) || (lastdvdtitle != dvdtitle))) { if (dvdtitle != lastdvdtitle) { - posmapStarted = false; - m_positionMap.clear(); - SyncPositionMap(); VERBOSE(VB_PLAYBACK, LOC + "DVD Title Changed"); lastdvdtitle = dvdtitle; if (lastdvdtitle != -1 ) @@ -3083,26 +3074,37 @@ GetNVP()->getVideoOutput()->SetPrebuffering(true); } } + + if (ringBuffer->DVD()->PGCLengthChanged()) + { + posmapStarted = false; + m_positionMap.clear(); + SyncPositionMap(); + } + UpdateDVDFramesPlayed(); VERBOSE(VB_PLAYBACK, QString(LOC + "DVD Cell Changed. " "Update framesPlayed: %1 ") .arg(framesPlayed)); - lastcellstart = cellstart; } } if (gotvideo) { - if (lowbuffers && onlyvideo == 0 && + if (lowbuffers && onlyvideo == 0 && + storedPackets.count() < 75 && lastapts < lastvpts + 100 && - lastapts > lastvpts - 10000 && !ringBuffer->InDVDMenuOrStillFrame()) { - //cout << "behind: " << lastapts << " " << lastvpts << endl; storevideoframes = true; } else if (onlyvideo >= 0) { + if (storedPackets.count() >=75) + VERBOSE(VB_IMPORTANT, + QString("Audio %1 ms behind video but already %2 " + "video frames queued. AV-Sync might be broken.") + .arg(lastvpts-lastapts).arg(storedPackets.count())); allowedquit = true; continue; } @@ -3221,7 +3223,6 @@ av_free_packet(pkt); CloseCodecs(); ScanStreams(false); - QMutexLocker locker(&avcodeclock); allowedquit = true; dvd_video_codec_changed = false; continue; @@ -3446,10 +3447,6 @@ .av_substream_index; } - if (firstloop && pkt->pts != (int64_t)AV_NOPTS_VALUE) - lastapts = (long long)(av_q2d(curstream->time_base) * - pkt->pts * 1000); - if ((onlyvideo > 0) || (pkt->stream_index != audIdx)) { ptr += len; @@ -3457,6 +3454,10 @@ continue; } + if (firstloop && pkt->pts != (int64_t)AV_NOPTS_VALUE) + lastapts = (long long)(av_q2d(curstream->time_base) * + pkt->pts * 1000); + if (skipaudio) { if ((lastapts < lastvpts - (10.0 / fps)) || @@ -3749,9 +3750,6 @@ picframe->frameNumber = framesPlayed; GetNVP()->ReleaseNextVideoFrame(picframe, temppts); - /* HACK remove from root of still frame display issue is fixed */ - if (decodeStillFrame) - GetNVP()->ReleaseNextVideoFrame(picframe, temppts); if (d->HasMPEG2Dec() && mpa_pic.data[3]) context->release_buffer(context, &mpa_pic); @@ -3759,15 +3757,8 @@ gotvideo = 1; framesPlayed++; - if (ringBuffer->InDVDMenuOrStillFrame() && decodeStillFrame) - { - if (lastDVDStillFrame) - av_free_packet(lastDVDStillFrame); - av_dup_packet(pkt); - lastDVDStillFrame = pkt; - pkt = NULL; + if (decodeStillFrame) decodeStillFrame = false; - } lastvpts = temppts; break; @@ -3780,7 +3771,7 @@ if (ringBuffer->isDVD()) { - if (ringBuffer->DVD()->IsInMenu()) + if (ringBuffer->DVD()->NumMenuButtons() > 0) { ringBuffer->DVD()->GetMenuSPUPkt(ptr, len, curstream->id); diff -uNr mythtv-0.21/libs/libmythtv/avformatdecoder.h mythtv/libs/libmythtv/avformatdecoder.h --- mythtv-0.21/libs/libmythtv/avformatdecoder.h 2008-03-04 03:34:04.000000000 +0100 +++ mythtv/libs/libmythtv/avformatdecoder.h 2008-05-12 05:08:03.000000000 +0200 @@ -272,14 +272,11 @@ // DVD int lastdvdtitle; - uint lastcellstart; bool decodeStillFrame; bool dvd_xvmc_enabled; bool dvd_video_codec_changed; bool dvdTitleChanged; bool mpeg_seq_end_seen; - /// \brief contains last dvd still frame decoded - AVPacket *lastDVDStillFrame; }; #endif diff -uNr mythtv-0.21/libs/libmythtv/channelutil.cpp mythtv/libs/libmythtv/channelutil.cpp --- mythtv-0.21/libs/libmythtv/channelutil.cpp 2008-02-06 23:50:10.000000000 +0100 +++ mythtv/libs/libmythtv/channelutil.cpp 2008-05-26 13:26:07.000000000 +0200 @@ -1413,6 +1413,38 @@ dvb_transportid, dvb_networkid, dtv_si_std); } +bool ChannelUtil::GetChannelSettings(int chanid, bool &useonairguide, + bool &hidden) +{ + useonairguide = true; + hidden = false; + + MSqlQuery query(MSqlQuery::InitCon()); + query.prepare( + "SELECT useonairguide, visible " + "FROM channel " + "WHERE chanid = :CHANID"); + query.bindValue(":CHANID", chanid); + + if (!query.exec() || !query.isActive()) + { + MythContext::DBError("GetChannelSettings", query); + return false; + } + else if (!query.next()) + { + VERBOSE(VB_IMPORTANT, QString( + "GetChannelSettings() failed because it could not " + "find channel id '%1'.").arg(chanid)); + return false; + } + + useonairguide = (query.value(0).toInt() > 0); + hidden = (query.value(1).toInt() == 0); + + return true; +} + DBChanList ChannelUtil::GetChannels(uint sourceid, bool vis_only, QString grp) { DBChanList list; diff -uNr mythtv-0.21/libs/libmythtv/channelutil.h mythtv/libs/libmythtv/channelutil.h --- mythtv-0.21/libs/libmythtv/channelutil.h 2008-01-14 16:22:34.000000000 +0100 +++ mythtv/libs/libmythtv/channelutil.h 2008-05-26 13:26:07.000000000 +0200 @@ -176,6 +176,8 @@ uint &atsc_major, uint &atsc_minor, uint &dvb_transportid, uint &dvb_networkid, uint &mplexid, bool &commfree); + static bool GetChannelSettings(int chanid, bool &useonairguide, + bool &hidden); static uint GetSourceID(uint cardid, const QString &inputname); static int GetProgramNumber(uint sourceid, const QString &channum) { return GetChannelValueInt("serviceid", sourceid, channum); } diff -uNr mythtv-0.21/libs/libmythtv/dbcheck.cpp mythtv/libs/libmythtv/dbcheck.cpp --- mythtv-0.21/libs/libmythtv/dbcheck.cpp 2008-03-08 00:14:05.000000000 +0100 +++ mythtv/libs/libmythtv/dbcheck.cpp 2008-12-31 20:00:27.000000000 +0100 @@ -527,7 +527,10 @@ { QString dbver = gContext->GetSetting("DBSchemaVer"); - VERBOSE(VB_IMPORTANT, QString("Current Schema Version: %1").arg(dbver)); + VERBOSE(VB_IMPORTANT, "Current Schema Version: " + + (dbver.length() ? dbver : QString("(none)"))); + + if (!gContext->GetNumSetting("MythFillFixProgramIDsHasRunOnce", 0)) DataDirectProcessor::FixProgramIDs(); @@ -2858,9 +2861,11 @@ " UNIQUE KEY grouphostdir (groupname, hostname, dirname)" " );", "INSERT storagegroup (groupname, hostname, dirname) " -" SELECT 'Default', hostname, data " +" SELECT DISTINCT 'Default', hostname, data " " FROM settings " -" WHERE value = 'RecordFilePrefix';", +" WHERE value = 'RecordFilePrefix' " +" AND hostname IS NOT NULL " +" AND hostname <> '';", "ALTER TABLE recorded ADD storagegroup VARCHAR(32) NOT NULL DEFAULT 'Default';", "ALTER TABLE record ADD storagegroup VARCHAR(32) NOT NULL DEFAULT 'Default';", "ALTER TABLE inuseprograms ADD rechost VARCHAR(64) NOT NULL;", @@ -4247,8 +4252,7 @@ "INSERT INTO playgroup VALUES ('Default','',30,5,100);", "INSERT INTO profilegroups VALUES (1,'Software Encoders (v4l based)','V4L'," " 1,NULL);", -"INSERT INTO profilegroups VALUES (2,'MPEG-2 Encoders (PVR-x50, PVR-500)'," -" 'MPEG',1,NULL);", +"INSERT INTO profilegroups VALUES (2,'IVTV MPEG-2 Encoders','MPEG',1,NULL);", "INSERT INTO profilegroups VALUES (3," " 'Hardware MJPEG Encoders (Matrox G200-TV, Miro DC10, etc)','MJPEG',1,NULL);", "INSERT INTO profilegroups VALUES (4,'Hardware HDTV','HDTV',1,NULL);", diff -uNr mythtv-0.21/libs/libmythtv/diseqc.cpp mythtv/libs/libmythtv/diseqc.cpp --- mythtv-0.21/libs/libmythtv/diseqc.cpp 2008-03-08 14:20:46.000000000 +0100 +++ mythtv/libs/libmythtv/diseqc.cpp 2008-11-08 16:36:01.000000000 +0100 @@ -941,7 +941,7 @@ * \brief Switch class, including tone, legacy and DiSEqC switches. */ -const DiSEqCDevDevice::TypeTable DiSEqCDevSwitch::SwitchTypeTable[7] = +const DiSEqCDevDevice::TypeTable DiSEqCDevSwitch::SwitchTypeTable[9] = { { "legacy_sw21", kTypeLegacySW21 }, { "legacy_sw42", kTypeLegacySW42 }, @@ -949,7 +949,9 @@ { "tone", kTypeTone }, { "diseqc", kTypeDiSEqCCommitted }, { "diseqc_uncom", kTypeDiSEqCUncommitted }, - { QString::null, kTypeTone }, + { "voltage", kTypeVoltage }, + { "mini_diseqc", kTypeMiniDiSEqC }, + { QString::null, kTypeTone }, }; DiSEqCDevSwitch::DiSEqCDevSwitch(DiSEqCDevTree &tree, uint devid) @@ -1001,6 +1003,12 @@ case kTypeLegacySW64: success = ExecuteLegacy(settings, tuning, pos); break; + case kTypeVoltage: + success = ExecuteVoltage(settings, tuning, pos); + break; + case kTypeMiniDiSEqC: + success = ExecuteMiniDiSEqC(settings, tuning, pos); + break; default: success = false; VERBOSE(VB_IMPORTANT, LOC_ERR + @@ -1328,6 +1336,56 @@ } #ifdef USING_DVB +static bool set_tone(int fd, fe_sec_tone_mode tone) +{ + (void) fd; + (void) tone; + + bool success = false; + + for (uint retry = 0; !success && (retry < TIMEOUT_RETRIES); retry++) + { + if (ioctl(fd, FE_SET_TONE, tone) == 0) + success = true; + else + usleep(TIMEOUT_WAIT); + } + + if (!success) + { + VERBOSE(VB_IMPORTANT, "set_tone failed" + ENO); + } + + return success; +} +#endif // USING_DVB + +#ifdef USING_DVB +static bool set_voltage(int fd, fe_sec_voltage volt) +{ + (void) fd; + (void) volt; + + bool success = false; + + for (uint retry = 0; !success && (retry < TIMEOUT_RETRIES); retry++) + { + if (0 == ioctl(fd, FE_SET_VOLTAGE, volt)) + success = true; + else + usleep(TIMEOUT_WAIT); + } + + if (!success) + { + VERBOSE(VB_IMPORTANT, "FE_SET_VOLTAGE failed" + ENO); + } + + return success; +} +#endif // USING_DVB + +#ifdef USING_DVB static bool mini_diseqc(int fd, fe_sec_mini_cmd cmd) { (void) fd; @@ -1360,7 +1418,7 @@ QString("%1/2").arg(pos + 1)); #ifdef USING_DVB - if (mini_diseqc(m_tree.GetFD(), pos == 0 ? SEC_MINI_A : SEC_MINI_B)) + if (set_tone(m_tree.GetFD(), (0 == pos) ? SEC_TONE_OFF : SEC_TONE_ON)) return true; #endif // USING_DVB @@ -1368,6 +1426,48 @@ return false; } +bool DiSEqCDevSwitch::ExecuteVoltage(const DiSEqCDevSettings &settings, + const DTVMultiplex &tuning, uint pos) +{ + (void) settings; + (void) tuning; + + VERBOSE(VB_CHANNEL, LOC + "Changing to Voltage Switch port " + + QString("%1/2").arg(pos + 1)); + +#ifdef USING_DVB + if (set_voltage(m_tree.GetFD(), + (0 == pos) ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18)) + { + return true; + } +#endif // USING_DVB + + VERBOSE(VB_IMPORTANT, LOC_ERR + "Setting Voltage Switch failed." + ENO); + + return false; +} + +bool DiSEqCDevSwitch::ExecuteMiniDiSEqC(const DiSEqCDevSettings &settings, + const DTVMultiplex &tuning, uint pos) +{ + (void) settings; + (void) tuning; + + VERBOSE(VB_CHANNEL, LOC + "Changing to MiniDiSEqC Switch port " + + QString("%1/2").arg(pos + 1)); + +#ifdef USING_DVB + if (mini_diseqc(m_tree.GetFD(), (0 == pos) ? SEC_MINI_A : SEC_MINI_B)) + return true; +#endif // USING_DVB + + VERBOSE(VB_IMPORTANT, LOC_ERR + + "Setting Mini DiSEqC Switch failed." + ENO); + + return false; +} + bool DiSEqCDevSwitch::ShouldSwitch(const DiSEqCDevSettings &settings, const DTVMultiplex &tuning) const { @@ -1404,6 +1504,8 @@ if (horizontal != m_last_horizontal) return true; } + else if (kTypeTone == m_type) + return true; return m_last_pos != (uint)pos; } diff -uNr mythtv-0.21/libs/libmythtv/diseqc.h mythtv/libs/libmythtv/diseqc.h --- mythtv-0.21/libs/libmythtv/diseqc.h 2006-12-13 16:49:12.000000000 +0100 +++ mythtv/libs/libmythtv/diseqc.h 2008-11-08 16:36:01.000000000 +0100 @@ -224,6 +224,8 @@ kTypeLegacySW21 = 3, kTypeLegacySW42 = 4, kTypeLegacySW64 = 5, + kTypeVoltage = 6, + kTypeMiniDiSEqC = 7, }; void SetType(dvbdev_switch_t type) { m_type = type; } void SetNumPorts(uint num_ports); @@ -252,9 +254,16 @@ protected: - bool ExecuteLegacy(const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); - bool ExecuteTone( const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); - bool ExecuteDiseqc(const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); + bool ExecuteLegacy( + const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); + bool ExecuteTone( + const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); + bool ExecuteVoltage( + const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); + bool ExecuteMiniDiSEqC( + const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); + bool ExecuteDiseqc( + const DiSEqCDevSettings&, const DTVMultiplex&, uint pos); int GetPosition( const DiSEqCDevSettings&) const; @@ -266,7 +275,7 @@ uint m_last_horizontal; dvbdev_vec_t m_children; - static const TypeTable SwitchTypeTable[7]; + static const TypeTable SwitchTypeTable[9]; }; class DiSEqCDevRotor : public DiSEqCDevDevice diff -uNr mythtv-0.21/libs/libmythtv/diseqcsettings.cpp mythtv/libs/libmythtv/diseqcsettings.cpp --- mythtv-0.21/libs/libmythtv/diseqcsettings.cpp 2007-11-19 17:44:58.000000000 +0100 +++ mythtv/libs/libmythtv/diseqcsettings.cpp 2008-11-08 16:36:01.000000000 +0100 @@ -147,6 +147,10 @@ addSelection(DeviceTree::tr("Tone"), QString::number((uint) DiSEqCDevSwitch::kTypeTone)); + addSelection(DeviceTree::tr("Voltage"), + QString::number((uint) DiSEqCDevSwitch::kTypeVoltage)); + addSelection(DeviceTree::tr("Mini DiSEqC"), + QString::number((uint) DiSEqCDevSwitch::kTypeMiniDiSEqC)); addSelection(DeviceTree::tr("DiSEqC"), QString::number((uint) DiSEqCDevSwitch::kTypeDiSEqCCommitted)); @@ -232,6 +236,8 @@ switch ((DiSEqCDevSwitch::dvbdev_switch_t) m_type->getValue().toUInt()) { case DiSEqCDevSwitch::kTypeTone: + case DiSEqCDevSwitch::kTypeVoltage: + case DiSEqCDevSwitch::kTypeMiniDiSEqC: case DiSEqCDevSwitch::kTypeLegacySW21: case DiSEqCDevSwitch::kTypeLegacySW42: m_ports->setValue("2"); diff -uNr mythtv-0.21/libs/libmythtv/dtvrecorder.cpp mythtv/libs/libmythtv/dtvrecorder.cpp --- mythtv-0.21/libs/libmythtv/dtvrecorder.cpp 2008-02-18 17:01:43.000000000 +0100 +++ mythtv/libs/libmythtv/dtvrecorder.cpp 2008-10-02 19:29:55.000000000 +0200 @@ -20,7 +20,7 @@ #define LOC QString("DTVRec(%1): ").arg(tvrec->GetCaptureCardNum()) #define LOC_ERR QString("DTVRec(%1) Error: ").arg(tvrec->GetCaptureCardNum()) -const uint DTVRecorder::kMaxKeyFrameDistance = 32; +const uint DTVRecorder::kMaxKeyFrameDistance = 80; /** \class DTVRecorder * \brief This is a specialization of RecorderBase used to diff -uNr mythtv-0.21/libs/libmythtv/dvbtypes.h mythtv/libs/libmythtv/dvbtypes.h --- mythtv-0.21/libs/libmythtv/dvbtypes.h 2007-01-07 16:29:30.000000000 +0100 +++ mythtv/libs/libmythtv/dvbtypes.h 2009-01-30 23:55:19.000000000 +0100 @@ -19,7 +19,7 @@ #include <linux/dvb/frontend.h> #include <linux/dvb/dmx.h> -#if (DVB_API_VERSION != 3) +#if (DVB_API_VERSION != 3 && DVB_API_VERSION != 5) # error "DVB driver includes with API version 3 not found!" #endif @@ -27,7 +27,7 @@ # define DVB_API_VERSION_MINOR 0 #endif -#if (DVB_API_VERSION >= 3 && DVB_API_VERSION_MINOR >= 1) +#if ((DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR >= 1) || (DVB_API_VERSION > 3)) # define USE_ATSC #else #warning DVB API version < 3.1 diff -uNr mythtv-0.21/libs/libmythtv/DVDRingBuffer.cpp mythtv/libs/libmythtv/DVDRingBuffer.cpp --- mythtv-0.21/libs/libmythtv/DVDRingBuffer.cpp 2008-03-08 22:05:09.000000000 +0100 +++ mythtv/libs/libmythtv/DVDRingBuffer.cpp 2008-11-05 02:40:32.000000000 +0100 @@ -29,21 +29,24 @@ dvdFilename(NULL), dvdBlockRPos(0), dvdBlockWPos(0), pgLength(0), pgcLength(0), - cellStart(0), pgStart(0), + cellStart(0), cellChanged(false), + pgcLengthChanged(false), pgStart(0), currentpos(0), lastNav(NULL), part(0), title(0), titleParts(0), gotStop(false), - cellHasStillFrame(false), dvdWaiting(false), - titleLength(0), hl_startx(0), hl_width(0), - hl_starty(0), hl_height(0), + cellHasStillFrame(false), audioStreamsChanged(false), + dvdWaiting(false), + titleLength(0), hl_button(0, 0, 0, 0), + menuSpuPkt(0), menuBuflength(0), skipstillorwait(true), cellstartPos(0), buttonSelected(false), buttonExists(false), cellid(0), lastcellid(0), vobid(0), lastvobid(0), cellRepeated(false), - buttonstreamid(0), gotoCellStart(false), + buttonstreamid(0), runningCellStart(false), + runSeekCellStart(false), menupktpts(0), curAudioTrack(0), curSubtitleTrack(0), autoselectaudio(true), autoselectsubtitle(true), @@ -55,6 +58,10 @@ parent(0) { memset(&dvdMenuButton, 0, sizeof(AVSubtitle)); + memset(dvdBlockWriteBuf, 0, sizeof(char) * DVD_BLOCK_SIZE); + memset(clut, 0, sizeof(uint32_t) * 16); + memset(button_color, 0, sizeof(uint8_t) * 4); + memset(button_alpha, 0, sizeof(uint8_t) * 4); uint def[8] = { 3, 5, 10, 20, 30, 60, 120, 180 }; uint seekValues[8] = { 1, 2, 4, 8, 10, 15, 20, 60 }; @@ -80,9 +87,9 @@ bool DVDRingBufferPriv::IsInMenu(void) const { - return ((title == 0) || - ((pgcLength/90000) < 30) || - (NumMenuButtons() > 0)); + if (dvdnav) + return (!dvdnav_is_domain_vts(dvdnav)); + return true; } long long DVDRingBufferPriv::NormalSeek(long long time) @@ -119,8 +126,9 @@ { VERBOSE(VB_PLAYBACK, LOC_ERR + QString("Seek() to time %1 failed").arg(time)); + return -1; } - else if (!IsInMenu() && !gotoCellStart) + else if (!IsInMenu() && !runningCellStart) { gotStop = false; if (time > 0 && ffrewSkip == 1) @@ -274,9 +282,12 @@ dvdnav_cell_change_event_t *cell_event = (dvdnav_cell_change_event_t*) (blockBuf); pgLength = cell_event->pg_length; + if (pgcLength != cell_event->pgc_length) + pgcLengthChanged = true; pgcLength = cell_event->pgc_length; cellStart = cell_event->cell_start; pgStart = cell_event->pg_start; + cellChanged = true; if (dvdnav_get_next_still_flag(dvdnav) > 0) { @@ -306,10 +317,10 @@ .arg(title).arg(part).arg(titleParts)); buttonSelected = false; - if (gotoCellStart) + if (runningCellStart) { lastvobid = lastcellid = 0; - gotoCellStart = false; + runningCellStart = false; } else { @@ -355,7 +366,10 @@ subTrackMap.clear(); uint count = dvdnav_subp_get_stream_count(dvdnav); - ClearMenuSPUParameters(); + //ClearMenuSPUParameters(); + if (parent) + parent->HideDVDButton(true); + ClearSubtitlesOSD(); if (IsInMenu()) @@ -446,6 +460,8 @@ break; } } + + audioStreamsChanged = true; if (blockBuf != dvdBlockWriteBuf) { @@ -536,18 +552,13 @@ .arg(hl->pts).arg(hl->buttonN)); menuBtnLock.lock(); - - if (DVDButtonUpdate(false)) - { - ClearMenuButton(); - buttonExists = DrawMenuButton(menuSpuPkt,menuBuflength); - } - - menuBtnLock.unlock(); - + + DVDButtonUpdate(false); ClearSubtitlesOSD(); - - if (parent && buttonExists && NumMenuButtons() > 0) + + menuBtnLock.unlock(); + + if (parent && buttonExists) parent->HideDVDButton(false); if (blockBuf != dvdBlockWriteBuf) @@ -656,6 +667,24 @@ return cellStart / 90000; } +/** \brief check if dvd cell has changed + */ +bool DVDRingBufferPriv::CellChanged(void) +{ + bool ret = cellChanged; + cellChanged = false; + return ret; +} + +/** \brief check if pgc length has changed + */ +bool DVDRingBufferPriv::PGCLengthChanged(void) +{ + bool ret = pgcLengthChanged; + pgcLengthChanged = false; + return ret; +} + void DVDRingBufferPriv::SkipStillFrame(void) { QMutexLocker locker(&seekLock); @@ -687,12 +716,16 @@ } else if (str.compare("menu") == 0) { + dvdnav_status_t rootMenuSupported = + dvdnav_menu_supported(dvdnav, DVD_MENU_Root); dvdnav_status_t titleMenuSupported = dvdnav_menu_supported(dvdnav, DVD_MENU_Title); - if (titleMenuSupported == DVDNAV_STATUS_OK) + if (rootMenuSupported == DVDNAV_STATUS_OK) + menuid = DVD_MENU_Root; + else if (titleMenuSupported == DVDNAV_STATUS_OK) menuid = DVD_MENU_Title; else - menuid = DVD_MENU_Root; + return false; } else return false; @@ -720,7 +753,7 @@ void DVDRingBufferPriv::MoveButtonLeft(void) { - if (IsInMenu() && (NumMenuButtons() > 0)) + if (NumMenuButtons() > 1) { pci_t *pci = dvdnav_get_current_nav_pci(dvdnav); dvdnav_left_button_select(dvdnav, pci); @@ -729,7 +762,7 @@ void DVDRingBufferPriv::MoveButtonRight(void) { - if (IsInMenu() && (NumMenuButtons() > 0) ) + if (NumMenuButtons() > 1) { pci_t *pci = dvdnav_get_current_nav_pci(dvdnav); dvdnav_right_button_select(dvdnav, pci); @@ -738,7 +771,7 @@ void DVDRingBufferPriv::MoveButtonUp(void) { - if (IsInMenu() && (NumMenuButtons() > 0)) + if (NumMenuButtons() > 1) { pci_t *pci = dvdnav_get_current_nav_pci(dvdnav); dvdnav_upper_button_select(dvdnav, pci); @@ -747,7 +780,7 @@ void DVDRingBufferPriv::MoveButtonDown(void) { - if (IsInMenu() && (NumMenuButtons() > 0)) + if (NumMenuButtons() > 1) { pci_t *pci = dvdnav_get_current_nav_pci(dvdnav); dvdnav_lower_button_select(dvdnav, pci); @@ -758,7 +791,7 @@ */ void DVDRingBufferPriv::ActivateButton(void) { - if (IsInMenu() && (NumMenuButtons() > 0)) + if (NumMenuButtons() > 0) { pci_t *pci = dvdnav_get_current_nav_pci(dvdnav); dvdnav_button_activate(dvdnav, pci); @@ -788,22 +821,27 @@ SelectDefaultButton(); buttonSelected = true; } + if (DVDButtonUpdate(false)) - buttonExists = DrawMenuButton(menuSpuPkt,menuBuflength); + { + int32_t gotbutton; + buttonExists = DecodeSubtitles(&dvdMenuButton, &gotbutton, + menuSpuPkt, menuBuflength); + } } -/** \brief returns dvd menu button if available. +/** \brief returns dvd menu button information if available. * used by NVP::DisplayDVDButton */ -AVSubtitleRect *DVDRingBufferPriv::GetMenuButton(void) +AVSubtitle *DVDRingBufferPriv::GetMenuSubtitle(void) { menuBtnLock.lock(); if ((menuBuflength > 4) && buttonExists && - (dvdMenuButton.rects[0].h >= hl_height) && - (dvdMenuButton.rects[0].w >= hl_width)) + (dvdMenuButton.rects[0].h >= hl_button.height()) && + (dvdMenuButton.rects[0].w >= hl_button.width())) { - return &(dvdMenuButton.rects[0]); + return &(dvdMenuButton); } return NULL; @@ -815,27 +853,25 @@ menuBtnLock.unlock(); } -/** \brief obtain dvd menu button bitmap, alpha and color palette +/** \brief get coordinates of highlighted button */ -bool DVDRingBufferPriv::DrawMenuButton(uint8_t *spu_pkt, int buf_size) +QRect DVDRingBufferPriv::GetButtonCoords(void) { - int gotbutton; - if (DecodeSubtitles(&dvdMenuButton, &gotbutton, spu_pkt, buf_size)) - { - int x1, y1; - x1 = dvdMenuButton.rects[0].x; - y1 = dvdMenuButton.rects[0].y; - if (hl_startx > x1) - dvdMenuButton.rects[0].x = hl_startx - x1; - else - dvdMenuButton.rects[0].x = 0; - if (hl_starty > y1) - dvdMenuButton.rects[0].y = hl_starty - y1; - else - dvdMenuButton.rects[0].y = 0; - return true; - } - return false; + QRect rect(0,0,0,0); + if (!buttonExists) + return rect; + + int x1, y1; + int x = 0; int y = 0; + x1 = dvdMenuButton.rects[0].x; + y1 = dvdMenuButton.rects[0].y; + if (hl_button.x() > x1) + x = hl_button.x() - x1; + if (hl_button.y() > y1) + y = hl_button.y() - y1; + rect.setRect(x, y, hl_button.width(), hl_button.height()); + + return rect; } /** \brief generate dvd subtitle bitmap or dvd menu bitmap. @@ -891,13 +927,11 @@ { if ((buf_size - pos) < 2) goto fail; - if (!IsInMenu()) - { - palette[3] = spu_pkt[pos] >> 4; - palette[2] = spu_pkt[pos] & 0x0f; - palette[1] = spu_pkt[pos + 1] >> 4; - palette[0] = spu_pkt[pos + 1] & 0x0f; - } + + palette[3] = spu_pkt[pos] >> 4; + palette[2] = spu_pkt[pos] & 0x0f; + palette[1] = spu_pkt[pos + 1] >> 4; + palette[0] = spu_pkt[pos + 1] & 0x0f; pos +=2; } break; @@ -905,13 +939,10 @@ { if ((buf_size - pos) < 2) goto fail; - if (!IsInMenu()) - { - alpha[3] = spu_pkt[pos] >> 4; - alpha[2] = spu_pkt[pos] & 0x0f; - alpha[1] = spu_pkt[pos + 1] >> 4; - alpha[0] = spu_pkt[pos + 1] & 0x0f; - } + alpha[3] = spu_pkt[pos] >> 4; + alpha[2] = spu_pkt[pos] & 0x0f; + alpha[1] = spu_pkt[pos + 1] >> 4; + alpha[0] = spu_pkt[pos + 1] & 0x0f; pos +=2; } break; @@ -948,19 +979,11 @@ w = x2 - x1 + 1; if (w < 0) w = 0; - h = y2 - y1; + h = y2 - y1 + 2; if (h < 0) h = 0; if (w > 0 && h > 0) { - if (IsInMenu()) - { - for (int i = 0; i < 4 ; i++) - { - alpha[i] = button_alpha[i]; - palette[i] = button_color[i]; - } - } if (sub->rects != NULL) { for (i = 0; i < sub->num_rects; i++) @@ -973,8 +996,9 @@ } bitmap = (uint8_t*) av_malloc(w * h); - sub->rects = (AVSubtitleRect *)av_mallocz(sizeof(AVSubtitleRect)); - sub->num_rects = 1; + sub->num_rects = (NumMenuButtons() > 0) ? 2 : 1; + sub->rects = (AVSubtitleRect *) + av_mallocz(sizeof(AVSubtitleRect) * sub->num_rects); sub->rects[0].rgba_palette = (uint32_t*)av_malloc(4 *4); decode_rle(bitmap, w * 2, w, (h + 1) / 2, spu_pkt, offset1 * 2, buf_size); @@ -988,7 +1012,13 @@ sub->rects[0].h = h; sub->rects[0].nb_colors = 4; sub->rects[0].linesize = w; - if (!IsInMenu()) + if (NumMenuButtons() > 0) + { + sub->rects[1].rgba_palette = (uint32_t*)av_malloc(4 *4); + guess_palette(sub->rects[1].rgba_palette, + button_color, button_alpha); + } + else find_smallest_bounding_rectangle(sub); *gotSubtitles = 1; } @@ -1003,9 +1033,9 @@ { uint captionmode = parent->GetCaptionMode(); if (force_subtitle_display && captionmode != kDisplayAVSubtitle) - parent->SetCaptionsEnabled(true, false); + parent->EnableCaptions(kDisplayAVSubtitle, false); else if (!force_subtitle_display && captionmode == kDisplayAVSubtitle) - parent->SetCaptionsEnabled(false, false); + parent->DisableCaptions(kDisplayAVSubtitle, false); } return true; } @@ -1036,27 +1066,13 @@ if (dvdRet == DVDNAV_STATUS_ERR) return false; - bool button_is_transparent = true; - for (uint i = 0 ; i < 4 ; i++) { button_alpha[i] = 0xf & (hl.palette >> (4 * i )); - if (button_alpha[i] > 0) - button_is_transparent = false; button_color[i] = 0xf & (hl.palette >> (16+4 *i )); } - if (button_is_transparent) - { - for (uint i = 0; i < 4; i++) - button_alpha[i] = 10; - } - - - hl_startx = hl.sx; - hl_width = hl.ex - hl.sx; - hl_starty = hl.sy; - hl_height = hl.ey - hl.sy; + hl_button.setCoords(hl.sx, hl.sy, hl.ex, hl.ey); if (((hl.sx + hl.sy) > 0) && (hl.sx < videowidth && hl.sy < videoheight)) @@ -1071,10 +1087,13 @@ { if (buttonExists || dvdMenuButton.rects) { - av_free(dvdMenuButton.rects[0].rgba_palette); - av_free(dvdMenuButton.rects[0].bitmap); + for (uint i = 0; i < dvdMenuButton.num_rects; i++) + { + AVSubtitleRect* rect = &(dvdMenuButton.rects[i]); + av_free(rect->rgba_palette); + av_free(rect->bitmap); + } av_free(dvdMenuButton.rects); - dvdMenuButton.rects = NULL; dvdMenuButton.num_rects = 0; buttonExists = false; @@ -1095,8 +1114,7 @@ av_free(menuSpuPkt); menuBuflength = 0; - hl_startx = hl_starty = 0; - hl_width = hl_height = 0; + hl_button.setRect(0, 0, 0, 0); } int DVDRingBufferPriv::NumMenuButtons(void) const @@ -1289,13 +1307,33 @@ return false; } +/** \brief Run SeekCellStart its okay to run seekcellstart + ** ffmpeg for some reason doesnt' output menu spu if seekcellstart + ** is started too soon after a video codec/resolution change + */ +void DVDRingBufferPriv::RunSeekCellStart(void) +{ + if (!runSeekCellStart) + return; + + bool ret = true; + if (NumMenuButtons() > 0 && !buttonExists) + ret = false; + + if (ret) + { + ret = SeekCellStart(); + runSeekCellStart = false; + } +} + /** \brief seek the beginning of a dvd cell */ -void DVDRingBufferPriv::SeekCellStart(void) +bool DVDRingBufferPriv::SeekCellStart(void) { QMutexLocker lock(&seekLock); - gotoCellStart = true; - Seek(cellStart); + runningCellStart = true; + return (Seek(cellStart) == 0); } /** \brief set dvd speed. uses the DVDDriveSpeed Setting from the settings diff -uNr mythtv-0.21/libs/libmythtv/DVDRingBuffer.h mythtv/libs/libmythtv/DVDRingBuffer.h --- mythtv-0.21/libs/libmythtv/DVDRingBuffer.h 2007-09-06 18:56:45.000000000 +0200 +++ mythtv/libs/libmythtv/DVDRingBuffer.h 2008-05-12 05:08:03.000000000 +0200 @@ -41,21 +41,21 @@ void GetPartAndTitle(int &_part, int &_title) const { _part = part; _title = title; } uint GetTotalTimeOfTitle(void); - uint GetChapterLength(void) { return pgLength / 90000; } + uint GetChapterLength(void) const { return pgLength / 90000; } uint GetCellStart(void); - bool InStillFrame(void) { return cellHasStillFrame; } - bool IsWaiting(void) { return dvdWaiting; } - int NumPartsInTitle(void) { return titleParts; } + bool PGCLengthChanged(void); + bool CellChanged(void); + bool InStillFrame(void) const { return cellHasStillFrame; } + bool AudioStreamsChanged(void) const { return audioStreamsChanged; } + bool IsWaiting(void) const { return dvdWaiting; } + int NumPartsInTitle(void) const { return titleParts; } void GetMenuSPUPkt(uint8_t *buf, int len, int stream_id); - AVSubtitleRect *GetMenuButton(void); + QRect GetButtonCoords(void); + AVSubtitle *GetMenuSubtitle(void); void ReleaseMenuButton(void); bool IgnoringStillorWait(void) { return skipstillorwait; } - uint ButtonPosX(void) { return hl_startx; } - uint ButtonPosY(void) { return hl_starty; } - uint ButtonWidth(void) { return hl_width; } - uint ButtonHeight(void) { return hl_height; } uint GetAudioLanguage(int id); int GetSubTrackNum(uint key); int GetAudioTrackNum(uint key); @@ -74,6 +74,7 @@ int GetCellID(void) { return cellid; } int GetVobID(void) { return vobid; } bool IsSameChapter(int tmpcellid, int tmpvobid); + void RunSeekCellStart(void); // commands bool OpenFile(const QString &filename); @@ -97,15 +98,16 @@ int NumMenuButtons(void) const; void IgnoreStillOrWait(bool skip) { skipstillorwait = skip; } void InStillFrame(bool change) { cellHasStillFrame = change; } + void AudioStreamsChanged(bool change) { audioStreamsChanged = change; } uint GetCurrentTime(void) { return (currentTime / 90000); } uint TitleTimeLeft(void); void SetTrack(uint type, int trackNo); int GetTrack(uint type); uint8_t GetNumAudioChannels(int id); void JumpToTitle(bool change) { jumptotitle = change; } - void SeekCellStart(void); void SetDVDSpeed(void); void SetDVDSpeed(int speed); + void SetRunSeekCellStart(bool change) { runSeekCellStart = change; } void SetParent(NuppelVideoPlayer *p) { parent = p; } @@ -120,6 +122,8 @@ long long pgLength; long long pgcLength; long long cellStart; + bool cellChanged; + bool pgcLengthChanged; long long pgStart; long long currentpos; dvdnav_t *lastNav; // This really belongs in the player. @@ -129,19 +133,16 @@ bool gotStop; bool cellHasStillFrame; + bool audioStreamsChanged; bool dvdWaiting; long long titleLength; MythTimer stillFrameTimer; uint32_t clut[16]; uint8_t button_color[4]; uint8_t button_alpha[4]; - uint16_t hl_startx; - uint16_t hl_width; - uint16_t hl_starty; - uint16_t hl_height; + QRect hl_button; uint8_t *menuSpuPkt; int menuBuflength; - uint8_t *buttonBitmap; AVSubtitle dvdMenuButton; bool skipstillorwait; long long cellstartPos; @@ -153,7 +154,8 @@ int lastvobid; bool cellRepeated; int buttonstreamid; - bool gotoCellStart; + bool runningCellStart; + bool runSeekCellStart; long long menupktpts; int curAudioTrack; int8_t curSubtitleTrack; @@ -177,7 +179,6 @@ QMutex seekLock; long long Seek(long long time); - bool DrawMenuButton(uint8_t *spu_pkt, int buf_size); bool DVDButtonUpdate(bool b_mode); void ClearMenuSPUParameters(void); void ClearMenuButton(void); @@ -185,6 +186,7 @@ uint ConvertLangCode(uint16_t code); void SelectDefaultButton(void); void ClearSubtitlesOSD(void); + bool SeekCellStart(void); int get_nibble(const uint8_t *buf, int nibble_offset); int decode_rle(uint8_t *bitmap, int linesize, int w, int h, diff -uNr mythtv-0.21/libs/libmythtv/eit.cpp mythtv/libs/libmythtv/eit.cpp --- mythtv-0.21/libs/libmythtv/eit.cpp 2008-03-06 23:44:40.000000000 +0100 +++ mythtv/libs/libmythtv/eit.cpp 2009-05-05 02:10:59.000000000 +0200 @@ -239,7 +239,7 @@ } score /= al.size(); - return max(1000, score); + return min(1000, score); } int DBEvent::GetMatch(const vector<DBEvent> &programs, int &bestmatch) const diff -uNr mythtv-0.21/libs/libmythtv/eitfixup.h mythtv/libs/libmythtv/eitfixup.h --- mythtv-0.21/libs/libmythtv/eitfixup.h 2008-02-14 13:27:49.000000000 +0100 +++ mythtv/libs/libmythtv/eitfixup.h 2009-05-05 21:57:19.000000000 +0200 @@ -55,12 +55,16 @@ void Fix(DBEvent &event) const; + /** Corrects starttime to the multiple of a minute. + * Used for providers who fail to handle leap seconds timely. Changes the + * starttime not more than 3 seconds. Sshould only be used if the + * duration is the multiple of a minute. */ static void TimeFix(QDateTime &dt) { int secs = dt.time().second(); - if (secs < 5) + if (secs < 4) dt = dt.addSecs(-secs); - if (secs > 55) + if (secs > 56) dt = dt.addSecs(60 - secs); } diff -uNr mythtv-0.21/libs/libmythtv/eithelper.cpp mythtv/libs/libmythtv/eithelper.cpp --- mythtv-0.21/libs/libmythtv/eithelper.cpp 2008-03-04 00:05:20.000000000 +0100 +++ mythtv/libs/libmythtv/eithelper.cpp 2009-05-05 21:57:19.000000000 +0200 @@ -393,7 +393,9 @@ } QDateTime starttime = MythUTCToLocal(eit->StartTimeUTC(i)); - EITFixUp::TimeFix(starttime); + // fix starttime only if the duration is a multiple of a minute + if (!(eit->DurationInSeconds(i) % 60)) + EITFixUp::TimeFix(starttime); QDateTime endtime = starttime.addSecs(eit->DurationInSeconds(i)); DBEvent *event = new DBEvent(chanid, @@ -495,7 +497,9 @@ for (uint k=0; k<transmission.TransmissionCount(); ++k) { QDateTime starttime = transmission.StartTimeUTC(k); - EITFixUp::TimeFix(starttime); + // fix starttime only if the duration is a multiple of a minute + if (!(cit->DurationInSeconds() % 60)) + EITFixUp::TimeFix(starttime); QDateTime endtime = starttime.addSecs(cit->DurationInSeconds()); DBEvent *event = new DBEvent(chanid, @@ -551,7 +555,9 @@ starttime.setTime_t(tmp - utc_offset, Qt::LocalTime); } - EITFixUp::TimeFix(starttime); + // fix starttime only if the duration is a multiple of a minute + if (!(event.length % 60)) + EITFixUp::TimeFix(starttime); QDateTime endtime = starttime.addSecs(event.length); desc_list_t list = MPEGDescriptor::Parse(event.desc, event.desc_length); @@ -693,6 +699,20 @@ // United Kingdom fix[ 9018U << 16] = EITFixUp::kFixUK; + // UK Freesat + fix[ 2013LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2041LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2042LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2044LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2045LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2046LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2047LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2048LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2049LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2050LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2051LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2053LL << 32 | 2U << 16] = EITFixUp::kFixUK; + fix[ 2054LL << 32 | 2U << 16] = EITFixUp::kFixUK; // ComHem Sweeden fix[40999U << 16 ] = EITFixUp::kFixComHem; @@ -814,20 +834,24 @@ EITFixUp::kEFixForceISO8859_15; // On transport 10008 only following channels need fixing: fix[ 10008LL<<32 | 61441U << 16 | 53002] = // Tele 5 - fix[10008LL<<32 | 61441U << 16 | 53630] = // HSE24 EITFixUp::kEFixForceISO8859_15; // DVB-S Astra 19.2E DMAX Germany fix[ 1113LL << 32 | 1 << 16 | 12602] = EITFixUp::kEFixForceISO8859_15; - // Premiere and Pro7/Sat.1 + // Premiere fix[133 << 16] = EITFixUp::kEFixForceISO8859_15; - // DVB-T Spain - fix[ 10LL << 32 | 8916 << 16 ] = // national multiplex - fix[ 12LL << 32 | 8916 << 16 ] = // national multiplex - fix[ 13LL << 32 | 8916 << 16 ] = // national multiplex - fix[ 6200LL << 32 | 8916 << 16 ] = // Madrid (TeleMadrid) + // DVB-S Astra 19.2E french channels + fix[ 1022LL << 32 | 1 << 16 | 6901 ] = // DIRECT 8 + fix[ 1022LL << 32 | 1 << 16 | 6905 ] = // France 24 (en Francais) + fix[ 1022LL << 32 | 1 << 16 | 6911 ] = // DIRECT 8 + fix[ 1072LL << 32 | 1 << 16 | 8201 ] = // CANAL+ + fix[ 1070LL << 32 | 1 << 16 | 8004 ] = // EURONEWS + fix[ 1091LL << 32 | 1 << 16 | 31220 ] = // EuroNews + fix[ 1094LL << 32 | 1 << 16 | 17027 ] = // LCP + fix[ 1094LL << 32 | 1 << 16 | 17028 ] = // NT1 + fix[ 1100LL << 32 | 1 << 16 | 8710 ] = // NRJ 12 EITFixUp::kEFixForceISO8859_15; } diff -uNr mythtv-0.21/libs/libmythtv/filtermanager.cpp mythtv/libs/libmythtv/filtermanager.cpp --- mythtv-0.21/libs/libmythtv/filtermanager.cpp 2008-02-22 19:24:44.000000000 +0100 +++ mythtv/libs/libmythtv/filtermanager.cpp 2008-11-19 08:16:08.000000000 +0100 @@ -89,6 +89,9 @@ LoadFilterLib(Path); } } + else + VERBOSE(VB_IMPORTANT, + "Filter dir '" + FiltDir.absPath() + "' doesn't exist?"); } FilterManager::~FilterManager() diff -uNr mythtv-0.21/libs/libmythtv/firewiredevice.cpp mythtv/libs/libmythtv/firewiredevice.cpp --- mythtv-0.21/libs/libmythtv/firewiredevice.cpp 2008-03-04 18:43:47.000000000 +0100 +++ mythtv/libs/libmythtv/firewiredevice.cpp 2009-04-25 05:52:16.000000000 +0200 @@ -224,8 +224,11 @@ return true; } + // the PACE is obviously not a Motorola channel changer, but the + // same commands work for it as the Motorola. bool is_mot = ((panel_model.upper().left(4) == "DCT-") || - (panel_model.upper().left(4) == "DCH-")); + (panel_model.upper().left(4) == "DCH-") || + (panel_model.upper().left(4) == "PACE-")); if (is_mot && !alt_method) { @@ -235,7 +238,7 @@ cmd.push_back(kAVCControlCommand); cmd.push_back(kAVCSubunitTypePanel | m_subunitid); cmd.push_back(kAVCPanelPassThrough); - cmd.push_back(kAVCPanelKey0 + digit[i] | kAVCPanelKeyPress); + cmd.push_back((kAVCPanelKey0 + digit[i]) | kAVCPanelKeyPress); cmd.push_back(0x00); cmd.push_back(0x00); cmd.push_back(0x00); @@ -399,8 +402,9 @@ const uint64_t sa_vendor_ids[] = { - 0x11e6, 0x14f8, 0x1692, 0x1947, 0x0f21, 0x1ac3, - 0x0a73, + 0x0a73, 0x0f21, 0x11e6, 0x14f8, 0x1692, 0x1868, + 0x1947, 0x1ac3, 0x1bd7, 0x1cea, 0x1e6b, 0x21be, + 0x223a, 0x22ce, 0x23be, 0x252e, }; const uint sa_vendor_id_cnt = sizeof(sa_vendor_ids) / sizeof(uint64_t); @@ -415,19 +419,29 @@ const uint64_t motorola_vendor_ids[] = { /* DCH-3200 */ - 0x1c11, - /* 3416 */ + 0x1c11, 0x1cfb, 0x1fc4, 0x23a3, + /* DCH-3416 */ + 0x1e46, + /* DCT-3416 */ 0x1bdd, - /* 3412 */ + /* DCT-3412 */ 0x159a, - /* 6200, 3416 */ + /* DCT-6200, DCT-3416 */ 0x0ce5, 0x0e5c, 0x1225, 0x0f9f, 0x1180, 0x12c9, 0x11ae, 0x152f, 0x14e8, 0x16b5, 0x1371, - 0x19a6, 0x1aad, 0x0b06, 0x195e, - /* 6212 */ + 0x19a6, 0x1aad, 0x0b06, 0x195e, 0x10dc, + /* DCT-6212 */ 0x0f9f, 0x152f, - /* 6216, 2224 */ + /* DCT-6216, 2224 */ 0x17ee, 0x1a66, + /* QIP 7100 */ + 0x2374, + /* unknown, see http://standards.ieee.org/regauth/oui/oui.txt */ + 0x04db, 0x0406, 0x0ce5, 0x111a, 0x1225, 0x1404, + 0x1626, 0x18c0, 0x1ade, 0x1cfb, 0x2040, 0x211e, + 0x2180, 0x2210, 0x230b, 0x2375, 0x2395, 0x23a2, + 0x23ed, 0x23ee, 0x23a0, 0x23a1, + }; const uint motorola_vendor_id_cnt = sizeof(motorola_vendor_ids) / sizeof(uint64_t); @@ -435,6 +449,7 @@ for (uint i = 0; i < motorola_vendor_id_cnt; i++) { id_to_model[motorola_vendor_ids[i] << 32 | 0xd330] = "DCH-3200"; + id_to_model[motorola_vendor_ids[i] << 32 | 0xb630] = "DCH-3416"; id_to_model[motorola_vendor_ids[i] << 32 | 0x34cb] = "DCT-3412"; id_to_model[motorola_vendor_ids[i] << 32 | 0x346b] = "DCT-3416"; id_to_model[motorola_vendor_ids[i] << 32 | 0xb630] = "DCT-3416"; @@ -443,6 +458,23 @@ id_to_model[motorola_vendor_ids[i] << 32 | 0x64ca] = "DCT-6212"; id_to_model[motorola_vendor_ids[i] << 32 | 0x64cb] = "DCT-6212"; id_to_model[motorola_vendor_ids[i] << 32 | 0x646b] = "DCT-6216"; + id_to_model[motorola_vendor_ids[i] << 32 | 0x8100] = "QIP-7100"; + id_to_model[motorola_vendor_ids[i] << 32 | 0x0001] = "QIP-7100"; + } + + const uint64_t pace_vendor_ids[] = + { + /* PACE 550-HD & 779 */ + 0x1cc3, 0x5094, + }; + + const uint pace_vendor_id_cnt = + sizeof(pace_vendor_ids) / sizeof(uint64_t); + + for (uint i = 0; i < pace_vendor_id_cnt; i++) + { + id_to_model[pace_vendor_ids[i] << 32 | 0x10551] = "PACE-550"; + id_to_model[pace_vendor_ids[i] << 32 | 0x10755] = "PACE-779"; } } @@ -450,6 +482,7 @@ { QString model = panel_model.upper(); return ((model == "DCH-3200") || + (model == "DCH-3416") || (model == "DCT-3412") || (model == "DCT-3416") || (model == "DCT-6200") || @@ -458,6 +491,9 @@ (model == "SA3250HD") || (model == "SA4200HD") || (model == "SA4250HDC") || + (model == "PACE-550") || + (model == "PACE-779") || + (model == "QIP-7100") || (model == "GENERIC")); } diff -uNr mythtv-0.21/libs/libmythtv/frequencytables.cpp mythtv/libs/libmythtv/frequencytables.cpp --- mythtv-0.21/libs/libmythtv/frequencytables.cpp 2007-12-11 15:56:01.000000000 +0100 +++ mythtv/libs/libmythtv/frequencytables.cpp 2008-09-27 15:54:35.000000000 +0200 @@ -320,6 +320,24 @@ DTVGuardInterval::kGuardIntervalAuto, DTVHierarchy::kHierarchyNone, DTVModulation::kModulationQAMAuto, 125000, 0); // UHF 21-69 + // New Zealand + fmap["dvbt_ofdm_nz0"] = new FrequencyTable( + 474000000, 858000000, 8000000, "", 0, DTVInversion::kInversionOff, + DTVBandwidth::kBandwidth8MHz, DTVCodeRate::kFEC_3_4, + DTVCodeRate::kFEC_3_4, DTVModulation::kModulationQAM64, + DTVTransmitMode::kTransmissionMode8K, + DTVGuardInterval::kGuardInterval_1_16, DTVHierarchy::kHierarchyNone, + DTVModulation::kModulationQAM64, 0 , 0); // UHF 21-69 + + // france + fmap["dvbt_ofdm_fr0"] = new FrequencyTable( + 474000000, 850000000, 8000000, "" , 0, DTVInversion::kInversionOff, + DTVBandwidth::kBandwidth8MHz, DTVCodeRate::kFECAuto, + DTVCodeRate::kFECAuto, DTVModulation::kModulationQAMAuto, + DTVTransmitMode::kTransmissionMode8K, + DTVGuardInterval::kGuardIntervalAuto, DTVHierarchy::kHierarchyNone, + DTVModulation::kModulationQAMAuto, 167000, -166000); + //#define DEBUG_DVB_OFFSETS #ifdef DEBUG_DVB_OFFSETS // UHF 14-69 diff -uNr mythtv-0.21/libs/libmythtv/hdhrchannel.cpp mythtv/libs/libmythtv/hdhrchannel.cpp --- mythtv-0.21/libs/libmythtv/hdhrchannel.cpp 2008-01-14 17:45:33.000000000 +0100 +++ mythtv/libs/libmythtv/hdhrchannel.cpp 2009-03-18 13:34:58.000000000 +0100 @@ -1,6 +1,6 @@ /** - * DBox2Channel - * Copyright (c) 2006 by Silicondust Engineering Ltd. + * HDHRChannel + * Copyright (c) 2006-2009 by Silicondust Engineering Ltd. * Distributed as part of MythTV under GPL v2 and later. */ @@ -24,7 +24,6 @@ #include "hdhrchannel.h" #include "videosource.h" #include "channelutil.h" -#include "frequencytables.h" #define DEBUG_PID_FILTERS @@ -391,22 +390,27 @@ bool HDHRChannel::Tune(uint frequency, QString /*input*/, QString modulation, QString si_std) { - bool ok = false; + // Convert dtv_multiplex.modulation strings to something the HDHR can use: + modulation.replace("qam_", "qam"); // e.g. qam_256 -> qam256 +#if 0 + if (modulation == "qamauto") + modulation = "qam"; // "auto" works just as well? +#endif - VERBOSE(VB_CHANNEL, LOC + - QString("TuneTo(%1,%2)").arg(frequency).arg(modulation)); + if (modulation.isEmpty()) + modulation = "auto"; - if (modulation == "8vsb") - ok = TunerSet("channel", QString("8vsb:%1").arg(frequency)); - else if (modulation == "qam_64") - ok = TunerSet("channel", QString("qam64:%1").arg(frequency)); - else if (modulation == "qam_256") - ok = TunerSet("channel", QString("qam256:%1").arg(frequency)); + QString chan = modulation + ':' + QString::number(frequency); - if (ok) + VERBOSE(VB_CHANNEL, LOC + "Tune()ing to " + chan); + + if (TunerSet("channel", chan).length()) + { SetSIStandard(si_std); + return true; + } - return ok; + return false; } bool HDHRChannel::AddPID(uint pid, bool do_update) diff -uNr mythtv-0.21/libs/libmythtv/hdhrrecorder.cpp mythtv/libs/libmythtv/hdhrrecorder.cpp --- mythtv-0.21/libs/libmythtv/hdhrrecorder.cpp 2008-01-14 17:45:33.000000000 +0100 +++ mythtv/libs/libmythtv/hdhrrecorder.cpp 2009-03-02 15:24:15.000000000 +0100 @@ -1,6 +1,6 @@ /** -*- Mode: c++ -*- * HDHRRecorder - * Copyright (c) 2006 by Silicondust Engineering Ltd, and + * Copyright (c) 2006-2009 by Silicondust Engineering Ltd, and * Daniel Thor Kristjansson * Distributed as part of MythTV under GPL v2 and later. */ @@ -27,6 +27,7 @@ #include "hdhrrecorder.h" #include "atsctables.h" #include "atscstreamdata.h" +#include "dvbstreamdata.h" #include "eithelper.h" #include "tv_rec.h" @@ -176,10 +177,13 @@ data->AddMPEGListener(this); ATSCStreamData *atsc = dynamic_cast<ATSCStreamData*>(data); + DVBStreamData *dvb = dynamic_cast<DVBStreamData*>(data); if (atsc && atsc->DesiredMinorChannel()) atsc->SetDesiredChannel(atsc->DesiredMajorChannel(), atsc->DesiredMinorChannel()); + else if (dvb) + dvb->AddDVBMainListener(this); else if (data->DesiredProgram() >= 0) data->SetDesiredProgram(data->DesiredProgram()); } @@ -250,9 +254,13 @@ if (!pmt) return; - int next = (pmt->tsheader()->ContinuityCounter()+1)&0xf; - pmt->tsheader()->SetContinuityCounter(next); - BufferedWrite(*(reinterpret_cast<TSPacket*>(pmt->tsheader()))); + unsigned char buf[8 * 1024]; + uint next_cc = (pmt->tsheader()->ContinuityCounter()+1)&0xf; + pmt->tsheader()->SetContinuityCounter(next_cc); + uint size = pmt->WriteAsTSPackets(buf, next_cc); + + for (uint i = 0; i < size ; i += TSPacket::SIZE) + DTVRecorder::BufferedWrite(*(reinterpret_cast<TSPacket*>(&buf[i]))); } /** \fn HDHRRecorder::HandleMGT(const MasterGuideTable*) diff -uNr mythtv-0.21/libs/libmythtv/hdhrrecorder.h mythtv/libs/libmythtv/hdhrrecorder.h --- mythtv-0.21/libs/libmythtv/hdhrrecorder.h 2007-01-10 17:29:26.000000000 +0100 +++ mythtv/libs/libmythtv/hdhrrecorder.h 2009-03-02 15:24:15.000000000 +0100 @@ -1,6 +1,6 @@ /** -*- Mode: c++ -*- * HDHRRecorder - * Copyright (c) 2006 by Silicondust Engineering Ltd. + * Copyright (c) 2006-2009 by Silicondust Engineering Ltd. * Distributed as part of MythTV under GPL v2 and later. */ @@ -18,11 +18,11 @@ typedef vector<uint> uint_vec_t; class HDHRRecorder : public DTVRecorder, + public DVBMainStreamListener, + public ATSCMainStreamListener, public MPEGStreamListener, public MPEGSingleProgramStreamListener { - friend class ATSCStreamData; - public: HDHRRecorder(TVRec *rec, HDHRChannel *channel); ~HDHRRecorder(); @@ -52,12 +52,15 @@ void HandleSingleProgramPAT(ProgramAssociationTable *pat); void HandleSingleProgramPMT(ProgramMapTable *pmt); - /* // ATSC void HandleSTT(const SystemTimeTable*) {} - void HandleMGT(const MasterGuideTable *mgt); + void HandleMGT(const MasterGuideTable *) {}; void HandleVCT(uint, const VirtualChannelTable*) {} - */ + + // DVB + void HandleTDT(const TimeDateTable*) {} + void HandleNIT(const NetworkInformationTable*) {} + void HandleSDT(uint /*tsid*/, const ServiceDescriptionTable*) {} private: bool AdjustFilters(void); diff -uNr mythtv-0.21/libs/libmythtv/importicons.cpp mythtv/libs/libmythtv/importicons.cpp --- mythtv-0.21/libs/libmythtv/importicons.cpp 2008-01-29 00:31:10.000000000 +0100 +++ mythtv/libs/libmythtv/importicons.cpp 2008-05-28 02:19:25.000000000 +0200 @@ -123,9 +123,9 @@ { case STATE_NORMAL: if (m_editManual->getValue()) - m_buttonManual->setEnabled(true); + m_buttonManual->setEnabled(true); else - m_buttonManual->setEnabled(false); + m_buttonManual->setEnabled(false); if (m_missingCount < m_missingMaxCount) { if (m_missingMaxCount < 2) //When there's only one icon, nothing to skip to! @@ -210,7 +210,7 @@ arg(escape_csv(entry2.strServiceId)); if ((!isBlocked(m_strMatches)) && - (checkAndDownload(entry.strLogo))) + (checkAndDownload(entry.strLogo, entry2.strChanId))) { if (m_missingMaxCount > 1) @@ -453,7 +453,7 @@ return str; } -bool ImportIconsWizard::checkAndDownload(const QString& str) +bool ImportIconsWizard::checkAndDownload(const QString& str, const QString& localChanId) { // Do not try and access dialog within this function @@ -481,7 +481,7 @@ query.prepare(qstr); query.bindValue(":ICON", m_strChannelDir+str2); - query.bindValue(":CHANID", (*m_iter).strChanId); + query.bindValue(":CHANID", localChanId); if (!query.exec()) { @@ -572,6 +572,9 @@ VERBOSE(VB_CHANNEL, QString("Icon Import: Working search : %1").arg(str)); QStringList strSplit=QStringList::split("\n",str); + QString prevIconName = ""; + int namei = 1; + for (QStringList::iterator begin=strSplit.begin(); begin!=strSplit.end();begin++) { @@ -584,7 +587,19 @@ entry.strName=ret[1]; entry.strLogo=ret[2]; m_listSearch.append(entry); - m_listIcons->addSelection(entry.strName); + if (prevIconName == entry.strName) + { + QString newname = QString("%1 (%2)").arg(entry.strName) + .arg(namei); + m_listIcons->addSelection(newname); + namei++; + } + else + { + m_listIcons->addSelection(entry.strName); + namei=1; + } + prevIconName = entry.strName; } } retVal=true; @@ -617,7 +632,7 @@ { QStringList ret = extract_csv(*begin); VERBOSE(VB_CHANNEL, QString("Icon Import: findmissing : %1 %2 %3 %4 %5").arg(ret[0]).arg(ret[1]).arg(ret[2]).arg(ret[3]).arg(ret[4])); - checkAndDownload(ret[4]); + checkAndDownload(ret[4], (*m_iter).strChanId); } } return true; diff -uNr mythtv-0.21/libs/libmythtv/importicons.h mythtv/libs/libmythtv/importicons.h --- mythtv-0.21/libs/libmythtv/importicons.h 2008-01-03 21:00:00.000000000 +0100 +++ mythtv/libs/libmythtv/importicons.h 2008-05-20 13:00:46.000000000 +0200 @@ -145,9 +145,10 @@ /*! \brief checks and attempts to download the logo file to the appropriate * place * \param str the string of the downloaded url + * \param localChanId the local ID number of the channel * \return true/false */ - bool checkAndDownload(const QString& str); + bool checkAndDownload(const QString& str, const QString& localChanId); /*! \brief attempt the inital load of the TV channel information * \return the number of TV channels diff -uNr mythtv-0.21/libs/libmythtv/inputinfo.cpp mythtv/libs/libmythtv/inputinfo.cpp --- mythtv-0.21/libs/libmythtv/inputinfo.cpp 2008-01-14 16:22:34.000000000 +0100 +++ mythtv/libs/libmythtv/inputinfo.cpp 2008-05-04 20:33:20.000000000 +0200 @@ -46,6 +46,9 @@ bool InputInfo::FromStringList(QStringList::const_iterator &it, QStringList::const_iterator end) { + if (it == end) + return false; + name = QDeepCopy<QString>(*it); name = (name == "<EMPTY>") ? QString::null : name; NEXT(); diff -uNr mythtv-0.21/libs/libmythtv/iptv/iptvfeederudp.cpp mythtv/libs/libmythtv/iptv/iptvfeederudp.cpp --- mythtv-0.21/libs/libmythtv/iptv/iptvfeederudp.cpp 2007-11-12 15:23:13.000000000 +0100 +++ mythtv/libs/libmythtv/iptv/iptvfeederudp.cpp 2008-11-05 01:58:33.000000000 +0100 @@ -70,6 +70,8 @@ if (!InitEnv()) return false; + ReceivingSocketAddr = our_inet_addr(parse.host().latin1()); + Groupsock *socket = new Groupsock(*_live_env, addr, parse.port(), 0); if (!socket) { diff -uNr mythtv-0.21/libs/libmythtv/jobqueue.cpp mythtv/libs/libmythtv/jobqueue.cpp --- mythtv-0.21/libs/libmythtv/jobqueue.cpp 2007-12-11 15:56:01.000000000 +0100 +++ mythtv/libs/libmythtv/jobqueue.cpp 2008-04-04 13:40:43.000000000 +0200 @@ -1249,7 +1249,7 @@ "j.args, j.comment, r.endtime, j.schedruntime " "FROM jobqueue j, recorded r " "WHERE j.chanid = r.chanid AND j.starttime = r.starttime " - "ORDER BY j.inserttime, j.chanid, j.id;"); + "ORDER BY j.schedruntime, j.id;"); if (!query.exec() || !query.isActive()) { diff -uNr mythtv-0.21/libs/libmythtv/jobqueue.h mythtv/libs/libmythtv/jobqueue.h --- mythtv-0.21/libs/libmythtv/jobqueue.h 2007-12-03 07:07:52.000000000 +0100 +++ mythtv/libs/libmythtv/jobqueue.h 2008-07-12 04:18:55.000000000 +0200 @@ -108,7 +108,7 @@ QDateTime starttime, QString args = "", QString comment = "", QString host = "", int flags = 0, int status = JOB_QUEUED, - QDateTime schedruntime = QDateTime::QDateTime()); + QDateTime schedruntime = QDateTime()); static bool QueueJobs(int jobTypes, QString chanid, QDateTime starttime, QString args = "", diff -uNr mythtv-0.21/libs/libmythtv/libmythtv.pro mythtv/libs/libmythtv/libmythtv.pro --- mythtv-0.21/libs/libmythtv/libmythtv.pro 2008-02-18 23:59:32.000000000 +0100 +++ mythtv/libs/libmythtv/libmythtv.pro 2008-07-01 17:03:29.000000000 +0200 @@ -185,6 +185,7 @@ HEADERS += mpeg/dvbdescriptors.h mpeg/dishdescriptors.h HEADERS += mpeg/premieredescriptors.h HEADERS += mpeg/atsc_huffman.h mpeg/iso639.h +HEADERS += mpeg/freesat_huffman.h mpeg/freesat_tables.h HEADERS += mpeg/iso6937tables.h HEADERS += mpeg/tsstats.h mpeg/streamlisteners.h HEADERS += mpeg/h264utils.h @@ -198,6 +199,7 @@ SOURCES += mpeg/dvbdescriptors.cpp mpeg/dishdescriptors.cpp SOURCES += mpeg/premieredescriptors.cpp SOURCES += mpeg/atsc_huffman.cpp mpeg/iso639.cpp +SOURCES += mpeg/freesat_huffman.cpp SOURCES += mpeg/iso6937tables.cpp SOURCES += mpeg/h264utils.cpp @@ -312,6 +314,8 @@ using_opengl_video:HEADERS += openglvideo.h using_opengl_video:SOURCES += openglvideo.cpp + using_glx_proc_addr_arb:DEFINES += USING_GLX_PROC_ADDR_ARB + # Misc. frontend HEADERS += guidegrid.h infostructs.h HEADERS += progfind.h ttfont.h @@ -499,6 +503,9 @@ } mingw { + # For easier debugging: + target.path = $${PREFIX}/bin + DEFINES -= USING_OPENGL_VSYNC DEFINES += USING_D3D @@ -515,3 +522,23 @@ inc.files = programinfo.h remoteutil.h recordingtypes.h INSTALLS += inc + +unix { + SOURCES-=dbcheck.cpp + OBJECTS+=dbcheck.o + gcc431_workaround.target=dbcheck.o + gcc431_workaround.commands=$(CXX) -c $(CXXFLAGS) -O0 $(INCPATH) -o dbcheck.o dbcheck.cpp + gcc431_workaround.depends=dbcheck.h dbcheck.cpp + gcc431_workaround.depends+=datadirect.h videodisplayprofile.h + gcc431_workaround.depends+=../libmyth/mythcontext.h + gcc431_workaround.depends+=../libmyth/mythdbcon.h + gcc431_workaround.depends+=../libmyth/dbutil.h + gcc431_workaround.depends+=../libmyth/mythexp.h + gcc431_workaround.depends+=../libmyth/mythobservable.h + gcc431_workaround.depends+=../libmyth/mythsocket.h + gcc431_workaround.depends+=../libmyth/mythverbose.h + gcc431_workaround.depends+=../libmyth/mythevent.h + QMAKE_EXTRA_UNIX_TARGETS+=gcc431_workaround +} + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythtv/mhi.cpp mythtv/libs/libmythtv/mhi.cpp --- mythtv-0.21/libs/libmythtv/mhi.cpp 2007-12-11 15:56:01.000000000 +0100 +++ mythtv/libs/libmythtv/mhi.cpp 2008-12-11 23:59:27.000000000 +0100 @@ -36,7 +36,8 @@ m_face_loaded(false), m_currentChannel(-1), m_isLive(false), m_currentCard(0), m_audioTag(-1), m_videoTag(-1), - m_tuningTo(-1), m_lastNbiVersion(NBI_VERSION_UNSET) + m_tuningTo(-1), m_lastNbiVersion(NBI_VERSION_UNSET), + m_videoRect(0, 0, StdDisplayWidth, StdDisplayHeight) { m_display.setAutoDelete(true); m_dsmccQueue.setAutoDelete(true); @@ -402,6 +403,7 @@ { m_displayWidth = display.width(); m_displayHeight = display.height(); + m_videoRect = display; // Assume full screen at this stage. } void MHIContext::SetInputRegister(int num) @@ -452,7 +454,51 @@ void MHIContext::AddToDisplay(const QImage &image, int x, int y) { MHIImageData *data = new MHIImageData; - data->m_image = image; + // It seems that OSDTypeImage::Load doesn't deal well with images + // located on odd pixel boundaries and the resulting display contains + // transparent lines. To avoid this we create a new image if either + // the x or y offset would be odd and set the extra pixels to transparent. + QImage img = image; + int xboundary = x & 1; + int yboundary = y & 1; + + if (xboundary || yboundary) + { + int width = img.width(), height = img.height(); + if (xboundary) + { + width++; + x--; + } + if (yboundary) + { + height++; + y--; + } + img = QImage(width, height, 32); + img.setAlphaBuffer(true); + QRgb qTransparent = qRgba(0,0,0,0); + if (xboundary) + { + for (int i = 0; i < height; i++) + img.setPixel(0, i, qTransparent); + } + + if (yboundary) + { + for (int j = 0; j < width; j++) + img.setPixel(j, 0, qTransparent); + } + + for (int i = 0; i < height-yboundary; i++) + { + for (int j = 0; j < width-xboundary; j++) + { + img.setPixel(j+xboundary, i+yboundary, image.pixel(j,i)); + } + } + } + data->m_image = img; data->m_x = x; data->m_y = y; QMutexLocker locker(&m_display_lock); @@ -470,7 +516,17 @@ { // tell the video player to resize the video stream if (m_parent->GetNVP()) - m_parent->GetNVP()->SetVideoResize(videoRect); + { + QRect vidRect(videoRect.x() * m_displayWidth/StdDisplayWidth, + videoRect.y() * m_displayHeight/StdDisplayHeight, + videoRect.width() * m_displayWidth/StdDisplayWidth, + videoRect.height() * m_displayHeight/StdDisplayHeight); + if (m_videoRect != vidRect) + { + m_parent->GetNVP()->SetVideoResize(vidRect); + m_videoRect = vidRect; + } + } QMutexLocker locker(&m_display_lock); QRect displayRect(dispRect.x() * m_displayWidth/StdDisplayWidth, @@ -713,15 +769,11 @@ QRgb qColour = qRgba(colour.red(), colour.green(), colour.blue(), colour.alpha()); - // This is a bit of a mess: we should be able to create a rectangle object. - // Scale the image to the current display size int scaledWidth = width * GetWidth() / MHIContext::StdDisplayWidth; int scaledHeight = height * GetHeight() / MHIContext::StdDisplayHeight; QImage qImage(scaledWidth, scaledHeight, 32); qImage.setAlphaBuffer(true); - // As far as I can tell this is the only way to draw with an - // intermediate transparency. for (int i = 0; i < scaledHeight; i++) { for (int j = 0; j < scaledWidth; j++) @@ -1252,6 +1304,8 @@ // The UK profile says that MHEG should not contain concave or // self-crossing polygons but we can get the former at least as // a result of rounding when drawing ellipses. +typedef struct { int yBottom, yTop, xBottom; float slope; } lineSeg; + void MHIDLA::DrawPoly(bool isFilled, const QPointArray &points) { int nPoints = points.size(); @@ -1260,116 +1314,73 @@ if (isFilled) { - // Polygon filling is done by sketching the outline of - // the polygon in a separate bitmap and then raster scanning - // across this to generate the fill. There are some special - // cases that have to be considered when doing this. Maximum - // and minimum points have to be removed otherwise they will - // turn the scan on but not off again. Horizontal lines are - // suppressed and their ends handled specially. - QRect bounds = points.boundingRect(); - int width = bounds.width()+1, height = bounds.height()+1; - QBitArray boundsMap(width*height); - boundsMap.fill(0); - // Draw the boundaries in the bounds map. This is - // the Bresenham algorithm if the absolute gradient is - // greater than 1 but puts only the centre of each line - // (so there is only one point for each y value) if less. - QPoint last = points[nPoints-1]; // Last point - for (int i = 0; i < nPoints; i++) - { - QPoint thisPoint = points[i]; - int x1 = last.x() - bounds.x(); - int y1 = last.y() - bounds.y(); - int x2 = thisPoint.x() - bounds.x(); - int y2 = thisPoint.y() - bounds.y(); - int x, xEnd, y, yEnd; - if (y2 > y1) + QMemArray <lineSeg> lineArray(nPoints); + int nLines = 0; + // Initialise the line segment array. Include all lines + // apart from horizontal. Close the polygon by starting + // with the last point in the array. + int lastX = points[nPoints-1].x(); // Last point + int lastY = points[nPoints-1].y(); + int yMin = lastY, yMax = lastY; + for (int k = 0; k < nPoints; k++) + { + int thisX = points[k].x(); + int thisY = points[k].y(); + if (lastY != thisY) { - x = x1; - y = y1; - xEnd = x2; - yEnd = y2; - } - else - { - x = x2; - y = y2; - xEnd = x1; - yEnd = y1; - } - int dx = abs(xEnd-x), dy = yEnd-y; - int xStep = xEnd >= x ? 1 : -1; - if (abs(y2-y1) > abs(x2-x1)) - { - int error = dy/2; - y++; - for (; y < yEnd; y++) // Exclude endpoints + if (lastY > thisY) { - boundsMap.toggleBit(x+y*width); - error += dx; - if (error*2 > dy) - { - error -= dy; - x += xStep; - } + lineArray[nLines].yBottom = thisY; + lineArray[nLines].yTop = lastY; + lineArray[nLines].xBottom = thisX; } - } - else - { - int error = 0; - y++; - for (; y < yEnd; y++) + else { - boundsMap.toggleBit(x+y*width); - error += dx; - while (error > dy) - { - x += xStep; - error -= dy; - } + lineArray[nLines].yBottom = lastY; + lineArray[nLines].yTop = thisY; + lineArray[nLines].xBottom = lastX; } + lineArray[nLines++].slope = + (float)(thisX-lastX) / (float)(thisY-lastY); } - QPoint nextPoint = points[(i+1) % nPoints]; - int nextY = nextPoint.y() - bounds.y(); - int turn = (y2 - y1) * (nextY - y2); - if (turn > 0) // Not a max or min - boundsMap.toggleBit(x2+y2*width); - else if (turn == 0) // Previous or next line is horizontal + if (thisY < yMin) + yMin = thisY; + if (thisY > yMax) + yMax = thisY; + lastX = thisX; + lastY = thisY; + } + + // Find the intersections of each line in the line segment array + // with the scan line. Because UK MHEG says that figures should be + // convex we only need to consider two intersections. + QRgb fillColour = qRgba(m_fillColour.red(), m_fillColour.green(), + m_fillColour.blue(), m_fillColour.alpha()); + for (int y = yMin; y < yMax; y++) + { + int crossings = 0, xMin = 0, xMax = 0; + for (int l = 0; l < nLines; l++) { - // We only draw a point at the beginning or end of a horizontal - // line if it turns clockwise. This means that the fill - // will be different depending on the direction the polygon was - // drawn but that will be tidied up when we draw the lines round. - if (y1 == y2) + if (y >= lineArray[l].yBottom && y < lineArray[l].yTop) { - if ((x2-x1) * (nextY - y2) > 0) - boundsMap.toggleBit(x2+y2*width); + int x = (int)round((float)(y - lineArray[l].yBottom) * + lineArray[l].slope) + lineArray[l].xBottom; + if (crossings == 0 || x < xMin) + xMin = x; + if (crossings == 0 || x > xMax) + xMax = x; + crossings++; } - else if ((nextPoint.x() - bounds.x() - x2) * (y2 - y1) < 0) - // Next line is horizontal - draw point if turn is clockwise. - boundsMap.toggleBit(x2+y2*width); } - last = thisPoint; - } - QRgb fillColour = qRgba(m_fillColour.red(), m_fillColour.green(), - m_fillColour.blue(), m_fillColour.alpha()); - // Now scan the bounds map and use this to fill the polygon. - for (int j = 0; j < bounds.height(); j++) - { - bool penDown = false; - for (int k = 0; k < bounds.width(); k++) + if (crossings == 2) { - if (boundsMap.testBit(k+j*width)) - penDown = ! penDown; - else if (penDown && k+bounds.x() >= 0 && j+bounds.y() >= 0 && - k+bounds.x() < m_width && j+bounds.y() < m_height) - m_image.setPixel(k+bounds.x(), j+bounds.y(), fillColour); + for (int x = xMin; x <= xMax; x++) + m_image.setPixel(x, y, fillColour); } } // Draw the boundary - last = points[nPoints-1]; // Last point + QPoint last = points[nPoints-1]; // Last point for (int i = 0; i < nPoints; i++) { DrawLine(points[i].x(), points[i].y(), last.x(), last.y()); @@ -1394,8 +1405,7 @@ return; // Construct an image the size of the bounding box and tile the // bitmap over this. - QImage tiledImage = QImage(rect.width(), rect.height(), - m_image.depth()); + QImage tiledImage = QImage(rect.width(), rect.height(), 32); for (int i = 0; i < rect.width(); i += m_image.width()) { @@ -1536,3 +1546,5 @@ m_image = m_image.smoothScale(newWidth, newHeight); } + + diff -uNr mythtv-0.21/libs/libmythtv/mhi.h mythtv/libs/libmythtv/mhi.h --- mythtv-0.21/libs/libmythtv/mhi.h 2007-04-18 21:45:41.000000000 +0200 +++ mythtv/libs/libmythtv/mhi.h 2008-12-11 23:59:27.000000000 +0100 @@ -180,6 +180,8 @@ uint m_lastNbiVersion; QMemArray<unsigned char> m_nbiData; + + QRect m_videoRect; }; // Object for drawing text. diff -uNr mythtv-0.21/libs/libmythtv/mpeg/atscstreamdata.h mythtv/libs/libmythtv/mpeg/atscstreamdata.h --- mythtv-0.21/libs/libmythtv/mpeg/atscstreamdata.h 2006-07-09 00:28:30.000000000 +0200 +++ mythtv/libs/libmythtv/mpeg/atscstreamdata.h 2009-01-17 09:23:55.000000000 +0100 @@ -113,6 +113,7 @@ void CacheMGT(MasterGuideTable*); void CacheTVCT(uint pid, TerrestrialVirtualChannelTable*); void CacheCVCT(uint pid, CableVirtualChannelTable*); + protected: virtual void DeleteCachedTable(PSIPTable *psip) const; private: diff -uNr mythtv-0.21/libs/libmythtv/mpeg/dvbdescriptors.cpp mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp --- mythtv-0.21/libs/libmythtv/mpeg/dvbdescriptors.cpp 2007-12-16 19:15:42.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp 2008-08-30 22:55:53.000000000 +0200 @@ -1,5 +1,6 @@ #include "dvbdescriptors.h" #include "iso6937tables.h" +#include "freesat_huffman.h" #include <unistd.h> #include <qtextcodec.h> @@ -70,6 +71,9 @@ if (!raw_length) return ""; + if (src[0] == 0x1f) + return freesat_huffman_to_string(src, raw_length); + if ((0x10 < src[0]) && (src[0] < 0x20)) { // TODO: Handle multi-byte encodings @@ -78,13 +82,16 @@ return ""; } - // Strip formatting characters - // Also, if a override encoding is specified copy it in front of the text + // if a override encoding is specified and the default ISO 6937 encoding + // would be used copy the ovverride encoding in front of the text unsigned char dst[raw_length + encoding_override_length]; - uint length = encoding_override_length; - if (encoding_override) + uint length = 0; + if (encoding_override && src[0] >= 0x20) { memcpy(dst, encoding_override, encoding_override_length); + length = encoding_override_length; + } + // Strip formatting characters for (uint i = 0; i < raw_length; i++) { if ((src[i] < 0x80) || (src[i] > 0x9F)) diff -uNr mythtv-0.21/libs/libmythtv/mpeg/dvbdescriptors.h mythtv/libs/libmythtv/mpeg/dvbdescriptors.h --- mythtv-0.21/libs/libmythtv/mpeg/dvbdescriptors.h 2008-01-14 19:58:41.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/dvbdescriptors.h 2009-01-03 15:32:38.000000000 +0100 @@ -1297,7 +1297,8 @@ kServiceTypeRCS_Map = 0x0E, kServiceTypeRCS_FLS = 0x0F, kServiceTypeDVB_MHP = 0x10, - kServiceTypeHDTV = 0x19, + kServiceTypeHDTV = 0x11, + kServiceTypeHDTV2 = 0x19, kServiceTypeEchoStarTV1 = 0x91, kServiceTypeEchoStarTV2 = 0x9a, kServiceTypeEchoStarTV3 = 0xa4, @@ -1348,7 +1349,9 @@ bool IsDigitalAudio(void) const { return ServiceType() == kServiceTypeDigitalRadioSound; } bool IsHDTV(void) const - { return ServiceType() == kServiceTypeHDTV; } + { return + (ServiceType() == kServiceTypeHDTV) || + (ServiceType() == kServiceTypeHDTV2); } bool IsTeletext(void) const { return ServiceType() == kServiceTypeDataBroadcast; } diff -uNr mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.cpp mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp --- mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.cpp 2008-02-27 00:37:42.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp 2009-01-17 09:23:55.000000000 +0100 @@ -9,6 +9,7 @@ #include "eithelper.h" #define PREMIERE_ONID 133 +#define FREESAT_EIT_PID 3842 // service_id is synonymous with the MPEG program number in the PMT. DVBStreamData::DVBStreamData(uint desired_netid, uint desired_tsid, @@ -97,7 +98,7 @@ return false; bool is_eit = false; - if (DVB_EIT_PID == pid) + if (DVB_EIT_PID == pid || FREESAT_EIT_PID == pid) { // Standard Now/Next Event Information Tables for this transport is_eit |= TableID::PF_EIT == table_id; @@ -130,7 +131,7 @@ return SDToSectionSeen(psip.TableIDExtension(), psip.Section()); } - if (DVB_EIT_PID == pid) + if (DVB_EIT_PID == pid || FREESAT_EIT_PID == pid) { // Standard Now/Next Event Information Tables for other transport is_eit |= TableID::PF_EITo == table_id; @@ -327,7 +328,7 @@ } } - if ((DVB_EIT_PID == pid || DVB_DNLONG_EIT_PID == pid) && + if ((DVB_EIT_PID == pid || DVB_DNLONG_EIT_PID == pid || FREESAT_EIT_PID == pid) && DVBEventInformationTable::IsEIT(psip.TableID())) { QMutexLocker locker(&_listener_lock); @@ -428,6 +429,12 @@ { add_pids.push_back(PREMIERE_EIT_SPORT_PID); } + + if (find(cur_pids.begin(), cur_pids.end(), + (uint) FREESAT_EIT_PID) == cur_pids.end()) + { + add_pids.push_back(FREESAT_EIT_PID); + } } else { @@ -457,6 +464,12 @@ { del_pids.push_back(PREMIERE_EIT_SPORT_PID); } + + if (find(cur_pids.begin(), cur_pids.end(), + (uint) FREESAT_EIT_PID) == cur_pids.end()) + { + del_pids.push_back(FREESAT_EIT_PID); + } } return add_pids.size() || del_pids.size(); @@ -768,6 +781,42 @@ sdts.clear(); } +void DVBStreamData::DeleteCachedTable(PSIPTable *psip) const +{ + if (!psip) + return; + + uint tid = psip->TableIDExtension(); + + QMutexLocker locker(&_cache_lock); + if (_cached_ref_cnt[psip] > 0) + { + _cached_slated_for_deletion[psip] = 1; + return; + } + else if ((TableID::NIT == psip->TableID()) && + _cached_nit[psip->Section()]) + { + _cached_nit[psip->Section()] = NULL; + delete psip; + } + else if ((TableID::SDT == psip->TableID()) && + _cached_sdts[tid << 8 | psip->Section()]) + { + _cached_sdts[tid << 8 | psip->Section()] = NULL; + delete psip; + } + else + { + MPEGStreamData::DeleteCachedTable(psip); + return; + } + psip_refcnt_map_t::iterator it; + it = _cached_slated_for_deletion.find(psip); + if (it != _cached_slated_for_deletion.end()) + _cached_slated_for_deletion.erase(it); +} + void DVBStreamData::CacheNIT(NetworkInformationTable *nit) { QMutexLocker locker(&_cache_lock); diff -uNr mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.h mythtv/libs/libmythtv/mpeg/dvbstreamdata.h --- mythtv-0.21/libs/libmythtv/mpeg/dvbstreamdata.h 2008-02-27 00:37:42.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/dvbstreamdata.h 2009-01-17 09:23:55.000000000 +0100 @@ -182,6 +182,8 @@ // Caching void CacheNIT(NetworkInformationTable*); void CacheSDT(ServiceDescriptionTable*); + protected: + virtual void DeleteCachedTable(PSIPTable *psip) const; private: /// DVB table monitoring @@ -215,8 +217,8 @@ sections_map_t _sdto_section_seen; // Caching - nit_cache_t _cached_nit; // section -> sdt - sdt_cache_t _cached_sdts; // tsid+section -> sdt + mutable nit_cache_t _cached_nit; // section -> sdt + mutable sdt_cache_t _cached_sdts; // tsid+section -> sdt }; inline void DVBStreamData::SetDishNetEIT(bool use_dishnet_eit) diff -uNr mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.cpp mythtv/libs/libmythtv/mpeg/freesat_huffman.cpp --- mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.cpp 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/freesat_huffman.cpp 2008-12-02 22:58:50.000000000 +0100 @@ -0,0 +1,107 @@ +#include "freesat_huffman.h" + +#include <qstring.h> + +struct fsattab { + unsigned int value; + short bits; + char next; +}; + +#define START '\0' +#define STOP '\0' +#define ESCAPE '\1' + +#include "freesat_tables.h" + +QString freesat_huffman_to_string(const unsigned char *src, uint size) +{ + if (src[1] == 1 || src[1] == 2) + { + QByteArray uncompressed(size * 3); + int p = 0; + unsigned value = 0, byte = 2, bit = 0; + while (byte < 6 && byte < size) + { + value |= src[byte] << ((5-byte) * 8); + byte++; + } + char lastch = START; + + do + { + bool found = false; + unsigned bitShift = 0; + char nextCh = STOP; + if (lastch == ESCAPE) + { + found = true; + // Encoded in the next 8 bits. + // Terminated by the first ASCII character. + nextCh = (value >> 24) & 0xff; + bitShift = 8; + if ((nextCh & 0x80) == 0) + { + if (nextCh < ' ') + nextCh = STOP; + lastch = nextCh; + } + } + else + { + unsigned indx = (unsigned)lastch; + if (src[1] == 2) + indx |= 0x80; + for (unsigned j = fsat_index[indx]; j < fsat_index[indx+1]; j++) + { + unsigned mask = 0, maskbit = 0x80000000; + for (short kk = 0; kk < fsat_table[j].bits; kk++) + { + mask |= maskbit; + maskbit >>= 1; + } + if ((value & mask) == fsat_table[j].value) + { + nextCh = fsat_table[j].next; + bitShift = fsat_table[j].bits; + found = true; + lastch = nextCh; + break; + } + } + } + if (found) + { + if (nextCh != STOP && nextCh != ESCAPE) + { + if (p >= uncompressed.count()) + uncompressed.resize(p+10); + uncompressed[p++] = nextCh; + } + // Shift up by the number of bits. + for (unsigned b = 0; b < bitShift; b++) + { + value = (value << 1) & 0xfffffffe; + if (byte < size) + value |= (src[byte] >> (7-bit)) & 1; + if (bit == 7) + { + bit = 0; + byte++; + } + else bit++; + } + } + else + { + // Entry missing in table. + QString result = QString::fromUtf8(uncompressed, p); + result.append("..."); + return result; + } + } while (lastch != STOP && byte < size+4); + + return QString::fromUtf8(uncompressed, p); + } + else return QString(""); +} diff -uNr mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.h mythtv/libs/libmythtv/mpeg/freesat_huffman.h --- mythtv-0.21/libs/libmythtv/mpeg/freesat_huffman.h 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/freesat_huffman.h 2008-06-20 12:11:26.000000000 +0200 @@ -0,0 +1,12 @@ +#ifndef _FREESAT_HUFFMAN_H_ +#define _FREESAT_HUFFMAN_H_ + +// POSIX header +#include <unistd.h> + +// Qt header +#include <qstring.h> + +QString freesat_huffman_to_string(const unsigned char *compressed, uint size); + +#endif // _FREESAT_HUFFMAN_H_ diff -uNr mythtv-0.21/libs/libmythtv/mpeg/freesat_tables.h mythtv/libs/libmythtv/mpeg/freesat_tables.h --- mythtv-0.21/libs/libmythtv/mpeg/freesat_tables.h 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/freesat_tables.h 2008-12-02 22:58:50.000000000 +0100 @@ -0,0 +1,4370 @@ +struct fsattab fsat_table[] = { + { 0x00000000, 2, 'T'}, + { 0x40000000, 3, 'B'}, + { 0x60000000, 5, 'L'}, + { 0x68000000, 7, 'K'}, + { 0x6a000000, 8, '6'}, + { 0x6b000000, 8, '.'}, + { 0x6c000000, 6, 'Q'}, + { 0x70000000, 5, 'D'}, + { 0x78000000, 5, 'H'}, + { 0x80000000, 4, 'C'}, + { 0x90000000, 4, 'I'}, + { 0xa0000000, 5, 'R'}, + { 0xa8000000, 5, 'N'}, + { 0xb0000000, 5, 'E'}, + { 0xb8000000, 8, 'V'}, + { 0xb9000000, 10, 'Z'}, + { 0xb9400000, 11, '1'}, + { 0xb9600000, 11, '3'}, + { 0xb9800000, 9, '2'}, + { 0xba000000, 7, 'U'}, + { 0xbc000000, 6, 'G'}, + { 0xc0000000, 5, 'F'}, + { 0xc8000000, 5, 'A'}, + { 0xd0000000, 4, 'S'}, + { 0xe0000000, 5, 'M'}, + { 0xe8000000, 5, 'P'}, + { 0xf0000000, 5, 'W'}, + { 0xf8000000, 6, 'J'}, + { 0xfc000000, 7, 'O'}, + { 0xfe000000, 8, 'Y'}, + { 0xff000000, 10, '8'}, + { 0xff400000, 12, '4'}, + { 0xff500000, 12, '\''}, + { 0xff600000, 14, '5'}, + { 0xff680000, 16, '9'}, + { 0xff698000, 18, 't'}, + { 0xff69e000, 20, ESCAPE}, + { 0xff700000, 12, ' '}, + { 0xff800000, 9, 'X'}, + { 0x00000000, 4, 'W'}, + { 0x10000000, 7, 'f'}, + { 0x12000000, 7, 'Q'}, + { 0x14000000, 8, '-'}, + { 0x15000000, 11, '7'}, + { 0x15240000, 14, '.'}, + { 0x15280000, 14, ESCAPE}, + { 0x152c0000, 14, 'l'}, + { 0x15300000, 13, 'g'}, + { 0x153b0000, 16, '/'}, + { 0x153c0000, 14, 'm'}, + { 0x15400000, 10, 'r'}, + { 0x15800000, 11, 'b'}, + { 0x15a00000, 12, 'v'}, + { 0x15b00000, 12, 'd'}, + { 0x15c00000, 11, 'y'}, + { 0x15e40000, 14, '('}, + { 0x15f00000, 13, 'u'}, + { 0x15f80000, 14, 'p'}, + { 0x15fc0000, 18, 'k'}, + { 0x15fc4000, 18, 'h'}, + { 0x15fc8000, 17, 'c'}, + { 0x15fe0000, 15, 'e'}, + { 0x16000000, 7, 'V'}, + { 0x18000000, 5, 'I'}, + { 0x20000000, 5, 'G'}, + { 0x28000000, 7, STOP}, + { 0x2a000000, 7, 'w'}, + { 0x2c000000, 6, 'U'}, + { 0x30000000, 4, 'M'}, + { 0x40000000, 4, 'C'}, + { 0x50000000, 4, 'B'}, + { 0x60000000, 5, 'H'}, + { 0x68000000, 5, 'D'}, + { 0x70000000, 4, 'P'}, + { 0x80000000, 5, 'o'}, + { 0x88000000, 5, 'A'}, + { 0x90000000, 4, 'T'}, + { 0xa0000000, 5, 't'}, + { 0xa8000000, 9, '&'}, + { 0xa8800000, 10, '5'}, + { 0xa8c00000, 10, 'Z'}, + { 0xa9000000, 8, '1'}, + { 0xaa000000, 11, '\''}, + { 0xaa200000, 12, ' '}, + { 0xaa300000, 12, '0'}, + { 0xaa400000, 10, '9'}, + { 0xaa800000, 9, 'X'}, + { 0xab000000, 11, '6'}, + { 0xab200000, 12, 'n'}, + { 0xab300000, 12, '8'}, + { 0xab400000, 10, 's'}, + { 0xab800000, 10, '4'}, + { 0xabc00000, 10, '3'}, + { 0xac000000, 6, 'O'}, + { 0xb0000000, 5, 'a'}, + { 0xb8000000, 5, 'F'}, + { 0xc0000000, 4, 'N'}, + { 0xd0000000, 5, 'L'}, + { 0xd8000000, 5, 'R'}, + { 0xe0000000, 7, '2'}, + { 0xe2000000, 7, 'K'}, + { 0xe4000000, 6, 'J'}, + { 0xe8000000, 6, 'E'}, + { 0xec000000, 7, 'Y'}, + { 0xee000000, 7, 'i'}, + { 0xf0000000, 4, 'S'}, + { 0x04000000, 6, ':'}, + { 0x10000000, 4, '!'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 1, STOP}, + { 0x80000000, 1, ESCAPE}, + { 0x80000000, 1, ' '}, + { 0x00000000, 3, ESCAPE}, + { 0x40000000, 2, 'B'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 3, 'm'}, + { 0x20000000, 4, 't'}, + { 0x30000000, 4, ' '}, + { 0x40000000, 3, 'C'}, + { 0x60000000, 5, 'd'}, + { 0x68000000, 8, 'G'}, + { 0x69000000, 10, 'L'}, + { 0x69400000, 11, 'O'}, + { 0x69600000, 13, 'a'}, + { 0x69680000, 13, 'M'}, + { 0x69700000, 13, 'K'}, + { 0x69780000, 13, 'F'}, + { 0x69800000, 9, 'D'}, + { 0x6a000000, 7, 'n'}, + { 0x6c000000, 6, 'r'}, + { 0x70000000, 5, 'v'}, + { 0x78000000, 9, 'B'}, + { 0x78800000, 9, 'e'}, + { 0x79000000, 8, 'l'}, + { 0x7a000000, 11, 'S'}, + { 0x7a400000, 10, STOP}, + { 0x7a800000, 9, 'i'}, + { 0x7b000000, 9, '6'}, + { 0x7b800000, 13, '0'}, + { 0x7b880000, 14, ESCAPE}, + { 0x7b900000, 12, 'R'}, + { 0x7ba00000, 11, 'N'}, + { 0x7bc00000, 10, 'w'}, + { 0x7c000000, 6, 'A'}, + { 0x80000000, 1, 's'}, + { 0x40000000, 2, 'D'}, + { 0xf8000000, 6, ESCAPE}, + { 0x40000000, 2, ' '}, + { 0x80000000, 1, STOP}, + { 0x00000000, 1, '*'}, + { 0x80000000, 4, 'd'}, + { 0x90000000, 5, 'e'}, + { 0x98000000, 6, ESCAPE}, + { 0x00000000, 1, ESCAPE}, + { 0x00000000, 3, ESCAPE}, + { 0x20000000, 3, '.'}, + { 0x40000000, 2, '0'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 5, 'E'}, + { 0x0b4b6000, 19, 'R'}, + { 0x0c000000, 7, 'L'}, + { 0x0e000000, 7, 'C'}, + { 0x10000000, 5, 'D'}, + { 0x18000000, 6, '0'}, + { 0x1c000000, 6, 'I'}, + { 0x20000000, 8, 'P'}, + { 0x21000000, 8, 'Z'}, + { 0x22000000, 7, 'A'}, + { 0x26000000, 7, 'Y'}, + { 0x2c000000, 10, '1'}, + { 0x2c400000, 10, 'W'}, + { 0x2c800000, 9, 'N'}, + { 0x2d000000, 12, ESCAPE}, + { 0x2d400000, 11, 'a'}, + { 0x2d600000, 11, 'M'}, + { 0x2d800000, 9, 'R'}, + { 0x30000000, 4, 'T'}, + { 0x40000000, 4, 'U'}, + { 0x50000000, 6, 'F'}, + { 0x54000000, 6, 'o'}, + { 0x58000000, 7, 'B'}, + { 0x5a000000, 7, '.'}, + { 0x5c000000, 8, '8'}, + { 0x5d000000, 8, 'i'}, + { 0x5f000000, 8, 'H'}, + { 0x60000000, 3, 'S'}, + { 0x80000000, 3, 'G'}, + { 0xa0000000, 3, 'O'}, + { 0xc0000000, 2, ' '}, + { 0x00000000, 5, 'I'}, + { 0x08000000, 5, 'T'}, + { 0x10000000, 5, 'C'}, + { 0x18800000, 9, 'S'}, + { 0x19000000, 11, 't'}, + { 0x19400000, 11, 'F'}, + { 0x19600000, 13, ESCAPE}, + { 0x19800000, 10, 'c'}, + { 0x19c00000, 11, 'E'}, + { 0x19e00000, 11, 'A'}, + { 0x1a000000, 8, 'W'}, + { 0x1b000000, 9, '3'}, + { 0x1b800000, 9, 'B'}, + { 0x20000000, 4, ' '}, + { 0x38000000, 5, '0'}, + { 0x40000000, 2, STOP}, + { 0x80000000, 1, '.'}, + { 0x00000000, 2, '1'}, + { 0x40000000, 3, '4'}, + { 0x60000000, 3, '2'}, + { 0x80000000, 2, '7'}, + { 0xd0000000, 5, '9'}, + { 0xec000000, 6, ' '}, + { 0xf0000000, 5, '6'}, + { 0xf8000000, 6, 'C'}, + { 0xfe400000, 11, ESCAPE}, + { 0xfe600000, 11, 'W'}, + { 0xff000000, 8, 'U'}, + { 0x00000000, 2, '6'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 5, '1'}, + { 0x90000000, 4, 'p'}, + { 0xa0000000, 4, STOP}, + { 0xb0000000, 7, '-'}, + { 0xb2000000, 10, '8'}, + { 0xb2400000, 10, ':'}, + { 0xb2800000, 10, '5'}, + { 0xb2c00000, 10, '2'}, + { 0xb3000000, 8, '4'}, + { 0xb4000000, 7, 's'}, + { 0xb6000000, 8, 't'}, + { 0xb7000000, 10, '/'}, + { 0xb7400000, 13, '.'}, + { 0xb7480000, 14, ESCAPE}, + { 0xb7500000, 12, ','}, + { 0xb7800000, 9, '%'}, + { 0xb8000000, 5, '7'}, + { 0xc0000000, 2, '0'}, + { 0x00000000, 3, '.'}, + { 0x20000000, 4, '2'}, + { 0x30000000, 4, ' '}, + { 0x40000000, 2, STOP}, + { 0x80000000, 6, '5'}, + { 0x84000000, 6, 's'}, + { 0x88000000, 6, '6'}, + { 0x8c000000, 6, ':'}, + { 0x90000000, 5, '8'}, + { 0x98000000, 6, '\''}, + { 0x9c400000, 11, ESCAPE}, + { 0x9c800000, 9, '7'}, + { 0x9d000000, 8, '-'}, + { 0x9e000000, 7, '4'}, + { 0xa0000000, 3, '0'}, + { 0xc0000000, 5, '3'}, + { 0xc8000000, 6, 'X'}, + { 0xcc000000, 6, '9'}, + { 0xd0000000, 4, '/'}, + { 0xe0000000, 3, '1'}, + { 0x00000000, 1, '0'}, + { 0x80000000, 5, ':'}, + { 0x88000000, 8, '.'}, + { 0x89000000, 8, '1'}, + { 0x8a000000, 7, '5'}, + { 0x8d000000, 12, 'n'}, + { 0x8d100000, 12, '6'}, + { 0x8d200000, 11, '3'}, + { 0x8d400000, 13, ESCAPE}, + { 0x8d500000, 12, '\''}, + { 0x8d800000, 9, '7'}, + { 0x8e000000, 7, '/'}, + { 0x90000000, 4, ' '}, + { 0xa0000000, 3, STOP}, + { 0xc0000000, 2, '4'}, + { 0x00000000, 1, ' '}, + { 0x80000000, 8, STOP}, + { 0xc0000000, 4, 'r'}, + { 0xd0000000, 4, '/'}, + { 0xe0000000, 5, '0'}, + { 0xe8000000, 7, ':'}, + { 0xeb000000, 8, '8'}, + { 0xee400000, 12, ESCAPE}, + { 0xee600000, 11, 't'}, + { 0xeeb00000, 12, '5'}, + { 0x00000000, 2, STOP}, + { 0x60000000, 3, ' '}, + { 0x80000000, 6, '9'}, + { 0x84800000, 11, ESCAPE}, + { 0x84a00000, 11, '\''}, + { 0x87000000, 9, 'P'}, + { 0x87800000, 9, '5'}, + { 0x88000000, 5, '8'}, + { 0x90000000, 4, ':'}, + { 0xa0000000, 6, '0'}, + { 0xa4000000, 7, 'M'}, + { 0xa7000000, 8, '-'}, + { 0xa8000000, 5, '.'}, + { 0xb0000000, 4, '/'}, + { 0xc0000000, 2, ' '}, + { 0x00000000, 8, STOP}, + { 0x80000000, 8, ESCAPE}, + { 0x82000000, 7, 't'}, + { 0x8c000000, 6, ':'}, + { 0x9c000000, 6, '/'}, + { 0xa0000000, 3, '0'}, + { 0xc0000000, 2, ' '}, + { 0x00000000, 2, STOP}, + { 0x40000000, 2, ' '}, + { 0x80000000, 2, '0'}, + { 0xc0000000, 6, '-'}, + { 0xc4000000, 8, '3'}, + { 0xc5000000, 8, '7'}, + { 0xc6000000, 7, '4'}, + { 0xc8000000, 5, '.'}, + { 0xd0000000, 7, '8'}, + { 0xe0000000, 3, ':'}, + { 0x00000000, 3, '0'}, + { 0x22000000, 8, ESCAPE}, + { 0x23000000, 8, '4'}, + { 0x24000000, 7, '5'}, + { 0x26000000, 8, '3'}, + { 0x27000000, 8, '2'}, + { 0x28000000, 5, '/'}, + { 0x30000000, 4, '.'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 8, STOP}, + { 0x00000000, 2, '0'}, + { 0x40000000, 3, ':'}, + { 0x68000000, 5, STOP}, + { 0x72000000, 8, '9'}, + { 0x73c00000, 11, ESCAPE}, + { 0x73e00000, 11, 'c'}, + { 0x78000000, 6, '.'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 1, '1'}, + { 0x80000000, 4, '9'}, + { 0x90000000, 6, ' '}, + { 0x94000000, 6, '8'}, + { 0x98000000, 5, '0'}, + { 0xa0000000, 4, '.'}, + { 0xb0000000, 6, '7'}, + { 0xb4000000, 6, '/'}, + { 0xb8000000, 6, '6'}, + { 0xbc000000, 9, ESCAPE}, + { 0xbd000000, 8, '4'}, + { 0xbe000000, 7, ':'}, + { 0xc0000000, 3, STOP}, + { 0x00000000, 2, '0'}, + { 0x58000000, 8, ESCAPE}, + { 0x59000000, 8, 'T'}, + { 0x60000000, 3, '.'}, + { 0x80000000, 1, ' '}, + { 0x80000000, 1, ' '}, + { 0x00000000, 4, ESCAPE}, + { 0x20000000, 3, ':'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 2, STOP}, + { 0x00000000, 4, 'm'}, + { 0x10000000, 5, 'w'}, + { 0x18000000, 6, 'u'}, + { 0x1c000000, 6, STOP}, + { 0x20000000, 3, 'r'}, + { 0x40000000, 3, ' '}, + { 0x60000000, 5, 'T'}, + { 0x68000000, 5, 'c'}, + { 0x70000000, 4, 'g'}, + { 0x80000000, 3, 'l'}, + { 0xa0000000, 8, 'S'}, + { 0xa1000000, 11, 'e'}, + { 0xa1200000, 11, 'B'}, + { 0xa1400000, 11, '1'}, + { 0xa1600000, 12, 'k'}, + { 0xa1700000, 12, 'h'}, + { 0xa2000000, 7, 'v'}, + { 0xa8000000, 5, 't'}, + { 0xb0000000, 5, 'f'}, + { 0xb8000000, 5, 'i'}, + { 0xc0000000, 3, 'n'}, + { 0xe0000000, 5, 's'}, + { 0xe8000000, 6, 'b'}, + { 0xec000000, 7, 'p'}, + { 0xef000000, 12, 'a'}, + { 0xef180000, 13, '\''}, + { 0xef280000, 14, ':'}, + { 0xef2c0000, 15, 'L'}, + { 0xef380000, 15, 'D'}, + { 0xef3a0000, 16, ESCAPE}, + { 0xef3b0000, 16, 'q'}, + { 0xef3c0000, 14, 'z'}, + { 0xef400000, 12, 'y'}, + { 0xef600000, 11, '-'}, + { 0xef800000, 9, '.'}, + { 0xf0000000, 4, 'd'}, + { 0x00000000, 2, 'C'}, + { 0x40000000, 2, 'B'}, + { 0x80000000, 8, STOP}, + { 0x82000000, 8, 'O'}, + { 0x83000000, 11, '.'}, + { 0x83200000, 11, 'w'}, + { 0x83800000, 9, 'A'}, + { 0x84000000, 7, 'y'}, + { 0x87000000, 9, 'S'}, + { 0x87880000, 13, '-'}, + { 0x87a00000, 11, 'h'}, + { 0x87c00000, 11, '*'}, + { 0x87e00000, 11, ' '}, + { 0x88000000, 5, 'l'}, + { 0x90000000, 4, 'i'}, + { 0xa0000000, 3, 'r'}, + { 0xc0000000, 4, 'o'}, + { 0xd0000000, 4, 'u'}, + { 0xe0000000, 4, 'a'}, + { 0xf0000000, 4, 'e'}, + { 0x00000000, 2, 'o'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 3, 'l'}, + { 0xa0000000, 4, 'r'}, + { 0xb0000000, 5, 'i'}, + { 0xb8000000, 5, 'e'}, + { 0xc0000000, 3, 'h'}, + { 0xe0000000, 4, 'a'}, + { 0xf0000000, 6, 'u'}, + { 0xf4000000, 6, 'B'}, + { 0xf8000000, 7, 'y'}, + { 0xfa000000, 9, 'w'}, + { 0xfa800000, 11, '4'}, + { 0xfac00000, 10, '2'}, + { 0xfb000000, 8, '.'}, + { 0xfc000000, 7, '!'}, + { 0xfe000000, 9, STOP}, + { 0xfe900000, 13, '\''}, + { 0xfe9f8000, 18, ESCAPE}, + { 0xfea00000, 11, 'D'}, + { 0xfec00000, 10, 'I'}, + { 0xff000000, 9, 'S'}, + { 0xff800000, 9, 'T'}, + { 0x00000000, 3, 'r'}, + { 0x20000000, 7, '.'}, + { 0x28000000, 10, 'A'}, + { 0x28400000, 10, 'h'}, + { 0x29000000, 9, '-'}, + { 0x29800000, 9, '&'}, + { 0x2a000000, 7, 'J'}, + { 0x2c000000, 6, ' '}, + { 0x30000000, 7, 'y'}, + { 0x32000000, 9, '\''}, + { 0x32880000, 13, 'E'}, + { 0x32900000, 14, ESCAPE}, + { 0x32940000, 14, 'T'}, + { 0x32980000, 13, 'd'}, + { 0x32a00000, 11, 'N'}, + { 0x32c00000, 11, 'V'}, + { 0x34000000, 6, STOP}, + { 0x38000000, 5, 'u'}, + { 0x40000000, 2, 'o'}, + { 0x80000000, 2, 'a'}, + { 0xc0000000, 3, 'e'}, + { 0xe0000000, 3, 'i'}, + { 0x00000000, 2, 'm'}, + { 0x40000000, 4, 'E'}, + { 0x50000000, 6, '4'}, + { 0x54000000, 6, 'y'}, + { 0x58000000, 6, 'u'}, + { 0x5c400000, 10, 'c'}, + { 0x5c880000, 14, 'f'}, + { 0x5c8c0000, 14, 'U'}, + { 0x5c900000, 14, 'N'}, + { 0x5cc00000, 10, 'q'}, + { 0x5d000000, 9, 'g'}, + { 0x5d800000, 10, 'e'}, + { 0x5dc00000, 10, 'C'}, + { 0x5e000000, 7, 's'}, + { 0x60000000, 3, 'v'}, + { 0x80000000, 4, STOP}, + { 0x90000000, 6, 'r'}, + { 0x94000000, 7, 'F'}, + { 0x96000000, 8, 'R'}, + { 0x97000000, 10, 'p'}, + { 0x97480000, 15, ESCAPE}, + { 0x97600000, 11, 't'}, + { 0x97800000, 9, ':'}, + { 0x98000000, 5, 'd'}, + { 0xa0000000, 3, 'n'}, + { 0xc0000000, 6, 'i'}, + { 0xc6000000, 8, '\''}, + { 0xc7000000, 8, ' '}, + { 0xc8000000, 5, 'l'}, + { 0xd0000000, 4, 'x'}, + { 0xe0000000, 3, 'a'}, + { 0x00000000, 2, 'i'}, + { 0x40000000, 4, 'e'}, + { 0x50000000, 7, 'A'}, + { 0x52000000, 8, ' '}, + { 0x53000000, 9, 'h'}, + { 0x54000000, 7, 'O'}, + { 0x56000000, 12, 'M'}, + { 0x56100000, 13, 'y'}, + { 0x56180000, 15, ESCAPE}, + { 0x56300000, 12, 'K'}, + { 0x56400000, 10, STOP}, + { 0x56800000, 9, 'f'}, + { 0x57200000, 11, 'I'}, + { 0x57400000, 11, '.'}, + { 0x57600000, 11, '1'}, + { 0x57800000, 9, 'L'}, + { 0x58000000, 5, 'l'}, + { 0x60000000, 3, 'r'}, + { 0x80000000, 2, 'a'}, + { 0xc0000000, 3, 'u'}, + { 0xe0000000, 3, 'o'}, + { 0x00000000, 8, ':'}, + { 0x01300000, 13, ESCAPE}, + { 0x01400000, 11, 'A'}, + { 0x01600000, 12, 'T'}, + { 0x02000000, 7, 'y'}, + { 0x04000000, 6, 'h'}, + { 0x08000000, 5, 'u'}, + { 0x10000000, 5, 'X'}, + { 0x18000000, 7, 'w'}, + { 0x1a800000, 10, 'P'}, + { 0x1ac00000, 10, ' '}, + { 0x1b000000, 8, 'C'}, + { 0x1c000000, 6, 'l'}, + { 0x20000000, 3, 'M'}, + { 0x40000000, 3, 'a'}, + { 0x60000000, 3, 'o'}, + { 0x80000000, 2, 'r'}, + { 0xc0000000, 3, 'i'}, + { 0xe0000000, 3, 'e'}, + { 0x00000000, 1, 'o'}, + { 0x80000000, 3, 'a'}, + { 0xa0000000, 3, 'i'}, + { 0xc0000000, 3, 'e'}, + { 0xe0000000, 4, 'u'}, + { 0xf0000000, 5, 'R'}, + { 0xfe200000, 14, ESCAPE}, + { 0xfe280000, 13, 'D'}, + { 0xfe300000, 12, 'w'}, + { 0xfe400000, 11, 'L'}, + { 0xfe800000, 9, 'y'}, + { 0xff000000, 9, 'S'}, + { 0xff800000, 10, 'E'}, + { 0x00000000, 1, 'T'}, + { 0x80000000, 3, 's'}, + { 0xa0000000, 3, 'n'}, + { 0xc0000000, 6, 'I'}, + { 0xc4000000, 6, STOP}, + { 0xc8000000, 5, ' '}, + { 0xd0000000, 4, 't'}, + { 0xe0000000, 7, 'd'}, + { 0xe2000000, 7, 'N'}, + { 0xe4000000, 6, 'm'}, + { 0xe8000000, 5, '\''}, + { 0xf0000000, 8, 'a'}, + { 0xf2000000, 7, 'z'}, + { 0xf4000000, 7, '.'}, + { 0xf6800000, 12, 'V'}, + { 0xf6900000, 13, ','}, + { 0xf6980000, 13, 'A'}, + { 0xf6a00000, 11, 'D'}, + { 0xf6c00000, 11, 'f'}, + { 0xf6e00000, 12, 'o'}, + { 0xf6f80000, 14, 'p'}, + { 0xf6000000, 9, 'S'}, + { 0xf7000000, 9, 'c'}, + { 0xf7800000, 11, 'l'}, + { 0xf7a00000, 14, 'B'}, + { 0xf7a40000, 16, ESCAPE}, + { 0xf7a80000, 13, 'g'}, + { 0xf7b00000, 12, 'F'}, + { 0xf7c00000, 13, 'C'}, + { 0xf7c80000, 13, ':'}, + { 0xf7d40000, 14, 'b'}, + { 0xf8000000, 5, 'r'}, + { 0x00000000, 2, 'a'}, + { 0x40000000, 2, 'u'}, + { 0x80000000, 5, ' '}, + { 0x88000000, 6, 'K'}, + { 0x8c000000, 10, 'V'}, + { 0x8c800000, 9, 's'}, + { 0x8d000000, 9, 'F'}, + { 0x8d800000, 12, ESCAPE}, + { 0x8d900000, 12, 'D'}, + { 0x8e000000, 7, STOP}, + { 0x90000000, 4, 'i'}, + { 0xa0000000, 3, 'o'}, + { 0xc0000000, 2, 'e'}, + { 0x00000000, 4, 'a'}, + { 0x10000000, 5, STOP}, + { 0x18000000, 5, 'r'}, + { 0x20000000, 3, 'e'}, + { 0x40000000, 2, 'i'}, + { 0x80000000, 4, 'o'}, + { 0x90800000, 10, '1'}, + { 0x91000000, 12, 'T'}, + { 0x91100000, 12, 'N'}, + { 0x91500000, 13, ESCAPE}, + { 0x91580000, 13, 'l'}, + { 0x91600000, 11, 'u'}, + { 0x91800000, 9, 'O'}, + { 0x92000000, 9, 'h'}, + { 0x92800000, 9, 'w'}, + { 0x93000000, 8, 'G'}, + { 0x98000000, 6, 'n'}, + { 0x9c000000, 6, 'S'}, + { 0xa0000000, 3, ' '}, + { 0xc0000000, 2, 'y'}, + { 0x00000000, 2, 'a'}, + { 0x40000000, 3, 'e'}, + { 0x60000000, 7, 'l'}, + { 0x62000000, 10, 'L'}, + { 0x62a00000, 11, '.'}, + { 0x62c80000, 14, ESCAPE}, + { 0x62d00000, 12, '\''}, + { 0x62e00000, 11, STOP}, + { 0x63000000, 8, 'y'}, + { 0x64000000, 7, 'A'}, + { 0x66000000, 7, ' '}, + { 0x68000000, 5, 'K'}, + { 0x70000000, 4, 'u'}, + { 0x80000000, 2, 'o'}, + { 0xc0000000, 2, 'i'}, + { 0x00000000, 3, 'e'}, + { 0x20000000, 4, 'T'}, + { 0x30000000, 5, STOP}, + { 0x38000000, 14, ':'}, + { 0x380c0000, 15, ESCAPE}, + { 0x38100000, 12, 'Q'}, + { 0x38200000, 11, 'h'}, + { 0x38b00000, 13, 'P'}, + { 0x38b80000, 14, 'M'}, + { 0x38be0000, 15, 'R'}, + { 0x38c00000, 10, ' '}, + { 0x39000000, 8, 'r'}, + { 0x3a000000, 8, 'E'}, + { 0x3b000000, 10, '1'}, + { 0x3b400000, 10, 'I'}, + { 0x3b800000, 9, 'F'}, + { 0x3c000000, 6, 'c'}, + { 0x40000000, 2, 'a'}, + { 0x80000000, 2, 'o'}, + { 0xc0000000, 4, 'y'}, + { 0xd0000000, 4, 'u'}, + { 0xe0000000, 3, 'i'}, + { 0x00000000, 2, 'o'}, + { 0x44000000, 8, 'E'}, + { 0x45200000, 11, '\''}, + { 0x45400000, 12, 'M'}, + { 0x45500000, 13, 'T'}, + { 0x455c0000, 15, ESCAPE}, + { 0x45600000, 11, 'I'}, + { 0x45800000, 10, 'Y'}, + { 0x45c00000, 11, 'A'}, + { 0x45e00000, 12, ' '}, + { 0x46000000, 8, 'F'}, + { 0x47000000, 9, 'B'}, + { 0x47800000, 9, 'H'}, + { 0x48000000, 5, 'u'}, + { 0x50000000, 4, 'a'}, + { 0x60000000, 3, 'i'}, + { 0x80000000, 1, 'e'}, + { 0x00000000, 3, '\''}, + { 0x20000000, 4, 'M'}, + { 0x30000000, 4, 'l'}, + { 0x40000000, 3, 'f'}, + { 0x60400000, 11, 'c'}, + { 0x60680000, 14, ESCAPE}, + { 0x60800000, 9, 'g'}, + { 0x62000000, 8, 'x'}, + { 0x63000000, 8, '.'}, + { 0x64000000, 6, 'S'}, + { 0x68000000, 5, 'r'}, + { 0x70000000, 5, 'd'}, + { 0x7c000000, 6, 'b'}, + { 0x80000000, 5, 'p'}, + { 0x88800000, 10, 'i'}, + { 0x89000000, 8, 't'}, + { 0x8a000000, 11, '2'}, + { 0x8a200000, 12, 'P'}, + { 0x8a400000, 10, 'o'}, + { 0x8a800000, 9, 'a'}, + { 0x8b000000, 8, ' '}, + { 0x8c000000, 6, 'v'}, + { 0x90000000, 4, 'm'}, + { 0xa0000000, 5, 'h'}, + { 0xa8000000, 6, 'w'}, + { 0xac000000, 6, 'U'}, + { 0xb0000000, 5, STOP}, + { 0xb8000000, 7, 'T'}, + { 0xbe000000, 8, 's'}, + { 0xbf000000, 8, 'N'}, + { 0xc0000000, 3, 'u'}, + { 0xe0000000, 3, 'n'}, + { 0x00000000, 3, 'e'}, + { 0x20000000, 3, 'a'}, + { 0x40000000, 2, 'r'}, + { 0x80000000, 2, 'l'}, + { 0xc0000000, 6, 'D'}, + { 0xc4000000, 6, 'u'}, + { 0xc8000000, 8, ' '}, + { 0xc9800000, 9, 'M'}, + { 0xca000000, 8, '2'}, + { 0xcb000000, 9, 'S'}, + { 0xcb800000, 11, ':'}, + { 0xcbc40000, 15, 'C'}, + { 0xcbc60000, 15, ESCAPE}, + { 0xcbc80000, 13, 'I'}, + { 0xcbd00000, 12, 's'}, + { 0xcbe00000, 13, STOP}, + { 0xcbe80000, 13, 'G'}, + { 0xcbf00000, 13, '\''}, + { 0xcbf80000, 14, 'y'}, + { 0xcc000000, 6, 'h'}, + { 0xd0000000, 4, 'i'}, + { 0xe0000000, 3, 'o'}, + { 0x00000000, 3, 'I'}, + { 0x20000000, 3, STOP}, + { 0x40000000, 3, 'V'}, + { 0x60000000, 6, ESCAPE}, + { 0x68000000, 5, 'C'}, + { 0x80000000, 1, 'u'}, + { 0x00000000, 2, 'a'}, + { 0x40000000, 2, 'o'}, + { 0x80000000, 3, 'i'}, + { 0xa4000000, 10, 'I'}, + { 0xa44c0000, 14, '.'}, + { 0xa4500000, 14, '&'}, + { 0xa4540000, 15, ESCAPE}, + { 0xa4580000, 13, 'S'}, + { 0xa4600000, 12, ' '}, + { 0xa4780000, 14, 'T'}, + { 0xa47c0000, 14, '1'}, + { 0xa4800000, 10, 'y'}, + { 0xa4c00000, 10, 'n'}, + { 0xa5000000, 8, 'h'}, + { 0xa6000000, 7, STOP}, + { 0xa8000000, 5, 'E'}, + { 0xb0000000, 4, 'u'}, + { 0xc0000000, 2, 'e'}, + { 0x00000000, 5, 'n'}, + { 0x08000000, 8, '2'}, + { 0x0a000000, 7, 'A'}, + { 0x0c000000, 6, 'w'}, + { 0x10000000, 4, 'a'}, + { 0x20000000, 3, 'o'}, + { 0x40000000, 3, 'p'}, + { 0x60000000, 3, 'u'}, + { 0x80000000, 8, 'O'}, + { 0x81000000, 9, 'y'}, + { 0x81800000, 11, 'B'}, + { 0x81a00000, 14, '5'}, + { 0x81a60000, 16, ESCAPE}, + { 0x81a80000, 14, ':'}, + { 0x81ac0000, 14, '1'}, + { 0x81b00000, 12, 'r'}, + { 0x82000000, 8, 'I'}, + { 0x83000000, 8, ' '}, + { 0x84000000, 7, 'l'}, + { 0x86000000, 9, 'E'}, + { 0x86800000, 11, 'g'}, + { 0x86b00000, 13, '3'}, + { 0x86b80000, 13, '.'}, + { 0x86c00000, 10, 'H'}, + { 0x87000000, 8, STOP}, + { 0x88000000, 5, 'i'}, + { 0x90000000, 4, 'e'}, + { 0xa0000000, 6, 'm'}, + { 0xa4000000, 7, 'q'}, + { 0xa8000000, 5, 'k'}, + { 0xb0000000, 4, 'c'}, + { 0xc0000000, 3, 'h'}, + { 0xe0000000, 3, 't'}, + { 0x00000000, 1, 'h'}, + { 0x80000000, 4, 'e'}, + { 0x90000000, 4, 'r'}, + { 0xa0000000, 3, 'o'}, + { 0xc0000000, 5, 'a'}, + { 0xc8000000, 12, 'T'}, + { 0xc8200000, 12, 'B'}, + { 0xc8300000, 13, 'U'}, + { 0xc8380000, 14, 'A'}, + { 0xc83e0000, 17, ESCAPE}, + { 0xc8400000, 11, 'X'}, + { 0xc9000000, 8, 'y'}, + { 0xca000000, 8, 'M'}, + { 0xcb000000, 9, ';'}, + { 0xcb800000, 9, '4'}, + { 0xcc000000, 6, 'i'}, + { 0xd0000000, 5, 'w'}, + { 0xd8000000, 8, '.'}, + { 0xd9000000, 10, ' '}, + { 0xd9400000, 10, STOP}, + { 0xdc000000, 8, 'u'}, + { 0xdd000000, 8, 'W'}, + { 0xde000000, 7, 'H'}, + { 0xe0000000, 3, 'V'}, + { 0x00000000, 1, 'n'}, + { 0x80000000, 2, 'p'}, + { 0xc0000000, 5, 'R'}, + { 0xc8800000, 9, 'r'}, + { 0xc9000000, 8, ' '}, + { 0xca000000, 7, 'g'}, + { 0xcc000000, 6, 'E'}, + { 0xd0000000, 4, 'K'}, + { 0xe0000000, 5, 'S'}, + { 0xe8000000, 9, '2'}, + { 0xe8800000, 9, 'm'}, + { 0xe9000000, 10, '.'}, + { 0xe9400000, 11, 'c'}, + { 0xe9700000, 14, ESCAPE}, + { 0xe9780000, 14, 't'}, + { 0xea000000, 7, 'T'}, + { 0xec000000, 6, 's'}, + { 0xf0000000, 4, 'l'}, + { 0x00000000, 3, ':'}, + { 0x20000000, 4, 'e'}, + { 0x30000000, 4, 'a'}, + { 0x40000000, 4, '3'}, + { 0x50000000, 7, '\''}, + { 0x52000000, 7, '4'}, + { 0x54000000, 6, 'C'}, + { 0x58000000, 10, 's'}, + { 0x58400000, 10, 'D'}, + { 0x58800000, 10, '.'}, + { 0x58c00000, 11, '8'}, + { 0x58e00000, 14, ESCAPE}, + { 0x58f80000, 13, 'B'}, + { 0x59000000, 8, 'I'}, + { 0x5a000000, 7, 'o'}, + { 0x5c000000, 6, STOP}, + { 0x60000000, 3, 'i'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 5, '.'}, + { 0x08000000, 7, 'u'}, + { 0x0b000000, 12, 'I'}, + { 0x0b100000, 13, ESCAPE}, + { 0x0b800000, 9, 'A'}, + { 0x0c000000, 6, 'y'}, + { 0x10000000, 5, 'O'}, + { 0x18000000, 5, 'r'}, + { 0x20000000, 3, 'h'}, + { 0x40000000, 2, 'o'}, + { 0x80000000, 3, 'a'}, + { 0xa0000000, 3, 'i'}, + { 0xc0000000, 2, 'e'}, + { 0x00000000, 8, STOP}, + { 0x40000000, 3, 'T'}, + { 0x62000000, 8, '-'}, + { 0x63800000, 11, ESCAPE}, + { 0x63a00000, 11, 'i'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 2, 't'}, + { 0x00000000, 3, 'u'}, + { 0x28000000, 6, 'a'}, + { 0x2c000000, 9, 'n'}, + { 0x2ce00000, 11, 's'}, + { 0x2d400000, 10, STOP}, + { 0x2d800000, 9, 'r'}, + { 0x30000000, 4, ' '}, + { 0x40000000, 2, 'e'}, + { 0x80000000, 1, 'o'}, + { 0x00000000, 2, 'a'}, + { 0x40000000, 3, 'i'}, + { 0x68000000, 5, 'u'}, + { 0x70000000, 5, 'e'}, + { 0x78000000, 6, ' '}, + { 0x7e000000, 7, STOP}, + { 0x80000000, 1, 'o'}, + { 0x00000000, 7, 'e'}, + { 0x02000000, 7, '\''}, + { 0x04000000, 10, '!'}, + { 0x04400000, 11, '-'}, + { 0x04600000, 11, 'a'}, + { 0x04800000, 9, ':'}, + { 0x05000000, 8, 'f'}, + { 0x06000000, 7, 'w'}, + { 0x08000000, 6, 'b'}, + { 0x0c000000, 6, STOP}, + { 0x10000000, 4, 'm'}, + { 0x20000000, 3, 'r'}, + { 0x40000000, 4, 'c'}, + { 0x50000000, 10, 'o'}, + { 0x50400000, 10, 'x'}, + { 0x50800000, 12, 'q'}, + { 0x50900000, 13, 'j'}, + { 0x50980000, 16, ESCAPE}, + { 0x509a0000, 15, 'J'}, + { 0x509c0000, 14, '?'}, + { 0x50a00000, 11, '.'}, + { 0x50e00000, 11, ','}, + { 0x51000000, 8, 'h'}, + { 0x52000000, 7, 'u'}, + { 0x54000000, 7, 'z'}, + { 0x56000000, 7, 'v'}, + { 0x58000000, 6, 'p'}, + { 0x5c000000, 6, 'g'}, + { 0x60000000, 3, 't'}, + { 0x80000000, 3, 'l'}, + { 0xa0000000, 4, 's'}, + { 0xb0000000, 5, ' '}, + { 0xb8000000, 5, 'd'}, + { 0xc0000000, 3, 'n'}, + { 0xe0000000, 4, 'y'}, + { 0xf0000000, 5, 'i'}, + { 0xf8000000, 5, 'k'}, + { 0x00000000, 3, 'r'}, + { 0x20000000, 3, 'o'}, + { 0x40000000, 3, 'e'}, + { 0x60000000, 3, 'a'}, + { 0x80000000, 3, 'i'}, + { 0xa0000000, 6, 'h'}, + { 0xa4000000, 7, ':'}, + { 0xa6000000, 11, 'n'}, + { 0xa6200000, 11, 'd'}, + { 0xa6400000, 10, 't'}, + { 0xa6800000, 10, 'j'}, + { 0xa6c00000, 14, ESCAPE}, + { 0xa6c40000, 14, ':'}, + { 0xa6d00000, 12, 'm'}, + { 0xa6e00000, 11, 'w'}, + { 0xa7000000, 8, '\''}, + { 0xa8000000, 5, 's'}, + { 0xb0000000, 4, 'u'}, + { 0xc0000000, 4, 'y'}, + { 0xd0000000, 4, 'l'}, + { 0xe0000000, 5, 'b'}, + { 0xe8000000, 5, STOP}, + { 0xf0000000, 4, ' '}, + { 0x00000000, 2, 'k'}, + { 0x40000000, 3, 'o'}, + { 0x60000000, 6, 'l'}, + { 0x64000000, 6, 'y'}, + { 0x68000000, 6, 's'}, + { 0x6c000000, 6, STOP}, + { 0x70000000, 4, 'r'}, + { 0x80000000, 3, 'h'}, + { 0xa0000000, 5, ' '}, + { 0xa8000000, 7, 'c'}, + { 0xaa000000, 8, ':'}, + { 0xac000000, 11, 'L'}, + { 0xac200000, 11, 'K'}, + { 0xac400000, 12, 'n'}, + { 0xac500000, 12, '\''}, + { 0xac600000, 11, 'A'}, + { 0xac800000, 9, 'D'}, + { 0xad000000, 10, 'G'}, + { 0xad400000, 11, 'q'}, + { 0xad600000, 13, 'B'}, + { 0xad680000, 13, 'I'}, + { 0xad700000, 15, 'M'}, + { 0xad720000, 15, ESCAPE}, + { 0xad7c0000, 16, 'w'}, + { 0xad7d0000, 16, 'Q'}, + { 0xad7e0000, 15, 'F'}, + { 0xadc00000, 11, '.'}, + { 0xade00000, 11, 'C'}, + { 0xae000000, 7, 'u'}, + { 0xb0000000, 5, 'i'}, + { 0xb8000000, 5, 'a'}, + { 0xc0000000, 3, 't'}, + { 0xe0000000, 3, 'e'}, + { 0x00000000, 5, 'o'}, + { 0x08000000, 7, '\''}, + { 0x0a000000, 8, ':'}, + { 0x0b000000, 8, 'h'}, + { 0x0c000000, 6, 'u'}, + { 0x10000000, 4, 'y'}, + { 0x20000000, 3, 'e'}, + { 0x40000000, 4, 'i'}, + { 0x50000000, 5, 'd'}, + { 0x58000000, 6, 'r'}, + { 0x5c000000, 6, 'l'}, + { 0x60000000, 4, 's'}, + { 0x70000000, 8, 'c'}, + { 0x71000000, 9, '?'}, + { 0x71800000, 15, ESCAPE}, + { 0x71840000, 14, 'z'}, + { 0x71880000, 13, 'p'}, + { 0x71c00000, 10, 'm'}, + { 0x72000000, 8, 'n'}, + { 0x73000000, 8, 'w'}, + { 0x74000000, 6, 'v'}, + { 0x78000000, 6, 'g'}, + { 0x7c000000, 9, '!'}, + { 0x7c800000, 9, '-'}, + { 0x7d000000, 9, 'f'}, + { 0x7d800000, 10, ','}, + { 0x7dc00000, 11, 't'}, + { 0x7de00000, 11, 'b'}, + { 0x7e000000, 7, '.'}, + { 0x80000000, 3, STOP}, + { 0xa0000000, 3, 'a'}, + { 0xc0000000, 2, ' '}, + { 0x00000000, 3, 's'}, + { 0x20000000, 4, 't'}, + { 0x30000000, 8, 'g'}, + { 0x31000000, 8, 'f'}, + { 0x32000000, 8, 'x'}, + { 0x33000000, 10, 'P'}, + { 0x33400000, 10, 'B'}, + { 0x33800000, 9, 'h'}, + { 0x34000000, 7, 'i'}, + { 0x36000000, 7, 'p'}, + { 0x38000000, 6, 'm'}, + { 0x3c000000, 7, 'b'}, + { 0x3e000000, 8, 'k'}, + { 0x3f000000, 8, ':'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 5, 'l'}, + { 0x88000000, 6, 'c'}, + { 0x8c000000, 6, 'd'}, + { 0x90000000, 4, 'n'}, + { 0xa0000000, 3, 'r'}, + { 0xc0000000, 4, STOP}, + { 0xd0000000, 7, 'v'}, + { 0xd2000000, 10, ','}, + { 0xd2400000, 11, '4'}, + { 0xd2600000, 11, '?'}, + { 0xd2800000, 9, '.'}, + { 0xd3000000, 8, 'o'}, + { 0xd4000000, 8, '\''}, + { 0xd5000000, 10, 'V'}, + { 0xd5400000, 10, 'z'}, + { 0xd5800000, 16, ESCAPE}, + { 0xd5820000, 15, 'G'}, + { 0xd5840000, 14, 'q'}, + { 0xd5880000, 13, '!'}, + { 0xd5900000, 12, '-'}, + { 0xd5a00000, 11, 'u'}, + { 0xd5c00000, 10, 'j'}, + { 0xd6000000, 7, 'y'}, + { 0xd8000000, 5, 'e'}, + { 0xe0000000, 4, 'a'}, + { 0xf0000000, 4, 'w'}, + { 0x00000000, 1, ' '}, + { 0x80000000, 5, '.'}, + { 0x88000000, 6, STOP}, + { 0x8cb00000, 12, 's'}, + { 0x8d000000, 8, 'y'}, + { 0x8e000000, 10, 'g'}, + { 0x8e400000, 11, '-'}, + { 0x8e600000, 14, ESCAPE}, + { 0x8e640000, 14, 'b'}, + { 0x8e680000, 13, 'k'}, + { 0x8e700000, 12, ':'}, + { 0x8e800000, 9, 'l'}, + { 0x8f000000, 8, 'u'}, + { 0x90000000, 4, 't'}, + { 0xa0000000, 3, 'o'}, + { 0xc0000000, 4, 'a'}, + { 0xd0000000, 4, 'i'}, + { 0xe0000000, 5, 'r'}, + { 0xe8000000, 5, 'f'}, + { 0xf0000000, 4, 'e'}, + { 0x00000000, 2, 'h'}, + { 0x40000000, 3, STOP}, + { 0x60000000, 3, 'e'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 4, 'i'}, + { 0xd0000000, 6, 's'}, + { 0xd5000000, 10, '.'}, + { 0xd5400000, 10, ','}, + { 0xd5800000, 10, '\''}, + { 0xd5c00000, 10, 't'}, + { 0xd6000000, 7, 'b'}, + { 0xd8000000, 7, 'g'}, + { 0xda000000, 7, 'o'}, + { 0xdc000000, 6, 'l'}, + { 0xe0000000, 5, ':'}, + { 0xe8000000, 5, 'r'}, + { 0xf1000000, 11, 'w'}, + { 0xf1220000, 15, 'f'}, + { 0xf1280000, 16, ESCAPE}, + { 0xf12c0000, 14, '?'}, + { 0xf1300000, 12, 'm'}, + { 0xf1400000, 10, 'y'}, + { 0xf1800000, 9, 'd'}, + { 0xf2000000, 7, 'n'}, + { 0xf4000000, 6, 'u'}, + { 0xf8000000, 5, 'a'}, + { 0x00000000, 1, 'e'}, + { 0x80000000, 6, 'b'}, + { 0x84000000, 6, 'u'}, + { 0x88000000, 8, 'w'}, + { 0x89000000, 8, 'd'}, + { 0x8a000000, 8, 'n'}, + { 0x8b000000, 8, 'y'}, + { 0x8c000000, 8, '!'}, + { 0x8d000000, 8, 'l'}, + { 0x8e000000, 9, '\''}, + { 0x8e800000, 10, 's'}, + { 0x8ec00000, 11, 'm'}, + { 0x8ee00000, 14, 'f'}, + { 0x8ee80000, 14, 'c'}, + { 0x8eed0000, 16, 'q'}, + { 0x8eee0000, 16, 'g'}, + { 0x8eef0000, 18, 'h'}, + { 0x8eef4000, 18, ESCAPE}, + { 0x8eef8000, 18, ','}, + { 0x8eefc000, 18, '*'}, + { 0x8ef00000, 12, ':'}, + { 0x8f000000, 8, '.'}, + { 0x90000000, 4, 'i'}, + { 0xa0000000, 3, 'o'}, + { 0xc0000000, 4, 'a'}, + { 0xd0000000, 5, 'r'}, + { 0xd8000000, 5, STOP}, + { 0xe0000000, 4, ' '}, + { 0xf0000000, 4, 't'}, + { 0x00000000, 3, 'c'}, + { 0x20000000, 6, 'p'}, + { 0x24000000, 14, '.'}, + { 0x24040000, 15, ESCAPE}, + { 0x24060000, 15, 'j'}, + { 0x24100000, 13, 'y'}, + { 0x24180000, 13, '/'}, + { 0x24200000, 11, 'h'}, + { 0x24400000, 11, ':'}, + { 0x24600000, 11, 'w'}, + { 0x24800000, 9, '\''}, + { 0x25000000, 8, '-'}, + { 0x26000000, 8, 'x'}, + { 0x27000000, 10, 'u'}, + { 0x27400000, 10, 'i'}, + { 0x27800000, 9, 'q'}, + { 0x28000000, 5, 'a'}, + { 0x30000000, 5, 'v'}, + { 0x38000000, 6, ' '}, + { 0x3c000000, 7, 'z'}, + { 0x3e000000, 7, STOP}, + { 0x40000000, 2, 'n'}, + { 0x80000000, 5, 'r'}, + { 0x88000000, 5, 'd'}, + { 0x90000000, 4, 'o'}, + { 0xa0000000, 4, 'l'}, + { 0xb0000000, 5, 'm'}, + { 0xb8000000, 7, 'b'}, + { 0xba000000, 7, 'k'}, + { 0xbc000000, 6, 'f'}, + { 0xc0000000, 4, 'g'}, + { 0xd0000000, 4, 's'}, + { 0xe0000000, 4, 't'}, + { 0xf0000000, 4, 'e'}, + { 0x00000000, 1, 'y'}, + { 0x83000000, 8, ' '}, + { 0x84000000, 6, 'i'}, + { 0x88000000, 5, 'u'}, + { 0x90000000, 4, 'a'}, + { 0xa0000000, 3, 'e'}, + { 0xc0000000, 2, 'o'}, + { 0x00000000, 2, ' '}, + { 0x40000000, 3, 'i'}, + { 0x60000000, 4, 'y'}, + { 0x70000000, 4, 's'}, + { 0x80000000, 2, 'e'}, + { 0xc0000000, 3, STOP}, + { 0xe0000000, 8, '\''}, + { 0xe1000000, 11, 'b'}, + { 0xe1200000, 11, ','}, + { 0xe1400000, 10, 'h'}, + { 0xe1800000, 9, 'w'}, + { 0xe2000000, 7, ':'}, + { 0xe4000000, 6, 'a'}, + { 0xe8000000, 6, 'l'}, + { 0xec000000, 7, 'k'}, + { 0xee000000, 9, 'o'}, + { 0xee800000, 15, 'p'}, + { 0xee880000, 14, '-'}, + { 0xee8c0000, 16, ESCAPE}, + { 0xee8d0000, 16, 'r'}, + { 0xee900000, 13, 'u'}, + { 0xeea00000, 12, '?'}, + { 0xeeb00000, 13, 'd'}, + { 0xeeb80000, 13, 't'}, + { 0xeec00000, 12, 'm'}, + { 0xeed00000, 12, '!'}, + { 0xeee00000, 11, 'n'}, + { 0xef000000, 8, '.'}, + { 0xf0000000, 4, 'f'}, + { 0x00000000, 3, 'l'}, + { 0x20000000, 5, 'u'}, + { 0x28000000, 6, 't'}, + { 0x2c000000, 6, 'm'}, + { 0x30000000, 4, 'y'}, + { 0x40000000, 2, 'e'}, + { 0x80000000, 4, STOP}, + { 0x90000000, 4, 'd'}, + { 0xa0000000, 3, 'a'}, + { 0xc0000000, 4, 'o'}, + { 0xd0000000, 5, 's'}, + { 0xd8000000, 8, 'f'}, + { 0xd9000000, 11, 'z'}, + { 0xd9200000, 12, 'h'}, + { 0xd9400000, 10, '.'}, + { 0xd9800000, 9, 'v'}, + { 0xda000000, 7, 'k'}, + { 0xdc000000, 8, 'b'}, + { 0xdd000000, 9, ':'}, + { 0xdd800000, 10, 'w'}, + { 0xddc00000, 13, 'g'}, + { 0xddc80000, 13, ','}, + { 0xddd00000, 14, 'r'}, + { 0xddd40000, 14, 'n'}, + { 0xddd80000, 15, '!'}, + { 0xddda0000, 18, ESCAPE}, + { 0xdddb0000, 16, '?'}, + { 0xdddc0000, 14, '-'}, + { 0xdde00000, 11, 'p'}, + { 0xde000000, 8, '\''}, + { 0xdf000000, 8, 'c'}, + { 0xe0000000, 4, 'i'}, + { 0xf0000000, 4, ' '}, + { 0x00000000, 4, 'i'}, + { 0x10000000, 4, STOP}, + { 0x20000000, 3, 'm'}, + { 0x40000000, 4, 'y'}, + { 0x50000000, 5, 'b'}, + { 0x58000000, 7, 'l'}, + { 0x5a000000, 8, ':'}, + { 0x5b000000, 9, 'h'}, + { 0x5b800000, 13, ESCAPE}, + { 0x5b880000, 13, 'd'}, + { 0x5b900000, 12, 'k'}, + { 0x5ba00000, 11, '.'}, + { 0x5bc00000, 10, '\''}, + { 0x5c000000, 7, 'f'}, + { 0x5e000000, 8, '4'}, + { 0x5f000000, 9, 'w'}, + { 0x5f800000, 10, 'r'}, + { 0x5fc00000, 10, 'u'}, + { 0x60000000, 3, ' '}, + { 0x80000000, 2, 'e'}, + { 0xc0000000, 5, 'o'}, + { 0xc8000000, 6, 'n'}, + { 0xcc000000, 6, 's'}, + { 0xd0000000, 4, 'p'}, + { 0xe0000000, 3, 'a'}, + { 0x00000000, 3, 'i'}, + { 0x20000000, 7, 'r'}, + { 0x22000000, 8, 'v'}, + { 0x23000000, 10, '!'}, + { 0x23400000, 11, 'z'}, + { 0x23600000, 12, 'B'}, + { 0x23800000, 9, ','}, + { 0x24000000, 8, '-'}, + { 0x25000000, 8, '.'}, + { 0x26000000, 7, 'f'}, + { 0x28000000, 6, 'y'}, + { 0x2c000000, 7, 'u'}, + { 0x2e000000, 7, 'j'}, + { 0x30000000, 4, 'a'}, + { 0x40000000, 4, 's'}, + { 0x50000000, 6, '\''}, + { 0x54000000, 6, 'k'}, + { 0x58000000, 8, 'l'}, + { 0x59000000, 12, 'w'}, + { 0x59100000, 15, ';'}, + { 0x59120000, 16, '/'}, + { 0x59130000, 16, ESCAPE}, + { 0x59140000, 14, 'p'}, + { 0x59180000, 13, 'q'}, + { 0x59200000, 11, '?'}, + { 0x59400000, 11, 'h'}, + { 0x59600000, 11, 'b'}, + { 0x59800000, 9, 'm'}, + { 0x5a000000, 8, 'x'}, + { 0x5b000000, 8, ':'}, + { 0x5c000000, 6, 'o'}, + { 0x60000000, 4, 'e'}, + { 0x70000000, 5, 'c'}, + { 0x78000000, 5, 'n'}, + { 0x80000000, 3, 'g'}, + { 0xa0000000, 3, ' '}, + { 0xc0000000, 3, 'd'}, + { 0xe0000000, 4, STOP}, + { 0xf0000000, 4, 't'}, + { 0x00000000, 2, 'r'}, + { 0x40000000, 4, 'f'}, + { 0x50000000, 4, ' '}, + { 0x60000000, 4, 'w'}, + { 0x70000000, 6, 'a'}, + { 0x74000000, 6, 'b'}, + { 0x78000000, 5, 't'}, + { 0x80000000, 4, 'o'}, + { 0x90000000, 5, 'c'}, + { 0x98000000, 6, 'y'}, + { 0x9c000000, 6, STOP}, + { 0xa0000000, 5, 'p'}, + { 0xa8000000, 5, 'd'}, + { 0xb0000000, 4, 'u'}, + { 0xc0000000, 3, 'n'}, + { 0xe0000000, 5, 'm'}, + { 0xe8000000, 6, 's'}, + { 0xec000000, 6, 'k'}, + { 0xf0000000, 5, 'l'}, + { 0xf8140000, 16, 'S'}, + { 0xf8158000, 18, ESCAPE}, + { 0xf815c000, 18, 'q'}, + { 0xf8160000, 15, ')'}, + { 0xf8180000, 14, ','}, + { 0xf81c0000, 14, 'G'}, + { 0xf8200000, 11, '?'}, + { 0xf8400000, 11, ':'}, + { 0xf8600000, 12, '.'}, + { 0xf8700000, 12, '-'}, + { 0xf8800000, 9, 'h'}, + { 0xf9000000, 9, '!'}, + { 0xf9800000, 10, '\''}, + { 0xf9c00000, 11, 'z'}, + { 0xf9e00000, 11, 'x'}, + { 0xfa000000, 7, 'v'}, + { 0xfc000000, 7, 'g'}, + { 0xfe000000, 9, 'e'}, + { 0xfe800000, 9, 'j'}, + { 0xff000000, 8, 'i'}, + { 0x00000000, 2, 'e'}, + { 0x40000000, 3, STOP}, + { 0x60000000, 4, 's'}, + { 0x70000000, 5, 'l'}, + { 0x78000000, 5, 'r'}, + { 0x80000000, 3, 'i'}, + { 0xa0000000, 4, ' '}, + { 0xb0000000, 5, 'h'}, + { 0xb8000000, 6, 't'}, + { 0xbc000000, 6, '\''}, + { 0xc0000000, 3, 'o'}, + { 0xe0000000, 4, 'p'}, + { 0xf0000000, 5, 'a'}, + { 0xf8000000, 7, 'd'}, + { 0xfa000000, 7, 'm'}, + { 0xfc000000, 7, 'y'}, + { 0xfe000000, 11, 'b'}, + { 0xfe200000, 15, ESCAPE}, + { 0xfe220000, 15, 'c'}, + { 0xfe280000, 13, 'k'}, + { 0xfe300000, 12, 'n'}, + { 0xfe400000, 11, '-'}, + { 0xfe600000, 11, '.'}, + { 0xfe800000, 9, ':'}, + { 0xff000000, 10, 'w'}, + { 0xff400000, 10, 'u'}, + { 0xff800000, 9, '!'}, + { 0x00000000, 4, ESCAPE}, + { 0x10000000, 4, '\''}, + { 0x40000000, 8, STOP}, + { 0x80000000, 1, 'u'}, + { 0x00000000, 3, ' '}, + { 0x20000000, 7, '\''}, + { 0x22000000, 8, 'f'}, + { 0x23000000, 8, '.'}, + { 0x24000000, 6, 'k'}, + { 0x28000000, 6, 'r'}, + { 0x2c000000, 6, 'm'}, + { 0x30000000, 4, 'y'}, + { 0x40000000, 4, 'd'}, + { 0x50000000, 9, ','}, + { 0x50800000, 9, 'p'}, + { 0x51000000, 8, 'b'}, + { 0x52000000, 7, 'c'}, + { 0x54000000, 6, 'u'}, + { 0x58000000, 5, 'n'}, + { 0x60000000, 3, 'i'}, + { 0x80000000, 4, 's'}, + { 0x90000000, 4, 't'}, + { 0xa0000000, 3, 'e'}, + { 0xc0000000, 4, 'a'}, + { 0xd0000000, 4, STOP}, + { 0xe0000000, 8, 'v'}, + { 0xe1000000, 9, 'w'}, + { 0xe1800000, 11, '-'}, + { 0xe1a00000, 12, 'h'}, + { 0xe1b00000, 13, 'G'}, + { 0xe1bc0000, 16, '!'}, + { 0xe1bd0000, 18, '*'}, + { 0xe1bd4000, 19, ESCAPE}, + { 0xe1bde000, 19, '/'}, + { 0xe1c00000, 10, 'j'}, + { 0xe2000000, 7, ':'}, + { 0xe4000000, 6, 'g'}, + { 0xe8000000, 5, 'l'}, + { 0xf0000000, 4, 'o'}, + { 0x00000000, 4, 's'}, + { 0x10000000, 7, '.'}, + { 0x12000000, 7, '!'}, + { 0x14000000, 8, ','}, + { 0x15000000, 8, 'f'}, + { 0x16000000, 7, 'y'}, + { 0x18000000, 5, ';'}, + { 0x20000000, 4, 'i'}, + { 0x30000000, 4, 'h'}, + { 0x40000000, 7, 'p'}, + { 0x42000000, 11, '?'}, + { 0x42200000, 11, 'w'}, + { 0x42400000, 10, 'm'}, + { 0x42800000, 9, 'k'}, + { 0x43000000, 8, '\''}, + { 0x44000000, 6, 'o'}, + { 0x48000000, 7, 'a'}, + { 0x4a000000, 9, 'd'}, + { 0x4a800000, 11, 'g'}, + { 0x4aa00000, 12, 'q'}, + { 0x4ab00000, 15, ESCAPE}, + { 0x4ab80000, 14, '-'}, + { 0x4ac00000, 10, 'b'}, + { 0x4b000000, 8, 'n'}, + { 0x4c000000, 6, 'c'}, + { 0x50000000, 5, 'e'}, + { 0x58000000, 6, ':'}, + { 0x5c000000, 8, 'l'}, + { 0x5d000000, 8, 'r'}, + { 0x5e000000, 7, 'u'}, + { 0x60000000, 3, 't'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 2, STOP}, + { 0x00000000, 3, 'i'}, + { 0x20000000, 4, 'a'}, + { 0x30000000, 7, '\''}, + { 0x32000000, 8, 'w'}, + { 0x33000000, 9, '?'}, + { 0x33800000, 10, 'z'}, + { 0x33d00000, 12, '-'}, + { 0x33e00000, 11, ','}, + { 0x34000000, 7, ':'}, + { 0x36000000, 8, '!'}, + { 0x37000000, 9, 'n'}, + { 0x37800000, 10, 'd'}, + { 0x37e00000, 12, ')'}, + { 0x37f80000, 14, ESCAPE}, + { 0x37fc0000, 15, 'S'}, + { 0x37fe0000, 17, 'k'}, + { 0x37fe8000, 18, 'j'}, + { 0x38000000, 5, 't'}, + { 0x40000000, 4, 'r'}, + { 0x50000000, 5, 'y'}, + { 0x58000000, 6, 'm'}, + { 0x5c000000, 8, '.'}, + { 0x5d000000, 8, 'b'}, + { 0x5e000000, 8, 'E'}, + { 0x5f000000, 8, 'f'}, + { 0x60000000, 3, STOP}, + { 0x80000000, 3, ' '}, + { 0xa0000000, 4, 's'}, + { 0xb0000000, 4, 'o'}, + { 0xc0000000, 5, 'u'}, + { 0xc8000000, 6, 'c'}, + { 0xcc000000, 6, 'l'}, + { 0xd0000000, 4, 'e'}, + { 0xe0000000, 3, 'h'}, + { 0x00000000, 2, 'r'}, + { 0x40000000, 4, 'e'}, + { 0x50000000, 4, 'm'}, + { 0x60000000, 5, 'c'}, + { 0x68000000, 5, 'g'}, + { 0x70000000, 5, 'b'}, + { 0x78000000, 6, STOP}, + { 0x7c000000, 7, 'z'}, + { 0x7e000000, 9, 'k'}, + { 0x7e800000, 10, 'f'}, + { 0x7ec00000, 10, ','}, + { 0x7f000000, 8, '\''}, + { 0x80000000, 3, 's'}, + { 0xa0000000, 5, 'p'}, + { 0xa8000000, 5, 'i'}, + { 0xb0000000, 5, 'l'}, + { 0xb8000000, 6, 'y'}, + { 0xbc000000, 7, ' '}, + { 0xbe000000, 8, '-'}, + { 0xbf000000, 10, 'w'}, + { 0xbf400000, 12, 'v'}, + { 0xbf500000, 12, 'x'}, + { 0xbf600000, 13, 'j'}, + { 0xbf6e0000, 17, '?'}, + { 0xbf6f0000, 16, 'h'}, + { 0xbf700000, 12, 'o'}, + { 0xc0000000, 4, 't'}, + { 0xd0000000, 5, 'd'}, + { 0xd8000000, 5, 'a'}, + { 0xe0000000, 3, 'n'}, + { 0x00000000, 5, ' '}, + { 0x08000000, 7, 'y'}, + { 0x0a000000, 10, ESCAPE}, + { 0x0a400000, 10, '.'}, + { 0x0a800000, 9, 'r'}, + { 0x0b000000, 8, 's'}, + { 0x0c000000, 6, STOP}, + { 0x10000000, 4, 'o'}, + { 0x20000000, 3, 'a'}, + { 0x40000000, 2, 'i'}, + { 0x80000000, 1, 'e'}, + { 0x00000000, 1, 's'}, + { 0x80000000, 3, ' '}, + { 0xa0000000, 5, 'a'}, + { 0xa8000000, 8, 'm'}, + { 0xa9500000, 13, '.'}, + { 0xa9580000, 13, ':'}, + { 0xa9800000, 9, 'b'}, + { 0xaa000000, 9, 'k'}, + { 0xaa800000, 9, 'r'}, + { 0xab000000, 8, 'd'}, + { 0xac000000, 11, 'c'}, + { 0xac200000, 11, 'f'}, + { 0xac400000, 10, ','}, + { 0xac800000, 12, 't'}, + { 0xac900000, 16, ESCAPE}, + { 0xac920000, 15, '?'}, + { 0xac940000, 14, '\''}, + { 0xac980000, 13, 'q'}, + { 0xaca00000, 11, 'p'}, + { 0xacc00000, 10, 'h'}, + { 0xad000000, 8, 'l'}, + { 0xae000000, 7, 'y'}, + { 0xb0000000, 4, 'i'}, + { 0xc0000000, 3, STOP}, + { 0xe0000000, 4, 'o'}, + { 0xf0000000, 5, 'n'}, + { 0xf8000000, 5, 'e'}, + { 0x00000000, 2, 'p'}, + { 0x40000000, 5, 'o'}, + { 0x48000000, 6, 'e'}, + { 0x4c000000, 7, 'u'}, + { 0x4e000000, 7, 'f'}, + { 0x50000000, 5, 'c'}, + { 0x58000000, 6, 'y'}, + { 0x5c800000, 9, 'a'}, + { 0x5d000000, 12, ESCAPE}, + { 0x5d200000, 11, 'x'}, + { 0x5d400000, 10, '\''}, + { 0x5e000000, 7, ','}, + { 0x60000000, 4, STOP}, + { 0x70000000, 5, 'i'}, + { 0x78000000, 5, 'm'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 2, 't'}, + { 0x00000000, 1, ' '}, + { 0x80000000, 8, 'i'}, + { 0x81000000, 9, '?'}, + { 0x81800000, 9, 'f'}, + { 0x82000000, 7, 'n'}, + { 0x84000000, 7, 't'}, + { 0x86000000, 8, ','}, + { 0x87000000, 8, 'p'}, + { 0x88000000, 5, 'o'}, + { 0x90000000, 5, 's'}, + { 0x98000000, 6, 'd'}, + { 0x9c000000, 8, 'm'}, + { 0x9d000000, 9, 'r'}, + { 0x9d800000, 9, 'g'}, + { 0x9e000000, 8, 'c'}, + { 0x9f000000, 10, 'z'}, + { 0x9f500000, 13, 'v'}, + { 0x9f5c0000, 15, 'h'}, + { 0x9f5e0000, 17, ESCAPE}, + { 0x9f600000, 12, '!'}, + { 0x9f700000, 12, 'k'}, + { 0x9f800000, 10, '-'}, + { 0x9fc00000, 10, 'T'}, + { 0xa0000000, 5, 'a'}, + { 0xa8000000, 7, '\''}, + { 0xaa000000, 7, 'b'}, + { 0xac000000, 8, 'w'}, + { 0xad000000, 8, 'e'}, + { 0xae000000, 7, '.'}, + { 0xb0000000, 5, 'l'}, + { 0xb8000000, 5, ':'}, + { 0xc0000000, 2, STOP}, + { 0x00000000, 2, 'z'}, + { 0x40000000, 2, STOP}, + { 0x80000000, 4, 'y'}, + { 0x90000000, 4, 'e'}, + { 0xa0000000, 3, 'i'}, + { 0xd0000000, 4, ' '}, + { 0xe0000000, 4, 'l'}, + { 0xf0000000, 5, 'a'}, + { 0xf8000000, 6, 'o'}, + { 0xfc000000, 8, 'm'}, + { 0xfd000000, 8, ':'}, + { 0xfe800000, 11, 'u'}, + { 0xfea00000, 14, ESCAPE}, + { 0xfea80000, 14, 'h'}, + { 0xff000000, 8, 'c'}, + { 0x00000000, 5, 'H'}, + { 0x08000000, 6, 'O'}, + { 0x0c000000, 7, 'K'}, + { 0x0e000000, 8, '2'}, + { 0x0f000000, 9, 'Q'}, + { 0x0f800000, 10, '9'}, + { 0x0fc00000, 10, '8'}, + { 0x10000000, 4, 'J'}, + { 0x20000000, 5, 'I'}, + { 0x28000000, 5, 'R'}, + { 0x30000000, 4, 'D'}, + { 0x40000000, 3, 'A'}, + { 0x60000000, 8, 'p'}, + { 0x61000000, 8, 'b'}, + { 0x62000000, 8, 'U'}, + { 0x63000000, 8, '('}, + { 0x64000000, 6, '['}, + { 0x68000000, 5, 'F'}, + { 0x70000000, 5, '.'}, + { 0x78000000, 5, 'W'}, + { 0x80000000, 3, 'C'}, + { 0xa0000000, 4, 'S'}, + { 0xb0000000, 8, '1'}, + { 0xb1000000, 9, '3'}, + { 0xb1800000, 10, '6'}, + { 0xb1c00000, 10, '5'}, + { 0xb2000000, 10, 'Z'}, + { 0xb2400000, 10, '7'}, + { 0xb2800000, 10, '4'}, + { 0xb2c00000, 14, 't'}, + { 0xb2c40000, 15, 'a'}, + { 0xb2c70000, 17, ESCAPE}, + { 0xb2c78000, 17, 'm'}, + { 0xb2c80000, 13, 'w'}, + { 0xb2d00000, 13, '\''}, + { 0xb2d80000, 13, '"'}, + { 0xb2e00000, 12, 'X'}, + { 0xb2f00000, 12, ' '}, + { 0xb3000000, 8, 'V'}, + { 0xb4000000, 6, 'L'}, + { 0xb8000000, 5, 'M'}, + { 0xc0000000, 5, 'B'}, + { 0xc8000000, 5, 'P'}, + { 0xd0000000, 7, 'Y'}, + { 0xd2000000, 7, 'G'}, + { 0xd4000000, 6, 'E'}, + { 0xd8000000, 5, 'N'}, + { 0xe0000000, 3, 'T'}, + { 0x00000000, 6, 'A'}, + { 0x04000000, 8, 'k'}, + { 0x05000000, 8, 'O'}, + { 0x06000000, 7, 'v'}, + { 0x08000000, 7, 'G'}, + { 0x0a000000, 7, 'N'}, + { 0x0c000000, 6, 'M'}, + { 0x10000000, 4, 'o'}, + { 0x20000000, 4, 's'}, + { 0x30000000, 5, 'd'}, + { 0x38000000, 10, '3'}, + { 0x38400000, 10, '8'}, + { 0x38800000, 10, '6'}, + { 0x38c00000, 11, '0'}, + { 0x38e40000, 16, '+'}, + { 0x38e50000, 19, '/'}, + { 0x38e52000, 19, '?'}, + { 0x38e58000, 17, 'x'}, + { 0x38e60000, 15, '$'}, + { 0x38e80000, 13, '`'}, + { 0x38f00000, 12, 'X'}, + { 0x39000000, 9, 'q'}, + { 0x39800000, 9, 'U'}, + { 0x3a000000, 7, 'y'}, + { 0x3c000000, 6, 'e'}, + { 0x40000000, 3, 'a'}, + { 0x60000000, 5, '['}, + { 0x68000000, 8, '-'}, + { 0x69000000, 9, 'V'}, + { 0x69800000, 11, '\''}, + { 0x69a00000, 11, '9'}, + { 0x69c00000, 10, '5'}, + { 0x6a000000, 7, 'H'}, + { 0x6c000000, 9, 'Y'}, + { 0x6c800000, 9, ' '}, + { 0x6d000000, 8, '1'}, + { 0x6e000000, 7, 'L'}, + { 0x70000000, 6, 'B'}, + { 0x74000000, 6, 'C'}, + { 0x78000000, 5, 'p'}, + { 0x80000000, 3, 't'}, + { 0xa0000000, 6, 'T'}, + { 0xa4000000, 7, 'J'}, + { 0xa6000000, 7, 'F'}, + { 0xa8000000, 5, 'b'}, + { 0xb0000000, 10, '('}, + { 0xb0400000, 11, 'Z'}, + { 0xb0600000, 13, ESCAPE}, + { 0xb0680000, 13, '.'}, + { 0xb0700000, 13, '&'}, + { 0xb0780000, 14, '"'}, + { 0xb07c0000, 14, 'z'}, + { 0xb0800000, 9, '2'}, + { 0xb1000000, 8, 'K'}, + { 0xb2000000, 7, 'R'}, + { 0xb4000000, 6, 'S'}, + { 0xb8000000, 6, 'g'}, + { 0xbc000000, 7, 'u'}, + { 0xbe000000, 8, 'j'}, + { 0xbf000000, 10, STOP}, + { 0xbf800000, 10, '7'}, + { 0xbfc00000, 11, '4'}, + { 0xbfe00000, 11, 'Q'}, + { 0xc0000000, 6, 'r'}, + { 0xc4000000, 7, 'D'}, + { 0xc6000000, 7, 'W'}, + { 0xc8000000, 5, 'c'}, + { 0xd0000000, 5, 'h'}, + { 0xd8000000, 6, 'n'}, + { 0xdc000000, 6, 'l'}, + { 0xe0000000, 5, 'w'}, + { 0xe8000000, 5, 'i'}, + { 0xf0000000, 8, 'I'}, + { 0xf1000000, 8, 'E'}, + { 0xf2000000, 7, 'P'}, + { 0xf4000000, 6, 'm'}, + { 0xf8000000, 5, 'f'}, + { 0x00000000, 4, ':'}, + { 0x10000000, 8, ')'}, + { 0x11000000, 9, '\''}, + { 0x11800000, 11, ESCAPE}, + { 0x11a00000, 11, ']'}, + { 0x11c00000, 10, '?'}, + { 0x12000000, 7, '"'}, + { 0x14000000, 7, '/'}, + { 0x16000000, 7, '!'}, + { 0x20000000, 3, '.'}, + { 0x40000000, 2, STOP}, + { 0x80000000, 1, ' '}, + { 0x00000000, 4, 'p'}, + { 0x10000000, 5, 'f'}, + { 0x18000000, 5, 'W'}, + { 0x20000000, 3, '.'}, + { 0x40000000, 5, 'S'}, + { 0x48000000, 6, 'J'}, + { 0x4c000000, 7, 'E'}, + { 0x4e000000, 7, 'D'}, + { 0x50000000, 4, 'B'}, + { 0x60000000, 5, 't'}, + { 0x68000000, 5, 'C'}, + { 0x70000000, 4, 'T'}, + { 0x80000000, 4, 'i'}, + { 0x90000000, 6, 'm'}, + { 0x94000000, 7, 'w'}, + { 0x96000000, 7, 'g'}, + { 0x98000000, 7, 'b'}, + { 0x9a000000, 7, 'L'}, + { 0x9e000000, 8, 'P'}, + { 0x9f000000, 10, ESCAPE}, + { 0x9f400000, 10, 'a'}, + { 0xa0000000, 5, STOP}, + { 0xa8000000, 6, 'n'}, + { 0xac000000, 6, 'I'}, + { 0xb0000000, 7, 'c'}, + { 0xb2000000, 7, 'H'}, + { 0xb4000000, 8, 'r'}, + { 0xb5000000, 9, 'Y'}, + { 0xb5800000, 9, 'Q'}, + { 0xb6800000, 9, 'A'}, + { 0xb7000000, 8, 'K'}, + { 0xb8000000, 5, ','}, + { 0xc0000000, 2, ' '}, + { 0x80000000, 1, ESCAPE}, + { 0x00000000, 1, '1'}, + { 0x80000000, 3, '4'}, + { 0xa0000000, 7, ESCAPE}, + { 0xa4000000, 6, '5'}, + { 0xb0000000, 4, '2'}, + { 0xc0000000, 2, '3'}, + { 0x00000000, 2, ESCAPE}, + { 0x80000000, 1, ' '}, + { 0x00000000, 4, 'E'}, + { 0x16000000, 9, ESCAPE}, + { 0x18000000, 6, 'A'}, + { 0x20000000, 3, 'B'}, + { 0x40000000, 2, 'w'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 4, 'l'}, + { 0x10000000, 6, 'n'}, + { 0x14000000, 6, '.'}, + { 0x18000000, 6, 'C'}, + { 0x1c000000, 8, 'S'}, + { 0x1d000000, 9, 'f'}, + { 0x1d800000, 9, 'g'}, + { 0x1e000000, 10, 'o'}, + { 0x1e400000, 10, 'K'}, + { 0x1e840000, 14, '0'}, + { 0x1e880000, 13, 'V'}, + { 0x1e900000, 12, 'W'}, + { 0x1ea00000, 11, '?'}, + { 0x1ec00000, 10, 'a'}, + { 0x1f000000, 8, 'p'}, + { 0x20000000, 3, 't'}, + { 0x40000000, 3, ' '}, + { 0x60000000, 6, 'B'}, + { 0x64000000, 9, 'F'}, + { 0x64800000, 9, 'h'}, + { 0x65000000, 8, 'D'}, + { 0x66000000, 11, 'E'}, + { 0x66200000, 11, '7'}, + { 0x66400000, 10, 'u'}, + { 0x66800000, 9, 'H'}, + { 0x67000000, 9, 'N'}, + { 0x67800000, 15, '-'}, + { 0x67820000, 15, '\''}, + { 0x67840000, 14, 'Y'}, + { 0x67880000, 13, '9'}, + { 0x67900000, 12, ':'}, + { 0x67a00000, 12, '!'}, + { 0x67b00000, 14, ')'}, + { 0x67b40000, 16, ESCAPE}, + { 0x67b50000, 16, '1'}, + { 0x67b60000, 15, 'z'}, + { 0x67b80000, 13, 'y'}, + { 0x67c00000, 10, 'O'}, + { 0x68000000, 5, 'r'}, + { 0x70000000, 7, 'd'}, + { 0x72000000, 11, 'P'}, + { 0x72200000, 13, '8'}, + { 0x72280000, 13, '5'}, + { 0x72300000, 12, 'J'}, + { 0x72400000, 10, 'I'}, + { 0x72800000, 9, 'R'}, + { 0x73000000, 9, STOP}, + { 0x73800000, 9, 'T'}, + { 0x74000000, 6, 'A'}, + { 0x78000000, 7, 'v'}, + { 0x7a000000, 10, 'w'}, + { 0x7a400000, 10, 'b'}, + { 0x7a800000, 9, 'G'}, + { 0x7b000000, 8, 'i'}, + { 0x7c000000, 8, 'c'}, + { 0x7d000000, 8, 'm'}, + { 0x7e000000, 13, '6'}, + { 0x7e080000, 14, 'j'}, + { 0x7e0c0000, 14, 'Q'}, + { 0x7e100000, 12, 'q'}, + { 0x7e220000, 15, 'U'}, + { 0x7e240000, 15, '4'}, + { 0x7e260000, 15, '3'}, + { 0x7e280000, 13, 'k'}, + { 0x7e300000, 12, 'M'}, + { 0x7e400000, 10, 'e'}, + { 0x7e800000, 9, 'L'}, + { 0x7f000000, 8, ','}, + { 0x80000000, 1, 's'}, + { 0x00000000, 3, 'P'}, + { 0x20000000, 8, 'm'}, + { 0x21000000, 9, 'd'}, + { 0x21800000, 10, 'l'}, + { 0x21c00000, 10, '9'}, + { 0x22000000, 8, 'o'}, + { 0x23000000, 8, 'E'}, + { 0x24000000, 6, 'a'}, + { 0x28000000, 6, 'S'}, + { 0x2c000000, 7, 'D'}, + { 0x2e000000, 8, 'W'}, + { 0x2f000000, 10, '4'}, + { 0x2f400000, 10, 'I'}, + { 0x2f800000, 9, 'U'}, + { 0x30000000, 6, 'R'}, + { 0x34000000, 9, 'F'}, + { 0x34800000, 10, '3'}, + { 0x34e00000, 11, 'V'}, + { 0x35000000, 9, 'f'}, + { 0x35a00000, 13, ESCAPE}, + { 0x35a80000, 13, 'u'}, + { 0x35b00000, 12, 'O'}, + { 0x35c00000, 10, 'h'}, + { 0x36000000, 7, 'K'}, + { 0x38000000, 5, 'T'}, + { 0x40000000, 2, '1'}, + { 0x80000000, 4, '2'}, + { 0x90000000, 5, 'p'}, + { 0x98000000, 7, 'v'}, + { 0x9a000000, 7, 's'}, + { 0x9c000000, 6, 'e'}, + { 0xa0000000, 3, 't'}, + { 0xc0000000, 7, 'b'}, + { 0xc2000000, 9, 'w'}, + { 0xc2800000, 9, 'B'}, + { 0xc3000000, 8, 'g'}, + { 0xc4000000, 7, 'G'}, + { 0xc6000000, 7, '8'}, + { 0xc8000000, 7, 'M'}, + { 0xca000000, 7, 'H'}, + { 0xcc000000, 7, 'C'}, + { 0xce000000, 8, 'L'}, + { 0xcf000000, 11, 'k'}, + { 0xcf200000, 12, '\''}, + { 0xcf400000, 10, 'i'}, + { 0xcf800000, 9, 'n'}, + { 0xd0000000, 4, '5'}, + { 0xe0000000, 4, 'N'}, + { 0xf0000000, 6, 'J'}, + { 0xf4000000, 6, 'A'}, + { 0xf8000000, 5, 'c'}, + { 0x00000000, 1, ' '}, + { 0x80000000, 5, ':'}, + { 0x88000000, 10, ESCAPE}, + { 0x8a000000, 7, '!'}, + { 0x8c000000, 6, ';'}, + { 0x90000000, 4, ','}, + { 0xa0000000, 3, STOP}, + { 0xc0000000, 2, '.'}, + { 0x00000000, 1, '*'}, + { 0xd0000000, 5, 'g'}, + { 0xf0000000, 8, 'i'}, + { 0xf1000000, 9, ESCAPE}, + { 0xf2000000, 7, 'e'}, + { 0xf8000000, 5, 'd'}, + { 0x00000000, 2, ESCAPE}, + { 0x40000000, 2, ' '}, + { 0x00000000, 5, '5'}, + { 0x08000000, 8, '2'}, + { 0x09000000, 8, '"'}, + { 0x0a400000, 12, 'T'}, + { 0x0a600000, 12, '7'}, + { 0x0a700000, 12, '6'}, + { 0x0a800000, 10, '\''}, + { 0x0ac00000, 12, STOP}, + { 0x0ad00000, 13, ESCAPE}, + { 0x0ae00000, 11, '4'}, + { 0x0b000000, 8, '1'}, + { 0x0c000000, 7, 'b'}, + { 0x0e000000, 7, '3'}, + { 0x20000000, 3, '0'}, + { 0x40000000, 2, 'S'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 2, ' '}, + { 0x40000000, 4, 't'}, + { 0x50000000, 4, 'b'}, + { 0x60000000, 4, 'w'}, + { 0x70000000, 4, 'u'}, + { 0x80000000, 5, 'c'}, + { 0x88000000, 6, '9'}, + { 0x8c000000, 7, 'S'}, + { 0x8e000000, 8, 'C'}, + { 0x8f000000, 10, 'F'}, + { 0x8f400000, 14, '4'}, + { 0x8f440000, 14, 'z'}, + { 0x8f480000, 13, '0'}, + { 0x8f500000, 12, 'R'}, + { 0x8f600000, 11, 'K'}, + { 0x8f800000, 9, 'H'}, + { 0x90000000, 4, 'o'}, + { 0xa0000000, 4, 's'}, + { 0xb0000000, 4, 'f'}, + { 0xc0000000, 6, 'h'}, + { 0xc4000000, 9, 'A'}, + { 0xc4800000, 10, 'j'}, + { 0xc4c00000, 10, 'P'}, + { 0xc5000000, 8, 'W'}, + { 0xc6000000, 9, '6'}, + { 0xc6800000, 9, 'B'}, + { 0xc7000000, 8, 'g'}, + { 0xc8000000, 6, '1'}, + { 0xcc000000, 6, 'y'}, + { 0xd0000000, 7, 'e'}, + { 0xd2000000, 7, 'i'}, + { 0xd4000000, 6, 'r'}, + { 0xd8000000, 5, 'l'}, + { 0xe0000000, 6, 'a'}, + { 0xe4000000, 11, 'v'}, + { 0xe4200000, 11, 'Z'}, + { 0xe4400000, 10, 'q'}, + { 0xe4800000, 10, '5'}, + { 0xe4c00000, 10, 'T'}, + { 0xe5000000, 8, 'J'}, + { 0xe6000000, 8, 'D'}, + { 0xe7000000, 16, '\''}, + { 0xe7010000, 17, ESCAPE}, + { 0xe7020000, 15, 'Q'}, + { 0xe7040000, 14, 'V'}, + { 0xe7080000, 14, '3'}, + { 0xe70c0000, 14, '8'}, + { 0xe7100000, 12, 'Y'}, + { 0xe7200000, 11, 'N'}, + { 0xe7400000, 10, 'I'}, + { 0xe7800000, 9, 'M'}, + { 0xe8000000, 5, 'd'}, + { 0xf0000000, 6, 'm'}, + { 0xf4000000, 9, 'E'}, + { 0xf4800000, 9, 'L'}, + { 0xf5000000, 8, '2'}, + { 0xf6000000, 7, 'n'}, + { 0xf8000000, 6, 'p'}, + { 0xfc000000, 8, '7'}, + { 0xfd000000, 9, 'U'}, + { 0xfd800000, 9, 'k'}, + { 0xfe000000, 8, 'G'}, + { 0xff000000, 8, 'O'}, + { 0x00000000, 7, 'a'}, + { 0x02000000, 7, '['}, + { 0x04000000, 6, 'u'}, + { 0x08000000, 8, '4'}, + { 0x09000000, 10, 'N'}, + { 0x09400000, 12, 'E'}, + { 0x09500000, 12, ':'}, + { 0x09600000, 15, '?'}, + { 0x09640000, 15, 'Q'}, + { 0x09660000, 16, 'U'}, + { 0x09680000, 13, 'b'}, + { 0x09700000, 13, 'K'}, + { 0x09780000, 13, 'Y'}, + { 0x09800000, 10, 't'}, + { 0x09c00000, 10, 'J'}, + { 0x0a000000, 9, '5'}, + { 0x0a800000, 9, 'L'}, + { 0x0b000000, 11, 'r'}, + { 0x0b200000, 12, 'h'}, + { 0x0b300000, 14, '"'}, + { 0x0b350000, 16, '6'}, + { 0x0b360000, 17, 'd'}, + { 0x0b368000, 18, ESCAPE}, + { 0x0b36c000, 18, 'n'}, + { 0x0b370000, 16, 'k'}, + { 0x0b380000, 13, 'O'}, + { 0x0b400000, 10, 'R'}, + { 0x0b800000, 9, 'p'}, + { 0x0c000000, 9, 'T'}, + { 0x0c800000, 9, 'A'}, + { 0x0d000000, 9, 'M'}, + { 0x0d800000, 11, 'V'}, + { 0x0da00000, 12, ','}, + { 0x0dbe0000, 15, '&'}, + { 0x0dc00000, 10, 'P'}, + { 0x0e000000, 8, 'H'}, + { 0x0f000000, 9, 'C'}, + { 0x0f800000, 9, '2'}, + { 0x10000000, 5, 'i'}, + { 0x18000000, 8, 'S'}, + { 0x19000000, 8, 'W'}, + { 0x1a000000, 7, '3'}, + { 0x1c000000, 8, 'o'}, + { 0x1d000000, 11, 'w'}, + { 0x1d200000, 11, 'F'}, + { 0x1d400000, 10, 's'}, + { 0x1d800000, 9, 'D'}, + { 0x1e000000, 8, '1'}, + { 0x1f000000, 9, 'B'}, + { 0x1f800000, 12, '\''}, + { 0x1f900000, 13, 'f'}, + { 0x1f980000, 13, '('}, + { 0x1fa00000, 11, 'G'}, + { 0x1fc00000, 10, 'I'}, + { 0x20000000, 5, '0'}, + { 0x28000000, 5, 'c'}, + { 0x30000000, 4, '.'}, + { 0x40000000, 4, STOP}, + { 0x80000000, 1, ' '}, + { 0x00000000, 4, '5'}, + { 0x10000000, 5, 'T'}, + { 0x18000000, 5, 'f'}, + { 0x20000000, 4, '8'}, + { 0x30000000, 5, 'B'}, + { 0x38000000, 5, '2'}, + { 0x40000000, 2, 'c'}, + { 0x80000000, 7, 'F'}, + { 0x82000000, 11, 'v'}, + { 0x82200000, 11, 'p'}, + { 0x82400000, 10, 'J'}, + { 0x82800000, 11, 'h'}, + { 0x82a00000, 12, 'l'}, + { 0x82c00000, 10, '9'}, + { 0x83000000, 8, 'm'}, + { 0x84000000, 7, 's'}, + { 0x86000000, 7, 'M'}, + { 0x88000000, 5, '3'}, + { 0x90000000, 5, '7'}, + { 0x98000000, 7, 'H'}, + { 0x9a000000, 8, 'W'}, + { 0x9b000000, 9, 'L'}, + { 0x9b800000, 12, 'V'}, + { 0x9b900000, 14, ESCAPE}, + { 0x9b940000, 14, 'g'}, + { 0x9ba00000, 11, 'o'}, + { 0x9bc00000, 11, 'Q'}, + { 0x9be00000, 11, '0'}, + { 0x9c000000, 7, 'D'}, + { 0x9e000000, 7, 'A'}, + { 0xa0000000, 5, '6'}, + { 0xa8000000, 8, 'G'}, + { 0xa9000000, 8, 'U'}, + { 0xaa000000, 7, 'S'}, + { 0xac000000, 8, 'd'}, + { 0xad000000, 8, 'O'}, + { 0xae000000, 8, 'N'}, + { 0xaf000000, 9, ' '}, + { 0xaf800000, 9, 'I'}, + { 0xb0000000, 5, 'a'}, + { 0xb8000000, 9, 'E'}, + { 0xb8800000, 9, 'R'}, + { 0xb9000000, 8, 'C'}, + { 0xba000000, 9, 'K'}, + { 0xba800000, 9, 't'}, + { 0xbb000000, 8, 'P'}, + { 0xbc000000, 6, '4'}, + { 0xc0000000, 3, '1'}, + { 0xe0000000, 3, 'e'}, + { 0x00000000, 1, '0'}, + { 0x80000000, 6, '4'}, + { 0x84000000, 6, 't'}, + { 0x88000000, 5, 's'}, + { 0x90000000, 4, 'a'}, + { 0xa0000000, 7, '3'}, + { 0xa2000000, 7, '7'}, + { 0xa4000000, 6, '5'}, + { 0xa8000000, 8, ')'}, + { 0xa9000000, 8, '/'}, + { 0xaa000000, 7, ']'}, + { 0xac000000, 7, '-'}, + { 0xae000000, 7, '1'}, + { 0xb0000000, 4, 'p'}, + { 0xc0000000, 5, '.'}, + { 0xc8000000, 5, '8'}, + { 0xd0000000, 6, '6'}, + { 0xd4000000, 8, STOP}, + { 0xd5000000, 8, '9'}, + { 0xd6000000, 9, '%'}, + { 0xd6800000, 10, ':'}, + { 0xd6c20000, 16, ESCAPE}, + { 0xd6c40000, 14, 'l'}, + { 0xd6c80000, 14, ';'}, + { 0xd6cc0000, 14, '\''}, + { 0xd6d00000, 12, 'f'}, + { 0xd6e80000, 14, 'k'}, + { 0xd6ec0000, 14, '!'}, + { 0xd6f00000, 12, 'm'}, + { 0xd7000000, 8, '2'}, + { 0xd8000000, 5, ','}, + { 0xe0000000, 3, ' '}, + { 0x00000000, 2, '9'}, + { 0x40000000, 5, '6'}, + { 0x48000000, 5, '8'}, + { 0x50000000, 4, ' '}, + { 0x60000000, 7, STOP}, + { 0x62000000, 7, '-'}, + { 0x64000000, 6, '7'}, + { 0x68000000, 5, '/'}, + { 0x70000000, 4, '2'}, + { 0x80000000, 3, '1'}, + { 0xa0000000, 5, ']'}, + { 0xa8000000, 7, ')'}, + { 0xaa000000, 8, '\''}, + { 0xab000000, 9, 'X'}, + { 0xab800000, 13, 'p'}, + { 0xab880000, 13, 'm'}, + { 0xab9e0000, 15, 'a'}, + { 0xaba60000, 16, ESCAPE}, + { 0xabb00000, 12, ';'}, + { 0xabc00000, 11, 't'}, + { 0xabe00000, 11, 'R'}, + { 0xac000000, 7, ':'}, + { 0xae000000, 7, 's'}, + { 0xb0000000, 4, '.'}, + { 0xc0000000, 4, '5'}, + { 0xd0000000, 5, '3'}, + { 0xd8000000, 6, '4'}, + { 0xdc000000, 7, ','}, + { 0xde000000, 7, 'x'}, + { 0xe0000000, 3, '0'}, + { 0x00000000, 3, ' '}, + { 0x20000000, 5, ']'}, + { 0x28000000, 5, 'p'}, + { 0x30000000, 4, '/'}, + { 0x40000000, 3, '.'}, + { 0x60000000, 6, '6'}, + { 0x64000000, 6, '2'}, + { 0x68000000, 5, '1'}, + { 0x70000000, 6, ':'}, + { 0x74000000, 6, '-'}, + { 0x78000000, 8, 'D'}, + { 0x79000000, 8, '3'}, + { 0x7a000000, 8, 't'}, + { 0x7b000000, 8, '7'}, + { 0x7c000000, 6, ')'}, + { 0x80000000, 3, '5'}, + { 0xa0000000, 7, STOP}, + { 0xa2000000, 8, 'n'}, + { 0xa3000000, 9, 'a'}, + { 0xa3800000, 10, '\''}, + { 0xa3d00000, 13, '"'}, + { 0xa3d80000, 15, ESCAPE}, + { 0xa3de0000, 15, 'L'}, + { 0xa3e00000, 11, ';'}, + { 0xa4000000, 7, '8'}, + { 0xa6000000, 7, '9'}, + { 0xa8000000, 5, '4'}, + { 0xb0000000, 4, ','}, + { 0xc0000000, 2, '0'}, + { 0x00000000, 2, ' '}, + { 0x40000000, 5, '2'}, + { 0x48000000, 5, '1'}, + { 0x50000000, 5, ')'}, + { 0x58000000, 6, 'D'}, + { 0x5c000000, 7, '7'}, + { 0x5e000000, 7, '3'}, + { 0x60000000, 5, ':'}, + { 0x68000000, 6, '4'}, + { 0x6c000000, 6, STOP}, + { 0x70000000, 5, '-'}, + { 0x78200000, 12, 'p'}, + { 0x78400000, 10, ';'}, + { 0x78800000, 13, 'a'}, + { 0x78980000, 14, ESCAPE}, + { 0x789c0000, 14, 'k'}, + { 0x78c00000, 11, '\''}, + { 0x79000000, 8, 'B'}, + { 0x7a000000, 7, '6'}, + { 0x7c000000, 6, '5'}, + { 0x80000000, 2, '0'}, + { 0xc0000000, 3, '.'}, + { 0xe0000000, 4, '/'}, + { 0xf0000000, 6, ','}, + { 0xf4000000, 8, '8'}, + { 0xf5000000, 9, '9'}, + { 0xf5800000, 10, 'r'}, + { 0xf6000000, 7, 't'}, + { 0xf8000000, 5, ']'}, + { 0x00000000, 3, '4'}, + { 0x20000000, 4, '/'}, + { 0x30000000, 5, '1'}, + { 0x38000000, 6, '2'}, + { 0x3c000000, 7, ':'}, + { 0x3e000000, 7, '\''}, + { 0x40000000, 2, ' '}, + { 0x80000000, 3, '.'}, + { 0xa0000000, 4, '5'}, + { 0xb0000000, 4, '-'}, + { 0xc0000000, 3, '0'}, + { 0xe0000000, 7, 't'}, + { 0xe2000000, 7, '3'}, + { 0xe4000000, 6, '8'}, + { 0xe8000000, 5, ']'}, + { 0xf0000000, 5, ','}, + { 0xf8000000, 6, ')'}, + { 0xfc000000, 10, '9'}, + { 0xfc500000, 12, 'x'}, + { 0xfc600000, 11, 'C'}, + { 0xfc800000, 10, '7'}, + { 0xfcc00000, 11, ';'}, + { 0xfce40000, 15, ESCAPE}, + { 0xfce80000, 13, 'm'}, + { 0xfcf80000, 14, 'p'}, + { 0xfcfc0000, 14, 'c'}, + { 0xfd000000, 8, '6'}, + { 0xfe000000, 7, STOP}, + { 0x00000000, 2, '0'}, + { 0x40000000, 3, '.'}, + { 0x60000000, 5, '/'}, + { 0x68000000, 6, '3'}, + { 0x6c000000, 7, ':'}, + { 0x6e000000, 8, '4'}, + { 0x6f100000, 12, '\''}, + { 0x6f200000, 11, ';'}, + { 0x6f400000, 14, ESCAPE}, + { 0x6f440000, 14, 'f'}, + { 0x6f480000, 13, 'l'}, + { 0x6f500000, 12, 'k'}, + { 0x6f600000, 11, 'm'}, + { 0x6f800000, 10, 'c'}, + { 0x6fc00000, 10, '1'}, + { 0x70000000, 4, 'p'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 4, '5'}, + { 0xd0000000, 5, 'a'}, + { 0xd8000000, 5, '-'}, + { 0xe0000000, 7, ')'}, + { 0xe2000000, 7, 's'}, + { 0xe4000000, 8, STOP}, + { 0xe5000000, 8, 't'}, + { 0xe6000000, 7, ','}, + { 0xe8000000, 5, '6'}, + { 0xf0000000, 6, '2'}, + { 0xf4000000, 7, '7'}, + { 0xf6000000, 7, '9'}, + { 0xf8000000, 6, '8'}, + { 0xfc000000, 6, ']'}, + { 0x00000000, 2, ' '}, + { 0x40000000, 7, '6'}, + { 0x42000000, 7, STOP}, + { 0x44000000, 6, '-'}, + { 0x48000000, 5, '1'}, + { 0x50000000, 4, ']'}, + { 0x60000000, 5, '7'}, + { 0x68000000, 6, '5'}, + { 0x6c000000, 6, '4'}, + { 0x70000000, 5, ')'}, + { 0x78000000, 7, '3'}, + { 0x7a000000, 7, '2'}, + { 0x7c000000, 6, '8'}, + { 0x80000000, 2, '.'}, + { 0xc0000000, 5, ','}, + { 0xc8000000, 5, ':'}, + { 0xd0000000, 5, '/'}, + { 0xd9400000, 10, 'a'}, + { 0xd9c00000, 11, ';'}, + { 0xd9fc0000, 15, ESCAPE}, + { 0xda000000, 7, '9'}, + { 0xdc000000, 6, 't'}, + { 0xe0000000, 3, '0'}, + { 0x00000000, 4, '8'}, + { 0x10000000, 8, STOP}, + { 0x11000000, 11, '\''}, + { 0x11200000, 13, ESCAPE}, + { 0x11280000, 13, 's'}, + { 0x11800000, 10, ';'}, + { 0x11d00000, 12, '?'}, + { 0x12000000, 7, '3'}, + { 0x14000000, 6, '6'}, + { 0x18000000, 6, '2'}, + { 0x1c000000, 6, '1'}, + { 0x20000000, 3, ' '}, + { 0x40000000, 4, '7'}, + { 0x50000000, 5, '/'}, + { 0x58000000, 8, ':'}, + { 0x59000000, 8, 'p'}, + { 0x5a000000, 7, ','}, + { 0x5c000000, 6, 't'}, + { 0x60000000, 3, '0'}, + { 0x80000000, 6, '9'}, + { 0x84000000, 7, 'a'}, + { 0x86000000, 7, '4'}, + { 0x88000000, 6, ')'}, + { 0x8c000000, 6, '5'}, + { 0x90000000, 4, ']'}, + { 0xa0000000, 3, '-'}, + { 0xc0000000, 2, '.'}, + { 0x00000000, 3, '4'}, + { 0x20000000, 5, '/'}, + { 0x28000000, 7, ':'}, + { 0x2a000000, 7, ','}, + { 0x2c000000, 8, 'p'}, + { 0x2d000000, 8, '-'}, + { 0x2e100000, 12, '\''}, + { 0x2e380000, 14, ESCAPE}, + { 0x2e400000, 10, ';'}, + { 0x2e800000, 9, STOP}, + { 0x2f000000, 8, 'a'}, + { 0x30000000, 4, '0'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 4, '9'}, + { 0x90000000, 4, '7'}, + { 0xa0000000, 5, '3'}, + { 0xa8000000, 6, ')'}, + { 0xac000000, 8, 'c'}, + { 0xad000000, 8, '2'}, + { 0xae000000, 7, 't'}, + { 0xb0000000, 4, '8'}, + { 0xc0000000, 3, '.'}, + { 0xe0000000, 4, '1'}, + { 0xf0000000, 5, '5'}, + { 0xf8000000, 6, '6'}, + { 0xfc000000, 6, ']'}, + { 0x00000000, 3, '5'}, + { 0x20000000, 3, ']'}, + { 0x40000000, 5, '2'}, + { 0x48000000, 6, '1'}, + { 0x4c000000, 6, '/'}, + { 0x50000000, 4, '0'}, + { 0x60000000, 4, '.'}, + { 0x70000000, 4, '-'}, + { 0x80000000, 4, '4'}, + { 0x90000000, 4, '8'}, + { 0xa0000000, 5, '3'}, + { 0xa8000000, 6, 't'}, + { 0xac000000, 8, ':'}, + { 0xad000000, 9, ','}, + { 0xad800000, 11, 'p'}, + { 0xada00000, 11, ';'}, + { 0xadd00000, 13, 'a'}, + { 0xadd80000, 15, ESCAPE}, + { 0xade00000, 11, STOP}, + { 0xae000000, 7, ')'}, + { 0xb0000000, 4, '6'}, + { 0xc0000000, 4, ' '}, + { 0xd0000000, 4, '7'}, + { 0xe0000000, 3, '9'}, + { 0x00000000, 7, ESCAPE}, + { 0x08000000, 5, '1'}, + { 0x10000000, 5, 'T'}, + { 0x40000000, 2, '0'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 1, ESCAPE}, + { 0x80000000, 1, ' '}, + { 0x80000000, 1, ESCAPE}, + { 0x80000000, 1, ESCAPE}, + { 0x80000000, 1, ESCAPE}, + { 0x00000000, 3, ':'}, + { 0x20000000, 5, '!'}, + { 0x28000000, 6, ';'}, + { 0x2c000000, 7, '\''}, + { 0x2e000000, 10, ESCAPE}, + { 0x2e800000, 9, '/'}, + { 0x2f000000, 8, ','}, + { 0x38000000, 5, '.'}, + { 0x40000000, 2, STOP}, + { 0x80000000, 1, ' '}, + { 0xc0000000, 5, ESCAPE}, + { 0xd0000000, 4, 'b'}, + { 0x00000000, 4, 's'}, + { 0x10000000, 4, 'm'}, + { 0x20000000, 4, 'd'}, + { 0x30000000, 5, 'c'}, + { 0x38000000, 10, 'C'}, + { 0x38400000, 11, 'P'}, + { 0x38600000, 12, 'X'}, + { 0x38700000, 12, 'K'}, + { 0x38800000, 10, ','}, + { 0x38c00000, 11, '-'}, + { 0x38e00000, 12, '3'}, + { 0x38f00000, 12, '&'}, + { 0x39000000, 9, 'h'}, + { 0x39800000, 10, 'y'}, + { 0x39c00000, 13, 'L'}, + { 0x39c80000, 13, 'W'}, + { 0x39d00000, 12, 'M'}, + { 0x39e80000, 14, 'j'}, + { 0x39ec0000, 15, 'G'}, + { 0x39ee0000, 16, 'O'}, + { 0x39ef0000, 17, '4'}, + { 0x39ef8000, 18, ESCAPE}, + { 0x39efc000, 18, 'E'}, + { 0x39f00000, 12, 'Y'}, + { 0x3a000000, 9, '.'}, + { 0x3a800000, 10, 'S'}, + { 0x3ac00000, 11, 'A'}, + { 0x3ae00000, 11, 'I'}, + { 0x3b000000, 10, 'k'}, + { 0x3b400000, 10, 'T'}, + { 0x3b800000, 9, 'B'}, + { 0x3c000000, 6, 'b'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 4, 'r'}, + { 0x90000000, 5, 'u'}, + { 0x98000000, 13, 'o'}, + { 0x98080000, 13, '1'}, + { 0x98100000, 13, '\''}, + { 0x98180000, 13, ':'}, + { 0x98200000, 11, 'e'}, + { 0x98400000, 10, 'R'}, + { 0x98800000, 10, 'F'}, + { 0x98c00000, 10, 'z'}, + { 0x99000000, 8, 'v'}, + { 0x9a000000, 9, 'q'}, + { 0x9a800000, 11, 'N'}, + { 0x9aa00000, 11, 'x'}, + { 0x9ac00000, 10, 'a'}, + { 0x9b000000, 8, 'p'}, + { 0x9c000000, 6, 't'}, + { 0xa0000000, 5, 'g'}, + { 0xa8000000, 7, 'w'}, + { 0xaa000000, 7, 'i'}, + { 0xac000000, 6, 'f'}, + { 0xb0000000, 4, 'l'}, + { 0xc0000000, 3, 'D'}, + { 0xe0000000, 3, 'n'}, + { 0x00000000, 2, 'C'}, + { 0x40000000, 3, 'a'}, + { 0x60000000, 8, 'T'}, + { 0x61000000, 8, '.'}, + { 0x62000000, 9, 'A'}, + { 0x62800000, 10, 'O'}, + { 0x62c00000, 11, ':'}, + { 0x62e00000, 13, 'E'}, + { 0x62e80000, 15, '-'}, + { 0x62ec0000, 14, 'w'}, + { 0x62f00000, 12, 'W'}, + { 0x63000000, 8, 'y'}, + { 0x64000000, 8, 'I'}, + { 0x65000000, 11, '&'}, + { 0x65200000, 11, '3'}, + { 0x65400000, 11, 'j'}, + { 0x65600000, 11, 'M'}, + { 0x65900000, 16, 'Q'}, + { 0x65910000, 16, '4'}, + { 0x65920000, 15, 'U'}, + { 0x65940000, 15, 'S'}, + { 0x65960000, 15, 'F'}, + { 0x65980000, 13, 'R'}, + { 0x65a00000, 12, ','}, + { 0x65b00000, 12, '1'}, + { 0x65e00000, 12, ESCAPE}, + { 0x65f00000, 12, 'P'}, + { 0x66000000, 8, 'h'}, + { 0x67000000, 8, ' '}, + { 0x68000000, 5, 'l'}, + { 0x70000000, 4, 'i'}, + { 0x80000000, 4, 'u'}, + { 0x90000000, 4, 'o'}, + { 0xa0000000, 3, 'r'}, + { 0xc0000000, 3, 'e'}, + { 0xe0000000, 3, 'B'}, + { 0x00000000, 2, 'h'}, + { 0x40000000, 5, '\''}, + { 0x48000000, 9, 'A'}, + { 0x48a00000, 12, 'R'}, + { 0x48b00000, 13, 'z'}, + { 0x48b80000, 16, ':'}, + { 0x48b90000, 17, ESCAPE}, + { 0x48b98000, 17, 'b'}, + { 0x48ba0000, 15, ' '}, + { 0x48bc0000, 14, '1'}, + { 0x48c00000, 12, '2'}, + { 0x48e00000, 11, 'w'}, + { 0x49000000, 8, 'I'}, + { 0x4a000000, 7, 'y'}, + { 0x4c000000, 6, 'e'}, + { 0x50000000, 4, 'r'}, + { 0x60000000, 3, 'B'}, + { 0x80000000, 3, 'a'}, + { 0xa0000000, 4, '.'}, + { 0xb0000000, 10, 'C'}, + { 0xb0400000, 10, 'D'}, + { 0xb0800000, 12, '?'}, + { 0xb0900000, 15, 'K'}, + { 0xb0920000, 15, '7'}, + { 0xb0940000, 14, '!'}, + { 0xb0980000, 13, '-'}, + { 0xb0a00000, 12, 'O'}, + { 0xb0b00000, 12, 'H'}, + { 0xb0c00000, 10, STOP}, + { 0xb1000000, 10, 'S'}, + { 0xb1400000, 10, 'T'}, + { 0xb1800000, 12, 'E'}, + { 0xb1900000, 14, 'P'}, + { 0xb1940000, 16, 'F'}, + { 0xb1960000, 15, '4'}, + { 0xb1980000, 13, 's'}, + { 0xb1a00000, 11, 'J'}, + { 0xb1c00000, 10, 'G'}, + { 0xb2000000, 7, ','}, + { 0xb4000000, 6, 'u'}, + { 0xb8000000, 5, 'i'}, + { 0xc0000000, 3, 'o'}, + { 0xe0000000, 4, ' '}, + { 0xf0000000, 4, 'l'}, + { 0x00000000, 2, 'a'}, + { 0x40000000, 2, ','}, + { 0x80000000, 3, 'r'}, + { 0xa0000000, 3, 'o'}, + { 0xc0000000, 3, 'e'}, + { 0xe0000000, 4, 'i'}, + { 0xf0000000, 8, '.'}, + { 0xf2000000, 7, ' '}, + { 0xf4000000, 12, 'F'}, + { 0xf4100000, 15, ')'}, + { 0xf4130000, 16, 'R'}, + { 0xf4140000, 16, 'B'}, + { 0xf4150000, 16, '4'}, + { 0xf4160000, 15, 'E'}, + { 0xf4180000, 14, '9'}, + { 0xf41c0000, 15, '8'}, + { 0xf41e0000, 15, '7'}, + { 0xf4200000, 11, 'M'}, + { 0xf4400000, 11, '&'}, + { 0xf4600000, 11, 'V'}, + { 0xf4800000, 10, 'h'}, + { 0xf4d00000, 12, 's'}, + { 0xf4e00000, 13, 'm'}, + { 0xf4e80000, 13, 'j'}, + { 0xf4f00000, 12, 'd'}, + { 0xf5000000, 9, 'w'}, + { 0xf5800000, 9, 'W'}, + { 0xf6000000, 7, '\''}, + { 0xf8400000, 11, '-'}, + { 0xf8600000, 11, 'G'}, + { 0xf8800000, 9, 'N'}, + { 0xf9000000, 9, 'C'}, + { 0xf9800000, 11, 'O'}, + { 0xf9a00000, 11, 'A'}, + { 0xf9c00000, 10, 'I'}, + { 0xfa000000, 8, 'y'}, + { 0xfb000000, 12, 'v'}, + { 0xfb100000, 13, ESCAPE}, + { 0xfb180000, 13, 'T'}, + { 0xfb200000, 11, 'S'}, + { 0xfb400000, 10, ':'}, + { 0xfb800000, 9, 'J'}, + { 0xfc000000, 6, 'u'}, + { 0x00000000, 3, 'p'}, + { 0x20000000, 5, 's'}, + { 0x28000000, 6, '.'}, + { 0x2c000000, 6, 'i'}, + { 0x30000000, 5, 'r'}, + { 0x38000000, 5, 'u'}, + { 0x40000000, 3, 'a'}, + { 0x60000000, 3, 'n'}, + { 0x80000000, 5, 'E'}, + { 0x88000000, 5, ' '}, + { 0x90000000, 4, 'm'}, + { 0xa0000000, 4, 'x'}, + { 0xb0000000, 7, 'y'}, + { 0xb2000000, 7, 't'}, + { 0xb4000000, 6, ':'}, + { 0xb8000000, 7, 'g'}, + { 0xba040000, 14, 'S'}, + { 0xba100000, 14, ')'}, + { 0xba140000, 15, 'P'}, + { 0xba160000, 16, ESCAPE}, + { 0xba170000, 16, 'z'}, + { 0xba180000, 13, 'q'}, + { 0xba200000, 11, 'k'}, + { 0xba400000, 11, 'f'}, + { 0xba600000, 11, 'o'}, + { 0xba800000, 10, 'R'}, + { 0xbac00000, 10, 'F'}, + { 0xbb000000, 9, 'w'}, + { 0xbb800000, 11, 'U'}, + { 0xbba00000, 11, 'L'}, + { 0xbbc00000, 10, 'C'}, + { 0xbc000000, 7, '4'}, + { 0xbe000000, 9, 'c'}, + { 0xbe800000, 12, 'M'}, + { 0xbe900000, 13, 'O'}, + { 0xbe980000, 13, 'A'}, + { 0xbea00000, 11, 'e'}, + { 0xbec00000, 11, 'N'}, + { 0xbee00000, 14, 'T'}, + { 0xbee40000, 14, ','}, + { 0xbef00000, 12, '\''}, + { 0xbf000000, 9, 'b'}, + { 0xbf800000, 11, 'h'}, + { 0xbfc00000, 12, '2'}, + { 0xbfd00000, 12, '-'}, + { 0xbfe00000, 11, 'D'}, + { 0xc0000000, 3, 'l'}, + { 0xe0000000, 4, 'v'}, + { 0xf0000000, 4, 'd'}, + { 0x00000000, 2, 'o'}, + { 0x40000000, 3, 'e'}, + { 0x60000000, 4, 'l'}, + { 0x70000000, 5, 'u'}, + { 0x78000000, 7, ' '}, + { 0x7a000000, 7, 'O'}, + { 0x7c000000, 10, '.'}, + { 0x7c400000, 11, 'M'}, + { 0x7c800000, 12, ':'}, + { 0x7c900000, 13, 'y'}, + { 0x7c980000, 13, ','}, + { 0x7ca00000, 11, 'T'}, + { 0x7cc00000, 10, 'L'}, + { 0x7d000000, 8, 'A'}, + { 0x7e000000, 9, 'f'}, + { 0x7e900000, 12, '\''}, + { 0x7ea00000, 11, 'C'}, + { 0x7ee40000, 16, '*'}, + { 0x7ee50000, 16, 'K'}, + { 0x7ee60000, 15, 'h'}, + { 0x7ee80000, 14, 'I'}, + { 0x7eec0000, 16, 'F'}, + { 0x7eed0000, 16, ESCAPE}, + { 0x7eee0000, 17, 'X'}, + { 0x7eee8000, 17, 'R'}, + { 0x7ef00000, 12, '1'}, + { 0x7f000000, 8, 'B'}, + { 0x80000000, 2, 'r'}, + { 0xc0000000, 3, 'i'}, + { 0xe0000000, 3, 'a'}, + { 0x00000000, 2, 'r'}, + { 0x40000000, 2, 'a'}, + { 0x80000000, 6, 'X'}, + { 0x84000000, 9, '-'}, + { 0x84800000, 11, ';'}, + { 0x84a00000, 11, ','}, + { 0x84c00000, 11, 'A'}, + { 0x85000000, 8, '4'}, + { 0x86000000, 9, 'C'}, + { 0x86800000, 10, 'B'}, + { 0x86c00000, 13, 'O'}, + { 0x86d20000, 15, '2'}, + { 0x86d60000, 15, '\''}, + { 0x86dc0000, 16, ESCAPE}, + { 0x86de0000, 16, 'T'}, + { 0x86e00000, 11, ':'}, + { 0x87000000, 8, 'P'}, + { 0x88000000, 5, 'n'}, + { 0x90000000, 4, 'u'}, + { 0xa0000000, 3, 'o'}, + { 0xc0000000, 3, 'e'}, + { 0xe0000000, 7, 'y'}, + { 0xe2000000, 7, ' '}, + { 0xe4000000, 10, '.'}, + { 0xe4400000, 10, 'I'}, + { 0xe4800000, 9, 'M'}, + { 0xe5000000, 8, 'h'}, + { 0xe6000000, 7, 'w'}, + { 0xe8000000, 5, 'l'}, + { 0xf0000000, 4, 'i'}, + { 0x00000000, 2, 'e'}, + { 0x40000000, 2, 'a'}, + { 0x80000000, 2, 'o'}, + { 0xc0000000, 3, 'i'}, + { 0xe0000000, 5, 'R'}, + { 0xe8000000, 7, 'P'}, + { 0xea000000, 10, 'S'}, + { 0xea400000, 10, '.'}, + { 0xea8c0000, 15, 'D'}, + { 0xea8e0000, 16, ESCAPE}, + { 0xea8f0000, 16, 'r'}, + { 0xea900000, 12, 'E'}, + { 0xeaa00000, 11, 'G'}, + { 0xeae80000, 13, 'L'}, + { 0xeaf40000, 14, 'w'}, + { 0xeaf80000, 14, 'v'}, + { 0xeafc0000, 15, 's'}, + { 0xeb000000, 8, 'I'}, + { 0xec000000, 7, 'y'}, + { 0xee000000, 9, 'Q'}, + { 0xee800000, 9, 'M'}, + { 0xef000000, 9, 'A'}, + { 0xef800000, 9, ' '}, + { 0xf0000000, 4, 'u'}, + { 0x00000000, 1, 'n'}, + { 0x80000000, 5, 'T'}, + { 0x88000000, 6, 'c'}, + { 0x8c000000, 10, 'E'}, + { 0x8c400000, 10, '6'}, + { 0x8c800000, 9, 'C'}, + { 0x8d000000, 9, 'P'}, + { 0x8d800000, 11, 'e'}, + { 0x8da00000, 11, '5'}, + { 0x8dc00000, 10, 'q'}, + { 0x8e000000, 7, '\''}, + { 0x90000000, 4, 's'}, + { 0xa0000000, 8, 'A'}, + { 0xa1000000, 8, 'v'}, + { 0xa2000000, 9, 'w'}, + { 0xa2800000, 11, 'S'}, + { 0xa2a00000, 11, '9'}, + { 0xa2c00000, 10, 'y'}, + { 0xa3000000, 9, ':'}, + { 0xa3800000, 10, 'M'}, + { 0xa3c00000, 12, 'B'}, + { 0xa3d00000, 12, ')'}, + { 0xa3e00000, 11, 'F'}, + { 0xa4000000, 6, 'm'}, + { 0xa8000000, 5, 'a'}, + { 0xb0000000, 6, 'z'}, + { 0xb4000000, 6, '.'}, + { 0xb8000000, 9, 'p'}, + { 0xb8800000, 11, 'b'}, + { 0xb8a00000, 13, 'N'}, + { 0xb8a80000, 13, 'Q'}, + { 0xb8b00000, 13, 'k'}, + { 0xb8b80000, 16, ESCAPE}, + { 0xb8b90000, 16, 'h'}, + { 0xb8bc0000, 14, 'O'}, + { 0xb8c00000, 11, '-'}, + { 0xb9000000, 8, 'V'}, + { 0xba000000, 7, 'l'}, + { 0xbc000000, 6, 'd'}, + { 0xc0000000, 3, 't'}, + { 0xe0000000, 5, ' '}, + { 0xe8000000, 9, 'R'}, + { 0xe8800000, 9, ','}, + { 0xe9000000, 8, 'f'}, + { 0xea000000, 10, 'g'}, + { 0xea400000, 10, 'D'}, + { 0xea800000, 9, 'Y'}, + { 0xeb000000, 8, 'o'}, + { 0xec000000, 6, 'I'}, + { 0xf0000000, 4, 'r'}, + { 0x00000000, 2, 'e'}, + { 0x40000000, 5, ' '}, + { 0x48000000, 10, 'M'}, + { 0x48400000, 11, 'C'}, + { 0x48700000, 13, 'w'}, + { 0x48780000, 13, 'R'}, + { 0x48800000, 10, 'J'}, + { 0x48c00000, 10, ','}, + { 0x49000000, 8, 'r'}, + { 0x4a000000, 10, 'B'}, + { 0x4a400000, 10, '-'}, + { 0x4a800000, 10, 'V'}, + { 0x4ac00000, 11, 'n'}, + { 0x4ae00000, 13, 'F'}, + { 0x4aec0000, 15, ESCAPE}, + { 0x4af80000, 13, '\''}, + { 0x4b000000, 9, 's'}, + { 0x4b800000, 10, 'K'}, + { 0x4bc00000, 10, 'T'}, + { 0x4c000000, 7, 'D'}, + { 0x4e000000, 7, '.'}, + { 0x50000000, 4, 'i'}, + { 0x60000000, 3, 'u'}, + { 0x80000000, 2, 'a'}, + { 0xc0000000, 2, 'o'}, + { 0x00000000, 2, 'i'}, + { 0x40000000, 2, 'a'}, + { 0x80000000, 2, 'e'}, + { 0xc0000000, 5, 'n'}, + { 0xc8000000, 5, 'o'}, + { 0xd0000000, 6, '\''}, + { 0xd4000000, 9, 'T'}, + { 0xd4800000, 11, '5'}, + { 0xd4a00000, 11, '4'}, + { 0xd4c00000, 11, 'A'}, + { 0xd4e00000, 12, '-'}, + { 0xd4f00000, 13, 'V'}, + { 0xd4f80000, 15, ESCAPE}, + { 0xd4fc0000, 14, 'L'}, + { 0xd5000000, 10, 'w'}, + { 0xd5400000, 11, '3'}, + { 0xd5600000, 12, ':'}, + { 0xd5700000, 12, '!'}, + { 0xd5800000, 9, 'G'}, + { 0xd6000000, 7, '.'}, + { 0xd8000000, 5, 'r'}, + { 0xe0000000, 6, 'u'}, + { 0xe4000000, 11, '2'}, + { 0xe4200000, 12, ')'}, + { 0xe4300000, 13, '6'}, + { 0xe4380000, 13, '1'}, + { 0xe4400000, 12, '?'}, + { 0xe4500000, 12, 'S'}, + { 0xe4800000, 9, ','}, + { 0xe5000000, 8, 'h'}, + { 0xe6000000, 7, 'l'}, + { 0xe8000000, 5, ' '}, + { 0xf0000000, 4, 'y'}, + { 0x00000000, 2, 'i'}, + { 0x40000000, 4, 'u'}, + { 0x50000000, 6, 'l'}, + { 0x54000000, 6, 'A'}, + { 0x58000000, 9, 'I'}, + { 0x59000000, 10, 'O'}, + { 0x59400000, 10, '\''}, + { 0x59800000, 14, 'E'}, + { 0x59840000, 15, 'T'}, + { 0x59860000, 15, 'P'}, + { 0x59880000, 13, 'h'}, + { 0x59900000, 12, 't'}, + { 0x59a00000, 11, '.'}, + { 0x59c00000, 11, 'C'}, + { 0x5a000000, 15, 'D'}, + { 0x5a100000, 12, 'G'}, + { 0x5a400000, 11, 'L'}, + { 0x5a680000, 16, ESCAPE}, + { 0x5a6a0000, 15, 'j'}, + { 0x5a700000, 12, 'S'}, + { 0x5a800000, 9, ','}, + { 0x5b000000, 8, ' '}, + { 0x5c000000, 6, 'y'}, + { 0x60000000, 3, ']'}, + { 0x80000000, 2, 'o'}, + { 0xc0000000, 3, 'e'}, + { 0xe0000000, 3, 'a'}, + { 0x00000000, 2, 'o'}, + { 0x40000000, 9, '1'}, + { 0x40800000, 10, 'A'}, + { 0x40c00000, 12, 'Z'}, + { 0x40e00000, 12, 'B'}, + { 0x40f00000, 13, ','}, + { 0x40f80000, 13, '\''}, + { 0x41000000, 8, 'C'}, + { 0x42000000, 7, ' '}, + { 0x44000000, 9, 'h'}, + { 0x44800000, 10, 'z'}, + { 0x44e00000, 14, 'm'}, + { 0x44e40000, 14, 'J'}, + { 0x44e80000, 14, ESCAPE}, + { 0x44ec0000, 15, 't'}, + { 0x44ee0000, 15, 'V'}, + { 0x44f00000, 12, 's'}, + { 0x45000000, 9, 'I'}, + { 0x45800000, 12, 'R'}, + { 0x45900000, 12, 'W'}, + { 0x45a00000, 12, 'O'}, + { 0x45b20000, 15, 'N'}, + { 0x45b40000, 15, '6'}, + { 0x45b60000, 15, '2'}, + { 0x45b80000, 13, 'D'}, + { 0x45c00000, 11, '.'}, + { 0x45e00000, 13, '4'}, + { 0x45e80000, 14, 'l'}, + { 0x45f00000, 13, 'E'}, + { 0x45f80000, 14, ')'}, + { 0x45fc0000, 14, 'w'}, + { 0x46000000, 8, 'F'}, + { 0x47000000, 9, 'T'}, + { 0x47800000, 9, 'X'}, + { 0x48000000, 5, 'y'}, + { 0x50000000, 4, 'c'}, + { 0x60000000, 3, 'e'}, + { 0x80000000, 6, 'S'}, + { 0x84000000, 6, 'P'}, + { 0x88000000, 5, 'r'}, + { 0x90000000, 4, 'u'}, + { 0xa0000000, 3, 'i'}, + { 0xc0000000, 2, 'a'}, + { 0x00000000, 2, 'a'}, + { 0x40800000, 9, '\''}, + { 0x41000000, 8, 'B'}, + { 0x42000000, 8, 'I'}, + { 0x43000000, 10, 'C'}, + { 0x43480000, 13, '.'}, + { 0x43500000, 12, 'M'}, + { 0x43680000, 14, 'Q'}, + { 0x436c0000, 14, 'G'}, + { 0x43700000, 12, 'O'}, + { 0x43800000, 9, 'Y'}, + { 0x44000000, 7, 'y'}, + { 0x46000000, 8, 'F'}, + { 0x47000000, 8, ' '}, + { 0x48000000, 6, 'A'}, + { 0x4c000000, 7, 'g'}, + { 0x4e000000, 9, 'L'}, + { 0x4e800000, 9, 'H'}, + { 0x4f000000, 10, 'W'}, + { 0x4f400000, 12, ','}, + { 0x4f680000, 13, ESCAPE}, + { 0x4f700000, 12, 'h'}, + { 0x4f800000, 10, 'N'}, + { 0x4fc00000, 10, 'T'}, + { 0x50000000, 5, 'u'}, + { 0x58000000, 5, 'E'}, + { 0x60000000, 3, 'i'}, + { 0x80000000, 2, 'o'}, + { 0xc0000000, 2, 'e'}, + { 0x00000000, 4, 's'}, + { 0x10000000, 4, 'N'}, + { 0x20000000, 6, 'o'}, + { 0x24000000, 6, 'J'}, + { 0x28000000, 5, 'U'}, + { 0x30000000, 4, 'z'}, + { 0x40000000, 4, 'r'}, + { 0x50000000, 6, 'b'}, + { 0x54000000, 6, 'm'}, + { 0x58000000, 5, 'h'}, + { 0x60000000, 9, 'K'}, + { 0x60800000, 11, ','}, + { 0x60a00000, 12, ':'}, + { 0x60bc0000, 14, 'D'}, + { 0x60c00000, 10, '2'}, + { 0x61000000, 8, 't'}, + { 0x62000000, 8, 'k'}, + { 0x63000000, 11, 'j'}, + { 0x63200000, 11, 'L'}, + { 0x63400000, 10, 'S'}, + { 0x63800000, 10, 'B'}, + { 0x63c00000, 12, 'e'}, + { 0x63d80000, 13, 'P'}, + { 0x63e00000, 11, 'I'}, + { 0x64000000, 6, 'H'}, + { 0x68000000, 6, 'O'}, + { 0x6c000000, 6, 'v'}, + { 0x70000000, 5, 'f'}, + { 0x78000000, 5, 'w'}, + { 0x80000000, 4, 'u'}, + { 0x90000000, 5, '.'}, + { 0x98000000, 8, 'g'}, + { 0x99000000, 9, 'i'}, + { 0x99800000, 10, 'W'}, + { 0x99c00000, 10, '-'}, + { 0x9a000000, 7, 'd'}, + { 0x9c000000, 6, 'c'}, + { 0xa0000000, 4, 'p'}, + { 0xb0000000, 4, 'l'}, + { 0xc0000000, 5, ' '}, + { 0xc8000000, 7, 'a'}, + { 0xca000000, 8, 'R'}, + { 0xcb000000, 12, 'y'}, + { 0xcb100000, 12, ';'}, + { 0xcb200000, 11, 'A'}, + { 0xcb400000, 12, 'M'}, + { 0xcb500000, 15, ESCAPE}, + { 0xcb540000, 14, 'T'}, + { 0xcb600000, 11, 'C'}, + { 0xcb800000, 9, 'V'}, + { 0xcc000000, 6, 'x'}, + { 0xd0000000, 4, '\''}, + { 0xe0000000, 3, 'n'}, + { 0x00000000, 3, 'i'}, + { 0x20000000, 4, 'h'}, + { 0x30000000, 8, 'B'}, + { 0x31000000, 12, 'L'}, + { 0x31100000, 12, 'G'}, + { 0x31200000, 11, 'T'}, + { 0x31400000, 10, 'y'}, + { 0x31800000, 9, 'O'}, + { 0x32000000, 8, 'D'}, + { 0x33000000, 10, 'M'}, + { 0x33500000, 14, 'V'}, + { 0x33540000, 16, ESCAPE}, + { 0x33580000, 13, 'J'}, + { 0x33600000, 12, 'A'}, + { 0x33700000, 12, 'S'}, + { 0x33800000, 9, ','}, + { 0x34000000, 7, 'C'}, + { 0x36000000, 10, 'E'}, + { 0x36400000, 10, '\''}, + { 0x36800000, 12, 'w'}, + { 0x36900000, 12, 'F'}, + { 0x36a00000, 13, 'f'}, + { 0x36a80000, 13, 'R'}, + { 0x36b00000, 14, 'Y'}, + { 0x36b40000, 14, 'I'}, + { 0x36b80000, 13, 't'}, + { 0x36c00000, 10, '3'}, + { 0x37000000, 8, 's'}, + { 0x38000000, 7, '.'}, + { 0x3a000000, 7, ' '}, + { 0x3c000000, 6, 'u'}, + { 0x40000000, 3, 'e'}, + { 0x60000000, 3, 'l'}, + { 0x80000000, 3, 'o'}, + { 0xa0000000, 3, 'r'}, + { 0xc0000000, 2, 'a'}, + { 0x00000000, 2, 'V'}, + { 0x40000000, 5, 'a'}, + { 0x4a000000, 10, 'T'}, + { 0x4a400000, 11, ESCAPE}, + { 0x4b000000, 8, '&'}, + { 0x4c000000, 7, 'E'}, + { 0x4e000000, 7, 'C'}, + { 0x50000000, 4, '.'}, + { 0x60000000, 3, ' '}, + { 0x80000000, 1, 'u'}, + { 0x00000000, 4, 'p'}, + { 0x10000000, 6, ' '}, + { 0x14000000, 8, 'D'}, + { 0x15000000, 9, 'F'}, + { 0x15800000, 10, 'w'}, + { 0x15c00000, 11, 't'}, + { 0x15e00000, 11, 'I'}, + { 0x16000000, 8, '.'}, + { 0x17000000, 10, 'N'}, + { 0x17400000, 10, '&'}, + { 0x17800000, 10, 'V'}, + { 0x17c00000, 10, 'H'}, + { 0x18000000, 5, 'E'}, + { 0x20000000, 5, 'h'}, + { 0x28000000, 6, 'y'}, + { 0x2c000000, 8, 'T'}, + { 0x2d000000, 9, 'B'}, + { 0x2d800000, 9, 'n'}, + { 0x2e000000, 8, 'S'}, + { 0x2f000000, 12, 'C'}, + { 0x2f100000, 14, ','}, + { 0x2f180000, 14, 'U'}, + { 0x2f1c0000, 14, 'M'}, + { 0x2f200000, 12, 'O'}, + { 0x2f300000, 14, '-'}, + { 0x2f340000, 14, ESCAPE}, + { 0x2f380000, 15, '2'}, + { 0x2f3a0000, 15, 'R'}, + { 0x2f3c0000, 14, ':'}, + { 0x2f400000, 10, '\''}, + { 0x2f800000, 9, 'A'}, + { 0x30000000, 4, 'u'}, + { 0x40000000, 2, 'a'}, + { 0x80000000, 3, 'i'}, + { 0xa0000000, 3, 'e'}, + { 0xc0000000, 2, 'o'}, + { 0x00000000, 4, 'a'}, + { 0x10000000, 5, 'p'}, + { 0x18000000, 5, ','}, + { 0x20000000, 4, 'h'}, + { 0x30000000, 5, 'L'}, + { 0x38000000, 7, 'w'}, + { 0x3a000000, 8, 'q'}, + { 0x3b000000, 9, 'P'}, + { 0x3b800000, 10, 'A'}, + { 0x3bc40000, 16, 'G'}, + { 0x3bc50000, 17, '\''}, + { 0x3bc58000, 17, '?'}, + { 0x3bc60000, 16, '}'}, + { 0x3bc70000, 16, 'D'}, + { 0x3bc80000, 14, '4'}, + { 0x3bcc0000, 14, '1'}, + { 0x3bd00000, 12, 'r'}, + { 0x3be00000, 12, 'S'}, + { 0x3bf00000, 12, 'W'}, + { 0x3c000000, 6, 'k'}, + { 0x40000000, 5, 'i'}, + { 0x48000000, 5, 'u'}, + { 0x50000000, 5, 'o'}, + { 0x58000000, 5, 'c'}, + { 0x60000000, 5, 'e'}, + { 0x68000000, 8, 'M'}, + { 0x69000000, 8, 'n'}, + { 0x6a000000, 7, ' '}, + { 0x6c000000, 8, 'l'}, + { 0x6d000000, 12, 'C'}, + { 0x6d100000, 14, 'O'}, + { 0x6d140000, 16, '-'}, + { 0x6d150000, 18, 'R'}, + { 0x6d158000, 18, 'J'}, + { 0x6d15c000, 18, 'F'}, + { 0x6d160000, 15, 'B'}, + { 0x6d180000, 13, ESCAPE}, + { 0x6d200000, 11, '.'}, + { 0x6d400000, 13, 'I'}, + { 0x6d480000, 14, STOP}, + { 0x6d4c0000, 16, '3'}, + { 0x6d4e0000, 18, ':'}, + { 0x6d4e8000, 17, 's'}, + { 0x6d4f0000, 17, 'j'}, + { 0x6d4f8000, 17, 'b'}, + { 0x6d500000, 12, 'E'}, + { 0x6d600000, 12, 'v'}, + { 0x6d700000, 14, 'z'}, + { 0x6d740000, 15, 'H'}, + { 0x6d760000, 15, 'T'}, + { 0x6d780000, 13, 'g'}, + { 0x6d800000, 9, 'y'}, + { 0x6e000000, 7, 'm'}, + { 0x70000000, 4, 't'}, + { 0x80000000, 1, ']'}, + { 0x00000000, 1, 'h'}, + { 0x80000000, 3, 'o'}, + { 0xa0000000, 4, 'V'}, + { 0xb0000000, 4, 'w'}, + { 0xc0000000, 4, 'r'}, + { 0xd0000000, 5, 'a'}, + { 0xd8000000, 5, 'i'}, + { 0xe0000000, 5, 'u'}, + { 0xe8000000, 7, 'H'}, + { 0xea000000, 8, ' '}, + { 0xeb000000, 8, 'y'}, + { 0xec000000, 7, 'W'}, + { 0xee000000, 10, 'S'}, + { 0xee400000, 11, 'A'}, + { 0xee600000, 14, 'T'}, + { 0xee640000, 14, 'U'}, + { 0xee680000, 13, '-'}, + { 0xee800000, 9, 'M'}, + { 0xef000000, 12, '.'}, + { 0xef100000, 17, ':'}, + { 0xef110000, 16, ';'}, + { 0xef140000, 14, '4'}, + { 0xef180000, 13, 'L'}, + { 0xef200000, 11, 's'}, + { 0xef400000, 13, 'C'}, + { 0xef480000, 14, 'O'}, + { 0xef4c0000, 15, 'E'}, + { 0xef4e0000, 15, ','}, + { 0xef500000, 16, 'P'}, + { 0xef510000, 16, '1'}, + { 0xef520000, 16, ESCAPE}, + { 0xef530000, 17, 'R'}, + { 0xef538000, 17, 'N'}, + { 0xef540000, 15, '\''}, + { 0xef560000, 17, 'I'}, + { 0xef568000, 17, 'B'}, + { 0xef570000, 16, 'D'}, + { 0xef580000, 13, 'c'}, + { 0xef600000, 11, 'J'}, + { 0xef800000, 9, 'x'}, + { 0xf0000000, 4, 'e'}, + { 0x00000000, 2, 'K'}, + { 0x40000000, 6, 'g'}, + { 0x44000000, 8, 'k'}, + { 0x45000000, 8, 't'}, + { 0x46000000, 8, 'E'}, + { 0x47000000, 8, '-'}, + { 0x48000000, 8, 'F'}, + { 0x49000000, 9, 'f'}, + { 0x4a000000, 9, ','}, + { 0x4a800000, 10, 'h'}, + { 0x4ac00000, 11, 'b'}, + { 0x4ae00000, 11, 'D'}, + { 0x4b000000, 12, 'e'}, + { 0x4b100000, 12, 'V'}, + { 0x4b200000, 12, 'P'}, + { 0x4b300000, 12, 'I'}, + { 0x4b400000, 12, 'B'}, + { 0x4b500000, 12, 'A'}, + { 0x4b680000, 13, 'C'}, + { 0x4b800000, 9, 'Z'}, + { 0x4c000000, 8, '2'}, + { 0x4d000000, 10, 'i'}, + { 0x4d400000, 10, 'w'}, + { 0x4d800000, 10, 'a'}, + { 0x4de00000, 14, ESCAPE}, + { 0x4de40000, 14, 'T'}, + { 0x4de80000, 13, 'z'}, + { 0x4df00000, 12, 'd'}, + { 0x4e000000, 7, '.'}, + { 0x50000000, 5, 's'}, + { 0x58000000, 5, 'r'}, + { 0x60000000, 3, 'S'}, + { 0x80000000, 2, 'n'}, + { 0xc0000000, 3, 'p'}, + { 0xe0000000, 6, ' '}, + { 0xe4000000, 7, 'm'}, + { 0xe6000000, 8, 'c'}, + { 0xe7000000, 8, 'N'}, + { 0xe8000000, 5, 'R'}, + { 0xf0000000, 4, 'l'}, + { 0x00000000, 3, '.'}, + { 0x20000000, 3, 'a'}, + { 0x40000000, 2, ' '}, + { 0x80400000, 10, '2'}, + { 0x81000000, 8, '1'}, + { 0x82000000, 7, 'F'}, + { 0x84000000, 10, '5'}, + { 0x84500000, 13, '9'}, + { 0x84700000, 13, 'A'}, + { 0x84780000, 13, '8'}, + { 0x84800000, 9, '-'}, + { 0x85000000, 8, '4'}, + { 0x86000000, 7, 'I'}, + { 0x88000000, 5, 'C'}, + { 0x90000000, 8, 'r'}, + { 0x91000000, 9, 'D'}, + { 0x91800000, 9, 'u'}, + { 0x92000000, 8, 'E'}, + { 0x93000000, 8, 's'}, + { 0x94000000, 10, ';'}, + { 0x94400000, 11, ESCAPE}, + { 0x94600000, 12, '3'}, + { 0x94740000, 14, 'B'}, + { 0x94780000, 13, 'W'}, + { 0x94800000, 9, ','}, + { 0x95000000, 8, '\''}, + { 0x96000000, 8, ':'}, + { 0x97000000, 8, 'l'}, + { 0x98000000, 5, 'o'}, + { 0xa0000000, 3, 'e'}, + { 0xc0000000, 2, 'i'}, + { 0x00000000, 2, 'h'}, + { 0x40000000, 4, 'r'}, + { 0x50000000, 9, 'B'}, + { 0x50800000, 9, '.'}, + { 0x51000000, 10, '\''}, + { 0x51800000, 11, '2'}, + { 0x51a00000, 11, ':'}, + { 0x51c00000, 10, 'T'}, + { 0x52000000, 7, ' '}, + { 0x54000000, 7, 'y'}, + { 0x56000000, 9, 'I'}, + { 0x56800000, 11, 'H'}, + { 0x56a00000, 12, 'l'}, + { 0x56b40000, 16, ESCAPE}, + { 0x56b60000, 15, 'E'}, + { 0x56b80000, 13, 'u'}, + { 0x56c00000, 11, 'V'}, + { 0x56e00000, 12, 's'}, + { 0x56f00000, 12, ','}, + { 0x57000000, 9, 'W'}, + { 0x57800000, 9, 'A'}, + { 0x58000000, 5, 'O'}, + { 0x60000000, 3, 'a'}, + { 0x80000000, 2, 'i'}, + { 0xc0000000, 3, 'o'}, + { 0xe0000000, 3, 'e'}, + { 0x00000000, 3, 'a'}, + { 0x20000000, 4, 'z'}, + { 0x30000000, 4, 'm'}, + { 0x40000000, 8, 'S'}, + { 0x42000000, 8, ':'}, + { 0x43000000, 10, ')'}, + { 0x43400000, 11, ESCAPE}, + { 0x43600000, 11, 'y'}, + { 0x43800000, 9, 'X'}, + { 0x44000000, 7, 'V'}, + { 0x47000000, 8, 'i'}, + { 0x50000000, 5, '-'}, + { 0x58000000, 5, 'e'}, + { 0x60000000, 6, 'u'}, + { 0x64000000, 6, 'I'}, + { 0x68000000, 7, '5'}, + { 0x6a000000, 7, '.'}, + { 0x6c000000, 6, ','}, + { 0x70000000, 4, 't'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 2, 'e'}, + { 0x40000000, 3, 'u'}, + { 0x60000000, 5, 'a'}, + { 0x68000000, 7, 'n'}, + { 0x6a000000, 8, 'r'}, + { 0x6b000000, 10, '.'}, + { 0x6c000000, 9, 'L'}, + { 0x6c800000, 9, 's'}, + { 0x6d000000, 8, 'O'}, + { 0x6e000000, 13, '-'}, + { 0x6e0c0000, 14, 'd'}, + { 0x6e080000, 14, ESCAPE}, + { 0x6e200000, 12, '2'}, + { 0x6e300000, 13, 'C'}, + { 0x6e380000, 13, ','}, + { 0x6e400000, 10, 'P'}, + { 0x6e800000, 9, 'm'}, + { 0x6f000000, 8, 'i'}, + { 0x70000000, 5, 'v'}, + { 0x78000000, 5, ' '}, + { 0x80000000, 1, 'o'}, + { 0x00000000, 8, 'y'}, + { 0x02000000, 8, ','}, + { 0x03400000, 10, '-'}, + { 0x03c00000, 11, ESCAPE}, + { 0x04000000, 7, 'O'}, + { 0x06000000, 7, '.'}, + { 0x08000000, 5, 'Z'}, + { 0x10000000, 5, ' '}, + { 0x18000000, 5, 'u'}, + { 0x20000000, 4, 'z'}, + { 0x30000000, 4, 'i'}, + { 0x40000000, 2, 'a'}, + { 0x80000000, 2, 'e'}, + { 0xc0000000, 2, 'o'}, + { 0x00000000, 4, '2'}, + { 0x10000000, 11, 'J'}, + { 0x10200000, 11, 'B'}, + { 0x10800000, 9, 'C'}, + { 0x11000000, 9, 'f'}, + { 0x11800000, 12, 'F'}, + { 0x11900000, 13, 's'}, + { 0x11a00000, 11, 'Z'}, + { 0x11c00000, 10, 'K'}, + { 0x12000000, 10, 'H'}, + { 0x12480000, 13, 'G'}, + { 0x12500000, 12, 'I'}, + { 0x12600000, 11, 'P'}, + { 0x12800000, 9, 'M'}, + { 0x14000000, 6, 'n'}, + { 0x1c000000, 11, 'L'}, + { 0x1c200000, 14, 'O'}, + { 0x1c240000, 15, ESCAPE}, + { 0x1c260000, 15, 'W'}, + { 0x1c280000, 13, 'D'}, + { 0x1c300000, 12, 'N'}, + { 0x1c400000, 10, 'T'}, + { 0x1c800000, 9, 'c'}, + { 0x1d000000, 8, 'b'}, + { 0x1e000000, 7, 'l'}, + { 0x20000000, 4, 'R'}, + { 0x30000000, 4, '1'}, + { 0x40000000, 2, 'A'}, + { 0x80000000, 1, 'S'}, + { 0x00000000, 8, ESCAPE}, + { 0x04000000, 6, ','}, + { 0x08000000, 5, ':'}, + { 0x10000000, 4, '['}, + { 0x20000000, 3, '.'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 1, STOP}, + { 0x80000000, 1, ESCAPE}, + { 0x08000000, 5, 's'}, + { 0xa0000000, 8, 'o'}, + { 0xcc000000, 6, 'c'}, + { 0xd0800000, 10, ESCAPE}, + { 0xd1000000, 8, 'f'}, + { 0xd2000000, 7, 'B'}, + { 0xd8000000, 5, 'D'}, + { 0x00000000, 4, 'm'}, + { 0x10000000, 6, 'p'}, + { 0x14000000, 7, 'w'}, + { 0x16000000, 9, ','}, + { 0x16800000, 9, '\''}, + { 0x17000000, 8, 'z'}, + { 0x18000000, 5, 'd'}, + { 0x20000000, 3, 'r'}, + { 0x40000000, 2, 'n'}, + { 0x80000000, 5, 'i'}, + { 0x88000000, 6, 'u'}, + { 0x8c000000, 6, 'v'}, + { 0x90000000, 4, 's'}, + { 0xa0000000, 3, 't'}, + { 0xc0000000, 5, 'y'}, + { 0xc8000000, 8, '.'}, + { 0xc9000000, 11, 'a'}, + { 0xc9200000, 11, '-'}, + { 0xc9400000, 12, 'q'}, + { 0xc9500000, 14, '!'}, + { 0xc9540000, 16, ESCAPE}, + { 0xc9550000, 17, 'J'}, + { 0xc9558000, 17, ']'}, + { 0xc9560000, 16, ';'}, + { 0xc9570000, 16, ')'}, + { 0xc9580000, 18, 'R'}, + { 0xc9584000, 18, 'S'}, + { 0xc9588000, 18, 'V'}, + { 0xc958d000, 21, 'W'}, + { 0xc958e000, 20, 'P'}, + { 0xc958f000, 20, STOP}, + { 0xc9590000, 16, '/'}, + { 0xc95a8000, 17, 'L'}, + { 0xc95b0000, 16, '@'}, + { 0xc95c0000, 14, '?'}, + { 0xc9600000, 11, 'j'}, + { 0xc9800000, 9, 'e'}, + { 0xca000000, 11, ':'}, + { 0xca200000, 11, 'o'}, + { 0xca400000, 10, 'x'}, + { 0xca800000, 9, 'h'}, + { 0xcb000000, 8, 'f'}, + { 0xcc000000, 6, 'g'}, + { 0xd0000000, 5, 'c'}, + { 0xd8000000, 6, 'b'}, + { 0xdc000000, 6, 'k'}, + { 0xe0000000, 4, ' '}, + { 0xf0000000, 4, 'l'}, + { 0x00000000, 2, 'e'}, + { 0x40000000, 3, 'u'}, + { 0x60000000, 3, 'a'}, + { 0x80000000, 3, 'y'}, + { 0xa0000000, 3, 'o'}, + { 0xc0000000, 4, 'l'}, + { 0xd0000000, 6, 's'}, + { 0xd4000000, 9, 'j'}, + { 0xd4800000, 13, '?'}, + { 0xd4880000, 14, 'f'}, + { 0xd48c0000, 16, '/'}, + { 0xd48d8000, 17, '"'}, + { 0xd48e0000, 15, ','}, + { 0xd4900000, 13, 'v'}, + { 0xd4980000, 18, STOP}, + { 0xd4984000, 19, ESCAPE}, + { 0xd4986000, 19, '!'}, + { 0xd4988000, 17, 'k'}, + { 0xd49c0000, 14, 'p'}, + { 0xd4a00000, 11, ':'}, + { 0xd4c00000, 10, '\''}, + { 0xd5000000, 8, 'c'}, + { 0xd6000000, 9, ','}, + { 0xd6800000, 9, '.'}, + { 0xd7000000, 11, 'w'}, + { 0xd7200000, 11, 'd'}, + { 0xd7400000, 11, 'h'}, + { 0xd7600000, 11, '&'}, + { 0xd7800000, 12, 'm'}, + { 0xd7900000, 12, 'n'}, + { 0xd7a00000, 11, '-'}, + { 0xd7c00000, 10, 't'}, + { 0xd8000000, 6, ' '}, + { 0xdc000000, 6, 'b'}, + { 0xe0000000, 4, 'r'}, + { 0xf0000000, 4, 'i'}, + { 0x00000000, 2, 'o'}, + { 0x40000000, 4, 'i'}, + { 0x50000000, 4, 'l'}, + { 0x60000000, 3, 'a'}, + { 0x80000000, 3, 'e'}, + { 0xa0000000, 5, 'u'}, + { 0xa8000000, 5, 'r'}, + { 0xb0000000, 4, 'k'}, + { 0xc0000000, 3, 'h'}, + { 0xe0000000, 5, ' '}, + { 0xe8000000, 7, 'y'}, + { 0xea000000, 7, 'c'}, + { 0xec000000, 12, ':'}, + { 0xec100000, 15, 'b'}, + { 0xec120000, 15, ESCAPE}, + { 0xec140000, 14, 'w'}, + { 0xec180000, 15, '!'}, + { 0xec1a0000, 18, 'p'}, + { 0xec1a4000, 18, 'H'}, + { 0xec1ac000, 18, ')'}, + { 0xec1b0000, 16, 'V'}, + { 0xec1c0000, 14, 'E'}, + { 0xec200000, 11, 'n'}, + { 0xec400000, 10, 'G'}, + { 0xec800000, 13, 'N'}, + { 0xec880000, 13, 'z'}, + { 0xec900000, 12, '-'}, + { 0xeca00000, 12, 'A'}, + { 0xecb00000, 14, '?'}, + { 0xecb40000, 15, 'Q'}, + { 0xecb60000, 15, 'P'}, + { 0xecb80000, 15, ';'}, + { 0xecba0000, 17, 'U'}, + { 0xecba8000, 17, STOP}, + { 0xecbb0000, 16, 'm'}, + { 0xecbc0000, 15, 'B'}, + { 0xecbe0000, 16, '/'}, + { 0xecbf0000, 17, 'W'}, + { 0xecbf8000, 18, 'R'}, + { 0xecbfc000, 18, 'T'}, + { 0xecc00000, 11, 'D'}, + { 0xece00000, 12, 'L'}, + { 0xecf00000, 12, '\''}, + { 0xed000000, 8, 's'}, + { 0xee000000, 8, '.'}, + { 0xef000000, 11, 'K'}, + { 0xef200000, 12, 'd'}, + { 0xef300000, 14, 'M'}, + { 0xef340000, 14, 'S'}, + { 0xef380000, 13, 'F'}, + { 0xef400000, 12, 'q'}, + { 0xef500000, 12, 'I'}, + { 0xef600000, 11, 'C'}, + { 0xef800000, 9, ','}, + { 0xf0000000, 4, 't'}, + { 0x00000000, 1, ' '}, + { 0x80000000, 8, 'h'}, + { 0x81000000, 8, ':'}, + { 0x82000000, 8, 'm'}, + { 0x83000000, 11, '!'}, + { 0x83200000, 12, STOP}, + { 0x83300000, 12, ')'}, + { 0x83400000, 12, 'k'}, + { 0x83500000, 12, ';'}, + { 0x83600000, 15, 'z'}, + { 0x83630000, 16, '@'}, + { 0x83640000, 16, ESCAPE}, + { 0x83650000, 17, ']'}, + { 0x83660000, 15, 'q'}, + { 0x83680000, 14, '"'}, + { 0x836c0000, 14, 'j'}, + { 0x83700000, 12, '/'}, + { 0x83800000, 9, 'f'}, + { 0x84000000, 6, 'd'}, + { 0x88000000, 5, '.'}, + { 0x90000000, 8, 'w'}, + { 0x91000000, 8, 'n'}, + { 0x92000000, 7, '-'}, + { 0x94000000, 6, 'l'}, + { 0x98000000, 5, 'o'}, + { 0xa0000000, 3, 'e'}, + { 0xc0000000, 4, 'a'}, + { 0xd0000000, 6, 'u'}, + { 0xd4000000, 11, 'p'}, + { 0xd4200000, 11, 't'}, + { 0xd4400000, 10, '?'}, + { 0xd4800000, 10, 'b'}, + { 0xd4c00000, 10, 'c'}, + { 0xd5000000, 8, '\''}, + { 0xd6000000, 7, 'v'}, + { 0xd8000000, 5, 'r'}, + { 0xe0000000, 4, 'i'}, + { 0xf0000000, 7, 'g'}, + { 0xf2000000, 7, ','}, + { 0xf4000000, 6, 'y'}, + { 0xf8000000, 5, 's'}, + { 0x00000000, 4, 'd'}, + { 0x10000000, 5, 'c'}, + { 0x18000000, 6, 'x'}, + { 0x1c000000, 7, 'f'}, + { 0x1e000000, 8, '-'}, + { 0x1f000000, 8, 'h'}, + { 0x20000000, 6, 'v'}, + { 0x24000000, 6, 'i'}, + { 0x28000000, 6, 'y'}, + { 0x2c000000, 8, 'k'}, + { 0x2d000000, 10, ')'}, + { 0x2d400000, 10, 'q'}, + { 0x2d800000, 9, ':'}, + { 0x2e000000, 7, 'b'}, + { 0x30000000, 4, 'a'}, + { 0x40000000, 3, 's'}, + { 0x60000000, 5, 'e'}, + { 0x68000000, 5, 'w'}, + { 0x70000000, 6, 'm'}, + { 0x74000000, 7, ','}, + { 0x76000000, 8, '\''}, + { 0x77000000, 11, 'z'}, + { 0x77200000, 15, '"'}, + { 0x77228000, 17, 'C'}, + { 0x77240000, 14, '4'}, + { 0x77280000, 14, 'B'}, + { 0x772c0000, 16, ESCAPE}, + { 0x772d0000, 18, 'V'}, + { 0x772d4000, 18, 'G'}, + { 0x772e0000, 16, '@'}, + { 0x772f0000, 18, '1'}, + { 0x772f4000, 21, '2'}, + { 0x772f4800, 21, 'N'}, + { 0x772f7800, 22, 'M'}, + { 0x772f7c00, 22, 'H'}, + { 0x77300000, 13, '/'}, + { 0x77380000, 14, ']'}, + { 0x773c0000, 14, ';'}, + { 0x77400000, 10, '?'}, + { 0x77800000, 10, 'u'}, + { 0x77c00000, 11, '!'}, + { 0x77e00000, 12, STOP}, + { 0x77f00000, 12, 'j'}, + { 0x78000000, 5, 't'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 3, 'r'}, + { 0xe0000000, 5, 'l'}, + { 0xe8000000, 6, '.'}, + { 0xec000000, 7, 'p'}, + { 0xee000000, 8, 'g'}, + { 0xef000000, 8, 'o'}, + { 0xf0000000, 4, 'n'}, + { 0x00000000, 2, 'o'}, + { 0x40000000, 3, 'i'}, + { 0x60000000, 5, 't'}, + { 0x68000000, 8, 's'}, + { 0x69000000, 8, 'y'}, + { 0x6a000000, 10, '?'}, + { 0x6a400000, 12, 'm'}, + { 0x6a500000, 16, 'h'}, + { 0x6a510000, 16, STOP}, + { 0x6a520000, 15, 'p'}, + { 0x6a540000, 15, '/'}, + { 0x6a560000, 16, ';'}, + { 0x6a570000, 17, 'k'}, + { 0x6a578000, 17, 'v'}, + { 0x6a580000, 13, 'c'}, + { 0x6a600000, 11, ':'}, + { 0x6a800000, 11, '\''}, + { 0x6aa00000, 11, 'g'}, + { 0x6ac00000, 10, ','}, + { 0x6b000000, 9, '.'}, + { 0x6b800000, 12, ESCAPE}, + { 0x6b900000, 13, '!'}, + { 0x6b980000, 14, ')'}, + { 0x6b9c0000, 14, 'w'}, + { 0x6ba00000, 12, 'b'}, + { 0x6bb00000, 12, 'n'}, + { 0x6bc00000, 10, '-'}, + { 0x6c000000, 6, 'l'}, + { 0x70000000, 4, 'a'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 3, 'r'}, + { 0xe0000000, 4, 'e'}, + { 0xf0000000, 5, 'u'}, + { 0xf8000000, 5, 'f'}, + { 0x00000000, 3, 'a'}, + { 0x20000000, 9, 'd'}, + { 0x20800000, 10, '?'}, + { 0x20c00000, 10, 'm'}, + { 0x21000000, 8, '\''}, + { 0x22000000, 8, '-'}, + { 0x23000000, 8, ':'}, + { 0x24000000, 6, ','}, + { 0x28000000, 6, 'n'}, + { 0x2c000000, 7, 'y'}, + { 0x2e000000, 13, 'k'}, + { 0x2e080000, 14, ')'}, + { 0x2e0c0000, 14, '"'}, + { 0x2e100000, 12, ';'}, + { 0x2e200000, 11, '!'}, + { 0x2e400000, 13, 'p'}, + { 0x2e480000, 16, ESCAPE}, + { 0x2e498000, 18, 'v'}, + { 0x2e4a0000, 15, 'c'}, + { 0x2e4c0000, 16, ']'}, + { 0x2e4d0000, 16, 'z'}, + { 0x2e4e0000, 15, '/'}, + { 0x2e500000, 12, STOP}, + { 0x2e600000, 11, 'f'}, + { 0x2e800000, 9, 'b'}, + { 0x2f000000, 9, 't'}, + { 0x2f800000, 9, 'w'}, + { 0x30000000, 4, 'u'}, + { 0x40000000, 3, 'h'}, + { 0x60000000, 4, 'r'}, + { 0x70000000, 5, 'l'}, + { 0x78000000, 6, 'g'}, + { 0x7c000000, 6, '.'}, + { 0x80000000, 4, 'i'}, + { 0x90000000, 5, 's'}, + { 0x98000000, 5, 'o'}, + { 0xa0000000, 3, 'e'}, + { 0xc0000000, 2, ' '}, + { 0x00000000, 1, 'e'}, + { 0x80000000, 3, 'o'}, + { 0xa0000000, 3, 'i'}, + { 0xc0000000, 3, ' '}, + { 0xe0000000, 9, 'd'}, + { 0xe0800000, 13, ')'}, + { 0xe0880000, 15, 'p'}, + { 0xe08a0000, 15, ';'}, + { 0xe08c0000, 15, '/'}, + { 0xe08e0000, 15, STOP}, + { 0xe0900000, 12, 'c'}, + { 0xe0a00000, 13, 'h'}, + { 0xe0a80000, 13, 'k'}, + { 0xe0b00000, 12, '?'}, + { 0xe0c00000, 10, 'w'}, + { 0xe1000000, 8, 'y'}, + { 0xe2000000, 9, 's'}, + { 0xe2800000, 10, '\''}, + { 0xe2c00000, 10, '-'}, + { 0xe3000000, 8, 'l'}, + { 0xe4000000, 6, 'r'}, + { 0xe8000000, 8, '.'}, + { 0xe9000000, 8, 'n'}, + { 0xea000000, 9, ','}, + { 0xea800000, 12, '!'}, + { 0xea900000, 16, 'q'}, + { 0xea910000, 17, ESCAPE}, + { 0xea918000, 18, '"'}, + { 0xea91c000, 20, 'z'}, + { 0xea91e000, 20, ']'}, + { 0xea91f000, 20, '*'}, + { 0xea920000, 15, 'v'}, + { 0xea940000, 14, 'g'}, + { 0xea980000, 13, 'f'}, + { 0xeaa00000, 11, 'm'}, + { 0xeac00000, 11, ':'}, + { 0xeae00000, 11, 'b'}, + { 0xeb000000, 8, 'u'}, + { 0xec000000, 6, 't'}, + { 0xf0000000, 4, 'a'}, + { 0x00000000, 3, 't'}, + { 0x20000000, 5, 'a'}, + { 0x28000000, 6, 'p'}, + { 0x2c000000, 7, 'z'}, + { 0x2e000000, 9, '-'}, + { 0x2e800000, 9, 'x'}, + { 0x2f000000, 8, 'b'}, + { 0x30000000, 4, 'l'}, + { 0x40000000, 3, 's'}, + { 0x60000000, 5, 'm'}, + { 0x68000000, 5, 'd'}, + { 0x70000000, 5, 'v'}, + { 0x78000000, 6, 'f'}, + { 0x7c000000, 7, ' '}, + { 0x7e000000, 8, 'k'}, + { 0x7f000000, 10, 'u'}, + { 0x7f400000, 11, '.'}, + { 0x7f600000, 15, '/'}, + { 0x7f620000, 19, STOP}, + { 0x7f622000, 19, 'C'}, + { 0x7f624000, 19, ESCAPE}, + { 0x7f626000, 20, 'D'}, + { 0x7f627000, 20, ';'}, + { 0x7f630000, 16, '?'}, + { 0x7f640000, 14, ':'}, + { 0x7f680000, 13, 'i'}, + { 0x7f700000, 12, 'w'}, + { 0x7f800000, 10, 'q'}, + { 0x7fc00000, 11, ','}, + { 0x7fe00000, 14, 'h'}, + { 0x7fe40000, 16, 'P'}, + { 0x7fe50000, 18, ')'}, + { 0x7fe58000, 17, '!'}, + { 0x7fe60000, 15, 'y'}, + { 0x7fe80000, 13, 'j'}, + { 0x7ff00000, 12, '\''}, + { 0x80000000, 2, 'n'}, + { 0xc0000000, 4, 'o'}, + { 0xd0000000, 4, 'c'}, + { 0xe0000000, 5, 'g'}, + { 0xe8000000, 5, 'r'}, + { 0xf0000000, 4, 'e'}, + { 0x00000000, 1, 'o'}, + { 0x80000000, 5, 'i'}, + { 0x88000000, 9, '\''}, + { 0x88800000, 11, 'n'}, + { 0x88a00000, 13, ESCAPE}, + { 0x88b00000, 12, 's'}, + { 0x88c00000, 10, 't'}, + { 0x89000000, 8, '.'}, + { 0x8a000000, 7, ' '}, + { 0x8c000000, 6, 'y'}, + { 0x90000000, 4, 'e'}, + { 0xa0000000, 3, 'a'}, + { 0xc0000000, 2, 'u'}, + { 0x00000000, 3, 's'}, + { 0x20000000, 4, '.'}, + { 0x30000000, 6, '\''}, + { 0x34000000, 6, 'a'}, + { 0x38000000, 6, 'p'}, + { 0x3c000000, 6, ','}, + { 0x40000000, 7, '/'}, + { 0x42000000, 10, 'r'}, + { 0x42400000, 10, ESCAPE}, + { 0x42800000, 10, '?'}, + { 0x42c00000, 11, 'j'}, + { 0x42e00000, 12, ')'}, + { 0x42f00000, 13, 'v'}, + { 0x43000000, 10, 't'}, + { 0x43400000, 10, 'g'}, + { 0x43800000, 9, 'b'}, + { 0x44000000, 7, '-'}, + { 0x46000000, 7, 'o'}, + { 0x48000000, 5, 'y'}, + { 0x50000000, 6, 'l'}, + { 0x54000000, 6, 'f'}, + { 0x58000000, 6, 'n'}, + { 0x5c000000, 9, 'w'}, + { 0x5c800000, 9, 'm'}, + { 0x5d000000, 8, ':'}, + { 0x5e000000, 9, 'h'}, + { 0x5e800000, 12, ';'}, + { 0x5e900000, 12, 'c'}, + { 0x5eb00000, 13, '!'}, + { 0x5eb80000, 14, '@'}, + { 0x5ebc0000, 15, '"'}, + { 0x5ebe0000, 15, STOP}, + { 0x5ec00000, 10, 'd'}, + { 0x5f000000, 9, 'u'}, + { 0x5f800000, 9, 'k'}, + { 0x60000000, 3, 'i'}, + { 0x80000000, 2, ' '}, + { 0xc0000000, 2, 'e'}, + { 0x00000000, 4, 'u'}, + { 0x10000000, 4, 'd'}, + { 0x20000000, 4, 'y'}, + { 0x30000000, 6, '.'}, + { 0x34000000, 7, 'v'}, + { 0x36000000, 10, 'r'}, + { 0x36400000, 10, 'h'}, + { 0x36800000, 9, ':'}, + { 0x37000000, 8, 'c'}, + { 0x38000000, 6, 't'}, + { 0x3c000000, 7, 'f'}, + { 0x3e000000, 8, '-'}, + { 0x3f000000, 10, 'n'}, + { 0x3f400000, 10, 'g'}, + { 0x3f800000, 9, 'b'}, + { 0x40000000, 3, 'a'}, + { 0x60000000, 3, 'i'}, + { 0x80000000, 3, 'l'}, + { 0xa0000000, 5, 's'}, + { 0xa8000000, 7, 'm'}, + { 0xaa000000, 7, 'k'}, + { 0xac000000, 7, 'p'}, + { 0xae000000, 9, '\''}, + { 0xae800000, 11, '?'}, + { 0xaea00000, 13, '!'}, + { 0xaea80000, 15, ';'}, + { 0xaeaa0000, 17, '@'}, + { 0xaeaa8000, 17, 'j'}, + { 0xaeab0000, 16, ESCAPE}, + { 0xaeac0000, 14, '/'}, + { 0xaeb00000, 13, 'z'}, + { 0xaeb80000, 15, 'E'}, + { 0xaebc0000, 16, ')'}, + { 0xaebd0000, 17, '"'}, + { 0xaebdc000, 18, ']'}, + { 0xaebe0000, 15, STOP}, + { 0xaec00000, 10, 'w'}, + { 0xaf000000, 8, ','}, + { 0xb0000000, 4, 'o'}, + { 0xc0000000, 3, 'e'}, + { 0xe0000000, 3, ' '}, + { 0x00000000, 2, 'a'}, + { 0x40000000, 2, 'e'}, + { 0x80000000, 5, '.'}, + { 0x88000000, 5, 's'}, + { 0x90000000, 4, 'p'}, + { 0xa0000000, 7, ','}, + { 0xa2000000, 8, ']'}, + { 0xa3000000, 9, ':'}, + { 0xa3800000, 11, '?'}, + { 0xa3a00000, 11, '!'}, + { 0xa3c00000, 10, 'r'}, + { 0xa4000000, 6, 'y'}, + { 0xa8000000, 7, '/'}, + { 0xaa000000, 9, '\''}, + { 0xaa800000, 11, STOP}, + { 0xaaa00000, 11, 'w'}, + { 0xaac00000, 10, 'f'}, + { 0xab000000, 10, 'l'}, + { 0xab400000, 14, ')'}, + { 0xab440000, 14, ESCAPE}, + { 0xab488000, 17, 'v'}, + { 0xab490000, 17, 'k'}, + { 0xab498000, 17, 'z'}, + { 0xab4a0000, 15, 'g'}, + { 0xab4c0000, 14, 'd'}, + { 0xab500000, 13, 't'}, + { 0xab600000, 11, 'h'}, + { 0xab800000, 10, 'n'}, + { 0xabc00000, 11, '-'}, + { 0xabe00000, 12, '4'}, + { 0xabf00000, 13, ';'}, + { 0xabf80000, 13, 'c'}, + { 0xac000000, 6, 'b'}, + { 0xb0000000, 4, 'o'}, + { 0xc0000000, 4, 'i'}, + { 0xd0000000, 5, 'u'}, + { 0xd8000000, 5, 'm'}, + { 0xe0000000, 3, ' '}, + { 0x00000000, 4, 's'}, + { 0x10000000, 8, 'm'}, + { 0x11000000, 11, 'p'}, + { 0x11200000, 13, '/'}, + { 0x11280000, 13, STOP}, + { 0x11300000, 12, ';'}, + { 0x11400000, 10, 'z'}, + { 0x11800000, 9, 'w'}, + { 0x12000000, 7, 'u'}, + { 0x14000000, 8, 'l'}, + { 0x15000000, 8, '-'}, + { 0x16000000, 7, 'v'}, + { 0x18000000, 7, 'f'}, + { 0x1a000000, 10, 'h'}, + { 0x1a400000, 13, ESCAPE}, + { 0x1a480000, 14, 'B'}, + { 0x1a4c0000, 16, ']'}, + { 0x1a4d0000, 16, '"'}, + { 0x1a4e0000, 16, '@'}, + { 0x1a500000, 12, ')'}, + { 0x1a600000, 11, 'x'}, + { 0x1a800000, 9, ':'}, + { 0x1b000000, 10, 'b'}, + { 0x1b400000, 10, 'j'}, + { 0x1b800000, 10, 'r'}, + { 0x1bc00000, 12, '!'}, + { 0x1bd00000, 12, 'q'}, + { 0x1be00000, 11, '?'}, + { 0x1c000000, 6, '.'}, + { 0x20000000, 3, 't'}, + { 0x40000000, 2, ' '}, + { 0x80000000, 3, 'g'}, + { 0xa0000000, 4, 'a'}, + { 0xb0000000, 5, 'c'}, + { 0xb8000000, 7, 'k'}, + { 0xba000000, 7, '\''}, + { 0xbc000000, 6, 'n'}, + { 0xc0000000, 5, 'i'}, + { 0xc8000000, 7, 'y'}, + { 0xca000000, 7, ','}, + { 0xcc000000, 6, 'o'}, + { 0xd0000000, 4, 'e'}, + { 0xe0000000, 3, 'd'}, + { 0x00000000, 4, 'l'}, + { 0x10000000, 5, 'v'}, + { 0x18000000, 6, 'k'}, + { 0x1c000000, 6, 'i'}, + { 0x20000000, 3, 'u'}, + { 0x40000000, 5, 's'}, + { 0x48000000, 5, 'p'}, + { 0x50000000, 6, 'g'}, + { 0x54000000, 9, '-'}, + { 0x54800000, 9, ','}, + { 0x55000000, 8, 'h'}, + { 0x56000000, 7, 'e'}, + { 0x58000000, 7, 'y'}, + { 0x5a000000, 7, 'a'}, + { 0x5c000000, 6, 'c'}, + { 0x60000000, 3, ' '}, + { 0x80000000, 3, 'r'}, + { 0xa0000000, 5, 't'}, + { 0xa8000000, 5, 'o'}, + { 0xb0000000, 8, '.'}, + { 0xb1000000, 13, '!'}, + { 0xb10c0000, 17, '"'}, + { 0xb10c8000, 18, ']'}, + { 0xb10cc000, 18, '@'}, + { 0xb10d0000, 16, ';'}, + { 0xb10e0000, 16, 'G'}, + { 0xb10f0000, 17, ESCAPE}, + { 0xb10fa000, 19, STOP}, + { 0xb10fc000, 19, 'B'}, + { 0xb10fe000, 20, 'O'}, + { 0xb10ff000, 20, 'C'}, + { 0xb1100000, 12, '?'}, + { 0xb1200000, 11, ':'}, + { 0xb1400000, 10, '\''}, + { 0xb1800000, 14, '/'}, + { 0xb1840000, 14, ')'}, + { 0xb1880000, 13, 'q'}, + { 0xb1900000, 12, 'j'}, + { 0xb1a00000, 11, 'z'}, + { 0xb1c00000, 10, 'x'}, + { 0xb2000000, 7, 'b'}, + { 0xb4000000, 6, 'd'}, + { 0xb8000000, 5, 'w'}, + { 0xc0000000, 4, 'm'}, + { 0xd0000000, 4, 'f'}, + { 0xe0000000, 3, 'n'}, + { 0x00000000, 4, 'p'}, + { 0x10000000, 8, '-'}, + { 0x11000000, 12, STOP}, + { 0x11100000, 12, ';'}, + { 0x11200000, 11, 'f'}, + { 0x11400000, 11, 'k'}, + { 0x11600000, 11, '!'}, + { 0x11800000, 9, '?'}, + { 0x12000000, 7, 'd'}, + { 0x14000000, 6, 'm'}, + { 0x18000000, 5, 't'}, + { 0x20000000, 3, 'l'}, + { 0x40000000, 3, ' '}, + { 0x60000000, 3, 'o'}, + { 0x80000000, 5, 'u'}, + { 0x88000000, 5, 'h'}, + { 0x90000000, 5, 's'}, + { 0x98000000, 17, ESCAPE}, + { 0x98020000, 15, '"'}, + { 0x98040000, 14, ')'}, + { 0x98080000, 13, 'g'}, + { 0x98100000, 12, '/'}, + { 0x98200000, 11, 'c'}, + { 0x98400000, 11, 'n'}, + { 0x98600000, 11, 'w'}, + { 0x98800000, 9, ':'}, + { 0x99000000, 10, '\''}, + { 0x99400000, 10, ']'}, + { 0x99c00000, 10, 'b'}, + { 0x9a000000, 7, 'y'}, + { 0x9c000000, 7, '.'}, + { 0x9e000000, 7, ','}, + { 0xa0000000, 3, 'r'}, + { 0xc0000000, 4, 'a'}, + { 0xd0000000, 4, 'i'}, + { 0xe0000000, 3, 'e'}, + { 0x00000000, 3, ','}, + { 0x20000000, 3, '.'}, + { 0x40000000, 8, '?'}, + { 0x42000000, 9, ESCAPE}, + { 0x43000000, 8, ')'}, + { 0x44000000, 6, 'a'}, + { 0x48000000, 5, 'b'}, + { 0x50000000, 5, '\''}, + { 0x58000000, 5, 'i'}, + { 0x60000000, 3, ' '}, + { 0x80000000, 1, 'u'}, + { 0x00000000, 3, 'a'}, + { 0x20000000, 3, 'o'}, + { 0x40000000, 4, 's'}, + { 0x50000000, 4, 't'}, + { 0x60000000, 7, 'f'}, + { 0x62010000, 18, '*'}, + { 0x62014000, 19, 'D'}, + { 0x62016000, 19, 'B'}, + { 0x62018000, 17, 'Z'}, + { 0x62020000, 15, '"'}, + { 0x62040000, 16, 'x'}, + { 0x62050000, 16, ESCAPE}, + { 0x62060000, 15, ']'}, + { 0x62080000, 13, ';'}, + { 0x62100000, 12, 'q'}, + { 0x62200000, 12, 'j'}, + { 0x62300000, 12, STOP}, + { 0x62400000, 11, '!'}, + { 0x62600000, 12, '/'}, + { 0x62740000, 14, 'z'}, + { 0x62780000, 13, ')'}, + { 0x62800000, 9, ':'}, + { 0x63000000, 8, '\''}, + { 0x64000000, 7, ','}, + { 0x66000000, 7, 'v'}, + { 0x68000000, 6, 'u'}, + { 0x6c000000, 6, 'm'}, + { 0x70000000, 5, 'd'}, + { 0x78000000, 8, '-'}, + { 0x79000000, 8, 'b'}, + { 0x7a000000, 9, 'w'}, + { 0x7a800000, 10, '?'}, + { 0x7ac00000, 10, 'h'}, + { 0x7b000000, 8, 'p'}, + { 0x7c000000, 6, 'k'}, + { 0x80000000, 3, 'i'}, + { 0xa0000000, 5, 'n'}, + { 0xa8000000, 5, 'y'}, + { 0xb0000000, 7, 'c'}, + { 0xb2000000, 7, 'g'}, + { 0xb4000000, 6, 'l'}, + { 0xb8000000, 6, '.'}, + { 0xbc000000, 6, 'r'}, + { 0xc0000000, 3, ' '}, + { 0xe0000000, 3, 'e'}, + { 0x00000000, 1, ' '}, + { 0x80000000, 4, '.'}, + { 0x90000000, 10, '!'}, + { 0x90400000, 10, 'g'}, + { 0x90800000, 9, 'b'}, + { 0x91000000, 8, 'n'}, + { 0x92000000, 9, 'f'}, + { 0x92800000, 10, 'r'}, + { 0x92c00000, 12, '/'}, + { 0x92d00000, 12, ')'}, + { 0x92e00000, 16, 'j'}, + { 0x92e10000, 16, ESCAPE}, + { 0x92e20000, 15, '"'}, + { 0x92e54000, 18, 'T'}, + { 0x92e58000, 17, '@'}, + { 0x92e60000, 15, 'z'}, + { 0x92e80000, 13, 'v'}, + { 0x92f00000, 12, STOP}, + { 0x93000000, 8, 'm'}, + { 0x94000000, 6, 'c'}, + { 0x98000000, 5, ','}, + { 0xa0000000, 3, 't'}, + { 0xc0000000, 5, 'o'}, + { 0xc8000000, 5, 's'}, + { 0xd0000000, 6, 'u'}, + { 0xd4000000, 8, 'y'}, + { 0xd5000000, 9, 'w'}, + { 0xd5800000, 10, '?'}, + { 0xd5c00000, 10, '-'}, + { 0xd6000000, 8, ':'}, + { 0xd7000000, 12, ']'}, + { 0xd7100000, 12, ';'}, + { 0xd7200000, 11, 'd'}, + { 0xd7400000, 10, 'q'}, + { 0xd7800000, 9, '\''}, + { 0xd8000000, 6, 'p'}, + { 0xdc000000, 8, 'l'}, + { 0xdd000000, 8, 'k'}, + { 0xde000000, 7, 'a'}, + { 0xe0000000, 4, 'e'}, + { 0xf0000000, 5, 'h'}, + { 0xf8000000, 5, 'i'}, + { 0x00000000, 3, 'i'}, + { 0x20000000, 4, 'a'}, + { 0x30000000, 5, 'u'}, + { 0x38000000, 9, 'n'}, + { 0x38800000, 11, '!'}, + { 0x38a00000, 13, 'g'}, + { 0x38a80000, 13, ';'}, + { 0x38b40000, 14, STOP}, + { 0x38b80000, 16, '@'}, + { 0x38b90000, 18, 'F'}, + { 0x38b94000, 19, 'j'}, + { 0x38b98000, 17, ']'}, + { 0x38ba0000, 16, 'E'}, + { 0x38bb0000, 18, ESCAPE}, + { 0x38bb4000, 19, '1'}, + { 0x38bb8000, 17, '"'}, + { 0x38bc0000, 14, ')'}, + { 0x38c00000, 10, '?'}, + { 0x39000000, 8, '-'}, + { 0x3a000000, 7, 'c'}, + { 0x3c000000, 6, '.'}, + { 0x40000000, 3, 'o'}, + { 0x60000000, 3, 'e'}, + { 0x80000000, 2, 'h'}, + { 0xc0000000, 8, 'v'}, + { 0xc1000000, 8, 'm'}, + { 0xc2000000, 7, 'l'}, + { 0xc4000000, 6, 't'}, + { 0xc8000000, 5, 'r'}, + { 0xd0000000, 6, 'y'}, + { 0xd4000000, 11, 'z'}, + { 0xd4200000, 12, 'x'}, + { 0xd4300000, 13, 'p'}, + { 0xd4380000, 14, '/'}, + { 0xd43c0000, 14, 'k'}, + { 0xd4400000, 10, 'b'}, + { 0xd4800000, 10, ':'}, + { 0xd4c00000, 11, 'd'}, + { 0xd4e00000, 11, 'f'}, + { 0xd5000000, 8, 'w'}, + { 0xd6000000, 8, ','}, + { 0xd7000000, 8, '\''}, + { 0xd8000000, 5, 's'}, + { 0xe0000000, 3, ' '}, + { 0x00000000, 5, 'b'}, + { 0x08000000, 5, ' '}, + { 0x10000000, 4, 'd'}, + { 0x20000000, 4, 'e'}, + { 0x30000000, 5, 'i'}, + { 0x38000000, 7, 'y'}, + { 0x3a000000, 8, 'z'}, + { 0x3b000000, 11, 'w'}, + { 0x3b200000, 12, 'q'}, + { 0x3b300000, 13, 'j'}, + { 0x3b380000, 15, 'u'}, + { 0x3b3a0000, 15, '?'}, + { 0x3b3c4000, 18, STOP}, + { 0x3b3c8000, 17, ESCAPE}, + { 0x3b3d0000, 18, ';'}, + { 0x3b3d4000, 19, 'T'}, + { 0x3b3dc000, 18, ')'}, + { 0x3b3e0000, 16, '/'}, + { 0x3b3f0000, 16, '!'}, + { 0x3b400000, 10, '-'}, + { 0x3b800000, 10, 'o'}, + { 0x3bc00000, 11, ':'}, + { 0x3be00000, 12, 'h'}, + { 0x3bf00000, 12, 'v'}, + { 0x3c000000, 8, '\''}, + { 0x3d000000, 9, ','}, + { 0x3d800000, 10, '.'}, + { 0x3dc00000, 10, 'x'}, + { 0x3e000000, 8, 'f'}, + { 0x3f000000, 8, 'k'}, + { 0x40000000, 5, 'a'}, + { 0x48000000, 5, 'g'}, + { 0x50000000, 4, 'l'}, + { 0x60000000, 3, 't'}, + { 0x80000000, 4, 'p'}, + { 0x90000000, 5, 'c'}, + { 0x98000000, 5, 'm'}, + { 0xa0000000, 3, 'n'}, + { 0xc0000000, 3, 's'}, + { 0xe0000000, 3, 'r'}, + { 0x00000000, 3, 'a'}, + { 0x20000000, 9, 'u'}, + { 0x20a00000, 12, 'g'}, + { 0x20b00000, 12, 'v'}, + { 0x20c00000, 11, ','}, + { 0x20e40000, 15, 't'}, + { 0x20e60000, 16, 'd'}, + { 0x20e70000, 17, '/'}, + { 0x20e78000, 18, ESCAPE}, + { 0x20e80000, 13, 'k'}, + { 0x20f00000, 12, 'l'}, + { 0x21000000, 8, '\''}, + { 0x22000000, 9, 's'}, + { 0x22800000, 10, 'r'}, + { 0x22c00000, 11, 'n'}, + { 0x22e00000, 12, '@'}, + { 0x22f00000, 12, ':'}, + { 0x23000000, 8, 'y'}, + { 0x24000000, 6, ' '}, + { 0x28000000, 5, '.'}, + { 0x30000000, 4, 'o'}, + { 0x40000000, 2, 'i'}, + { 0x80000000, 1, 'e'}, + { 0x00000000, 2, 'i'}, + { 0x40000000, 5, '.'}, + { 0x48000000, 5, 'w'}, + { 0x50000000, 4, 'a'}, + { 0x60000000, 3, 'e'}, + { 0x80000000, 3, ' '}, + { 0xa0000000, 3, 's'}, + { 0xc0000000, 3, 'h'}, + { 0xe0000000, 5, 'n'}, + { 0xe8000000, 11, 'f'}, + { 0xe8200000, 11, ']'}, + { 0xe8400000, 11, '!'}, + { 0xe8600000, 13, STOP}, + { 0xe8680000, 13, 'u'}, + { 0xe8700000, 12, 'g'}, + { 0xe8800000, 10, ':'}, + { 0xe8c00000, 12, '?'}, + { 0xe8d00000, 12, 't'}, + { 0xe8e00000, 11, 'k'}, + { 0xe9000000, 9, 'c'}, + { 0xe9800000, 10, 'm'}, + { 0xe9c00000, 10, '\''}, + { 0xea000000, 8, ','}, + { 0xeb000000, 8, 'l'}, + { 0xec000000, 7, 'r'}, + { 0xee000000, 10, 'd'}, + { 0xee400000, 11, '-'}, + { 0xee600000, 16, '/'}, + { 0xee610000, 17, ';'}, + { 0xee618000, 19, ESCAPE}, + { 0xee620000, 15, 'q'}, + { 0xee640000, 14, 'j'}, + { 0xee680000, 13, ')'}, + { 0xee700000, 12, 'p'}, + { 0xee800000, 9, 'b'}, + { 0xef000000, 8, 'y'}, + { 0xf0000000, 4, 'o'}, + { 0x00000000, 4, 'i'}, + { 0x10000000, 5, 'u'}, + { 0x18000000, 6, 'f'}, + { 0x1c000000, 7, ','}, + { 0x1e000000, 7, 'm'}, + { 0x20000000, 4, 'a'}, + { 0x30000000, 9, 's'}, + { 0x30a00000, 13, '4'}, + { 0x30a80000, 13, '!'}, + { 0x30b00000, 12, '/'}, + { 0x30c00000, 10, '?'}, + { 0x32000000, 7, 'y'}, + { 0x34000000, 6, 'o'}, + { 0x38000000, 5, 'e'}, + { 0x40000000, 2, 'p'}, + { 0x80000000, 4, 'c'}, + { 0x90000000, 6, '.'}, + { 0x94000000, 9, ':'}, + { 0x94800000, 10, 'l'}, + { 0x94c00000, 11, 'x'}, + { 0x94e00000, 11, 'b'}, + { 0x95000000, 8, '\''}, + { 0x96000000, 8, 'q'}, + { 0x97000000, 9, 'h'}, + { 0x97800000, 10, 'w'}, + { 0x97c80000, 13, STOP}, + { 0x97d00000, 16, ESCAPE}, + { 0x97d20000, 15, 'v'}, + { 0x97d80000, 13, ';'}, + { 0x97e00000, 11, ')'}, + { 0x98000000, 5, '-'}, + { 0xa0000000, 3, ' '}, + { 0xc0000000, 2, 't'}, + { 0x00000000, 3, 'o'}, + { 0x20000000, 7, 'w'}, + { 0x22000000, 11, ')'}, + { 0x22200000, 13, 'z'}, + { 0x22280000, 15, 'y'}, + { 0x222a0000, 15, 'x'}, + { 0x222c0000, 14, 'j'}, + { 0x22300000, 12, 'k'}, + { 0x22400000, 10, ';'}, + { 0x22800000, 10, 'J'}, + { 0x22c00000, 12, ESCAPE}, + { 0x22d00000, 12, 'u'}, + { 0x22e00000, 11, '/'}, + { 0x23000000, 8, 'b'}, + { 0x24000000, 6, 'a'}, + { 0x28000000, 6, 'i'}, + { 0x2c000000, 6, 'd'}, + { 0x30000000, 4, 's'}, + { 0x40000000, 8, '?'}, + { 0x41000000, 8, 'r'}, + { 0x42000000, 8, 'p'}, + { 0x43000000, 8, 'f'}, + { 0x44000000, 6, 'n'}, + { 0x48000000, 5, ','}, + { 0x50000000, 4, '.'}, + { 0x60000000, 5, 'e'}, + { 0x68000000, 7, 't'}, + { 0x6a000000, 7, 'm'}, + { 0x6c000000, 6, ':'}, + { 0x70000000, 5, '\''}, + { 0x78000000, 10, 'h'}, + { 0x78400000, 10, '!'}, + { 0x78800000, 16, 'v'}, + { 0x78810000, 16, 'T'}, + { 0x78830000, 16, 'P'}, + { 0x78840000, 14, '2'}, + { 0x78880000, 13, '"'}, + { 0x78900000, 12, STOP}, + { 0x78a00000, 11, ']'}, + { 0x78c00000, 10, 'g'}, + { 0x79000000, 8, 'c'}, + { 0x7a000000, 7, '-'}, + { 0x7c000000, 6, 'l'}, + { 0x80000000, 1, ' '}, + { 0x00000000, 6, 'c'}, + { 0x04000000, 7, '\''}, + { 0x06000000, 8, ':'}, + { 0x07000000, 8, 't'}, + { 0x08000000, 6, ','}, + { 0x0c000000, 6, '.'}, + { 0x10000000, 4, 'l'}, + { 0x20000000, 3, 'a'}, + { 0x40000000, 4, 'y'}, + { 0x50000000, 5, 'o'}, + { 0x58000000, 6, 'w'}, + { 0x5c000000, 9, 'k'}, + { 0x5c800000, 11, 's'}, + { 0x5ca00000, 11, '/'}, + { 0x5cc00000, 12, 'h'}, + { 0x5cd20000, 15, STOP}, + { 0x5cd80000, 14, 'f'}, + { 0x5cdc0000, 14, 'r'}, + { 0x5ce00000, 11, 'd'}, + { 0x5d000000, 8, 'm'}, + { 0x5e000000, 9, '-'}, + { 0x5e800000, 9, 'u'}, + { 0x5f000000, 12, '@'}, + { 0x5f100000, 14, 'q'}, + { 0x5f140000, 14, 'n'}, + { 0x5f180000, 13, 'v'}, + { 0x5f200000, 11, 'p'}, + { 0x5f400000, 12, ')'}, + { 0x5f500000, 13, 'g'}, + { 0x5f580000, 14, ESCAPE}, + { 0x5f600000, 11, '?'}, + { 0x5f800000, 9, 'b'}, + { 0x60000000, 3, 'z'}, + { 0x80000000, 2, 'e'}, + { 0xc0000000, 3, ' '}, + { 0xe0000000, 3, 'i'}, + { 0x80000000, 1, ESCAPE}, + { 0x00000000, 1, ESCAPE} +}; + +unsigned fsat_index[] = { + 0, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 106, 110, 110, 110, 111, 112, 115, + 145, 147, 149, 153, 154, 158, 189, 206, + 217, 237, 257, 272, 282, 297, 304, 314, + 324, 332, 345, 350, 351, 351, 351, 351, + 355, 355, 391, 411, 434, 456, 487, 508, + 527, 540, 572, 585, 605, 620, 642, 659, + 691, 713, 719, 737, 770, 794, 812, 830, + 843, 850, 859, 866, 866, 866, 866, 866, + 866, 866, 903, 926, 959, 991, 1032, 1052, + 1078, 1107, 1141, 1148, 1177, 1210, 1235, 1274, + 1313, 1340, 1344, 1379, 1412, 1446, 1476, 1487, + 1514, 1531, 1563, 1578, 1578, 1578, 1578, 1578, + 1578, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, + 1626, 1703, 1715, 1748, 1749, 1755, 1757, 1763, + 1832, 1883, 1891, 1897, 1899, 1915, 1978, 2037, + 2086, 2118, 2148, 2177, 2206, 2234, 2265, 2288, + 2315, 2341, 2365, 2370, 2372, 2373, 2374, 2375, + 2385, 2387, 2444, 2480, 2524, 2567, 2616, 2646, + 2676, 2700, 2750, 2775, 2808, 2835, 2878, 2907, + 2960, 2996, 3006, 3042, 3097, 3138, 3178, 3209, + 3235, 3255, 3276, 3290, 3319, 3319, 3326, 3326, + 3327, 3334, 3382, 3418, 3473, 3514, 3566, 3600, + 3638, 3678, 3720, 3733, 3771, 3812, 3850, 3893, + 3939, 3975, 3986, 4031, 4073, 4117, 4157, 4180, + 4217, 4250, 4294, 4330, 4330, 4331, 4332, 4332, + 4332 +}; diff -uNr mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.cpp mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp --- mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.cpp 2008-03-07 22:53:09.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp 2008-12-13 21:54:37.000000000 +0100 @@ -923,15 +923,16 @@ } #undef DONE_WITH_PES_PACKET -int MPEGStreamData::ProcessData(unsigned char *buffer, int len) +int MPEGStreamData::ProcessData(const unsigned char *buffer, int len) { int pos = 0; + bool resync = false; while (pos + 187 < len) // while we have a whole packet left { - if (buffer[pos] != SYNC_BYTE) + if (buffer[pos] != SYNC_BYTE || resync) { - int newpos = ResyncStream(buffer, pos, len); + int newpos = ResyncStream(buffer, pos+1, len); if (newpos == -1) return len - pos; if (newpos == -2) @@ -942,9 +943,12 @@ const TSPacket *pkt = reinterpret_cast<const TSPacket*>(&buffer[pos]); if (ProcessTSPacket(*pkt)) + { pos += TSPacket::SIZE; // Advance to next TS packet + resync = false; + } else // Let it resync in case of dropped bytes - buffer[pos] = SYNC_BYTE + 1; + resync = true; } return len - pos; @@ -995,7 +999,8 @@ return true; } -int MPEGStreamData::ResyncStream(unsigned char *buffer, int curr_pos, int len) +int MPEGStreamData::ResyncStream(const unsigned char *buffer, int curr_pos, + int len) { // Search for two sync bytes 188 bytes apart, int pos = curr_pos; diff -uNr mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.h mythtv/libs/libmythtv/mpeg/mpegstreamdata.h --- mythtv-0.21/libs/libmythtv/mpeg/mpegstreamdata.h 2008-01-14 17:45:33.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/mpegstreamdata.h 2008-12-13 21:54:37.000000000 +0100 @@ -107,7 +107,7 @@ virtual bool HandleTables(uint pid, const PSIPTable &psip); virtual void HandleTSTables(const TSPacket* tspacket); virtual bool ProcessTSPacket(const TSPacket& tspacket); - virtual int ProcessData(unsigned char *buffer, int len); + virtual int ProcessData(const unsigned char *buffer, int len); inline void HandleAdaptationFieldControl(const TSPacket* tspacket); // Listening @@ -293,7 +293,7 @@ void ProcessPMT(const ProgramMapTable *pmt); void ProcessEncryptedPacket(const TSPacket&); - static int ResyncStream(unsigned char *buffer, int curr_pos, int len); + static int ResyncStream(const unsigned char *buffer, int curr_pos, int len); void UpdateTimeOffset(uint64_t si_utc_time); diff -uNr mythtv-0.21/libs/libmythtv/mpeg/pespacket.cpp mythtv/libs/libmythtv/mpeg/pespacket.cpp --- mythtv-0.21/libs/libmythtv/mpeg/pespacket.cpp 2006-09-07 20:55:03.000000000 +0200 +++ mythtv/libs/libmythtv/mpeg/pespacket.cpp 2009-01-15 22:12:48.000000000 +0100 @@ -6,10 +6,10 @@ extern "C" { #include "mythconfig.h" -#include "../libavcodec/avcodec.h" -#include "../libavformat/avformat.h" -#include "../libavutil/crc.h" -#include "../libavutil/bswap.h" +#include "libavcodec/avcodec.h" +#include "libavformat/avformat.h" +#include "libavutil/crc.h" +#include "libavutil/bswap.h" } #include <vector> @@ -333,21 +333,25 @@ unsigned char *pes_alloc(uint size) { +#ifndef USING_VALGRIND QMutexLocker locker(&pes_alloc_mutex); if (size <= 188) return get_188_block(); else if (size <= 4096) return get_4096_block(); +#endif return (unsigned char*) malloc(size); } void pes_free(unsigned char *ptr) { +#ifndef USING_VALGRIND QMutexLocker locker(&pes_alloc_mutex); if (is_188_block(ptr)) return_188_block(ptr); else if (is_4096_block(ptr)) return_4096_block(ptr); else +#endif free(ptr); } diff -uNr mythtv-0.21/libs/libmythtv/mpeg/scanstreamdata.cpp mythtv/libs/libmythtv/mpeg/scanstreamdata.cpp --- mythtv-0.21/libs/libmythtv/mpeg/scanstreamdata.cpp 2006-11-06 19:18:46.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/scanstreamdata.cpp 2009-01-17 09:23:55.000000000 +0100 @@ -79,3 +79,14 @@ return "mpeg"; } + + +void ScanStreamData::DeleteCachedTable(PSIPTable *psip) const +{ + if (!psip) + return; + + ATSCStreamData::DeleteCachedTable(psip); + if (psip->pesdata()) + DVBStreamData::DeleteCachedTable(psip); +} diff -uNr mythtv-0.21/libs/libmythtv/mpeg/scanstreamdata.h mythtv/libs/libmythtv/mpeg/scanstreamdata.h --- mythtv-0.21/libs/libmythtv/mpeg/scanstreamdata.h 2006-11-06 19:18:46.000000000 +0100 +++ mythtv/libs/libmythtv/mpeg/scanstreamdata.h 2009-01-17 09:23:55.000000000 +0100 @@ -27,6 +27,9 @@ uint_vec_t& /*del_pids*/) const { return false; } QString GetSIStandard(QString guess = "mpeg") const; + + private: + virtual void DeleteCachedTable(PSIPTable *psip) const; }; #endif // SCANSTREAMDATA_H_ diff -uNr mythtv-0.21/libs/libmythtv/NuppelVideoPlayer.cpp mythtv/libs/libmythtv/NuppelVideoPlayer.cpp --- mythtv-0.21/libs/libmythtv/NuppelVideoPlayer.cpp 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/libs/libmythtv/NuppelVideoPlayer.cpp 2008-12-31 21:12:34.000000000 +0100 @@ -145,6 +145,8 @@ m_playbackinfo(NULL), // Window stuff parentWidget(NULL), embedid(0), embx(-1), emby(-1), embw(-1), embh(-1), + embed_saved_scan_type((FrameScanType)-2), + embed_saved_scan_lock(false), // State eof(false), m_double_framerate(false), m_double_process(false), @@ -741,6 +743,9 @@ } InitFilters(); + + if (ringBuffer->InDVDMenuOrStillFrame()) + ringBuffer->DVD()->SetRunSeekCellStart(true); } QString NuppelVideoPlayer::ReinitAudio(void) @@ -996,8 +1001,11 @@ return; } - video_dim = QSize((width + 15) & ~0xf, (height + 15) & ~0xf); - video_disp_dim=QSize(width, height); + if ((width > 0) && (height > 0)) + { + video_dim = QSize((width + 15) & ~0xf, (height + 15) & ~0xf); + video_disp_dim = QSize(width, height); + } video_aspect = (aspect > 0.0f) ? aspect : video_aspect; keyframedist = (keyframedistance > 0) ? keyframedistance : keyframedist; @@ -1585,6 +1593,16 @@ { if (videoOutput) { + // BEGIN HACK -- Temporarily disable deinterlacing + // Note: this should no longer be needed after mythtv-vid merge + if ((int)embed_saved_scan_type <= kScan_Ignore) + { + embed_saved_scan_type = m_scan; + embed_saved_scan_lock = m_scan_locked; + SetScanType(kScan_Progressive); + } + // END HACK + videoOutput->EmbedInWidget(wid, x, y, w, h); } else @@ -1602,6 +1620,17 @@ if (videoOutput) { videoOutput->StopEmbedding(); + + // BEGIN HACK -- Temporarily disable deinterlacing + // Note: this should no longer be needed after mythtv-vid merge + if ((int)embed_saved_scan_type >= kScan_Ignore) + { + SetScanType(embed_saved_scan_type); + m_scan_locked = embed_saved_scan_lock; + embed_saved_scan_type = (FrameScanType) -2; + } + // END HACK + ReinitOSD(); } } @@ -2435,6 +2464,9 @@ } avsync_delay = (buffer->timecode - currentaudiotime) * 1000;//usec + // prevents major jitter when pts resets during dvd title + if (avsync_delay > 2000000 && ringBuffer->isDVD()) + avsync_delay = 90000; avsync_avg = (avsync_delay + (avsync_avg * 3)) / 4; if (!usevideotimebase) { @@ -2507,8 +2539,7 @@ return; } - if (ringBuffer->InDVDMenuOrStillFrame()) - DisplayDVDButton(); + DisplayDVDButton(); videofiltersLock.lock(); videoOutput->ProcessFrame(NULL, osd, videoFilters, pipplayer); @@ -2524,7 +2555,8 @@ prebuffering_lock.lock(); if (prebuffering) { - if (ringBuffer->InDVDMenuOrStillFrame() && prebuffer_tries > 3) + if (ringBuffer->InDVDMenuOrStillFrame() && + prebuffer_tries > 3) { prebuffering = false; prebuffer_tries = 0; @@ -2532,7 +2564,8 @@ return true; } - if (!audio_paused && audioOutput) + if (!ringBuffer->InDVDMenuOrStillFrame() && + !audio_paused && audioOutput) { if (prebuffering) audioOutput->Pause(prebuffering); @@ -2663,8 +2696,7 @@ yuv_wait.wakeAll(); } - if (ringBuffer->InDVDMenuOrStillFrame()) - DisplayDVDButton(); + DisplayDVDButton(); // handle Interactive TV if (GetInteractiveTV() && GetDecoder()) @@ -2835,9 +2867,6 @@ if (ringBuffer->InDVDMenuOrStillFrame()) { - if (audioOutput) - audioOutput->Pause(false); - if (nbframes == 0) { VERBOSE(VB_PLAYBACK, LOC_ERR + @@ -3795,8 +3824,11 @@ int samples = len / samplesize; - if (ringBuffer->InDVDMenuOrStillFrame()) + if (ringBuffer->isDVD() && + ringBuffer->DVD()->InStillFrame()) + { audioOutput->Drain(); + } // If there is no warping, just send it to the audioOutput. if (!usevideotimebase) @@ -4493,7 +4525,14 @@ audioOutput->Reset(); if (osd) + { osd->ClearAllCCText(); + if (ringBuffer->InDVDMenuOrStillFrame()) + { + osd->HideSet("subtitles"); + osd->ClearAll("subtitles"); + } + } SetDeleteIter(); SetCommBreakIter(); @@ -4529,20 +4568,22 @@ { if (hascommbreaktable) { + commBreakIter = commBreakMap.begin(); while (commBreakIter != commBreakMap.end()) { - if ((framesPlayed + 2) > commBreakIter.key()) - { - commBreakIter++; - } - else + if (framesPlayed <= commBreakIter.key()) break; - } - VERBOSE(VB_COMMFLAG, LOC + QString("new commBreakIter = %1 @ frame %2") + commBreakIter++; + } + + if (commBreakIter != commBreakMap.end()) + { + VERBOSE(VB_COMMFLAG, LOC + QString("new commBreakIter = %1 @ frame %2") .arg(commBreakIter.data()) .arg(commBreakIter.key())); + } } } @@ -6970,15 +7011,15 @@ void NuppelVideoPlayer::DisplayDVDButton(void) { - if (!ringBuffer->InDVDMenuOrStillFrame() || !osd) + if (!ringBuffer->isDVD() || !osd) return; VideoFrame *buffer = videoOutput->GetLastShownFrame(); - int numbuttons = ringBuffer->DVD()->NumMenuButtons(); + bool numbuttons = ringBuffer->DVD()->NumMenuButtons(); bool osdshown = osd->IsSetDisplaying("subtitles"); - if ((numbuttons == 0) || + if ((!numbuttons) || (osdshown) || (dvd_stillframe_showing && buffer->timecode > 0) || ((!osdshown) && @@ -6990,39 +7031,40 @@ } OSDSet *subtitleOSD = NULL; - AVSubtitleRect *highlightButton = ringBuffer->DVD()->GetMenuButton(); - - if (highlightButton != NULL) + AVSubtitle *dvdSubtitle = ringBuffer->DVD()->GetMenuSubtitle(); + AVSubtitleRect *hl_button = NULL; + if (dvdSubtitle != NULL) { + hl_button = &(dvdSubtitle->rects[0]); osd->HideSet("subtitles"); osd->ClearAll("subtitles"); subtitleLock.lock(); - uint h = ringBuffer->DVD()->ButtonHeight(); - uint w = ringBuffer->DVD()->ButtonWidth(); - uint bitmapHeight = highlightButton->h; - uint bitmapWidth = highlightButton->w; - int linesize = highlightButton->linesize; - int x1 = highlightButton->x; - int y1 = highlightButton->y; - uint btnX = ringBuffer->DVD()->ButtonPosX(); - uint btnY = ringBuffer->DVD()->ButtonPosY(); + uint h = hl_button->h; + uint w = hl_button->w; + int linesize = hl_button->linesize; + int x1 = hl_button->x; + int y1 = hl_button->y; + QRect buttonPos = ringBuffer->DVD()->GetButtonCoords(); subtitleOSD = osd->GetSet("subtitles"); - - if ((w + x1) > bitmapWidth) - w = w - ((w + x1) - bitmapWidth); - - if ((h + y1) > bitmapHeight) - h = h - ((h + y1) - bitmapHeight); - - QImage hl_button(w, h, 32); - hl_button.setAlphaBuffer(true); - for (uint y = 0; y < h; y++) + QImage hl_image(w, h, 32); + hl_image.setAlphaBuffer(true); + uint8_t color; + uint32_t pixel; + QPoint currentPos = QPoint(0,0); + for (uint y = 2; y < h; y++) { for (uint x = 0; x < w; x++) { - uint8_t color = highlightButton->bitmap[(y+y1)*linesize+(x+x1)]; - uint32_t pixel = highlightButton->rgba_palette[color]; - hl_button.setPixel(x, y, pixel); + currentPos.setY(y); + currentPos.setX(x); + color = hl_button->bitmap[(y)*linesize+(x)]; + // use rgba palette from dvd nav for drawing + // highlighted button + if (buttonPos.contains(currentPos)) + pixel = dvdSubtitle->rects[1].rgba_palette[color]; + else + pixel = hl_button->rgba_palette[color]; + hl_image.setPixel(x, y, pixel); } } @@ -7037,19 +7079,19 @@ if ((hmult < 0.99) || (hmult > 1.01) || (vmult < 0.99) || (vmult > 1.01)) { - btnX = (int) (btnX * hmult); - btnY = (int) (btnY * vmult); + x1 = (int) (x1 * hmult); + y1 = (int) (y1 * vmult); w = (int)ceil(w * hmult); h = (int)ceil(h * vmult); - hl_button = hl_button.smoothScale(w, h); + hl_image = hl_image.smoothScale(w, h); } else hmult = vmult = 1.0; OSDTypeImage* image = new OSDTypeImage(); - image->SetPosition(QPoint(btnX, btnY), hmult, vmult); - image->Load(hl_button); + image->SetPosition(QPoint(x1, y1), hmult, vmult); + image->Load(hl_image); image->SetDontRoundPosition(true); subtitleOSD->AddType(image); diff -uNr mythtv-0.21/libs/libmythtv/NuppelVideoPlayer.h mythtv/libs/libmythtv/NuppelVideoPlayer.h --- mythtv-0.21/libs/libmythtv/NuppelVideoPlayer.h 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/libs/libmythtv/NuppelVideoPlayer.h 2008-10-05 04:00:28.000000000 +0200 @@ -527,7 +527,8 @@ QWidget *parentWidget; WId embedid; int embx, emby, embw, embh; - + FrameScanType embed_saved_scan_type; + bool embed_saved_scan_lock; // State QWaitCondition decoderThreadPaused; diff -uNr mythtv-0.21/libs/libmythtv/NuppelVideoRecorder.cpp mythtv/libs/libmythtv/NuppelVideoRecorder.cpp --- mythtv-0.21/libs/libmythtv/NuppelVideoRecorder.cpp 2008-01-25 08:02:26.000000000 +0100 +++ mythtv/libs/libmythtv/NuppelVideoRecorder.cpp 2008-12-06 19:46:03.000000000 +0100 @@ -981,28 +981,25 @@ correct_bttv = true; QString driver = (char *)vcap.driver; - if (driver == "cx8800" || driver == "go7007" || driver == "em28xx") + channelfd = open(videodevice.ascii(), O_RDWR); + if (channelfd < 0) { - channelfd = open(videodevice.ascii(), O_RDWR); - if (channelfd < 0) - { - VERBOSE(VB_IMPORTANT, LOC_ERR + - QString("Can't open video device: %1").arg(videodevice)); - perror("open video:"); - KillChildren(); - return false; - } - - if (driver == "go7007") - { - go7007 = true; - } - - inpixfmt = FMT_NONE; - InitFilters(); - DoV4L2(); + VERBOSE(VB_IMPORTANT, LOC_ERR + + QString("Can't open video device: %1").arg(videodevice)); + perror("open video:"); + KillChildren(); return false; } + + if (driver == "go7007") + { + go7007 = true; + } + + inpixfmt = FMT_NONE; + InitFilters(); + DoV4L2(); + return false; } channelfd = fd; diff -uNr mythtv-0.21/libs/libmythtv/playgroup.cpp mythtv/libs/libmythtv/playgroup.cpp --- mythtv-0.21/libs/libmythtv/playgroup.cpp 2007-11-19 17:44:58.000000000 +0100 +++ mythtv/libs/libmythtv/playgroup.cpp 2008-12-16 21:47:33.000000000 +0100 @@ -114,7 +114,12 @@ virtual void save(void) { if (intValue() < 50 || intValue() > 200) - setValue(0); + { + // We need to bypass the bounds checking that would + // normally occur in order to get the special value of 0 + // into the database + IntegerSetting::setValue(0); + } PlayGroupDBStorage::save(); } }; diff -uNr mythtv-0.21/libs/libmythtv/progfind.cpp mythtv/libs/libmythtv/progfind.cpp --- mythtv-0.21/libs/libmythtv/progfind.cpp 2008-01-14 17:45:33.000000000 +0100 +++ mythtv/libs/libmythtv/progfind.cpp 2009-04-07 18:39:21.000000000 +0200 @@ -1425,6 +1425,8 @@ { if (data.right(5) == ", The") data = "The " + data.left(data.length() - 5); + if (data.right(4) == ", An") + data = "An " + data.left(data.length() - 4); if (data.right(3) == ", A") data = "A " + data.left(data.length() - 3); } diff -uNr mythtv-0.21/libs/libmythtv/programinfo.cpp mythtv/libs/libmythtv/programinfo.cpp --- mythtv-0.21/libs/libmythtv/programinfo.cpp 2008-02-15 01:30:26.000000000 +0100 +++ mythtv/libs/libmythtv/programinfo.cpp 2009-02-21 06:18:28.000000000 +0100 @@ -1530,7 +1530,9 @@ if (!query.exec() || !query.isActive()) MythContext::DBError("GetRecordBasename", query); else if (query.size() < 1) - VERBOSE(VB_IMPORTANT, QString("GetRecordBasename found no entry")); + VERBOSE(VB_IMPORTANT, QString("GetRecordBasename found no entry " + "for %1 @ %2") + .arg(chanid).arg(recstartts.toString(Qt::ISODate))); else { query.next(); @@ -1551,6 +1553,9 @@ QString tmpURL; QString basename = GetRecordBasename(true); + if (basename == "") + return ""; + bool alwaysStream = gContext->GetNumSetting("AlwaysStreamFiles", 0); if ((!alwaysStream) || @@ -1569,8 +1574,9 @@ } else if (hostname == gContext->GetHostName()) { - VERBOSE(VB_FILE, LOC_ERR + QString("GetPlaybackURL: '%1' should be " - "local, but it can not be found.").arg(basename)); + VERBOSE(VB_IMPORTANT, LOC_ERR + + QString("GetPlaybackURL: '%1' should be local, but it can " + "not be found.").arg(basename)); return QString("/GetPlaybackURL/UNABLE/TO/FIND/LOCAL/FILE/ON/%1/%2") .arg(hostname).arg(basename); } @@ -4165,9 +4171,8 @@ { recDir = ""; } - else if (RemoteCheckFile(this)) + else if (!gContext->IsBackend() && RemoteCheckFile(this)) { - // if we hit here we're not recording this file recDir = pathname.section("/", 0, -2); } diff -uNr mythtv-0.21/libs/libmythtv/recordingprofile.cpp mythtv/libs/libmythtv/recordingprofile.cpp --- mythtv-0.21/libs/libmythtv/recordingprofile.cpp 2007-11-19 17:44:58.000000000 +0100 +++ mythtv/libs/libmythtv/recordingprofile.cpp 2008-12-31 20:00:27.000000000 +0100 @@ -1038,7 +1038,7 @@ QSize defaultsize(768, 576), maxsize(768, 576); bool transcoding = profName.left(11) == "Transcoders"; - bool ivtv = profName.left(34) == "MPEG-2 Encoders (PVR-x50, PVR-500)"; + bool ivtv = profName.left(20) == "IVTV MPEG-2 Encoders"; if (transcoding) { diff -uNr mythtv-0.21/libs/libmythtv/RingBuffer.cpp mythtv/libs/libmythtv/RingBuffer.cpp --- mythtv-0.21/libs/libmythtv/RingBuffer.cpp 2008-02-26 22:13:09.000000000 +0100 +++ mythtv/libs/libmythtv/RingBuffer.cpp 2008-06-23 02:35:56.000000000 +0200 @@ -181,17 +181,14 @@ is_dvd = true; dvdPriv = new DVDRingBufferPriv(); startreadahead = false; - int pathLen = filename.find("/", 4); - if (pathLen != -1) - { - QString tempFilename = filename.right(filename.length() - pathLen); - QFile checkFile(tempFilename); - if (!checkFile.exists()) - filename = "/dev/dvd"; - else - filename = tempFilename; - } + if (filename.left(6) == "dvd://") // 'Play DVD' sends "dvd:/" + dev + filename.remove(0,5); // e.g. "dvd://dev/sda" + else // Less correct URI "dvd:" + path + filename.remove(0,4); // e.g. "dvd:/videos/ET" + + if (QFile::exists(filename)) + VERBOSE(VB_PLAYBACK, "OpenFile() trying DVD at " + filename); else { filename = "/dev/dvd"; diff -uNr mythtv-0.21/libs/libmythtv/scanwizardhelpers.cpp mythtv/libs/libmythtv/scanwizardhelpers.cpp --- mythtv-0.21/libs/libmythtv/scanwizardhelpers.cpp 2008-01-14 17:45:33.000000000 +0100 +++ mythtv/libs/libmythtv/scanwizardhelpers.cpp 2009-03-02 15:24:15.000000000 +0100 @@ -1,5 +1,5 @@ /* -*- Mode: c++ -*- - * $Id: scanwizardhelpers.cpp 15437 2008-01-14 16:45:33Z danielk $ + * $Id: scanwizardhelpers.cpp 20088 2009-03-02 14:24:15Z nigel $ * vim: set expandtab tabstop=4 shiftwidth=4: * * Original Project @@ -367,6 +367,8 @@ int nCardType = CardUtil::toCardType(subtype); clearSelections(); + bool importConf = false; + switch (nCardType) { case CardUtil::V4L: @@ -379,27 +381,31 @@ QString::number(FullScan_OFDM), true); addSelection(tr("Full Scan (Tuned)"), QString::number(NITAddScan_OFDM)); - addSelection(tr("Import channels.conf"), - QString::number(DVBUtilsImport)); + importConf = true; break; case CardUtil::QPSK: addSelection(tr("Full Scan (Tuned)"), QString::number(NITAddScan_QPSK)); - addSelection(tr("Import channels.conf"), - QString::number(DVBUtilsImport)); + importConf = true; break; case CardUtil::QAM: addSelection(tr("Full Scan (Tuned)"), QString::number(NITAddScan_QAM)); - addSelection(tr("Import channels.conf"), - QString::number(DVBUtilsImport)); + importConf = true; break; case CardUtil::ATSC: - case CardUtil::HDHOMERUN: addSelection(tr("Full Scan"), QString::number(FullScan_ATSC), true); - addSelection(tr("Import channels.conf"), - QString::number(DVBUtilsImport)); + importConf = true; + break; + case CardUtil::HDHOMERUN: + addSelection(tr("Full Scan (ATSC)"), + QString::number(FullScan_ATSC), true); + addSelection(tr("Full Scan (DVB)"), + QString::number(FullScan_OFDM), true); + addSelection(tr("Full Scan (DVB, tuned)"), + QString::number(NITAddScan_OFDM)); + importConf = true; break; case CardUtil::FREEBOX: addSelection(tr("M3U Import"), @@ -415,6 +421,10 @@ return; } + if (importConf) + addSelection(tr("Import channels.conf"), + QString::number(DVBUtilsImport)); + addSelection(tr("Full Scan of Existing Transports"), QString::number(FullTransportScan)); addSelection(tr("Existing Transport Scan"), @@ -439,6 +449,10 @@ country = UK; else if (qtcountry == QLocale::Spain) country = ES; + else if (qtcountry == QLocale::NewZealand) + country = NZ; + else if (qtcountry == QLocale::France) + country = FR; #endif setLabel(tr("Country")); @@ -448,6 +462,8 @@ addSelection(QObject::tr("United Kingdom"), "uk", country == UK); addSelection(QObject::tr("Germany"), "de", country == DE); addSelection(QObject::tr("Spain"), "es", country == ES); + addSelection(QObject::tr("New Zealand"), "nz", country == NZ); + addSelection(QObject::tr("France"), "fr", country == FR); } AnalogPane::AnalogPane() : diff -uNr mythtv-0.21/libs/libmythtv/scanwizardhelpers.h mythtv/libs/libmythtv/scanwizardhelpers.h --- mythtv-0.21/libs/libmythtv/scanwizardhelpers.h 2008-01-27 20:21:41.000000000 +0100 +++ mythtv/libs/libmythtv/scanwizardhelpers.h 2008-09-27 15:54:35.000000000 +0200 @@ -1,5 +1,5 @@ /* -*- Mode: c++ -*- - * $Id: scanwizardhelpers.h 15622 2008-01-27 19:21:41Z danielk $ + * $Id: scanwizardhelpers.h 18452 2008-09-27 13:54:35Z stuartm $ * vim: set expandtab tabstop=4 shiftwidth=4: * * Original Project @@ -97,7 +97,7 @@ friend class QObject; // quiet OSX gcc warning public: - enum TYPE + enum TYPE { ScanComplete, ScanShutdown, @@ -200,6 +200,8 @@ UK, DE, ES, + NZ, + FR, }; ScanCountry(); @@ -242,7 +244,7 @@ uint hw_cardid; }; -class ScanOptionalConfig : public TriggeredConfigurationGroup +class ScanOptionalConfig : public TriggeredConfigurationGroup { Q_OBJECT @@ -660,7 +662,7 @@ class DVBS2Pane : public HorizontalConfigurationGroup { public: - DVBS2Pane() : HorizontalConfigurationGroup(false,false,true,false) + DVBS2Pane() : HorizontalConfigurationGroup(false,false,true,false) { setUseFrame(false); VerticalConfigurationGroup *left = @@ -674,7 +676,7 @@ right->addChild(pmodulation = new ScanModulation()); right->addChild(pinversion = new ScanInversion()); addChild(left); - addChild(right); + addChild(right); } QString frequency(void) const { return pfrequency->getValue(); } @@ -709,7 +711,7 @@ right->addChild(pfec = new ScanFec()); right->addChild(pinversion = new ScanInversion()); addChild(left); - addChild(right); + addChild(right); } QString frequency(void) const { return pfrequency->getValue(); } @@ -742,7 +744,7 @@ right->addChild(pmodulation = new ScanModulation()); right->addChild(pfec = new ScanFec()); addChild(left); - addChild(right); + addChild(right); } QString frequency(void) const { return pfrequency->getValue(); } diff -uNr mythtv-0.21/libs/libmythtv/siscan.cpp mythtv/libs/libmythtv/siscan.cpp --- mythtv-0.21/libs/libmythtv/siscan.cpp 2008-01-26 08:29:09.000000000 +0100 +++ mythtv/libs/libmythtv/siscan.cpp 2009-01-02 18:47:09.000000000 +0100 @@ -328,8 +328,6 @@ .arg((*current).FriendlyName)); VERBOSE(VB_SIPARSER, LOC + nit->toString()); - dvbChanNums.clear(); - if (nit->TransportStreamCount()) { emit TransportScanUpdateText( @@ -1124,6 +1122,12 @@ { // The service is in database, update it emit ServiceScanUpdateText( tr("Updating %1").arg(common_status_info)); + + bool useeit = false; + bool hidden = false; + + ChannelUtil::GetChannelSettings(chanid, useeit, hidden); + ChannelUtil::UpdateChannel( db_mplexid, db_source_id, chanid, callsign, @@ -1131,7 +1135,7 @@ chan_num, pmt->ProgramNumber(), 0, 0, - false, false, false, QString::number(freqid)); + useeit, hidden, false, QString::number(freqid)); } } @@ -1510,8 +1514,17 @@ { // The service is in database & we have good info, update it emit ServiceScanUpdateText(tr("Updating %1").arg(service_name)); + bool useeit = false; + bool hidden = false; + + ChannelUtil::GetChannelSettings(chanid, useeit, hidden); + if (!renameChannels) chan_num = ChannelUtil::GetChanNum(chanid); + else + useeit = (sdt->HasEITSchedule(i) || + sdt->HasEITPresentFollowing(i) || + force_guide_present); ChannelUtil::UpdateChannel( db_mplexid, @@ -1522,10 +1535,8 @@ chan_num, sdt->ServiceID(i), 0, 0, - sdt->HasEITSchedule(i) || - sdt->HasEITPresentFollowing(i) || - force_guide_present, - false, false, QString::null, + useeit, + hidden, false, QString::null, QString::null, QString::null, QString::null, default_authority); } diff -uNr mythtv-0.21/libs/libmythtv/textsubtitleparser.cpp mythtv/libs/libmythtv/textsubtitleparser.cpp --- mythtv-0.21/libs/libmythtv/textsubtitleparser.cpp 2006-09-05 05:49:41.000000000 +0200 +++ mythtv/libs/libmythtv/textsubtitleparser.cpp 2008-08-07 04:41:31.000000000 +0200 @@ -112,7 +112,10 @@ subtitle_t *loaded_subs = sub_read_file(&sub_data); if (!loaded_subs) + { + fclose(sub_data.file_ptr); return false; + } target.SetFrameBasedTiming(!sub_data.uses_time); diff -uNr mythtv-0.21/libs/libmythtv/ThreadedFileWriter.cpp mythtv/libs/libmythtv/ThreadedFileWriter.cpp --- mythtv-0.21/libs/libmythtv/ThreadedFileWriter.cpp 2008-02-24 16:19:20.000000000 +0100 +++ mythtv/libs/libmythtv/ThreadedFileWriter.cpp 2009-04-05 15:33:27.000000000 +0200 @@ -407,7 +407,7 @@ ignore_writes = true; } - if (written < tfw_min_write_size) + if (written <= tfw_min_write_size) { written += size; } diff -uNr mythtv-0.21/libs/libmythtv/ttfont.cpp mythtv/libs/libmythtv/ttfont.cpp --- mythtv-0.21/libs/libmythtv/ttfont.cpp 2007-06-08 12:41:38.000000000 +0200 +++ mythtv/libs/libmythtv/ttfont.cpp 2008-04-30 23:45:57.000000000 +0200 @@ -629,10 +629,16 @@ } loadedfontsize = (int)(fontsize * m_hmult); - xdpi = (int)(xdpi * m_wscale); FT_Set_Char_Size(face, 0, loadedfontsize * 64, xdpi, ydpi); + FT_Matrix tmatrix; + tmatrix.xx = (FT_Fixed)(m_wscale * (1<<16)); + tmatrix.yx = (FT_Fixed)0; + tmatrix.xy = (FT_Fixed)0; + tmatrix.yy = (FT_Fixed)(1<<16); + FT_Set_Transform(face, &tmatrix, 0); + n = face->num_charmaps; for (i = 0; i < n; i++) diff -uNr mythtv-0.21/libs/libmythtv/tv_play.cpp mythtv/libs/libmythtv/tv_play.cpp --- mythtv-0.21/libs/libmythtv/tv_play.cpp 2008-03-06 23:23:26.000000000 +0100 +++ mythtv/libs/libmythtv/tv_play.cpp 2009-04-06 21:36:41.000000000 +0200 @@ -3010,7 +3010,7 @@ return; if (activerbuffer && - activerbuffer->isDVD() && activerbuffer->DVD()->IsInMenu()) + activerbuffer->isDVD()) { for (unsigned int i = 0; i < actions.size(); i++) { @@ -5880,10 +5880,14 @@ break; } case kScheduleProgramFinder: + if (!paused) + DoPause(false); RunProgramFind(false, false); break; case kScheduledRecording: { + if (!paused) + DoPause(false); QMutexLocker locker(&pbinfoLock); ScheduledRecording *record = new ScheduledRecording(); record->loadByProgram(playbackinfo); @@ -6291,12 +6295,13 @@ message = message.simplifyWhiteSpace(); QStringList tokens = QStringList::split(" ", message); int cardnum = tokens[1].toInt(); - int filelen = tokens[2].toInt(); + //int seconds = tokens[2].toInt(); + long long frames = tokens[3].toLongLong(); if (recorder && cardnum == recorder->GetRecorderNumber()) { nvp->SetWatchingRecording(false); - nvp->SetLength(filelen); + nvp->SetLength(frames / nvp->GetFrameRate()); ChangeState(kState_WatchingPreRecorded); } } @@ -6305,13 +6310,14 @@ message = message.simplifyWhiteSpace(); QStringList tokens = QStringList::split(" ", message); int cardnum = tokens[1].toInt(); - int filelen = tokens[2].toInt(); + //int seconds = tokens[2].toInt(); + long long frames = tokens[3].toLongLong(); if (recorder && cardnum == recorder->GetRecorderNumber() && tvchain && tvchain->HasNext()) { nvp->SetWatchingRecording(false); - nvp->SetLength(filelen); + nvp->SetLength(frames / nvp->GetFrameRate()); } } } diff -uNr mythtv-0.21/libs/libmythtv/tv_rec.cpp mythtv/libs/libmythtv/tv_rec.cpp --- mythtv-0.21/libs/libmythtv/tv_rec.cpp 2008-02-07 00:48:47.000000000 +0100 +++ mythtv/libs/libmythtv/tv_rec.cpp 2009-04-06 21:36:41.000000000 +0200 @@ -1072,18 +1072,15 @@ */ void TVRec::TeardownRecorder(bool killFile) { - int filelen = -1; pauseNotify = false; ispip = false; if (recorder && HasFlags(kFlagRecorderRunning)) { - // This is a bad way to calculate this, the framerate - // may not be constant if using a DTV based recorder. - filelen = (int)((float)GetFramesWritten() / GetFramerate()); - - QString message = QString("DONE_RECORDING %1 %2") - .arg(cardid).arg(filelen); + int secsSince = curRecording->recstartts + .secsTo(QDateTime::currentDateTime()); + QString message = QString("DONE_RECORDING %1 %2 %3") + .arg(cardid).arg(secsSince).arg(GetFramesWritten()); MythEvent me(message); gContext->dispatch(me); @@ -3668,7 +3665,7 @@ if (!ok) { - if (!(request.flags & kFlagLiveTV)) + if (!(request.flags & kFlagLiveTV) || !(request.flags & kFlagEITScan)) { if (curRecording) curRecording->recstatus = rsFailed; diff -uNr mythtv-0.21/libs/libmythtv/util-opengl.cpp mythtv/libs/libmythtv/util-opengl.cpp --- mythtv-0.21/libs/libmythtv/util-opengl.cpp 2007-12-12 05:51:42.000000000 +0100 +++ mythtv/libs/libmythtv/util-opengl.cpp 2008-04-02 18:33:07.000000000 +0200 @@ -306,7 +306,9 @@ { __GLXextFuncPtr ret = NULL; -#if GLX_VERSION_1_4 +#if USING_GLX_PROC_ADDR_ARB + X11S(ret = glXGetProcAddressARB((const GLubyte*)procName.latin1())); +#elif GLX_VERSION_1_4 X11S(ret = glXGetProcAddress((const GLubyte*)procName.latin1())); #elif GLX_ARB_get_proc_address X11S(ret = glXGetProcAddressARB((const GLubyte*)procName.latin1())); diff -uNr mythtv-0.21/libs/libmythtv/videooutbase.cpp mythtv/libs/libmythtv/videooutbase.cpp --- mythtv-0.21/libs/libmythtv/videooutbase.cpp 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/libs/libmythtv/videooutbase.cpp 2009-04-19 23:30:15.000000000 +0200 @@ -1,3 +1,4 @@ +#include <cstdlib> #include <cmath> #include "videooutbase.h" @@ -510,7 +511,7 @@ SetupDeinterlace(true, db_vdisp_profile->GetFallbackDeinterlacer()); } -/** \fn VideoOutput::FallbackDeint(void) +/** \fn VideoOutput::BestDeint(void) * \brief Change to the best deinterlacing method. */ void VideoOutput::BestDeint(void) @@ -611,6 +612,8 @@ db_vdisp_profile->SetInput(video_dim); SetVideoAspectRatio(aspect); + + BestDeint(); DiscardFrames(true); diff -uNr mythtv-0.21/libs/libmythtv/videoout_d3d.cpp mythtv/libs/libmythtv/videoout_d3d.cpp --- mythtv-0.21/libs/libmythtv/videoout_d3d.cpp 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/libs/libmythtv/videoout_d3d.cpp 2008-10-16 20:06:20.000000000 +0200 @@ -118,7 +118,7 @@ { QMutexLocker locker(&m_lock); VideoOutput::InputChanged(input_size, aspect, av_codec_id, codec_private); - db_vdisp_profile->SetVideoRenderer("didect3d"); + db_vdisp_profile->SetVideoRenderer("direct3d"); if (video_dim.width() == m_InputCX && video_dim.height() == m_InputCY) { diff -uNr mythtv-0.21/libs/libmythtv/videoout_ivtv.cpp mythtv/libs/libmythtv/videoout_ivtv.cpp --- mythtv-0.21/libs/libmythtv/videoout_ivtv.cpp 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/libs/libmythtv/videoout_ivtv.cpp 2008-06-07 22:51:13.000000000 +0200 @@ -411,7 +411,7 @@ db_vdisp_profile->SetVideoRenderer("ivtv"); - allowpreviewepg = false; + allowpreviewepg = true; videoDevice = gContext->GetSetting("PVR350VideoDev"); diff -uNr mythtv-0.21/libs/libmythtv/videoout_quartz.cpp mythtv/libs/libmythtv/videoout_quartz.cpp --- mythtv-0.21/libs/libmythtv/videoout_quartz.cpp 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/libs/libmythtv/videoout_quartz.cpp 2008-11-19 11:14:13.000000000 +0100 @@ -12,12 +12,13 @@ * - Other viewing options? * * = KNOWN BUGS - * - Aspect switching occasionally fails - * - Floating window needs testing. Resizing, or viewing something - * a second time, may cause a crash (backtraces appreciated) + * - Drawing on the desktop only updates the main screen? + * - The floating window can only be created on the main screen? + * - The fullscreen window doesn't display anything when created + * on any screen except, you guessed it, the main screen. * * = REVISION - * $Id: videoout_quartz.cpp 16434 2008-03-08 00:07:31Z danielk $ + * $Id: videoout_quartz.cpp 19133 2008-11-19 10:14:13Z nigel $ * * = AUTHORS * Nigel Pearson, Jeremiah Morris @@ -36,11 +37,11 @@ // **************************************************************************** #include <map> +#include <vector> #include <iostream> +#include <algorithm> using namespace std; -#include <qptrlist.h> - #include "DisplayRes.h" #include "yuv2rgb.h" #include "uitypes.h" @@ -59,19 +60,73 @@ #include "osd.h" #include "osdsurface.h" #include "mythconfig.h" +#include "mythverbose.h" #include "videodisplayprofile.h" #include "videoout_dvdv.h" #define LOC QString("VideoOutputQuartz: ") #define LOC_ERR QString("VideoOutputQuartz Error: ") -class VideoOutputQuartzView; +/** + * An abstract class for implementing QuickTime output viewports. + * + * This class is further sub-classed for different Mac OS X UI output types. + * e.g. Main Window, Full Screen, Dock Icon, Finder/Desktop background + */ +class VideoOutputQuartzView +{ + public: + VideoOutputQuartzView(QuartzData *pData); + virtual ~VideoOutputQuartzView(); + + virtual bool Init(void); + + virtual void SetFrameSkip(int numskip); + virtual void Show(void); + + virtual void InputChanged(int width, int height, float aspect, + MythCodecID av_codec_id); + virtual void MoveResize(QRect newRect); + + virtual void EmbedChanged(bool embedded); + + protected: + virtual bool Begin(void); + virtual void End(void); + virtual void Transform(QRect newRect); + virtual void BlankScreen(bool deferred); + + // Subclasses implement the following methods: + virtual bool BeginPort(void) = 0; // Set up a valid thePort object + virtual void EndPort(void) = 0; // Release thePort + + char * name; // Name, for verbose output + + QuartzData * parentData; // information about video source is here + + CGrafPtr thePort; // QuickDraw graphics port + QRect m_desired; // Desired output size characteristics + ImageSequence theCodec; // QuickTime sequence ID + RgnHandle theMask; // clipping region + + int frameSkip; // do we skip frames? + int frameCounter; // keep track of skip status + bool drawBlank; // draw a blank frame before next Show + + /// Set if this view can use the aspect/fill/zoom calculations + /// from the base class (which are passed in by MoveResize()), + /// to rescale in the output rectangle via Transform(). + bool applyMoveResize; + + QMutex viewLock; +}; + /* * The floating window class needs an event callback. */ -OSStatus VoqvFloater_Callback(EventHandlerCallRef inHandlerCallRef, - EventRef inEvent, +OSStatus VoqvFloater_Callback(EventHandlerCallRef inHandlerCallRef, + EventRef inEvent, void *inUserData); /* @@ -85,7 +140,7 @@ srcAspect(1.3333f), srcMode(kAspect_Off), pixelData(0), pixelSize(0), - pixelLock(false), + pixelLock(), window(0), screen(0), refreshRate(60.0f), @@ -94,11 +149,17 @@ scaleUpVideo(false), correctGamma(false), convertI420to2VUY(NULL), - ZoomedH(1.0f), ZoomedV(1.0f), - ZoomedUp(0), ZoomedRight(0), - embeddedView(NULL), dvdv(NULL) {;} + ~QuartzData() { ClearViews(); } + + void ClearViews(void) + { + vector<VideoOutputQuartzView*>::iterator it = views.begin(); + for (; it != views.end(); ++it) + delete *it; + views.clear(); + } // Stored information about the media stream: int srcWidth, @@ -124,15 +185,9 @@ bool scaleUpVideo; // Enlarge video as needed? bool correctGamma; // Video gamma correction conv_i420_2vuy_fun convertI420to2VUY; // I420 -> 2VUY conversion function - - // Zoom preferences: - float ZoomedH; // VideoOutputBase::mz_scale_h - float ZoomedV; // VideoOutputBase::mz_scale_v - int ZoomedUp; // VideoOutputBase::mz_move.y() - int ZoomedRight; // VideoOutputBase::mz_move.x() // Output viewports: - QPtrList<VideoOutputQuartzView> views; // current views + vector<VideoOutputQuartzView*> views; // current views // Embedding: VideoOutputQuartzView * embeddedView; // special embedded widget @@ -140,78 +195,11 @@ DVDV * dvdv; // MPEG acceleration data }; -/** - * An abstract class for implementing QuickTime output viewports. - * - * This class is further sub-classed for different Mac OS X UI output types. - * e.g. Main Window, Full Screen, Dock Icon, Finder/Desktop background - */ -class VideoOutputQuartzView -{ - public: - VideoOutputQuartzView(QuartzData *pData); - virtual ~VideoOutputQuartzView(); - - virtual bool Init(void); - - virtual void SetFrameSkip(int numskip); - virtual void Show(void); - - virtual void InputChanged(int width, int height, float aspect, - MythCodecID av_codec_id); - virtual void VideoAspectRatioChanged(float aspect); - virtual void Zoom(ZoomDirection direction); - - virtual void EmbedChanged(bool embedded); - - protected: - virtual bool Begin(void); - virtual void End(void); - virtual void Transform(void); - virtual void BlankScreen(bool deferred); - - // Subclasses implement the following methods: - virtual bool BeginPort(void) = 0; // Set up a valid thePort object - virtual void EndPort(void) = 0; // Release thePort - - char * name; // Name, for verbose output - - QuartzData * parentData; // information about video source is here - - CGrafPtr thePort; // QuickDraw graphics port - int desiredWidth, - desiredHeight, - desiredXoff, - desiredYoff; // output size characteristics - ImageSequence theCodec; // QuickTime sequence ID - RgnHandle theMask; // clipping region - - int frameSkip; // do we skip frames? - int frameCounter; // keep track of skip status - bool drawBlank; // draw a blank frame before next Show - - bool applyTVoffset; // subclasses set this to affect transform - - QMutex viewLock; -}; - VideoOutputQuartzView::VideoOutputQuartzView(QuartzData *pData) + : name(NULL), parentData(pData), + thePort(NULL), theCodec(0), theMask(NULL), frameSkip(1), frameCounter(0), + drawBlank(true), applyMoveResize(false) { - parentData = pData; - - thePort = NULL; - desiredWidth = desiredHeight = desiredXoff = desiredYoff = 0; - theCodec = 0; - theMask = NULL; - - frameSkip = 1; - frameCounter = 0; - drawBlank = true; - - // This variable is set by subclasses to indicate whether - // to apply the scan displacement TV mode settings. - // Embedded or small viewports should set this to false. - applyTVoffset = true; } VideoOutputQuartzView::~VideoOutputQuartzView() @@ -231,27 +219,20 @@ return false; } - // Set output size and clipping mask (if necessary) + // Set initial output size Rect portBounds; GetPortBounds(thePort, &portBounds); - desiredXoff += portBounds.left; - desiredYoff += portBounds.top; - - if (!desiredWidth && !desiredHeight) - { - // no mask, set width and height to that of port - desiredWidth = portBounds.right - portBounds.left; - desiredHeight = portBounds.bottom - portBounds.top; - theMask = NULL; - } - else - { - // mask to requested bounds - theMask = NewRgn(); - SetRectRgn(theMask, desiredXoff, desiredYoff, - desiredXoff + desiredWidth, - desiredYoff + desiredHeight); - } + VERBOSE(VB_PLAYBACK, QString("%0Viewport currently %1,%2 -> %3,%4") + .arg(name).arg(portBounds.left).arg(portBounds.top) + .arg(portBounds.right).arg(portBounds.bottom)); + m_desired.setWidth(portBounds.right); + m_desired.setHeight(portBounds.bottom); +#if 0 + // The clipping mask + theMask = NewRgn(); + SetRectRgn(theMask, m_desired.left(), m_desired.top(), + m_desired.width(), m_desired.height()); +#endif // create the decompressor if (DecompressSequenceBeginS(&theCodec, @@ -272,24 +253,24 @@ viewLock.unlock(); return false; } - + // Turn off gamma correction unless requested if (!parentData->correctGamma) QTSetPixMapHandleRequestedGammaLevel(GetPortPixMap(thePort), kQTUseSourceGammaLevel); - + SetDSequenceFlags(theCodec, codecDSequenceFlushInsteadOfDirtying, codecDSequenceFlushInsteadOfDirtying); viewLock.unlock(); // set transformation matrix - Transform(); + Transform(m_desired); return true; } -/// Clean up the codec. +/// Clean up the codec. void VideoOutputQuartzView::End(void) { viewLock.lock(); @@ -308,16 +289,16 @@ } /// Build the transformation matrix to scale the video appropriately. -void VideoOutputQuartzView::Transform(void) +void VideoOutputQuartzView::Transform(QRect newRect) { MatrixRecord matrix; SetIdentityMatrix(&matrix); int x, y, w, h, sw, sh; - x = desiredXoff; - y = desiredYoff; - w = desiredWidth; - h = desiredHeight; + x = newRect.left(); + y = newRect.top(); + w = newRect.width(); + h = newRect.height(); sw = parentData->srcWidth; sh = parentData->srcHeight; float aspect = parentData->srcAspect; @@ -332,74 +313,8 @@ VERBOSE(VB_PLAYBACK, QString("%0Image is %1 x %2") .arg(name).arg(sw).arg(sh)); - // scale for non-square pixels - float realAspect = sw * 1.0 / sh; - if (fabsf(aspect - realAspect) > 0.015) - { - VERBOSE(VB_PLAYBACK, QString("Image aspect doesn't match" - " its resolution (%1 vs %2).") - .arg(aspect).arg(realAspect)); - - if (parentData->scaleUpVideo) - { - // scale width up, leave height alone - double aspectScale = aspect * sh / sw; - VERBOSE(VB_PLAYBACK, QString("%0Scaling to %1 of width") - .arg(name).arg(aspectScale)); - ScaleMatrix(&matrix, - X2Fix(aspectScale), - one, - zero, zero); - - // reset sw to be apparent width - sw = (int)lroundf(sh * aspect); - } - else - { - // scale height down - double aspectScale = sw / (aspect * sh); - VERBOSE(VB_PLAYBACK, - QString("%0Scaling to %1 of height") - .arg(name).arg(aspectScale)); - ScaleMatrix(&matrix, - one, - X2Fix(aspectScale), - zero, zero); - - // reset sw to be apparent width - sh = (int)lroundf(sw / aspect); - } - } - - // figure out how much zooming we want - double hscale, vscale; - switch (parentData->srcMode) - { - case kAdjustFill_Full: - // height only fills 3/4 of image, zoom up - // (16:9 movie in 4:3 letterbox format on 16:9 screen) - hscale = vscale = w * 1.0 / (sw * 0.75); - break; - case kAdjustFill_Half: - // height only fills 3/4 of image, zoom up - // (4:3 movie on 16:9 screen - 14:9 zoom is a good compromise) - hscale = vscale = w * 7.0 / (sw * 6); - break; - case kAdjustFill_Stretch: - // like 16 x 9 standard, but with a horizontal stretch applied - hscale = vscale = fmin(h * 1.0 / sh, w * 1.0 / sw); - hscale *= 4.0 / 3.0; - break; - default: - // standard, fill viewport with scaled image - hscale = vscale = fmin(h * 1.0 / sh, w * 1.0 / sw); - break; - } - if ((parentData->ZoomedH != 1.0f) || (parentData->ZoomedV != 1.0f)) - { - hscale *= 1 + (parentData->ZoomedH); - vscale *= 1 + (parentData->ZoomedV); - } + double hscale = (double) w / sw; + double vscale = (double) h / sh; // cap zooming if we requested it if (!parentData->scaleUpVideo) @@ -428,7 +343,7 @@ if ((h != sh) || (w != sw)) { VERBOSE(VB_PLAYBACK, QString("%0Centering with %1, %2") - .arg(name).arg((w - sw)/2.0).arg((h - sh)/2.0)); + .arg(name).arg((w - sw)/2.0).arg((h - sh)/2.0)); TranslateMatrix(&matrix, X2Fix((w - sw) / 2.0), X2Fix((h - sh) / 2.0)); } @@ -442,57 +357,6 @@ } #endif // USING_DVDV - // apply over/underscan - int hscan = gContext->GetNumSetting("HorizScanPercentage", 5); - int vscan = gContext->GetNumSetting("VertScanPercentage", 5); - if (hscan || vscan) - { - if (vscan > 0) - { - vscan *= 2; // Confusing, but matches X behavior - } - if (hscan > 0) - { - hscan *= 2; - } - - VERBOSE(VB_PLAYBACK, QString("%0Overscanning to %1, %2") - .arg(name).arg(hscan).arg(vscan)); - ScaleMatrix(&matrix, - X2Fix((double)(1.0 + (hscan / 50.0))), - X2Fix((double)(1.0 + (vscan / 50.0))), - X2Fix(sw / 2.0), - X2Fix(sh / 2.0)); - } - - // apply TV mode offset - if (applyTVoffset) - { - int tv_xoff = gContext->GetNumSetting("xScanDisplacement", 0); - int tv_yoff = gContext->GetNumSetting("yScanDisplacement", 0); - if (tv_xoff || tv_yoff) - { - VERBOSE(VB_PLAYBACK, - QString("%0TV offset by %1, %2").arg(name).arg(tv_xoff).arg(tv_yoff)); - TranslateMatrix(&matrix, Long2Fix(tv_xoff), Long2Fix(tv_yoff)); - } - } - - // apply zoomed offsets - if ((parentData->ZoomedH != 1.0f) || (parentData->ZoomedV != 1.0f)) - { - // calculate original vs. zoomed dimensions - int zw = (int)(sw / (1.0 + (parentData->ZoomedH))); - int zh = (int)(sh / (1.0 + (parentData->ZoomedV))); - - int zoomx = (int)((sw - zw) * parentData->ZoomedRight * .005); - int zoomy = (int)((sh - zh) * parentData->ZoomedUp * .005); - - VERBOSE(VB_PLAYBACK, QString("%0Zoom translating to %1, %2") - .arg(name).arg(zoomx).arg(zoomy)); - TranslateMatrix(&matrix, Long2Fix(zoomx), Long2Fix(zoomy)); - } - // apply graphics port or embedding offset if (x || y) { @@ -520,15 +384,15 @@ if (thePort) { SetPort(thePort); - + // set clipping rectangle Rect clipRect; - if (desiredWidth && desiredHeight) + if (m_desired.width() && m_desired.height()) { - clipRect.left = desiredXoff; - clipRect.top = desiredYoff; - clipRect.right = desiredWidth - desiredXoff; - clipRect.bottom = desiredHeight - desiredYoff; + clipRect.left = m_desired.left(); + clipRect.top = m_desired.top(); + clipRect.right = m_desired.right(); + clipRect.bottom = m_desired.bottom(); } else { @@ -542,7 +406,7 @@ RGBBackColor(&rgbBlack); EraseRect(&clipRect); QDFlushPortBuffer(thePort, clipRgn); - + drawBlank = false; } viewLock.unlock(); @@ -602,20 +466,10 @@ Begin(); } -void VideoOutputQuartzView::VideoAspectRatioChanged(float aspect) -{ - (void)aspect; - - // need to redo transformation matrix - Transform(); -} - -void VideoOutputQuartzView::Zoom(ZoomDirection direction) +void VideoOutputQuartzView::MoveResize(QRect newRect) { - (void)direction; - - // need to redo transformation matrix - Transform(); + if (applyMoveResize) + Transform(newRect); } /// Subclasses that block the main window should suspend @@ -636,7 +490,7 @@ : VideoOutputQuartzView(pData) { alpha = fminf(1.0, fmaxf(0.0, alphaBlend)); - applyTVoffset = true; + applyMoveResize = true; name = "Main window: "; }; @@ -715,10 +569,7 @@ VoqvEmbedded(QuartzData *pData, int x, int y, int w, int h) : VideoOutputQuartzView(pData) { - desiredXoff = x; - desiredYoff = y; - desiredWidth = w; - desiredHeight = h; + m_desired = QRect(x, y, w, h); name = "Embedded window: "; }; @@ -739,14 +590,13 @@ viewLock.unlock(); return false; } - + // Ensure Qt updates by invalidating the window. Rect portBounds; GetPortBounds(thePort, &portBounds); InvalWindowRect(parentData->window, &portBounds); - // The main class handles masking and resizing, - // since we set the desiredXoff, etc. variables. + // The main class handles masking and resizing, since we set m_desired viewLock.unlock(); return true; }; @@ -768,7 +618,7 @@ VoqvFullscreen(QuartzData *pData) : VideoOutputQuartzView(pData) { - applyTVoffset = true; + applyMoveResize = true; name = "Full screen: "; }; @@ -792,7 +642,7 @@ viewLock.unlock(); return false; } - + // switch screen resolution if desired if (gContext->GetNumSetting("UseVideoModes", 0)) { @@ -822,7 +672,7 @@ DisposePort(thePort); thePort = NULL; } - + // return screen resolution to normal if (gContext->GetNumSetting("UseVideoModes", 0)) DisplayRes::GetDisplayRes()->SwitchToGUI(); @@ -921,7 +771,7 @@ VideoOutputQuartzView::Show(); } - + void ResizeChanged(bool startResizing) { if (!startResizing) @@ -929,17 +779,20 @@ // Resize complete, reset the window drawing transformation Rect curBounds; GetPortBounds(thePort, &curBounds); - desiredWidth = curBounds.right - curBounds.left; - desiredHeight = curBounds.bottom - curBounds.top; - Transform(); + m_desired.setWidth(curBounds.right - curBounds.left); + m_desired.setHeight(curBounds.bottom - curBounds.top); + SetRectRgn(theMask, m_desired.left(), m_desired.top(), + m_desired.width(), m_desired.height()); + Transform(m_desired); } resizing = startResizing; } protected: - WindowRef window; - float alpha; - bool resizing; + ToolboxObjectClassRef myClass; + WindowRef window; + float alpha; + bool resizing; bool BeginPort(void) { @@ -947,16 +800,28 @@ Rect bounds; bounds.top = bounds.left = bounds.right = bounds.bottom = 50; - bounds.right += CGDisplayPixelsWide(parentData->screen) / 3; - bounds.bottom += CGDisplayPixelsHigh(parentData->screen) / 3; - + switch ((int)(10 * parentData->srcAspect)) + { + case 17: + case 18: + bounds.right += 320; + bounds.bottom += 180; + break; + case 13: + bounds.right += 280; + bounds.bottom += 210; + break; + default: + bounds.right += CGDisplayPixelsWide(parentData->screen) / 3; + bounds.bottom += CGDisplayPixelsHigh(parentData->screen) / 3; + } + // custom window definition EventHandlerUPP myUPP = NewEventHandlerUPP(VoqvFloater_Callback); EventTypeSpec defEvents[] = { { kEventClassWindow, kEventWindowHitTest }, { kEventClassWindow, kEventWindowDrawFrame }, { kEventClassWindow, kEventWindowClickResizeRgn } }; - ToolboxObjectClassRef myClass; RegisterToolboxObjectClass(CFSTR("org.mythtv.myth.VoqvFloater"), NULL, 3, @@ -982,7 +847,7 @@ SetWindowAlpha(window, alpha); RGBColor black = { 0, 0, 0 }; SetWindowContentColor(window, &black); - + thePort = GetWindowPort(window); if (!thePort) { @@ -1023,6 +888,7 @@ DisposeWindow(window); window = NULL; } + UnregisterToolboxObjectClass(myClass); viewLock.unlock(); }; @@ -1043,8 +909,8 @@ }; // The event callback for the floating window above -OSStatus VoqvFloater_Callback(EventHandlerCallRef inHandlerCallRef, - EventRef inEvent, +OSStatus VoqvFloater_Callback(EventHandlerCallRef inHandlerCallRef, + EventRef inEvent, void *inUserData) { (void)inHandlerCallRef; @@ -1053,7 +919,7 @@ Point mouseLoc; Rect winLoc; WindowDefPartCode where; - + switch (GetEventKind(inEvent)) { case kEventWindowHitTest: @@ -1072,7 +938,7 @@ sizeof(mouseLoc), NULL, &mouseLoc); - + // see if user hit grow area GetWindowBounds(window, kWindowGlobalPortRgn, @@ -1089,7 +955,7 @@ sizeof(WindowDefPartCode), &where); break; - + case kEventWindowClickResizeRgn: // gather info about window and click GetEventParameter(inEvent, @@ -1125,7 +991,6 @@ VoqvDesktop(QuartzData *pData) : VideoOutputQuartzView(pData) { - applyTVoffset = true; name = "Desktop: "; }; @@ -1205,9 +1070,6 @@ myth_codec_id(_myth_codec_id) { init(&pauseFrame, FMT_YV12, NULL, 0, 0, 0, 0); - - data->views.setAutoDelete(true); - SetDVDVDecoder((DVDV*)codec_priv); } @@ -1233,10 +1095,6 @@ data->srcAspect = aspect; data->srcMode = db_aspectoverride; - - VideoOutputQuartzView *view = NULL; - for (view = data->views.first(); view; view = data->views.next()) - view->VideoAspectRatioChanged(aspect); } // this is documented in videooutbase.cpp @@ -1247,16 +1105,18 @@ VideoOutput::Zoom(direction); MoveResize(); - data->ZoomedH = mz_scale_h; - data->ZoomedV = mz_scale_v; - data->ZoomedUp = mz_move.y(); - data->ZoomedRight = mz_move.x(); - - for (VideoOutputQuartzView *view = data->views.first(); - view; - view = data->views.next()) +} + +void VideoOutputQuartz::MoveResize(void) +{ + // This recalculates the desired output rectangle, based on + // the user's current aspect/fill/letterbox/zoom settings. + VideoOutput::MoveResize(); + + vector<VideoOutputQuartzView*>::iterator it; + for (it = data->views.begin(); it != data->views.end(); ++it) { - view->Zoom(direction); + (*it)->MoveResize(display_video_rect); } } @@ -1310,11 +1170,10 @@ CreateQuartzBuffers(); - for (VideoOutputQuartzView *view = data->views.first(); - view; - view = data->views.next()) + vector<VideoOutputQuartzView*>::iterator it = data->views.begin(); + for (; it != data->views.end(); ++it) { - view->InputChanged( + (*it)->InputChanged( video_dim.width(), video_dim.height(), aspect, av_codec_id); } @@ -1353,8 +1212,8 @@ return false; } - vbuffers.Init(kNumBuffers, true, kNeedFreeFrames, - kPrebufferFramesNormal, kPrebufferFramesSmall, + vbuffers.Init(kNumBuffers, true, kNeedFreeFrames, + kPrebufferFramesNormal, kPrebufferFramesSmall, kKeepPrebuffer); VideoOutput::Init(width, height, aspect, winid, winx, winy, winw, winh, embedid); @@ -1364,11 +1223,6 @@ data->srcAspect = aspect; data->srcMode = db_aspectoverride; - data->ZoomedH = 1.0f; - data->ZoomedV = 1.0f; - data->ZoomedUp = 0; - data->ZoomedRight = 0; - // Initialize QuickTime if (EnterMovies()) { @@ -1419,6 +1273,9 @@ { display_dim = QSize((uint) size_in_mm.width, (uint) size_in_mm.height); display_aspect = size_in_mm.width / size_in_mm.height; + VERBOSE(VB_PLAYBACK, QString("Screen size is %1 x %2 (mm), aspect %3") + .arg(size_in_mm.width).arg(size_in_mm.height) + .arg(display_aspect)); } // Global configuration options @@ -1426,29 +1283,46 @@ data->drawInWindow = gContext->GetNumSetting("GuiSizeForTV", 0); data->windowedMode = gContext->GetNumSetting("RunFrontendInWindow", 0); data->correctGamma = gContext->GetNumSetting("MacGammaCorrect", 0); - + data->convertI420to2VUY = get_i420_2vuy_conv(); + + if (data->drawInWindow) + { + // display_aspect and _dim have to be scaled to actual window size + float winWidth = size_in_mm.width * winw + / get_int_CF(m, kCGDisplayWidth); + float winHeight = size_in_mm.height * winh + / get_int_CF(m, kCGDisplayHeight); + display_dim = QSize(winWidth, winHeight); + display_aspect = winWidth / winHeight; + VERBOSE(VB_PLAYBACK, QString("Main window is %1 x %2 (mm), aspect %3") + .arg((int)winWidth).arg((int)winHeight) + .arg(display_aspect)); + } + if (!CreateQuartzBuffers()) { puts("CreateQuartzBuffers failed"); return false; } + + // Create the output view objects VideoOutputQuartzView *tmp; if (!data->drawInWindow) { // Fullscreen will take over everything tmp = new VoqvFullscreen(data); tmp->SetFrameSkip(gContext->GetNumSetting("MacFullSkip", 0)); - data->views.append(tmp); + data->views.push_back(tmp); } else if (!data->windowedMode) { // Full GUI is hidden, only show the main window tmp = new VoqvMainWindow(data, 1.0); tmp->SetFrameSkip(gContext->GetNumSetting("MacFullSkip", 0)); - data->views.append(tmp); + data->views.push_back(tmp); } else { @@ -1459,45 +1333,44 @@ gContext->GetNumSetting("MacMainOpacity", 100) / 100.0; tmp = new VoqvMainWindow(data, opacity); tmp->SetFrameSkip(gContext->GetNumSetting("MacMainSkip", 0)); - data->views.append(tmp); + data->views.push_back(tmp); } else - { + { // If video in the main window is not enabled, - // hide (shrink) it so it is not in the way + // hide (shrink) it so it is not in the way VERBOSE(VB_PLAYBACK, QString("Shrinking Main Window to 1x1")); - SizeWindow(data->window, 1, 1, true); - } + SizeWindow(data->window, 1, 1, true); + } if (gContext->GetNumSetting("MacFloatEnabled", 0)) { float opacity = gContext->GetNumSetting("MacFloatOpacity", 100) / 100.0; tmp = new VoqvFloater(data, opacity); tmp->SetFrameSkip(gContext->GetNumSetting("MacFloatSkip", 0)); - data->views.append(tmp); + data->views.push_back(tmp); } if (gContext->GetNumSetting("MacDesktopEnabled", 0)) { tmp = new VoqvDesktop(data); tmp->SetFrameSkip(gContext->GetNumSetting("MacDesktopSkip", 0)); - data->views.append(tmp); + data->views.push_back(tmp); } if (gContext->GetNumSetting("MacDockEnabled", 1)) - { + { tmp = new VoqvDock(data); tmp->SetFrameSkip(gContext->GetNumSetting("MacDockSkip", 3)); - data->views.append(tmp); + data->views.push_back(tmp); } } - for (VideoOutputQuartzView *view = data->views.first(); - view; - view = data->views.next()) + vector<VideoOutputQuartzView*>::iterator it = data->views.begin(); + for (; it != data->views.end(); ++it) { - if (!view->Init()) - { + if (!(*it)->Init()) + { puts("Init failed on view"); - } + } } MoveResize(); @@ -1563,14 +1436,14 @@ VERBOSE(VB_IMPORTANT, LOC + "VProf: " + db_vdisp_profile->toString()); vbuffers.CreateBuffers(video_dim.width(), video_dim.height()); - + // Set up pause frame if (pauseFrame.buf) delete [] pauseFrame.buf; VideoFrame *scratch = vbuffers.GetScratchFrame(); - - init(&pauseFrame, FMT_YV12, new unsigned char[scratch->size], + + init(&pauseFrame, FMT_YV12, new unsigned char[scratch->size], scratch->width, scratch->height, scratch->bpp, scratch->size); pauseFrame.frameNumber = scratch->frameNumber; @@ -1605,13 +1478,13 @@ desc->frameCount = 0; desc->dataSize = 0; desc->clutID = -1; - + HUnlock((Handle)(data->imgDesc)); // Set up storage area for one YUV frame data->pixelSize = width * height * 2; data->pixelData = new char[data->pixelSize]; - + data->pixelLock.unlock(); return true; @@ -1619,23 +1492,23 @@ void VideoOutputQuartz::Exit(void) { - if (Started) + if (Started) { Started = false; // Restore main window // (assuming it was shrunk i.e. we were not in full screen mode) if (data->windowedMode) - { + { VERBOSE(VB_PLAYBACK, - QString("Restoring Main Window to %1x%2") + QString("Restoring Main Window to %1x%2") .arg(data->windowBounds.right - data->windowBounds.left) .arg(data->windowBounds.bottom - data->windowBounds.top)); SetWindowBounds(data->window, kWindowStructureRgn, &(data->windowBounds)); - } + } - data->views.clear(); + data->ClearViews(); DeleteQuartzBuffers(); } } @@ -1667,27 +1540,22 @@ void VideoOutputQuartz::EmbedInWidget(WId wid, int x, int y, int w, int h) { - VERBOSE(VB_PLAYBACK, - QString("VideoOutputQuartz::EmbedInWidget(wid=%1, x=%2, y=%3, w=%4, h=%5)") - .arg(wid) - .arg(x) - .arg(y) - .arg(w) - .arg(h)); + VERBOSE(VB_PLAYBACK, "VideoOutputQuartz::EmbedInWidget(" + + QString("wid=%1, x=%2, y=%3, w=%4, h=%5)") + .arg(wid).arg(x).arg(y).arg(w).arg(h)); if (embedding) return; VideoOutput::EmbedInWidget(wid, x, y, w, h); - + data->pixelLock.lock(); // warn other views that embedding is starting - for (VideoOutputQuartzView *view = data->views.first(); - view; - view = data->views.next()) + vector<VideoOutputQuartzView*>::iterator it = data->views.begin(); + for (; it != data->views.end(); ++it) { - view->EmbedChanged(true); + (*it)->EmbedChanged(true); } // create embedded widget @@ -1695,9 +1563,9 @@ if (data->embeddedView) { data->embeddedView->Init(); - data->views.append(data->embeddedView); + data->views.push_back(data->embeddedView); } - + data->pixelLock.unlock(); } @@ -1712,22 +1580,25 @@ VideoOutput::StopEmbedding(); data->pixelLock.lock(); - + // delete embedded widget if (data->embeddedView) { - data->views.removeRef(data->embeddedView); + vector<VideoOutputQuartzView*>::iterator it = + find(data->views.begin(), data->views.end(), data->embeddedView); + if (it != data->views.end()) + { + delete *it; + data->views.erase(it); + } data->embeddedView = NULL; } // tell other views to return to normal - for (VideoOutputQuartzView *view = data->views.first(); - view; - view = data->views.next()) - { - view->EmbedChanged(false); - } - + vector<VideoOutputQuartzView*>::iterator it = data->views.begin(); + for (; it != data->views.end(); ++it) + (*it)->EmbedChanged(false); + data->pixelLock.unlock(); } @@ -1765,12 +1636,9 @@ #endif // USING_DVDV data->pixelLock.lock(); - for (VideoOutputQuartzView *view = data->views.first(); - view; - view = data->views.next()) - { - view->Show(); - } + vector<VideoOutputQuartzView*>::iterator it = data->views.begin(); + for (; it != data->views.end(); ++it) + (*it)->Show(); data->pixelLock.unlock(); } diff -uNr mythtv-0.21/libs/libmythtv/videoout_quartz.h mythtv/libs/libmythtv/videoout_quartz.h --- mythtv-0.21/libs/libmythtv/videoout_quartz.h 2007-10-02 18:23:03.000000000 +0200 +++ mythtv/libs/libmythtv/videoout_quartz.h 2008-11-04 12:38:23.000000000 +0100 @@ -23,6 +23,7 @@ MythCodecID av_codec_id, void *codec_private); void VideoAspectRatioChanged(float aspect); + void MoveResize(void); void Zoom(ZoomDirection direction); void EmbedInWidget(WId wid, int x, int y, int w, int h); diff -uNr mythtv-0.21/libs/libmythtv/videoout_xv.cpp mythtv/libs/libmythtv/videoout_xv.cpp --- mythtv-0.21/libs/libmythtv/videoout_xv.cpp 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/libs/libmythtv/videoout_xv.cpp 2008-04-02 19:52:17.000000000 +0200 @@ -3820,10 +3820,11 @@ int port_min = xv_attribute_min[attribute]; int port_max = xv_attribute_max[attribute]; int range = port_max - port_min; - - int tmpval = (int) roundf(range * 0.01f * newValue); - int value = min(tmpval + port_min, port_max); + int tmpval2 = (newValue + valAdj) % 100; + int tmpval3 = (int) roundf(range * 0.01f * tmpval2); + int value = min(tmpval3 + port_min, port_max); + xv_set_attrib(XJ_disp, xv_port, attrName.ascii(), value); #ifdef USING_XVMC diff -uNr mythtv-0.21/libs/libmythtv/videosource.cpp mythtv/libs/libmythtv/videosource.cpp --- mythtv-0.21/libs/libmythtv/videosource.cpp 2008-02-27 01:46:30.000000000 +0100 +++ mythtv/libs/libmythtv/videosource.cpp 2008-12-31 20:00:27.000000000 +0100 @@ -451,6 +451,8 @@ QString filename = QString("%1/%2.xmltv") .arg(MythContext::GetConfDir()).arg(parent.getSourceName()); + gContext->SaveSetting(QString("XMLTVConfig.%1").arg(parent.getSourceName()), filename); + command = QString("%1 --config-file '%2' --configure") .arg(grabber).arg(filename); @@ -1635,7 +1637,7 @@ QObject::tr("MJPEG capture card (Matrox G200, DC10)"), "MJPEG"); # ifdef USING_IVTV setting->addSelection( - QObject::tr("MPEG-2 encoder card (PVR-x50, PVR-500)"), "MPEG"); + QObject::tr("IVTV MPEG-2 encoder card"), "MPEG"); # endif // USING_IVTV #endif // USING_V4L diff -uNr mythtv-0.21/libs/libmythtv/vsync.cpp mythtv/libs/libmythtv/vsync.cpp --- mythtv-0.21/libs/libmythtv/vsync.cpp 2007-12-12 17:56:32.000000000 +0100 +++ mythtv/libs/libmythtv/vsync.cpp 2009-04-19 23:30:15.000000000 +0200 @@ -16,6 +16,7 @@ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <cstdlib> #include <cstdio> #include <cerrno> #include <cmath> diff -uNr mythtv-0.21/libs/libmythui/libmythui.pro mythtv/libs/libmythui/libmythui.pro --- mythtv-0.21/libs/libmythui/libmythui.pro 2008-01-31 23:18:37.000000000 +0100 +++ mythtv/libs/libmythui/libmythui.pro 2008-06-04 06:05:51.000000000 +0200 @@ -84,3 +84,5 @@ inc.files += mythpainter_ogl.h } } + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythui/myththemedmenu.cpp mythtv/libs/libmythui/myththemedmenu.cpp --- mythtv-0.21/libs/libmythui/myththemedmenu.cpp 2007-12-11 15:56:01.000000000 +0100 +++ mythtv/libs/libmythui/myththemedmenu.cpp 2008-10-02 02:54:20.000000000 +0200 @@ -2157,7 +2157,8 @@ } else { - if (ThemedButton *button = reinterpret_cast<ThemedButton*>(origtype)) + ThemedButton *button = dynamic_cast<ThemedButton*>(origtype); + if (button) { ThemedButton *lastbutton = activebutton; activebutton = button; diff -uNr mythtv-0.21/libs/libmythupnp/httprequest.cpp mythtv/libs/libmythupnp/httprequest.cpp --- mythtv-0.21/libs/libmythupnp/httprequest.cpp 2008-03-04 04:14:01.000000000 +0100 +++ mythtv/libs/libmythupnp/httprequest.cpp 2009-01-04 01:25:34.000000000 +0100 @@ -180,6 +180,17 @@ sHeader += GetAdditionalHeaders(); + // ---------------------------------------------------------------------- + // Temp Hack to process DLNA header + + QString sValue = GetHeaderValue( "getcontentfeatures.dlna.org", "0" ); + + if (sValue == "1") + sHeader += "contentFeatures.dlna.org: DLNA.ORG_OP=01;DLNA.ORG_CI=0;" + "DLNA.ORG_FLAGS=01500000000000000000000000000000\r\n"; + + // ---------------------------------------------------------------------- + sHeader += QString( "Connection: %1\r\n" "Content-Type: %2\r\n" "Content-Length: %3\r\n" ) diff -uNr mythtv-0.21/libs/libmythupnp/libmythupnp.pro mythtv/libs/libmythupnp/libmythupnp.pro --- mythtv-0.21/libs/libmythupnp/libmythupnp.pro 2008-01-23 07:02:16.000000000 +0100 +++ mythtv/libs/libmythupnp/libmythupnp.pro 2008-06-04 06:05:51.000000000 +0200 @@ -43,6 +43,9 @@ LIBS += $$EXTRA_LIBS mingw { + # For easier debugging: + target.path = $${PREFIX}/bin + HEADERS += darwin-sendfile.h SOURCES += darwin-sendfile.c } @@ -70,3 +73,5 @@ QMAKE_LFLAGS_SHLIB += -flat_namespace } + +include ( ../libs-targetfix.pro ) diff -uNr mythtv-0.21/libs/libmythupnp/ssdp.cpp mythtv/libs/libmythupnp/ssdp.cpp --- mythtv-0.21/libs/libmythupnp/ssdp.cpp 2007-12-18 03:51:27.000000000 +0100 +++ mythtv/libs/libmythupnp/ssdp.cpp 2008-03-15 18:53:54.000000000 +0100 @@ -251,7 +251,7 @@ // Parse request Type // ------------------------------------------------------------------ - // cout << "SSDP::ProcessData - requestLine: " << sRequestLine << endl; + VERBOSE(VB_UPNP, QString( "SSDP::ProcessData - requestLine: %1" ).arg( sRequestLine )); SSDPRequestType eType = ProcessRequestLine( sRequestLine ); @@ -349,7 +349,9 @@ QString sMX = GetHeaderValue( sHeaders, "MX" , "" ); int nMX = 0; - //cout << "*** SSDP ProcessSearchrequest : [" << sST << "] MX = " << nMX << endl; + VERBOSE( VB_UPNP, QString( "SSDP::ProcessSearchrequest : [%1] MX=%2" ) + .arg( sST ) + .arg( nMX )); // ---------------------------------------------------------------------- // Validate Header Values... @@ -388,7 +390,7 @@ // Excute task now for fastest response & queue for time-delayed response // -=>TODO: To be trully uPnp compliant, this Execute should be removed. - pTask->Execute( NULL ); + //pTask->Execute( NULL ); UPnp::g_pTaskQueue->AddTask( nNewMX, pTask ); @@ -433,6 +435,16 @@ QString sUSN = GetHeaderValue( headers, "USN" , "" ); QString sCache = GetHeaderValue( headers, "CACHE-CONTROL" , "" ); + VERBOSE( VB_UPNP, QString( "SSDP::ProcessSearchResponse \n" + "DescURL=%1\n" + "ST =%2\n" + "USN =%3\n" + "Cache =%4") + .arg( sDescURL ) + .arg( sST ) + .arg( sUSN ) + .arg( sCache )); + int nPos = sCache.find( "max-age", 0, false ); if (nPos < 0) @@ -460,6 +472,19 @@ QString sUSN = GetHeaderValue( headers, "USN" , "" ); QString sCache = GetHeaderValue( headers, "CACHE-CONTROL" , "" ); + VERBOSE( VB_UPNP, QString( "SSDP::ProcessNotify\n" + "DescURL=%1\n" + "NTS =%2\n" + "NT =%3\n" + "USN =%4\n" + "Cache =%5" ) + .arg( sDescURL ) + .arg( sNTS ) + .arg( sNT ) + .arg( sUSN ) + .arg( sCache )); + + if (sNTS.contains( "ssdp:alive")) { int nPos = sCache.find( "max-age", 0, false ); @@ -559,6 +584,12 @@ QString sUserAgent = pRequest->GetHeaderValue( "User-Agent", "" ); + VERBOSE( VB_UPNP, QString( "SSDPExtension::GetDeviceDesc - Host=%1 Port=%2 UserAgent=%3" ) + .arg( pRequest->GetHostAddress() ) + .arg( m_nServicePort ) + .arg( sUserAgent )); + + UPnp::g_UPnpDeviceDesc.GetValidXML( pRequest->GetHostAddress(), m_nServicePort, pRequest->m_response, @@ -578,11 +609,18 @@ if (QFile::exists( pRequest->m_sFileName )) { + VERBOSE( VB_UPNP, QString( "SSDPExtension::GetFile( %1 ) - Exists" ) + .arg( pRequest->m_sFileName )); pRequest->m_eResponseType = ResponseTypeFile; pRequest->m_nResponseStatus = 200; pRequest->m_mapRespHeaders[ "Cache-Control" ] = "no-cache=\"Ext\", max-age = 5000"; } + else + { + VERBOSE( VB_UPNP, QString( "SSDPExtension::GetFile( %1 ) - Not Found" ) + .arg( pRequest->m_sFileName )); + } } @@ -596,6 +634,8 @@ int nCount = 0; NameValueList list; + VERBOSE( VB_UPNP, "SSDPExtension::GetDeviceList" ); + cache.Lock(); QString sXML; diff -uNr mythtv-0.21/libs/libmythupnp/upnpcds.cpp mythtv/libs/libmythupnp/upnpcds.cpp --- mythtv-0.21/libs/libmythupnp/upnpcds.cpp 2008-03-02 22:14:41.000000000 +0100 +++ mythtv/libs/libmythupnp/upnpcds.cpp 2008-09-25 22:48:00.000000000 +0200 @@ -1,11 +1,11 @@ ////////////////////////////////////////////////////////////////////////////// // Program Name: upnpcds.cpp -// -// Purpose - uPnp Content Directory Service -// +// +// Purpose - uPnp Content Directory Service +// // Created By : David Blain Created On : Oct. 24, 2005 -// Modified By : Modified On: -// +// Modified By : Modified On: +// ////////////////////////////////////////////////////////////////////////////// #include "upnp.h" @@ -39,11 +39,11 @@ { QString sXML; - for ( CDSObject *pObject = m_List.first(); + for ( CDSObject *pObject = m_List.first(); pObject != NULL; pObject = m_List.next() ) { - sXML += pObject->toXml(); + sXML += pObject->toXml(); } return( sXML ); @@ -167,7 +167,7 @@ default: UPnp::FormatErrorResponse( pRequest, UPnPResult_InvalidAction ); break; - } + } return true; } @@ -232,7 +232,7 @@ // ------------------------------------------------------------------ switch( request.m_eBrowseFlag ) - { + { case CDS_BrowseMetadata: { // ---------------------------------------------------------------------- @@ -334,7 +334,7 @@ delete pResult; } } - + // ---------------------------------------------------------------------- // Output Results of Browse Method // ---------------------------------------------------------------------- @@ -388,7 +388,7 @@ .arg(request.m_sContainerID)); // ---------------------------------------------------------------------- - // Break the SearchCriteria into it's parts + // Break the SearchCriteria into it's parts // -=>TODO: This DOES NOT handle ('s or other complex expressions // ---------------------------------------------------------------------- @@ -403,9 +403,9 @@ // Just focus on the "upnp:class derivedfrom" expression // ---------------------------------------------------------------------- - for ( QStringList::Iterator it = request.m_sSearchList.begin(); - it != request.m_sSearchList.end(); - ++it ) + for ( QStringList::Iterator it = request.m_sSearchList.begin(); + it != request.m_sSearchList.end(); + ++it ) { if ( (*it).contains( "upnp:class derivedfrom", FALSE ) > 0) { @@ -607,9 +607,9 @@ if (pResults != NULL) { - if (key) - idPath.last().append(QString("=%1").arg(key)); - else + if (key) + idPath.last().append(QString("=%1").arg(key)); + else { if (pRequest->m_sObjectId.contains("item")) { @@ -641,7 +641,7 @@ pResults->m_sErrorDesc = ""; } - return( pResults ); + return( pResults ); } ///////////////////////////////////////////////////////////////////////////// @@ -706,8 +706,8 @@ // ///////////////////////////////////////////////////////////////////////////// -UPnpCDSExtensionResults *UPnpCDSExtension::ProcessRoot( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, +UPnpCDSExtensionResults *UPnpCDSExtension::ProcessRoot( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, QStringList &/*idPath*/ ) { pResults->m_nTotalMatches = 0; @@ -716,7 +716,7 @@ short nRootCount = GetRootCount(); switch( pRequest->m_eBrowseFlag ) - { + { case CDS_BrowseMetadata: { // -------------------------------------------------------------- @@ -730,7 +730,7 @@ pRoot->SetChildCount( nRootCount ); - pResults->Add( pRoot ); + pResults->Add( pRoot ); break; } @@ -740,7 +740,7 @@ VERBOSE(VB_UPNP, "CDS_BrowseDirectChildren"); pResults->m_nUpdateID = 1; pResults->m_nTotalMatches = nRootCount ; - + if ( pRequest->m_nRequestedCount == 0) pRequest->m_nRequestedCount = nRootCount ; @@ -758,8 +758,8 @@ QString sId = QString( "%1/%2" ).arg( pRequest->m_sObjectId ) .arg( nIdx ); - CDSObject *pItem = CreateContainer( sId, - QObject::tr( pInfo->title ), + CDSObject *pItem = CreateContainer( sId, + QObject::tr( pInfo->title ), m_sExtensionId ); pItem->SetChildCount( GetDistinctCount( pInfo ) ); @@ -793,9 +793,9 @@ // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- - + switch( pRequest->m_eBrowseFlag ) - { + { case CDS_BrowseMetadata: { // -------------------------------------------------------------- @@ -809,13 +809,13 @@ pResults->m_nTotalMatches = 1; pResults->m_nUpdateID = 1; - CDSObject *pItem = CreateContainer( pRequest->m_sObjectId, - QObject::tr( pInfo->title ), + CDSObject *pItem = CreateContainer( pRequest->m_sObjectId, + QObject::tr( pInfo->title ), m_sExtensionId ); pItem->SetChildCount( GetDistinctCount( pInfo ) ); - pResults->Add( pItem ); + pResults->Add( pItem ); } break; @@ -834,7 +834,7 @@ break; } - + return pResults; } @@ -844,7 +844,7 @@ ///////////////////////////////////////////////////////////////////////////// UPnpCDSExtensionResults *UPnpCDSExtension::ProcessItem( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, + UPnpCDSExtensionResults *pResults, QStringList &idPath ) { pResults->m_nTotalMatches = 0; @@ -864,18 +864,18 @@ QStringMap mapParams; QString sParams = idPath.last().section( '?', 1, 1 ); - sParams.replace(QRegExp( "&"), "&" ); + sParams.replace(QRegExp( "&"), "&" ); HTTPRequest::GetParameters( sParams, mapParams ); MSqlQuery query(MSqlQuery::InitCon()); - if (query.isConnected()) + if (query.isConnected()) { BuildItemQuery( query, mapParams ); query.exec(); - + if (query.isActive() && query.size() > 0) { if ( query.next() ) @@ -887,31 +887,11 @@ } } } + break; } case CDS_BrowseDirectChildren: { - - QStringList tokens; - - if (pRequest->m_sObjectId.length() > 0) - { - if (pRequest->m_sObjectId.contains("=")) - tokens = QStringList::split( "=", pRequest->m_sObjectId ); - else - { - tokens = QStringList::split( "/", pRequest->m_sObjectId ); - - tokens = QStringList::split( " ", tokens[tokens.count() - 1] ); - tokens = QStringList::split( "?", tokens[0] ); - - if (tokens[0].startsWith("Id")) - tokens[0] = tokens[0].right(tokens[0].length() - 2); - - } - } - - pRequest->m_sParentId = tokens.last(); - CreateItems( pRequest, pResults, 0, "", false ); + // Items don't have any children. break; } @@ -925,7 +905,7 @@ ///////////////////////////////////////////////////////////////////////////// UPnpCDSExtensionResults *UPnpCDSExtension::ProcessKey( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, + UPnpCDSExtensionResults *pResults, QStringList &idPath ) { pResults->m_nTotalMatches = 0; @@ -934,7 +914,7 @@ // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- - + QString sKey = idPath.last().section( '=', 1, 1 ); QUrl::decode( sKey ); @@ -943,10 +923,10 @@ int nNodeIdx = idPath[ idPath.count() - 2 ].toInt(); switch( pRequest->m_eBrowseFlag ) - { + { case CDS_BrowseMetadata: - { + { UPnpCDSRootInfo *pInfo = GetRootInfo( nNodeIdx ); if (pInfo == NULL) @@ -984,13 +964,13 @@ pResults->m_nTotalMatches = 1; pResults->m_nUpdateID = 1; - CDSObject *pItem = CreateContainer( pRequest->m_sObjectId, - query.value(1).toString(), + CDSObject *pItem = CreateContainer( pRequest->m_sObjectId, + query.value(1).toString(), pRequest->m_sParentId ); pItem->SetChildCount( GetDistinctCount( pInfo )); - pResults->Add( pItem ); + pResults->Add( pItem ); } } } @@ -999,7 +979,7 @@ case CDS_BrowseDirectChildren: { - + CreateItems( pRequest, pResults, nNodeIdx, sKey, true ); break; @@ -1011,7 +991,7 @@ } } - return pResults; + return pResults; } ///////////////////////////////////////////////////////////////////////////// @@ -1033,7 +1013,7 @@ return pResults; switch( pRequest->m_eBrowseFlag ) - { + { case CDS_BrowseMetadata: { // -------------------------------------------------------------- @@ -1043,13 +1023,13 @@ pResults->m_nTotalMatches = 1; pResults->m_nUpdateID = 1; - CDSObject *pItem = CreateContainer( pRequest->m_sObjectId, - QObject::tr( pInfo->title ), + CDSObject *pItem = CreateContainer( pRequest->m_sObjectId, + QObject::tr( pInfo->title ), m_sExtensionId ); pItem->SetChildCount( GetDistinctCount( pInfo )); - pResults->Add( pItem ); + pResults->Add( pItem ); break; } @@ -1059,7 +1039,7 @@ pResults->m_nTotalMatches = GetDistinctCount( pInfo ); pResults->m_nUpdateID = 1; - if (pRequest->m_nRequestedCount == 0) + if (pRequest->m_nRequestedCount == 0) pRequest->m_nRequestedCount = SHRT_MAX; MSqlQuery query(MSqlQuery::InitCon()); @@ -1085,7 +1065,8 @@ while(query.next()) { QString sKey = query.value(0).toString(); - QString sTitle = query.value(1).toString(); + QString sTitle = + QString::fromUtf8(query.value(1).toString()); long nCount = query.value(2).toInt(); if (sTitle.length() == 0) @@ -1099,7 +1080,7 @@ pRoot->SetChildCount( nCount ); - pResults->Add( pRoot ); + pResults->Add( pRoot ); } } } @@ -1134,7 +1115,7 @@ // for column & table names QString sSQL; - + if (strncmp( pInfo->column, "*", 1) == 0) { sSQL = QString( "SELECT count( %1 ) FROM %2" ) @@ -1178,7 +1159,7 @@ // for column & table names QString sSQL; - + if (sColumn == "*") sSQL = QString( "SELECT count( * ) FROM %1" ).arg( GetTableName( sColumn ) ); else @@ -1210,7 +1191,7 @@ void UPnpCDSExtension::CreateItems( UPnpCDSRequest *pRequest, UPnpCDSExtensionResults *pResults, int nNodeIdx, - const QString &sKey, + const QString &sKey, bool bAddRef ) { pResults->m_nTotalMatches = 0; @@ -1224,7 +1205,7 @@ pResults->m_nTotalMatches = GetCount( pInfo->column, sKey ); pResults->m_nUpdateID = 1; - if (pRequest->m_nRequestedCount == 0) + if (pRequest->m_nRequestedCount == 0) pRequest->m_nRequestedCount = SHRT_MAX; MSqlQuery query(MSqlQuery::InitCon()); @@ -1251,7 +1232,7 @@ if (query.isActive() && query.size() > 0) { - while(query.next()) + while(query.next()) AddItem( pRequest->m_sObjectId, pResults, bAddRef, query ); } diff -uNr mythtv-0.21/libs/libmythupnp/upnpcds.h mythtv/libs/libmythupnp/upnpcds.h --- mythtv-0.21/libs/libmythupnp/upnpcds.h 2008-03-02 22:14:41.000000000 +0100 +++ mythtv/libs/libmythupnp/upnpcds.h 2008-03-15 18:53:54.000000000 +0100 @@ -124,22 +124,22 @@ QString RemoveToken ( const QString &sToken, const QString &sStr, int num ); - UPnpCDSExtensionResults *ProcessRoot ( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, - QStringList &idPath ); - UPnpCDSExtensionResults *ProcessAll ( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, - QStringList &idPath ); - UPnpCDSExtensionResults *ProcessItem ( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, - QStringList &idPath ); - UPnpCDSExtensionResults *ProcessKey ( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, - QStringList &idPath ); - UPnpCDSExtensionResults *ProcessContainer( UPnpCDSRequest *pRequest, - UPnpCDSExtensionResults *pResults, - int nNodeIdx, - QStringList &idPath ); + virtual UPnpCDSExtensionResults *ProcessRoot ( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, + QStringList &idPath ); + virtual UPnpCDSExtensionResults *ProcessAll ( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, + QStringList &idPath ); + virtual UPnpCDSExtensionResults *ProcessItem ( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, + QStringList &idPath ); + virtual UPnpCDSExtensionResults *ProcessKey ( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, + QStringList &idPath ); + virtual UPnpCDSExtensionResults *ProcessContainer( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, + int nNodeIdx, + QStringList &idPath ); // ------------------------------------------------------------------ diff -uNr mythtv-0.21/libs/libs-dephack.pro mythtv/libs/libs-dephack.pro --- mythtv-0.21/libs/libs-dephack.pro 2008-01-25 10:32:50.000000000 +0100 +++ mythtv/libs/libs-dephack.pro 2008-06-04 06:05:51.000000000 +0200 @@ -8,9 +8,6 @@ # Worked around by building libmyth first, # with dlltool faking the symbols from the other two libs LIBS += -L../libmyth -lmyth-$$LIBVERSION - - # For easier debugging, put lib in same place as mythfrontend.exe - target.path = $${PREFIX}/bin } #unix { diff -uNr mythtv-0.21/libs/libs-targetfix.pro mythtv/libs/libs-targetfix.pro --- mythtv-0.21/libs/libs-targetfix.pro 1970-01-01 01:00:00.000000000 +0100 +++ mythtv/libs/libs-targetfix.pro 2008-06-04 06:05:51.000000000 +0200 @@ -0,0 +1,20 @@ +# Common project modifications to change the generated target. + +mingw { + dll : contains( TEMPLATE, lib ) { + + # Qt under Linux/UnixMac OS X builds libBlah.a and libBlah.so, + # but is using the Windows defaults libBlah.a and Blah.so. + # + # So that our dependency targets work between SUBDIRS, override: + # + TARGET = lib$${TARGET} + + + # Windows doesn't have a nice variable like LD_LIBRARY_PATH, + # which means make install would be broken without extra steps. + # As a workaround, we store dlls with exes. Also improves debugging! + # + target.path = $${PREFIX}/bin + } +} diff -uNr mythtv-0.21/programs/mythbackend/autoexpire.cpp mythtv/programs/mythbackend/autoexpire.cpp --- mythtv-0.21/programs/mythbackend/autoexpire.cpp 2008-02-16 00:38:50.000000000 +0100 +++ mythtv/programs/mythbackend/autoexpire.cpp 2009-04-26 09:15:09.000000000 +0200 @@ -36,7 +36,8 @@ #include "backendutil.h" #include "compat.h" -#define LOC QString("AutoExpire: ") +#define LOC QString("AutoExpire: ") +#define LOC_ERR QString("AutoExpire Error: ") extern AutoExpire *expirer; @@ -423,6 +424,26 @@ .arg(fsit->usedSpaceKB / 1024.0 / 1024.0, 7, 'f', 1) .arg(fsit->freeSpaceKB / 1024.0 / 1024.0, 7, 'f', 1)); + if ((fsit->totalSpaceKB == -1) || (fsit->usedSpaceKB == -1)) + { + VERBOSE(VB_FILE, LOC_ERR + QString("fsID #%1 has invalid info, " + "AutoExpire can not run for this filesystem. " + "Continuing on to next...").arg(fsit->fsID)); + VERBOSE(VB_FILE, QString("Directories on filesystem ID %1:") + .arg(fsit->fsID)); + vector<FileSystemInfo>::iterator fsit2; + for (fsit2 = fsInfos.begin(); fsit2 != fsInfos.end(); fsit2++) + { + if (fsit2->fsID == fsit->fsID) + { + VERBOSE(VB_FILE, QString(" %1:%2") + .arg(fsit2->hostname).arg(fsit2->directory)); + } + } + + continue; + } + if (truncateMap.contains(fsit->fsID)) { VERBOSE(VB_FILE, QString( diff -uNr mythtv-0.21/programs/mythbackend/backendutil.cpp mythtv/programs/mythbackend/backendutil.cpp --- mythtv-0.21/programs/mythbackend/backendutil.cpp 2008-01-14 01:32:58.000000000 +0100 +++ mythtv/programs/mythbackend/backendutil.cpp 2008-12-04 06:47:51.000000000 +0100 @@ -20,24 +20,18 @@ #include "libmyth/util.h" #include "libmyth/compat.h" -static QMap<int, int> fsID_cache; +static QMap<QString, int> fsID_cache; static QMutex cache_lock; /// gets stable fsIDs based of the dirID -static int GetfsID(int dirID) +static int GetfsID(vector<FileSystemInfo>::iterator fsInfo) { + QString fskey = fsInfo->hostname + ":" + fsInfo->directory; QMutexLocker lock(&cache_lock); - if (!fsID_cache.contains(dirID)) - fsID_cache[dirID] = fsID_cache.count(); + if (!fsID_cache.contains(fskey)) + fsID_cache[fskey] = fsID_cache.count(); - return fsID_cache[dirID]; -} - -// checks the cache if we know this dirID, used to skip known unique file systems -static bool HasfsID(int dirID) -{ - QMutexLocker lock(&cache_lock); - return fsID_cache.contains(dirID); + return fsID_cache[fskey]; } static size_t GetCurrentMaxBitrate(QMap<int, EncoderLink *> *encoderList) @@ -180,7 +174,7 @@ while (it != strlist.end()) { fsInfo.hostname = *(it++); - fsInfo.directory = fsInfo.hostname.section(".", 0, 0) + ":" + *(it++); + fsInfo.directory = *(it++); fsInfo.isLocal = (*(it++)).toInt(); fsInfo.fsID = (*(it++)).toInt(); fsInfo.dirID = (*(it++)).toInt(); @@ -198,7 +192,11 @@ for (it1 = fsInfos.begin(); it1 != fsInfos.end(); it1++) { if (it1->fsID == -1) - it1->fsID = GetfsID(it1->dirID); + { + it1->fsID = GetfsID(it1); + it1->directory = + it1->hostname.section(".", 0, 0) + ":" + it1->directory; + } it2 = it1; for (it2++; it2 != fsInfos.end(); it2++) @@ -206,14 +204,14 @@ // Sometimes the space reported for an NFS mounted dir is slightly // different than when it is locally mounted because of block sizes if (it2->fsID == -1 && - (!HasfsID(it2->fsID) || it1->dirID == it2->dirID) && - (absLongLong(it1->totalSpaceKB - it2->totalSpaceKB) <= 16) && + (absLongLong(it1->totalSpaceKB - it2->totalSpaceKB) <= 32) && ((size_t)absLongLong(it1->usedSpaceKB - it2->usedSpaceKB) <= maxWriteFiveSec)) { if (!it1->hostname.contains(it2->hostname)) it1->hostname = it1->hostname + "," + it2->hostname; - it1->directory = it1->directory + "," + it2->directory; + it1->directory = it1->directory + "," + + it2->hostname.section(".", 0, 0) + ":" + it2->directory; fsInfos.erase(it2); it2 = it1; } @@ -276,32 +274,56 @@ fsInfos.push_back(fsInfo); } + VERBOSE(VB_SCHEDULE+VB_FILE, "Determining unique filesystems"); size_t maxWriteFiveSec = GetCurrentMaxBitrate(tvList)/12 /*5 seconds*/; maxWriteFiveSec = max((size_t)2048, maxWriteFiveSec); // safety for NFS mounted dirs vector<FileSystemInfo>::iterator it1, it2; for (it1 = fsInfos.begin(); it1 != fsInfos.end(); it1++) { if (it1->fsID == -1) - it1->fsID = GetfsID(it1->dirID); + it1->fsID = GetfsID(it1); else continue; + VERBOSE(VB_SCHEDULE+VB_FILE, + QString("%1:%2 (fsID %3, dirID %4) using %5 out of %6 KB, " + "looking for matches") + .arg(it1->hostname).arg(it1->directory) + .arg(it1->fsID).arg(it1->dirID) + .arg(it1->usedSpaceKB).arg(it1->totalSpaceKB)); it2 = it1; for (it2++; it2 != fsInfos.end(); it2++) { + VERBOSE(VB_SCHEDULE+VB_FILE, + QString(" Checking %1:%2 (dirID %3) using %4 of %5 KB") + .arg(it2->hostname).arg(it2->directory).arg(it2->dirID) + .arg(it2->usedSpaceKB).arg(it2->totalSpaceKB)); + VERBOSE(VB_SCHEDULE+VB_FILE, + QString(" Total KB Diff: %1 (want <= 32)") + .arg((long)absLongLong(it1->totalSpaceKB - it2->totalSpaceKB))); + VERBOSE(VB_SCHEDULE+VB_FILE, + QString(" Used KB Diff: %1 (want <= %2)") + .arg((size_t)absLongLong(it1->usedSpaceKB - it2->usedSpaceKB)) + .arg(maxWriteFiveSec)); + // Sometimes the space reported for an NFS mounted dir is slightly // different than when it is locally mounted because of block sizes - if (it2->fsID == -1 && !HasfsID(it2->dirID) && - (absLongLong(it1->totalSpaceKB - it2->totalSpaceKB) <= 16) && + if (it2->fsID == -1 && + (absLongLong(it1->totalSpaceKB - it2->totalSpaceKB) <= 32) && ((size_t)absLongLong(it1->usedSpaceKB - it2->usedSpaceKB) <= maxWriteFiveSec)) { it2->fsID = it1->fsID; + + VERBOSE(VB_SCHEDULE+VB_FILE, + QString(" MATCH Found: %1:%2 will use fsID %3") + .arg(it2->hostname).arg(it2->directory) + .arg(it2->fsID)); } } } - if (print_verbose_messages & VB_FILE) + if (print_verbose_messages & (VB_FILE|VB_SCHEDULE)) { cout << "--- GetFilesystemInfos directory list start ---" << endl; for (it1 = fsInfos.begin(); it1 != fsInfos.end(); it1++) @@ -313,7 +335,8 @@ else cout << "Remote"; cout << endl; - cout << " Drive ID: " << it1->fsID << endl; + cout << " fsID : " << it1->fsID << endl; + cout << " dirID : " << it1->dirID << endl; cout << " TotalKB : " << it1->totalSpaceKB << endl; cout << " UsedKB : " << it1->usedSpaceKB << endl; cout << " FreeKB : " << it1->freeSpaceKB << endl; diff -uNr mythtv-0.21/programs/mythbackend/mainserver.cpp mythtv/programs/mythbackend/mainserver.cpp --- mythtv-0.21/programs/mythbackend/mainserver.cpp 2008-03-03 05:47:04.000000000 +0100 +++ mythtv/programs/mythbackend/mainserver.cpp 2009-02-09 10:01:55.000000000 +0100 @@ -697,6 +697,7 @@ } m_sched->GetNextLiveTVDir(tokens[1].toInt()); + return; } if ((me->Message().left(16) == "DELETE_RECORDING") || @@ -1296,7 +1297,8 @@ if (proginfo->hostname != gContext->GetHostName()) slave = getSlaveByHostname(proginfo->hostname); - if (proginfo->hostname == gContext->GetHostName()) + if ((proginfo->hostname == gContext->GetHostName()) || + (!slave && masterBackendOverride)) { proginfo->pathname = QString("myth://") + ip + ":" + port + "/" + proginfo->pathname; @@ -1984,6 +1986,24 @@ (gContext->GetNumSetting("AutoExpireInsteadOfDelete") && (pginfo->recgroup != "Deleted") && (pginfo->recgroup != "LiveTV")); + QString filename = GetPlaybackURL(pginfo, false); + if (filename == "") + { + VERBOSE(VB_IMPORTANT, + QString("ERROR when trying to delete file for %1 @ %2. Unable " + "to determine filename of recording.") + .arg(pginfo->chanid) + .arg(pginfo->recstartts.toString(Qt::ISODate))); + + if (pbssock) + { + resultCode = -2; + QStringList outputlist = QString::number(resultCode); + SendResponse(pbssock, outputlist); + } + delete pginfo; + return; + } if (justexpire && !forceMetadataDelete && pginfo->filesize > (1024 * 1024) ) { @@ -2001,8 +2021,6 @@ return; } - QString filename = GetPlaybackURL(pginfo, false); - // If this recording was made by a another recorder, and that // recorder is available, tell it to do the deletion. if (ismaster && pginfo->hostname != gContext->GetHostName()) @@ -3377,17 +3395,20 @@ ProgramInfo *pginfo = ProgramInfo::GetProgramFromRecorded(chanid, startdt); - if (commbreak) - pginfo->GetCommBreakList(markMap); - else - pginfo->GetCutList(markMap); - - for (it = markMap.begin(); it != markMap.end(); ++it) + if (pginfo) { - rowcnt++; - QString intstr = QString("%1").arg(it.data()); - retlist << intstr; - encodeLongLong(retlist,it.key()); + if (commbreak) + pginfo->GetCommBreakList(markMap); + else + pginfo->GetCutList(markMap); + + for (it = markMap.begin(); it != markMap.end(); ++it) + { + rowcnt++; + QString intstr = QString("%1").arg(it.data()); + retlist << intstr; + encodeLongLong(retlist,it.key()); + } } if (rowcnt > 0) @@ -3449,11 +3470,12 @@ QDateTime startdt; startdt.setTime_t((uint)atoi(starttime)); QStringList retlist; - long long bookmark; + long long bookmark = 0; ProgramInfo *pginfo = ProgramInfo::GetProgramFromRecorded(chanid, startdt); - bookmark = pginfo->GetBookmark(); + if (pginfo) + bookmark = pginfo->GetBookmark(); encodeLongLong(retlist,bookmark); @@ -3491,9 +3513,14 @@ ProgramInfo *pginfo = ProgramInfo::GetProgramFromRecorded(chanid, startdt); - pginfo->SetBookmark(bookmark); + if (pginfo) + { + pginfo->SetBookmark(bookmark); + retlist << "OK"; + } + else + retlist << "FAILED"; - retlist << "OK"; if (pbssock) SendResponse(pbssock, retlist); diff -uNr mythtv-0.21/programs/mythbackend/scheduler.cpp mythtv/programs/mythbackend/scheduler.cpp --- mythtv-0.21/programs/mythbackend/scheduler.cpp 2008-02-21 04:23:22.000000000 +0100 +++ mythtv/programs/mythbackend/scheduler.cpp 2009-04-17 23:22:38.000000000 +0200 @@ -1242,6 +1242,7 @@ // Restore the old status for some select cases that won't record. if (p->recstatus != rsWillRecord && p->oldrecstatus != rsUnknown && + p->oldrecstatus != rsNotListed && !p->reactivate) p->recstatus = p->oldrecstatus; @@ -1303,7 +1304,7 @@ if (next_record == nextRecMap[recid]) continue; - if (nextRecMap[recid].isNull() && next_record.isValid()) + if (nextRecMap[recid].isNull() || !next_record.isValid()) { subquery.prepare("UPDATE record " "SET next_record = '0000-00-00T00:00:00' " @@ -2030,6 +2031,13 @@ "be $time if command " "set.\'"); + if (setwakeup_cmd.isEmpty()) + { + VERBOSE(VB_IMPORTANT, "SetWakeuptimeCommand is empty, shutdown aborted"); + idleSince = QDateTime(); + m_isShuttingDown = false; + return; + } if (wakeup_timeformat == "time_t") { QString time_ts; @@ -2045,8 +2053,14 @@ setwakeup_cmd); // now run the command to set the wakeup time - if (!setwakeup_cmd.isEmpty()) - myth_system(setwakeup_cmd.ascii()); + if (myth_system(setwakeup_cmd.ascii())) + { + VERBOSE(VB_IMPORTANT, "SetWakeuptimeCommand failed, " + "shutdown aborted"); + idleSince = QDateTime(); + m_isShuttingDown = false; + return; + } } // tell anyone who is listening the master server is going down now @@ -2065,7 +2079,10 @@ "this computer :-\n\t\t\t\t\t\t") + halt_cmd); // and now shutdown myself - myth_system(halt_cmd.ascii()); + if (!myth_system(halt_cmd.ascii())) + return; + else + VERBOSE(VB_IMPORTANT, "ServerHaltCommand failed, shutdown aborted"); } // If we make it here then either the shutdown failed @@ -2795,7 +2812,9 @@ ProgramInfo *p = new ProgramInfo; p->reactivate = result.value(38).toInt(); p->oldrecstatus = RecStatusType(result.value(37).toInt()); - if (p->oldrecstatus == rsAborted || p->reactivate) + if (p->oldrecstatus == rsAborted || + p->oldrecstatus == rsNotListed || + p->reactivate) p->recstatus = rsUnknown; else p->recstatus = p->oldrecstatus; diff -uNr mythtv-0.21/programs/mythbackend/upnpcdsvideo.cpp mythtv/programs/mythbackend/upnpcdsvideo.cpp --- mythtv-0.21/programs/mythbackend/upnpcdsvideo.cpp 2008-03-02 22:14:41.000000000 +0100 +++ mythtv/programs/mythbackend/upnpcdsvideo.cpp 2008-03-15 18:53:54.000000000 +0100 @@ -28,7 +28,7 @@ "1 as children " "FROM upnpmedia " "%1 " - "ORDER BY title DESC", + "ORDER BY title", "" } }; @@ -87,7 +87,7 @@ { int nVideoID = mapParams[ "Id" ].toInt(); - QString sSQL = QString( "%1 WHERE class = 'VIDEO' AND intid=:VIDEOID " ) + QString sSQL = QString( "%1 AND intid=:VIDEOID ORDER BY title DESC" ) .arg( GetItemListSQL( ) ); query.prepare( sSQL ); @@ -211,6 +211,72 @@ return nCount; } + +///////////////////////////////////////////////////////////////////////////// +// +///////////////////////////////////////////////////////////////////////////// + +UPnpCDSExtensionResults *UPnpCDSVideo::ProcessItem( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, + QStringList &idPath ) +{ + pResults->m_nTotalMatches = 0; + pResults->m_nUpdateID = 1; + + if (pRequest->m_sObjectId.length() == 0) + return pResults; + + QStringList tokens = QStringList::split( "/", pRequest->m_sObjectId ); + QString sId = tokens.last(); + + if (sId.startsWith("Id")) + sId = sId.right( sId.length() - 2); + + switch( pRequest->m_eBrowseFlag ) + { + case CDS_BrowseMetadata: + { + // -------------------------------------------------------------- + // Return 1 Item + // -------------------------------------------------------------- + + QStringMap mapParams; + + mapParams.insert( "Id", sId ); + + MSqlQuery query(MSqlQuery::InitCon()); + + if (query.isConnected()) + { + BuildItemQuery( query, mapParams ); + query.exec(); + + if (query.isActive() && query.size() > 0) + { + if ( query.next() ) + { + AddItem( pRequest->m_sParentId, pResults, false, query ); + pResults->m_nTotalMatches = 1; + } + } + } + + break; + } + + case CDS_BrowseDirectChildren: + { + pRequest->m_sParentId = sId; + + CreateItems( pRequest, pResults, 0, "", false ); + + break; + } + } + + return pResults; +} + ///////////////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////////////// @@ -340,25 +406,17 @@ .arg( sServerIp ) .arg( sPort ); - QString sURIParams = QString( "?Id=%1" ) - .arg( nVidID ); - - QString sId = QString( "%1/item%2") - .arg( sObjectId ) - .arg( sURIParams ); - - sURIParams = QString( "/Id%1" ).arg( nVidID ); - sId = QString( "%1/item%2").arg( sObjectId ).arg( sURIParams ); + QString sURIParams = QString( "/Id%1" ).arg( nVidID ); + QString sId = QString( "Videos/0/item%1").arg( sURIParams ); if (sParentID == QString("%1").arg(STARTING_VIDEO_OBJECTID)) { - sParentID = sObjectId; + sParentID = "Videos/0"; } else { - sParentID = QString( "%1/item/Id%2") - .arg( sObjectId ) - .arg( sParentID ); + sParentID = QString( "Videos/0/item/Id%1") + .arg( sParentID ); } QString sAlbumArtURI= QString( "%1GetVideoArt%2") @@ -371,6 +429,8 @@ { pItem = CDSObject::CreateStorageFolder( sId, sName, sParentID); pItem->SetChildCount( GetCount( "parentid",QString( "%1" ).arg( nVidID )) ); + + pItem->SetPropValue( "storageUsed", "0" ); //-=>TODO: need proper value } else if (sItemType == "FILE" ) pItem = CDSObject::CreateVideoItem( sId, sName, sParentID ); diff -uNr mythtv-0.21/programs/mythbackend/upnpcdsvideo.h mythtv/programs/mythbackend/upnpcdsvideo.h --- mythtv-0.21/programs/mythbackend/upnpcdsvideo.h 2008-03-02 22:14:41.000000000 +0100 +++ mythtv/programs/mythbackend/upnpcdsvideo.h 2008-03-15 18:53:54.000000000 +0100 @@ -32,6 +32,10 @@ protected: + virtual UPnpCDSExtensionResults *ProcessItem( UPnpCDSRequest *pRequest, + UPnpCDSExtensionResults *pResults, + QStringList &idPath ); + virtual void CreateItems ( UPnpCDSRequest *pRequest, UPnpCDSExtensionResults *pResults, int nNodeIdx, diff -uNr mythtv-0.21/programs/mythbackend/upnpmedia.cpp mythtv/programs/mythbackend/upnpmedia.cpp --- mythtv-0.21/programs/mythbackend/upnpmedia.cpp 2008-02-15 00:03:12.000000000 +0100 +++ mythtv/programs/mythbackend/upnpmedia.cpp 2008-04-05 18:00:16.000000000 +0200 @@ -105,11 +105,8 @@ int parentid; QDir vidDir(directory); QString title; - // If we can't read it's contents move on //VERBOSE(VB_UPNP, QString("buildFileList = %1, rootID = %2, itemID = //%3").arg(directory).arg(rootID).arg(itemID)); - if (!vidDir.isReadable()) - return itemID; if (rootID > 0) parentid = rootID; @@ -117,7 +114,9 @@ parentid = itemID; vidDir.setSorting( QDir:: DirsFirst | QDir::Name ); - const QFileInfoList* List = vidDir.entryInfoList(); + const QFileInfoList *List = vidDir.entryInfoList(); + // If we can't read it's contents move on + if (!List) return itemID; for (QFileInfoListIterator it(*List); it; ++it) { QFileInfo Info(*it.current()); diff -uNr mythtv-0.21/programs/mythcommflag/main.cpp mythtv/programs/mythcommflag/main.cpp --- mythtv-0.21/programs/mythcommflag/main.cpp 2007-09-29 04:27:09.000000000 +0200 +++ mythtv/programs/mythcommflag/main.cpp 2009-04-14 19:07:48.000000000 +0200 @@ -59,7 +59,7 @@ program_info->recstartts = QDateTime::currentDateTime().addSecs( -180 * 60); program_info->recendts = QDateTime::currentDateTime().addSecs(-1); program_info->isVideo = true; - program_info->pathname = filename; + program_info->pathname = QFileInfo(filename).absFilePath(); RingBuffer *tmprbuf = new RingBuffer(filename, false); if (!tmprbuf) @@ -681,7 +681,7 @@ "Missing or invalid parameters for --chanid option"); return COMMFLAG_EXIT_INVALID_CHANID; } - + chanid += a.argv()[++argpos]; } else if (!strcmp(a.argv()[argpos],"-s") || @@ -694,7 +694,7 @@ "Missing or invalid parameters for --starttime option"); return COMMFLAG_EXIT_INVALID_STARTTIME; } - + starttime += a.argv()[++argpos]; } else if (!strcmp(a.argv()[argpos],"-f") || @@ -740,7 +740,7 @@ cerr << "Missing or invalid parameter for --allstart\n"; return COMMFLAG_EXIT_INVALID_STARTTIME; } - + allStart = a.argv()[++argpos]; } else if (!strcmp(a.argv()[argpos], "--allend")) @@ -751,7 +751,7 @@ cerr << "Missing or invalid parameter for --allend\n"; return COMMFLAG_EXIT_INVALID_STARTTIME; } - + allEnd = a.argv()[++argpos]; } else if (!strcmp(a.argv()[argpos], "--quiet")) @@ -849,8 +849,8 @@ cerr << "Invalid or missing argument to " "-O/--override-setting option\n"; return BACKEND_EXIT_INVALID_CMDLINE; - } - + } + QStringList pairs = QStringList::split(",", tmpArg); for (unsigned int index = 0; index < pairs.size(); ++index) { @@ -863,7 +863,7 @@ } } else - { + { cerr << "Invalid or missing argument to -O/--override-setting " "option\n"; return GENERIC_EXIT_INVALID_CMDLINE; diff -uNr mythtv-0.21/programs/mythfilldatabase/channeldata.cpp mythtv/programs/mythfilldatabase/channeldata.cpp --- mythtv-0.21/programs/mythfilldatabase/channeldata.cpp 2007-11-12 15:23:13.000000000 +0100 +++ mythtv/programs/mythfilldatabase/channeldata.cpp 2008-07-06 17:41:38.000000000 +0200 @@ -374,17 +374,18 @@ if ((*i).callsign.isEmpty()) { - QStringList words = QStringList::split(" ", - (*i).name.simplifyWhiteSpace().upper()); + QStringList words = QStringList::split(" ",(*i).name.simplifyWhiteSpace().upper()); QString callsign = ""; - if (words[0].isEmpty()) + QString w1 = words.size() > 0 ? words[0] : QString(); + QString w2 = words.size() > 1 ? words[1] : QString(); + if (w1.isEmpty()) callsign = QString::number(chanid); - else if (words[1].isEmpty()) + else if (w2.isEmpty()) callsign = words[0].left(5); else { - callsign = words[0].left(words[1].length() == 1 ? 4:3); - callsign += words[1].left(5 - callsign.length()); + callsign = w1.left(w2.length() == 1 ? 4:3); + callsign += w2.left(5 - callsign.length()); } (*i).callsign = callsign; } diff -uNr mythtv-0.21/programs/mythfilldatabase/filldata.cpp mythtv/programs/mythfilldatabase/filldata.cpp --- mythtv-0.21/programs/mythfilldatabase/filldata.cpp 2008-01-21 03:57:57.000000000 +0100 +++ mythtv/programs/mythfilldatabase/filldata.cpp 2008-09-17 13:37:04.000000000 +0200 @@ -103,7 +103,7 @@ logged_in = source.userid; raw_lineup = source.id; } - + if (ok) DataDirectStationUpdate(source, false); @@ -111,7 +111,7 @@ } bool FillData::grabDDData(Source source, int poffset, - QDate pdate, int ddSource) + QDate pdate, int ddSource) { if (source.dd_dups.empty()) ddprocessor.SetCacheData(false); @@ -155,7 +155,7 @@ if (needtoretrieve) { VERBOSE(VB_GENERAL, "Retrieving datadirect data."); - if (dd_grab_all) + if (dd_grab_all) { VERBOSE(VB_GENERAL, "Grabbing ALL available data."); if (!ddprocessor.GrabAllData()) @@ -315,9 +315,20 @@ QString filename = QString(tempfilename); - QString home = QDir::homeDirPath(); - QString configfile = QString("%1/%2.xmltv").arg(MythContext::GetConfDir()) + QString configfile = gContext->GetSetting(QString("XMLTVConfig.%1") + .arg(source.name),""); + + if (configfile.isEmpty()) + { + + VERBOSE(VB_GENERAL, "XMLTVConfig entry in settings table missing, " + "falling back to old behavior"); + QString home = QDir::homeDirPath(); + configfile = QString("%1/%2.xmltv").arg(MythContext::GetConfDir()) .arg(source.name); + } + + VERBOSE(VB_GENERAL, QString("XMLTV config file is: %1").arg(configfile)); QString command = QString("nice %1 --config-file '%2' --output %3") .arg(xmltv_grabber.ascii()) @@ -709,14 +720,14 @@ for (int i = 0; i < grabdays; i++) { - // We need to check and see if the current date has changed + // We need to check and see if the current date has changed // since we started in this loop. If it has, we need to adjust // the value of 'i' to compensate for this. if (QDate::currentDate() != qCurrentDate) { QDate newDate = QDate::currentDate(); i += (newDate.daysTo(qCurrentDate)); - if (i < 0) + if (i < 0) i = 0; qCurrentDate = newDate; } @@ -764,7 +775,7 @@ "GROUP BY c.chanid;"; if (query.exec(querystr.arg(i-1).arg(i).arg((*it).id)) && - query.isActive()) + query.isActive()) { VERBOSE(VB_CHANNEL, QString( "Checking program counts for day %1").arg(i-1)); @@ -782,7 +793,7 @@ } if (query.exec(querystr.arg(i).arg(i+1).arg((*it).id)) - && query.isActive()) + && query.isActive()) { VERBOSE(VB_CHANNEL, QString("Checking program " "counts for day %1").arg(i)); @@ -824,7 +835,7 @@ VERBOSE(VB_GENERAL, QString( "Data refresh needed because no data " "exists for day @ offset %1 from 8PM - " - "midnight.").arg(i)); + "midnight.").arg(i)); download_needed = true; } else if (previousDayCount == 0) @@ -834,7 +845,7 @@ "exists for day @ offset %1 from 8PM - " "midnight. Unable to calculate how much " "we should have for the current day so " - "a refresh is being forced.").arg(i-1)); + "a refresh is being forced.").arg(i-1)); download_needed = true; } else if (currentDayCount < (currentChanCount * 3)) @@ -1019,7 +1030,7 @@ if (!strncmp(strLine.c_str(), "channel", 7)) { - channel = strLine.substr(nSplitPoint, + channel = strLine.substr(nSplitPoint, strLine.size()).c_str(); } else if (!strncmp(strLine.c_str(), "fine", 4)) diff -uNr mythtv-0.21/programs/mythfilldatabase/xmltvparser.cpp mythtv/programs/mythfilldatabase/xmltvparser.cpp --- mythtv-0.21/programs/mythfilldatabase/xmltvparser.cpp 2007-11-12 15:23:13.000000000 +0100 +++ mythtv/programs/mythfilldatabase/xmltvparser.cpp 2008-09-24 13:46:29.000000000 +0200 @@ -104,7 +104,7 @@ { // we signal an error by setting it invalid (> 840min = 14hr) int result = 841; - + if (timezone.upper() == "UTC" || timezone.upper() == "GMT") return 0; @@ -299,12 +299,12 @@ pginfo->endts = text; text = element.attribute("channel", ""); - QStringList split = QStringList::split(" ", text); - + QStringList split = QStringList::split(" ", text); + pginfo->channel = split[0]; text = element.attribute("clumpidx", ""); - if (!text.isEmpty()) + if (!text.isEmpty()) { split = QStringList::split("/", text); pginfo->clumpidx = split[0]; @@ -416,9 +416,9 @@ { pginfo->previouslyshown = true; - QString prevdate = getFirstText(info); + QString prevdate = info.attribute("start"); pginfo->originalairdate = prevdate; - } + } else if (info.tagName() == "credits") { parseCredits(info, pginfo); @@ -483,11 +483,11 @@ } if (!partnumber.isEmpty()) - { + { tmp = partnumber.toInt() + 1; partnumber = QString::number(tmp); } - + if (partnumber != 0 && parttotal >= partnumber && !parttotal.isEmpty()) { pginfo->parttotal = parttotal; @@ -506,7 +506,7 @@ if (pginfo->category.isEmpty() && !pginfo->catType.isEmpty()) pginfo->category = pginfo->catType; - + /* Hack for teveblad grabber to do something with the content tag*/ if (pginfo->content != "") { @@ -515,7 +515,7 @@ pginfo->subtitle = pginfo->desc; pginfo->desc = pginfo->content; } - else if (pginfo->desc != "") + else if (pginfo->desc != "") { pginfo->desc = pginfo->desc + " - " + pginfo->content; } @@ -524,13 +524,13 @@ pginfo->desc = pginfo->content; } } - + if (pginfo->airdate.isEmpty()) pginfo->airdate = QDate::currentDate().toString("yyyy"); /* Let's build ourself a programid */ QString programid; - + if (pginfo->catType == "movie") programid = "MV"; else if (pginfo->catType == "series") @@ -539,7 +539,7 @@ programid = "SP"; else programid = "SH"; - + if (!uniqueid.isEmpty()) // we already have a unique id ready for use programid.append(uniqueid); else @@ -574,7 +574,7 @@ return pginfo; } - + bool XMLTVParser::parseFile( QString filename, QValueList<ChanInfo> *chanlist, QMap<QString, QValueList<ProgInfo> > *proglist) @@ -647,7 +647,7 @@ while (!n.isNull()) { QDomElement e = n.toElement(); - if (!e.isNull()) + if (!e.isNull()) { if (e.tagName() == "channel") { @@ -707,8 +707,8 @@ if (!aggregatedDesc.isEmpty()) aggregatedDesc.append(" | "); aggregatedDesc.append(pginfo->desc); - } - if (pginfo->clumpidx.toInt() == + } + if (pginfo->clumpidx.toInt() == pginfo->clumpmax.toInt() - 1) { pginfo->title = aggregatedTitle; diff -uNr mythtv-0.21/programs/mythfrontend/globalsettings.cpp mythtv/programs/mythfrontend/globalsettings.cpp --- mythtv-0.21/programs/mythfrontend/globalsettings.cpp 2008-03-08 00:14:05.000000000 +0100 +++ mythtv/programs/mythfrontend/globalsettings.cpp 2008-03-25 08:28:03.000000000 +0100 @@ -2264,7 +2264,7 @@ for (int i=0; i<num; ++i) gc->addSelection(QString::number(i), QString::number(i)); gc->addSelection(QObject::tr("All"), QString::number(-1)); - gc->setLabel(QObject::tr("Xinerama screen")); + gc->setLabel(QObject::tr("Display on screen")); gc->setValue(0); gc->setHelpText(QObject::tr("Run on the specified screen or " "spanning all screens.")); @@ -4885,9 +4885,7 @@ VerticalConfigurationGroup* screen = new VerticalConfigurationGroup(false); screen->setLabel(QObject::tr("Screen settings")); - // These values are also used in non-Xinerama setups - // (e.g. Linux multi-head) - //if (GetNumberOfXineramaScreens() > 1) + if (GetNumberOfXineramaScreens() > 1) { screen->addChild(XineramaScreen()); screen->addChild(XineramaMonitorAspectRatio()); diff -uNr mythtv-0.21/programs/mythfrontend/info_menu.xml mythtv/programs/mythfrontend/info_menu.xml --- mythtv-0.21/programs/mythfrontend/info_menu.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/info_menu.xml 2008-09-15 08:14:03.000000000 +0200 @@ -68,6 +68,7 @@ <text lang="JA">ムービータイム</text> <text lang="RU">Афиша кино</text> <text lang="PL">Repertuar kin</text> + <text lang="HE">זמני הקרנת סרטים</text> <action>PLUGIN mythmovies</action> <depends>mythmovies</depends> </button> @@ -94,7 +95,7 @@ <text lang="CZ">Počasí</text> <text lang="RU">Погода</text> <text lang="PL">Pogoda</text> - <text lang="HE">מזג האיור</text> + <text lang="HE">מזג האויר</text> <action>PLUGIN mythweather</action> <depends>mythweather</depends> </button> @@ -102,6 +103,7 @@ <button> <type>WEATHER</type> <text>Weather Station</text> + <text lang="DE">Wetterstation</text> <action>PLUGIN mythwstation</action> <depends>mythwstation</depends> </button> @@ -203,6 +205,7 @@ <text>Zone Minder</text> <text lang="IT">Videosorveglianza</text> <text lang="PL">Strażnik</text> + <text lang="FI">ZoneMinder</text> <action>PLUGIN mythzoneminder</action> <depends>mythzoneminder</depends> </button> diff -uNr mythtv-0.21/programs/mythfrontend/info_settings.xml mythtv/programs/mythfrontend/info_settings.xml --- mythtv-0.21/programs/mythfrontend/info_settings.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/info_settings.xml 2008-09-15 08:14:03.000000000 +0200 @@ -30,6 +30,7 @@ <button> <type>SETTINGS_WEATHER</type> <text>Weather Station Settings</text> + <text lang="DE">Wetterstation</text> <action>CONFIGPLUGIN mythwstation</action> <depends>mythwstation</depends> </button> diff -uNr mythtv-0.21/programs/mythfrontend/library.xml mythtv/programs/mythfrontend/library.xml --- mythtv-0.21/programs/mythfrontend/library.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/library.xml 2008-09-15 08:51:43.000000000 +0200 @@ -119,8 +119,8 @@ <button> <type>STREAM</type> - <text>Play online streams</text> - <text lang="HE">נגן רצף מכוון</text> + <text>Play Online Streams</text> + <text lang="HE">נגן מדיה מכוונת</text> <action>PLUGIN mythstream</action> <depends>mythstream</depends> </button> diff -uNr mythtv-0.21/programs/mythfrontend/main.cpp mythtv/programs/mythfrontend/main.cpp --- mythtv-0.21/programs/mythfrontend/main.cpp 2008-02-24 04:25:03.000000000 +0100 +++ mythtv/programs/mythfrontend/main.cpp 2009-04-19 23:30:15.000000000 +0200 @@ -58,6 +58,7 @@ #include "mythscreenstack.h" #include "mythmainwindow.h" #include "mythappearance.h" +#include "audiopulseutil.h" #define NO_EXIT 0 #define QUIT 1 @@ -1321,6 +1322,10 @@ } } + int pa_ret = pulseaudio_handle_startup(); + if (pa_ret != GENERIC_EXIT_OK) + return pa_ret; + if (logfile != "") { if (log_rotate(1) < 0) @@ -1548,6 +1553,10 @@ VERBOSE(VB_GENERAL, "Deleting UPnP client..."); delete g_pUPnp; + pa_ret = pulseaudio_handle_teardown(); + if (GENERIC_EXIT_OK != pa_ret) + return pa_ret; + return FRONTEND_EXIT_OK; } diff -uNr mythtv-0.21/programs/mythfrontend/mainmenu.xml mythtv/programs/mythfrontend/mainmenu.xml --- mythtv-0.21/programs/mythfrontend/mainmenu.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/mainmenu.xml 2008-03-21 10:27:07.000000000 +0100 @@ -200,6 +200,7 @@ <text lang="NL">Afsluiten</text> <text lang="RU">Завершение работы</text> <text lang="PL">Zamknij system</text> + <text lang="HE">כיבוי</text> <action>SHUTDOWN</action> </button> --> diff -uNr mythtv-0.21/programs/mythfrontend/main_settings.xml mythtv/programs/mythfrontend/main_settings.xml --- mythtv-0.21/programs/mythfrontend/main_settings.xml 2008-02-04 10:00:43.000000000 +0100 +++ mythtv/programs/mythfrontend/main_settings.xml 2008-09-15 08:14:03.000000000 +0200 @@ -54,6 +54,9 @@ <button> <type>SCREENSETUPWIZARD</type> <text>Screen Setup Wizards</text> + <text lang="HE">אשף הגדרות מסך</text> + <text lang="FI">Kuvavelho</text> + <text lang="DE">Bildschirm einrichten</text> <action>SCREENSETUPWIZARD</action> </button> @@ -194,6 +197,7 @@ <text lang="IT">Impostazioni Videosorveglianza</text> <text lang="DK">ZoneMinder</text> <text lang="PL">Ustaw strażnika</text> + <text lang="FI">Zoneminder Asetukset</text> <action>CONFIGPLUGIN mythzoneminder</action> <depends>mythzoneminder</depends> </button> diff -uNr mythtv-0.21/programs/mythfrontend/media_settings.xml mythtv/programs/mythfrontend/media_settings.xml --- mythtv-0.21/programs/mythfrontend/media_settings.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/media_settings.xml 2008-09-15 08:14:03.000000000 +0200 @@ -153,6 +153,8 @@ <text lang="SI">Nastavitve arhiviranja</text> <text lang="PL">Ustaw pliki archiwum</text> <text lang="HE">הגדרות ארכיון קבצים</text> + <text lang="FI">Arkistointiasetukset</text> + <text lang="DE">Archivieren</text> <action>CONFIGPLUGIN mytharchive</action> <depends>mytharchive</depends> </button> diff -uNr mythtv-0.21/programs/mythfrontend/mythfrontend.pro mythtv/programs/mythfrontend/mythfrontend.pro --- mythtv-0.21/programs/mythfrontend/mythfrontend.pro 2008-02-04 10:00:43.000000000 +0100 +++ mythtv/programs/mythfrontend/mythfrontend.pro 2009-04-19 23:30:15.000000000 +0200 @@ -61,6 +61,7 @@ using_xrandr:DEFINES += USING_XRANDR using_opengl_vsync:DEFINES += USING_OPENGL_VSYNC +using_pulse:DEFINES += USING_PULSE using_alsa:DEFINES += USING_ALSA using_arts:DEFINES += USING_ARTS using_jack:DEFINES += USING_JACK diff -uNr mythtv-0.21/programs/mythfrontend/optical_menu.xml mythtv/programs/mythfrontend/optical_menu.xml --- mythtv-0.21/programs/mythfrontend/optical_menu.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/optical_menu.xml 2008-09-15 08:14:03.000000000 +0200 @@ -84,6 +84,7 @@ <button> <type>ARCHIVE</type> <text>Archive Files</text> + <text lang="FI">Arkistoi</text> <text lang="IT">Archivia Files</text> <text lang="SV">Arkivera filer</text> <text lang="DK">Arkivér filer</text> @@ -139,6 +140,8 @@ <text lang="SI">Izvrzi plošček</text> <text lang="PL">Wysuń tackę</text> <text lang="HE">הוצא מדיה</text> + <text lang="FI">Poista Media</text> + <text lang="DE">Medien auswerfen</text> <action>EJECT</action> </button> diff -uNr mythtv-0.21/programs/mythfrontend/playbackbox.cpp mythtv/programs/mythfrontend/playbackbox.cpp --- mythtv-0.21/programs/mythfrontend/playbackbox.cpp 2008-02-27 06:12:15.000000000 +0100 +++ mythtv/programs/mythfrontend/playbackbox.cpp 2009-04-14 17:43:03.000000000 +0200 @@ -1059,14 +1059,14 @@ // Centre preview in the y axis if (temp.height() < blackholeBounds.height()) - pixmap_y = blackholeBounds.y() + + pixmap_y = blackholeBounds.y() + (blackholeBounds.height() - temp.height()) / 2; else pixmap_y = blackholeBounds.y(); // Centre preview in the x axis if (temp.width() < blackholeBounds.width()) - pixmap_x = blackholeBounds.x() + + pixmap_x = blackholeBounds.x() + (blackholeBounds.width() - temp.width()) / 2; else pixmap_x = blackholeBounds.x(); @@ -1191,14 +1191,14 @@ // Centre video in the y axis if (img.height() < blackholeBounds.height()) - video_y = blackholeBounds.y() + + video_y = blackholeBounds.y() + (blackholeBounds.height() - img.height()) / 2; else video_y = blackholeBounds.y(); // Centre video in the x axis if (img.width() < blackholeBounds.width()) - video_x = blackholeBounds.x() + + video_x = blackholeBounds.x() + (blackholeBounds.width() - img.width()) / 2; else video_x = blackholeBounds.x(); @@ -1679,7 +1679,7 @@ paintSkipUpdate = false; update(drawTotalBounds); } - else + else { progIndex = 0; @@ -1701,7 +1701,7 @@ paintSkipUpdate = false; update(drawTotalBounds); } - else + else { int progCount = progLists[titleList[titleIndex].lower()].count(); @@ -1721,7 +1721,7 @@ { if (inTitle) pageTop(); - else + else { progIndex = progLists[titleList[titleIndex].lower()].count() - 1; @@ -2066,7 +2066,7 @@ } ProgramInfo *p; - p = progLists[watchGroupLabel].first(); + p = progLists[watchGroupLabel].first(); while (p) { int recid = p->recordid; @@ -2703,7 +2703,7 @@ return false; } - if (rec->filesize == 0) + if ((rec->filesize == 0) && (rec->GetFilesize() == 0)) { VERBOSE(VB_IMPORTANT, QString("PlaybackBox::play(): Error, %1 is zero-bytes in size") @@ -3660,7 +3660,7 @@ return; curitem->ForgetHistory(); -} +} void PlaybackBox::doJobQueueJob(int jobType, int jobFlags) { diff -uNr mythtv-0.21/programs/mythfrontend/recpriorities_settings.xml mythtv/programs/mythfrontend/recpriorities_settings.xml --- mythtv-0.21/programs/mythfrontend/recpriorities_settings.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/recpriorities_settings.xml 2008-04-04 01:47:54.000000000 +0200 @@ -74,6 +74,7 @@ <text>Custom Priority</text> <text lang="IT">Personalizzate</text> <text lang="SI">Poljubne prioritete</text> + <text lang="FI">Muokatut Prioriteetit</text> <alttext>Custom Priority</alttext> <action>SETTINGS CUSTOMPRIORITY</action> </button> diff -uNr mythtv-0.21/programs/mythfrontend/tvmenu.xml mythtv/programs/mythfrontend/tvmenu.xml --- mythtv-0.21/programs/mythfrontend/tvmenu.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/tvmenu.xml 2008-09-15 08:14:03.000000000 +0200 @@ -146,7 +146,6 @@ <button> <type>TV_STATUS</type> <text>System Status</text> - <text lang="DE">Stato del Sistema</text> <text lang="DE">Systemstatus</text> <text lang="IS">Staða kerfis</text> <text lang="NL">Systeemstatus</text> diff -uNr mythtv-0.21/programs/mythfrontend/tv_schedule.xml mythtv/programs/mythfrontend/tv_schedule.xml --- mythtv-0.21/programs/mythfrontend/tv_schedule.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/tv_schedule.xml 2008-03-21 10:27:07.000000000 +0100 @@ -23,7 +23,7 @@ <text lang="CZ">Programový průvodce</text> <text lang="RU">Программа передач</text> <text lang="PL">Przewodnik programowy</text> - <text lang="HE">מדריך תכניות</text> + <text lang="HE">מדריך שידורים</text> <alttext>Guide</alttext> <alttext lang="IT">Guida</alttext> <alttext lang="FR">Grille</alttext> @@ -226,7 +226,7 @@ <text lang="CZ">Volné nahrávání</text> <text lang="RU">Дополнительно</text> <text lang="PL">Dostosuj nagrywanie</text> - <text lang="HE">תפירת הקלטה</text> + <text lang="HE">הקלטה לפי כללים</text> <action>TV_CUSTOM_RECORD</action> </button> diff -uNr mythtv-0.21/programs/mythfrontend/tv_search.xml mythtv/programs/mythfrontend/tv_search.xml --- mythtv-0.21/programs/mythfrontend/tv_search.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/tv_search.xml 2008-09-15 08:14:03.000000000 +0200 @@ -105,6 +105,9 @@ <type>TV_SEARCH_STORED</type> <text>Stored Searches</text> <text lang="SI">Shranjena iskanja</text> + <text lang="HE">חיפושים שמורים</text> + <text lang="FI">Tallennetut Haut</text> + <text lang="DE">Gespeicherte Suche</text> <action>TV_SEARCH_STORED</action> </button> diff -uNr mythtv-0.21/programs/mythfrontend/tv_settings.xml mythtv/programs/mythfrontend/tv_settings.xml --- mythtv-0.21/programs/mythfrontend/tv_settings.xml 2008-01-31 03:02:16.000000000 +0100 +++ mythtv/programs/mythfrontend/tv_settings.xml 2008-09-15 08:14:03.000000000 +0200 @@ -77,7 +77,7 @@ <text lang="NB">Avspilling</text> <text lang="CZ">Přehrávání</text> <text lang="RU">Воспроизведение</text> - <text lang="HE">הסרטת</text> + <text lang="HE">הסרטה</text> <action>SETTINGS PLAYBACK</action> </button> @@ -85,6 +85,9 @@ <type>TV_SETTINGS_PLAYBACK_OSD</type> <text>Playback OSD</text> <text lang="SI">OSD</text> + <text lang="HE">תצוגה בזמן הסרטה</text> + <text lang="FI">OSD Asetukset</text> + <text lang="DE">Wiedergabe OSD</text> <action>SETTINGS OSD</action> </button> @@ -105,6 +108,7 @@ <text lang="SI">Predvajalne skupine</text> <text lang="PL">Grupy odtwarzania</text> <text lang="HE">קבוצות הסרטה</text> + <text lang="FI">Toistoryhmät</text> <action>SETTINGS PLAYGROUP</action> </button> diff -uNr mythtv-0.21/programs/mythshutdown/main.cpp mythtv/programs/mythshutdown/main.cpp --- mythtv-0.21/programs/mythshutdown/main.cpp 2008-02-15 01:15:43.000000000 +0100 +++ mythtv/programs/mythshutdown/main.cpp 2008-09-18 19:55:35.000000000 +0200 @@ -74,12 +74,42 @@ { VERBOSE(VB_GENERAL, "Mythshutdown: --lock"); - QString value_str = getGlobalSetting("MythShutdownLock", "0"); - bool isNumber = false; - ulong value = value_str.toULong(&isNumber); - if (!isNumber) - value = 0; - setGlobalSetting("MythShutdownLock", QString::number(++value)); + MSqlQuery query(MSqlQuery::InitCon()); + + // lock setting table + int tries = 0; + while (!query.exec("LOCK TABLE settings WRITE;") && tries < 5) + { + VERBOSE(VB_GENERAL, "Waiting for lock on setting table"); + sleep(1); + tries++; + } + + if (tries >= 5) + { + VERBOSE(VB_GENERAL, "Waited too long to obtain lock on setting table"); + return 1; + } + + // does the setting already exist? + query.exec("SELECT * FROM settings " + "WHERE value = 'MythShutdownLock' AND hostname IS NULL;"); + + if (query.size() < 1) + { + // add the lock setting + query.exec("INSERT INTO settings (value, data) " + "VALUES ('MythShutdownLock', '1');"); + } + else + { + // update the lock setting + query.exec("UPDATE settings SET data = data + 1 " + "WHERE value = 'MythShutdownLock' AND hostname IS NULL;"); + } + + // unlock settings table + query.exec("UNLOCK TABLES;"); return 0; } @@ -88,16 +118,44 @@ { VERBOSE(VB_GENERAL, "Mythshutdown: --unlock"); - QString value_str = getGlobalSetting("MythShutdownLock", "0"); - bool isNumber = false; - ulong value = value_str.toULong(&isNumber); - if (!isNumber) - value = 0; - // Prevent going negative - if (value == 0) - ++value; - setGlobalSetting("MythShutdownLock", QString::number(--value)); + MSqlQuery query(MSqlQuery::InitCon()); + // lock setting table + int tries = 0; + while (!query.exec("LOCK TABLE settings WRITE;") && tries < 5) + { + VERBOSE(VB_GENERAL, "Waiting for lock on setting table"); + sleep(1); + tries++; + } + + if (tries >= 5) + { + VERBOSE(VB_GENERAL, "Waited too long to obtain lock on setting table"); + return 1; + } + + // does the setting exist? + query.exec("SELECT * FROM settings " + "WHERE value = 'MythShutdownLock' AND hostname IS NULL;"); + + if (query.size() < 1) + { + // add the lock setting + query.exec("INSERT INTO settings (value, data) " + "VALUES ('MythShutdownLock', '0');"); + } + else + { + // update lock setting + query.exec("UPDATE settings SET data = GREATEST(0, data - 1) " + "WHERE value = 'MythShutdownLock' AND hostname IS NULL;"); + } + + // unlock table + query.exec("UNLOCK TABLES;"); + + // tell the master BE to reset its idle time RemoteSendMessage("RESET_IDLETIME"); return 0; @@ -374,9 +432,7 @@ if (add) restarttime = restarttime.addSecs((-1) * add); - QString wakeup_timeformat = gContext->GetSetting("WakeupTimeFormat", - "yyyy-MM-ddThh:mm"); - setWakeupTime(restarttime.toString(wakeup_timeformat)); + setWakeupTime(restarttime.toString(Qt::ISODate)); return true; } @@ -881,6 +937,8 @@ else showUsage(); + delete gContext; + return res; } diff -uNr mythtv-0.21/programs/mythtranscode/mpeg2fix.h mythtv/programs/mythtranscode/mpeg2fix.h --- mythtv-0.21/programs/mythtranscode/mpeg2fix.h 2006-10-13 16:47:28.000000000 +0200 +++ mythtv/programs/mythtranscode/mpeg2fix.h 2008-03-31 17:45:51.000000000 +0200 @@ -13,15 +13,15 @@ extern "C" { //AVFormat/AVCodec -#include "../libavcodec/avcodec.h" -#include "../libavformat/avformat.h" +#include "libavcodec/avcodec.h" +#include "libavformat/avformat.h" //replex #include "replex/ringbuffer.h" #include "replex/multiplex.h" //libmpeg2 -#include "../libmythmpeg2/mpeg2.h" +#include "libmythmpeg2/mpeg2.h" } enum MPFDisplayMask { diff -uNr mythtv-0.21/programs/mythtranscode/transcode.cpp mythtv/programs/mythtranscode/transcode.cpp --- mythtv-0.21/programs/mythtranscode/transcode.cpp 2008-03-08 01:07:31.000000000 +0100 +++ mythtv/programs/mythtranscode/transcode.cpp 2008-03-31 17:45:51.000000000 +0200 @@ -23,7 +23,7 @@ #include "jobqueue.h" extern "C" { -#include "../libavcodec/avcodec.h" +#include "libavcodec/avcodec.h" } #define LOC QString("Transcode: ") diff -uNr mythtv-0.21/programs/mythtv/main.cpp mythtv/programs/mythtv/main.cpp --- mythtv-0.21/programs/mythtv/main.cpp 2008-02-24 14:58:52.000000000 +0100 +++ mythtv/programs/mythtv/main.cpp 2009-04-19 23:30:15.000000000 +0200 @@ -14,6 +14,7 @@ #include "libmyth/mythdbcon.h" #include "libmyth/mythdialogs.h" #include "libmyth/compat.h" +#include "audiopulseutil.h" #include <iostream> using namespace std; @@ -251,6 +252,10 @@ gContext->LoadQtConfig(); + int pa_ret = pulseaudio_handle_startup(); + if (pa_ret != GENERIC_EXIT_OK) + return pa_ret; + #if defined(Q_OS_MACX) // Mac OS X doesn't define the AudioOutputDevice setting #else @@ -287,7 +292,7 @@ pginfo->isVideo = true; // RingBuffer doesn't like relative pathnames - if (filename.left(1) != "/" && !filename.startsWith("dvd://")) + if (filename.left(1) != "/" && !filename.startsWith("dvd:")) pginfo->pathname.prepend(QDir::currentDirPath() + '/'); } @@ -303,6 +308,10 @@ } delete gContext; + pa_ret = pulseaudio_handle_teardown(); + if (GENERIC_EXIT_OK != pa_ret) + return pa_ret; + return TV_EXIT_OK; } diff -uNr mythtv-0.21/programs/mythtv/mythtv.pro mythtv/programs/mythtv/mythtv.pro --- mythtv-0.21/programs/mythtv/mythtv.pro 2007-09-05 18:58:55.000000000 +0200 +++ mythtv/programs/mythtv/mythtv.pro 2009-04-19 23:30:15.000000000 +0200 @@ -20,3 +20,18 @@ } using_x11:DEFINES += USING_X11 +using_xv:DEFINES += USING_XV +using_ivtv:DEFINES += USING_IVTV +using_xvmc:DEFINES += USING_XVMC +using_xvmc_vld:DEFINES += USING_XVMC_VLD +using_xrandr:DEFINES += USING_XRANDR +using_opengl_vsync:DEFINES += USING_OPENGL_VSYNC +using_opengl_video:DEFINES += USING_OPENGL_VIDEO +using_vdpau:DEFINES += USING_VDPAU + +using_pulse:DEFINES += USING_PULSE +using_alsa:DEFINES += USING_ALSA +using_arts:DEFINES += USING_ARTS +using_jack:DEFINES += USING_JACK +using_oss: DEFINES += USING_OSS +macx: DEFINES += USING_COREAUDIO diff -uNr mythtv-0.21/programs/mythtv-setup/setup.xml mythtv/programs/mythtv-setup/setup.xml --- mythtv-0.21/programs/mythtv-setup/setup.xml 2008-02-12 00:28:40.000000000 +0100 +++ mythtv/programs/mythtv-setup/setup.xml 2008-05-06 23:15:31.000000000 +0200 @@ -103,6 +103,8 @@ <type>SETUP_STORAGE_GROUPS</type> <text>6. Storage Directories</text> <text lang="IT">6. Cartelle</text> + <text lang="FI">Tallennusryhmät</text> + <text lang="SV">Lagringsgrupper</text> <action>STORAGE GROUPS</action> </button> diff -uNr mythtv-0.21/programs/mythwelcome/welcomedialog.cpp mythtv/programs/mythwelcome/welcomedialog.cpp --- mythtv-0.21/programs/mythwelcome/welcomedialog.cpp 2008-01-14 17:45:33.000000000 +0100 +++ mythtv/programs/mythwelcome/welcomedialog.cpp 2009-01-31 20:32:28.000000000 +0100 @@ -80,6 +80,7 @@ m_installDir + "/bin/mythfrontend"); myth_system(startFECmd.ascii()); + updateAll(); } void WelcomeDialog::startFrontendClick(void) @@ -378,8 +379,8 @@ status += "\n" + QDeepCopy<QString>(tuner->title); if (!tuner->subtitle.isEmpty()) status += "\n("+QDeepCopy<QString>(tuner->subtitle)+")"; - status += "\n" + tuner->startTime.toString("hh:mm") + - " " + tr("to") + " " + tuner->endTime.toString("hh:mm"); + status += "\n" + tuner->startTime.toString(m_timeFormat) + + " " + tr("to") + " " + tuner->endTime.toString(m_timeFormat); } else { @@ -414,7 +415,7 @@ QString dateFormat = gContext->GetSetting("DateFormat", "ddd dd MMM yyyy"); status += "\n" + prog->startTime.toString(dateFormat + " (" + m_timeFormat) + - " " + tr("to") + " " + prog->endTime.toString("hh:mm)"); + " " + tr("to") + " " + prog->endTime.toString(m_timeFormat + ")"); if (m_screenScheduledNo < m_scheduledList.count() - 1) m_screenScheduledNo++; diff -uNr mythtv-0.21/settings.pro mythtv/settings.pro --- mythtv-0.21/settings.pro 2008-02-05 12:18:34.000000000 +0100 +++ mythtv/settings.pro 2009-04-19 23:30:15.000000000 +0200 @@ -3,6 +3,15 @@ isEmpty( PREFIX ) { PREFIX = /usr/local } +isEmpty( RUNPREFIX ) { + RUNPREFIX = $$PREFIX +} +isEmpty( LIBDIRNAME ) { + LIBDIRNAME = lib +} +isEmpty( LIBDIR ) { + LIBDIR = $${RUNPREFIX}/$${LIBDIRNAME} +} LIBVERSION = 0.21 VERSION = 0.21.0 @@ -88,8 +97,6 @@ DEFINES += $$CONFIG_DEFINES DEFINES += _GNU_SOURCE DEFINES += _FILE_OFFSET_BITS=64 -DEFINES += PREFIX=\"$${PREFIX}\" -DEFINES += LIBDIR=\"$${LIBDIR}\" # construct linking path LOCAL_LIBDIR_X11 = @@ -109,6 +116,7 @@ EXTRA_LIBS += $$CONFIG_AUDIO_ALSA_LIBS EXTRA_LIBS += $$CONFIG_AUDIO_ARTS_LIBS EXTRA_LIBS += $$CONFIG_AUDIO_JACK_LIBS +EXTRA_LIBS += $$CONFIG_AUDIO_PULSE_LIBS EXTRA_LIBS += $$CONFIG_FIREWIRE_LIBS EXTRA_LIBS += $$CONFIG_DIRECTFB_LIBS @@ -119,5 +127,6 @@ EXTRA_LIBS += $$CONFIG_XVMC_LIBS EXTRA_LIBS += $$CONFIG_OPENGL_LIBS EXTRA_LIBS += $$FRIBIDI_LIBS +using_pulse:EXTRA_LIBS += $$PULSE_LIBS LIRC_LIBS = $$CONFIG_LIRC_LIBS diff -uNr mythtv-0.21/themes/blue/ui.xml mythtv/themes/blue/ui.xml --- mythtv-0.21/themes/blue/ui.xml 2008-03-04 16:32:10.000000000 +0100 +++ mythtv/themes/blue/ui.xml 2008-03-11 11:24:38.000000000 +0100 @@ -1278,7 +1278,7 @@ <fcnfont name="list-selected" function="selected"></fcnfont> <fcnfont name="enabled_state_0_font" function="enabled_state_0"></fcnfont> <columnpadding>1</columnpadding> - <column number="1" width="745" context="-1"></column> + <column number="1" width="715" context="-1"></column> <items>8</items> <image function="selectionbar" filename="cr-selectbar.png" location="-10,-5"></image> <image function="uparrow" filename="uparrow.png" location="755,15"></image> diff -uNr mythtv-0.21/themes/default-wide/netflix-ui.xml mythtv/themes/default-wide/netflix-ui.xml --- mythtv-0.21/themes/default-wide/netflix-ui.xml 2007-08-25 10:53:29.000000000 +0200 +++ mythtv/themes/default-wide/netflix-ui.xml 2008-11-10 20:10:04.000000000 +0100 @@ -266,7 +266,7 @@ <area>0,400,800,200</area> <image name="background" draworder="0" fleximage="no"> - <filename>news-info-bg.png</filename> + <filename>mythflix_background.png</filename> <position>0,0</position> </image> diff -uNr mythtv-0.21/themes/G.A.N.T/ui.xml mythtv/themes/G.A.N.T/ui.xml --- mythtv-0.21/themes/G.A.N.T/ui.xml 2008-03-04 16:32:10.000000000 +0100 +++ mythtv/themes/G.A.N.T/ui.xml 2008-03-11 11:24:38.000000000 +0100 @@ -2169,7 +2169,7 @@ <fcnfont name="active" function="selected"></fcnfont> <fcnfont name="enabled_state_0_font" function="enabled_state_0"></fcnfont> <columnpadding>1</columnpadding> - <column number="1" width="745" context="-1"></column> + <column number="1" width="715" context="-1"></column> <items>8</items> <image function="selectionbar" filename="rk-selectbar.png" location="-8,3"></image> <image function="uparrow" filename="gantup.png" location="740,15"></image> diff -uNr mythtv-0.21/themes/themes.pro mythtv/themes/themes.pro --- mythtv-0.21/themes/themes.pro 2008-01-29 03:24:25.000000000 +0100 +++ mythtv/themes/themes.pro 2008-04-24 04:19:34.000000000 +0200 @@ -7,6 +7,7 @@ CONFIG -= moc qt !macx:QMAKE_COPY_DIR = sh ./cpsvndir +win32:QMAKE_INSTALL_DIR = sh ./cpsvndir themes.path = $${PREFIX}/share/mythtv/themes/ themes.files = blue defaultosd blueosd default default-wide G.A.N.T classic DVR diff -uNr mythtv-0.21/version.pro mythtv/version.pro --- mythtv-0.21/version.pro 2007-12-10 20:19:08.000000000 +0100 +++ mythtv/version.pro 2007-12-10 20:19:08.000000000 +0100 @@ -9,7 +9,7 @@ MYTHBINVERS = $$system(egrep MYTH_BINARY_VERSION libs/libmyth/mythcontext.h | sed 's/.*MYTH_BINARY_VERSION //') SVNTREEDIR = $$system(pwd) -SVNREPOPATH = "$$URL: http://svn.mythtv.org/svn/tags/release-0-21/mythtv/version.pro $$" +SVNREPOPATH = "$$URL: http://svn.mythtv.org/svn/branches/release-0-21-fixes/mythtv/version.pro $$" SOURCES += version.cpp