changeset 36429:28ea255e40ce

Add support for TV/DVB to the GUI. Support is limited to a single (resp. the first) card. At the same time, add the new GUI option 'gui_tv_digital', the new GUI message 'evPlayTV' and the new GUI font symbol 'b'. Additionally, update the documentation.
author ib
date Fri, 29 Nov 2013 12:41:32 +0000
parents 7766530caa76
children 08f21a09a545
files Changelog DOCS/man/de/mplayer.1 DOCS/man/en/mplayer.1 DOCS/xml/de/skin.xml DOCS/xml/en/skin.xml gui/app/app.c gui/app/app.h gui/app/cfg.c gui/app/cfg.h gui/app/gui.h gui/dialog/menu.c gui/dialog/pixmaps/tv.xpm gui/dialog/preferences.c gui/interface.c gui/ui/actions.c gui/ui/render.c gui/util/string.c gui/win32/skinload.c gui/win32/skinload.h help/help_mp-de.h help/help_mp-en.h
diffstat 21 files changed, 160 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/Changelog	Fri Nov 29 12:34:21 2013 +0000
+++ b/Changelog	Fri Nov 29 12:41:32 2013 +0000
@@ -30,6 +30,9 @@
     * Android: -wid is supported. This should allow using MPlayer in slave
       mode, a native window pointer needs to be passed as -wid. Untested.
 
+    GUI:
+    * Support for TV/DVB
+
   1.1: "We gave up on 1.0"
 
     Decoders:
--- a/DOCS/man/de/mplayer.1	Fri Nov 29 12:34:21 2013 +0000
+++ b/DOCS/man/de/mplayer.1	Fri Nov 29 12:41:32 2013 +0000
@@ -33,7 +33,7 @@
 .\" Titel
 .\" --------------------------------------------------------------------------
 .
-.TH MPlayer 1 "03.03.2012" "Das MPlayer Projekt"
+.TH MPlayer 1 "11.09.2013" "Das MPlayer Projekt"
 .
 .SH NAME
 mplayer  \- Movie Player
@@ -619,6 +619,7 @@
 gui_main_pos_x,
 gui_main_pos_y,
 gui_save_pos (ja/nein),
+gui_tv_digital (ja/nein),
 gui_video_out_pos_x,
 gui_video_out_pos_y,
 load_fullscreen  (ja/nein),
--- a/DOCS/man/en/mplayer.1	Fri Nov 29 12:34:21 2013 +0000
+++ b/DOCS/man/en/mplayer.1	Fri Nov 29 12:41:32 2013 +0000
@@ -31,7 +31,7 @@
 .\" Title
 .\" --------------------------------------------------------------------------
 .
-.TH MPlayer 1 "2012-03-03" "The MPlayer Project" "The Movie Player"
+.TH MPlayer 1 "2013-11-19" "The MPlayer Project" "The Movie Player"
 .
 .SH NAME
 mplayer  \- movie player
@@ -603,6 +603,7 @@
 gui_main_pos_x,
 gui_main_pos_y,
 gui_save_pos (yes/no),
+gui_tv_digital (yes/no),
 gui_video_out_pos_x,
 gui_video_out_pos_y,
 load_fullscreen  (yes/no),
--- a/DOCS/xml/de/skin.xml	Fri Nov 29 12:34:21 2013 +0000
+++ b/DOCS/xml/de/skin.xml	Fri Nov 29 12:41:32 2013 +0000
@@ -926,6 +926,7 @@
             <row><entry><keycap>v</keycap></entry><entry>Stream ist eine Video-CD</entry></row>
             <row><entry><keycap>d</keycap></entry><entry>Stream ist eine DVD</entry></row>
             <row><entry><keycap>u</keycap></entry><entry>Stream ist eine URL</entry></row>
+            <row><entry><keycap>b</keycap></entry><entry>Stream ist eine TV/DVB-Übertragung</entry></row>
           </tbody>
         </tgroup>
       </informaltable>
@@ -1086,6 +1087,15 @@
       </varlistentry>
 
       <varlistentry>
+        <term><emphasis role="bold">evPlayTV</emphasis></term>
+        <listitem>
+          <para>
+            Versucht die TV/DVB-Wiedergabe zu beginnen.
+          </para>
+        </listitem>
+      </varlistentry>
+
+      <varlistentry>
         <term><emphasis role="bold">evPlaySwitchToPause</emphasis></term>
         <listitem>
           <para>
--- a/DOCS/xml/en/skin.xml	Fri Nov 29 12:34:21 2013 +0000
+++ b/DOCS/xml/en/skin.xml	Fri Nov 29 12:41:32 2013 +0000
@@ -795,6 +795,7 @@
   <row><entry><keycap>v</keycap></entry><entry>stream is a Video CD</entry></row>
   <row><entry><keycap>d</keycap></entry><entry>stream is a DVD</entry></row>
   <row><entry><keycap>u</keycap></entry><entry>stream is a URL</entry></row>
+  <row><entry><keycap>b</keycap></entry><entry>stream is a TV/DVB broadcast</entry></row>
 </tbody>
 </tgroup>
 </informaltable>
@@ -931,6 +932,13 @@
 </varlistentry>
 
 <varlistentry>
+  <term><emphasis role="bold">evPlayTV</emphasis></term>
+  <listitem><para>
+  Tries to start TV/DVB broadcast.
+  </para></listitem>
+</varlistentry>
+
+<varlistentry>
   <term><emphasis role="bold">evPlaySwitchToPause</emphasis></term>
   <listitem><para>
   The opposite of <literal>evPauseSwitchToPlay</literal>. This message starts
--- a/gui/app/app.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/app/app.c	Fri Nov 29 12:41:32 2013 +0000
@@ -57,6 +57,7 @@
     { evPlayDVD,           "evPlayDVD"           },
     { evLoadURL,           "evSetURL"            }, // legacy
     { evLoadURL,           "evLoadURL"           },
+    { evPlayTV,            "evPlayTV"            },
     { evPlaySwitchToPause, "evPlaySwitchToPause" },
     { evPauseSwitchToPlay, "evPauseSwitchToPlay" },
     { evBackward10sec,     "evBackward10sec"     },
--- a/gui/app/app.h	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/app/app.h	Fri Nov 29 12:41:32 2013 +0000
@@ -40,6 +40,7 @@
     evPlayVCD,
     evPlayDVD,
     evLoadURL,
+    evPlayTV,
     evPlaySwitchToPause,
     evPauseSwitchToPlay,
     evBackward10sec,
--- a/gui/app/cfg.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/app/cfg.c	Fri Nov 29 12:41:32 2013 +0000
@@ -45,6 +45,11 @@
 #include "sub/font_load.h"
 #include "sub/sub.h"
 
+guiTV_t guiTV[2] = {
+    { STREAMTYPE_TV,  "tv"  },
+    { STREAMTYPE_DVB, "dvb" }
+};
+
 m_config_t *gui_conf;
 
 int gtkCacheOn;
@@ -93,6 +98,8 @@
 int gui_video_pos_x = -3;
 int gui_video_pos_y = -3;
 
+int gui_tv_digital = True;
+
 int guiWinID = -1;
 
 char *skinName;
@@ -174,6 +181,10 @@
 
     { "idle",                        &player_idle_mode,        CONF_TYPE_FLAG,        CONF_GLOBAL, 0,     1,          NULL },
 
+#ifdef CONFIG_TV
+    { "gui_tv_digital",              &gui_tv_digital,          CONF_TYPE_FLAG,        0,           0,     1,          NULL },
+#endif
+
     // NOTE TO MYSELF: Do we really need all/any non-gtkOptions, i.e. override mplayer options?
 
     { "gui_skin",                    &skinName,                CONF_TYPE_STRING,      0,           0,     0,          NULL },
--- a/gui/app/cfg.h	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/app/cfg.h	Fri Nov 29 12:41:32 2013 +0000
@@ -22,6 +22,13 @@
 #include "m_config.h"
 #include "m_option.h"
 
+typedef struct {
+    int StreamType;
+    char *SchemeName;
+} guiTV_t;
+
+extern guiTV_t guiTV[2];
+
 extern m_config_t *gui_conf;
 
 extern int gtkCacheOn;
@@ -82,6 +89,7 @@
 extern int gui_main_pos_y;
 extern int gui_video_pos_x;
 extern int gui_video_pos_y;
+extern int gui_tv_digital;
 
 extern int guiWinID;
 
--- a/gui/app/gui.h	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/app/gui.h	Fri Nov 29 12:41:32 2013 +0000
@@ -41,6 +41,9 @@
 /// StreamTypes that are permitted in a playlist
 #define isPlaylistStreamtype (guiInfo.StreamType == STREAMTYPE_FILE || guiInfo.StreamType == STREAMTYPE_STREAM)
 
+/// StreamTypes that permit seeking
+#define isSeekableStreamtype (guiInfo.StreamType != STREAMTYPE_STREAM && guiInfo.StreamType != STREAMTYPE_TV && guiInfo.StreamType != STREAMTYPE_DVB)
+
 /// Check whether @a x/y is inside the rectangle given by @a top @a x/y and @a bottom @a x/y.
 #define isInside(x, y, tx, ty, bx, by) ((x) > (tx) && (y) > (ty) && (x) < (bx) && (y) < (by))
 
--- a/gui/dialog/menu.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/dialog/menu.c	Fri Nov 29 12:41:32 2013 +0000
@@ -86,6 +86,9 @@
 #include "pixmaps/audiolang.xpm"
 #include "pixmaps/sublang.xpm"
 #endif
+#ifdef CONFIG_TV
+#include "pixmaps/tv.xpm"
+#endif
 #include "pixmaps/empty1px.xpm"
 
 int gtkPopupMenu;
@@ -561,6 +564,9 @@
        }
 #endif
     AddMenuItem( window1, (const char*)url_xpm, SubMenu,MSGTR_MENU_PlayURL, evLoadURL );
+#ifdef CONFIG_TV
+    AddMenuItem( window1, (const char*)tv_xpm, SubMenu,MSGTR_MENU_PlayTV, evPlayTV );
+#endif
     AddMenuItem( window1, (const char*)sub_xpm, SubMenu,MSGTR_MENU_LoadSubtitle"   ", evLoadSubtitle );
     AddMenuItem( window1, (const char*)nosub_xpm, SubMenu,MSGTR_MENU_DropSubtitle,evDropSubtitle );
     AddMenuItem( window1, (const char*)loadeaf_xpm, SubMenu,MSGTR_MENU_LoadExternAudioFile, evLoadAudioFile );
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui/dialog/pixmaps/tv.xpm	Fri Nov 29 12:41:32 2013 +0000
@@ -0,0 +1,28 @@
+/* XPM */
+static const char * const tv_xpm[] = {
+"16 16 8 1",
+"  c #000000",
+"! c #FFFFFF",
+"# c #666666",
+"$ c #999999",
+"% c #B3B3B3",
+"& c #CCCCCC",
+"' c #E6E6E6",
+"( c None",
+"((((((((((((((((",
+"((((((((((((((((",
+"(              (",
+"  !!!!!!!!!!!!  ",
+" !            ! ",
+" ! #$%&''&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&''&%$# ! ",
+" !            ! ",
+"  !!!!!!!!!!!!  ",
+"(              (",
+"((((((((((((((((",
+"(((((((((((((((("
+};
--- a/gui/dialog/preferences.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/dialog/preferences.c	Fri Nov 29 12:41:32 2013 +0000
@@ -108,6 +108,7 @@
 static GtkWidget * CBStopXScreenSaver;
 static GtkWidget * CBPlayBar;
 static GtkWidget * CBNoIdle;
+static GtkWidget * CBTVDigital;
 
 static GtkWidget * SBCache;
 static GtkAdjustment * SBCacheadj;
@@ -333,6 +334,7 @@
 	gtkShowVideoWindow=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBShowVideoWindow ) );
 	stop_xscreensaver=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBStopXScreenSaver ) );
 	gtkEnablePlayBar=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBPlayBar ) );
+	gui_tv_digital=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBTVDigital ) );
 	player_idle_mode=!gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBNoIdle ) );
 	mplayer( MPLAYER_SET_AUTO_QUALITY,HSPPQualityadj->value,0 );
 
@@ -967,6 +969,7 @@
   CBSaveWinPos=gtkAddCheckButton( MSGTR_PREFERENCES_SaveWinPos,vbox602 );
   CBStopXScreenSaver=gtkAddCheckButton( MSGTR_PREFERENCES_XSCREENSAVER,vbox602 );
   CBPlayBar=gtkAddCheckButton( MSGTR_PREFERENCES_PlayBar,vbox602 );
+  CBTVDigital=gtkAddCheckButton( MSGTR_PREFERENCES_TV_Digital,vbox602 );
   CBNoIdle=gtkAddCheckButton( MSGTR_PREFERENCES_NoIdle,vbox602 );
 
   gtkAddHSeparator( vbox602 );
@@ -1272,6 +1275,10 @@
    gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBPlayBar ),0 );
    gtk_widget_set_sensitive( CBPlayBar,FALSE );
   }
+ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBTVDigital ),gui_tv_digital );
+#ifndef CONFIG_TV
+   gtk_widget_set_sensitive( CBTVDigital,FALSE );
+#endif
  gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBNoIdle ),!player_idle_mode );
 
  gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBCache ),0 );
--- a/gui/interface.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/interface.c	Fri Nov 29 12:41:32 2013 +0000
@@ -23,6 +23,7 @@
 
 #include "interface.h"
 #include "app/app.h"
+#include "app/cfg.h"
 #include "app/gui.h"
 #include "dialog/dialog.h"
 #include "skin/skin.h"
@@ -437,6 +438,15 @@
             dvd_angle   = guiInfo.Angle;
 #endif
             break;
+
+        case STREAMTYPE_TV:
+        case STREAMTYPE_DVB:
+        {
+            char tmp[512];
+
+            sprintf(tmp, "%s://", guiTV[gui_tv_digital].SchemeName);
+            uiSetFile(NULL, tmp, SAME_STREAMTYPE);
+        }
         }
 
         /* video opts */
@@ -632,6 +642,11 @@
             memcpy(guiInfo.Subtitle, dvd->subtitles, sizeof(dvd->subtitles));
 #endif
             break;
+
+        case STREAMTYPE_TV:
+        case STREAMTYPE_DVB:
+            guiInfo.Tracks = 1;
+            break;
         }
 
         break;
@@ -652,7 +667,7 @@
         if (guiInfo.sh_video)
             guiInfo.CodecName = strdup(guiInfo.sh_video->codec->name);
 
-        state = (guiInfo.StreamType == STREAMTYPE_STREAM ? btnDisabled : btnReleased);
+        state = (isSeekableStreamtype ? btnReleased : btnDisabled);
         btnSet(evForward10sec, state);
         btnSet(evBackward10sec, state);
         btnSet(evForward1min, state);
--- a/gui/ui/actions.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/ui/actions.c	Fri Nov 29 12:41:32 2013 +0000
@@ -76,6 +76,8 @@
 
     case STREAMTYPE_CDDA:
     case STREAMTYPE_VCD:
+    case STREAMTYPE_TV:
+    case STREAMTYPE_DVB:
         listMgr(PLAYLIST_DELETE, 0);
     case STREAMTYPE_FILE:
     case STREAMTYPE_STREAM:
@@ -175,6 +177,12 @@
         goto play;
 
 #endif
+#ifdef CONFIG_TV
+    case evPlayTV:
+        guiInfo.StreamType = guiTV[gui_tv_digital].StreamType;
+        goto play;
+
+#endif
     case evPlay:
     case evPlaySwitchToPause:
 play:
@@ -198,6 +206,8 @@
             case STREAMTYPE_CDDA:
             case STREAMTYPE_VCD:
             case STREAMTYPE_DVD:
+            case STREAMTYPE_TV:
+            case STREAMTYPE_DVB:
 
                 if (!guiInfo.Track)
                     guiInfo.Track = (guiInfo.StreamType == STREAMTYPE_VCD ? 2 : 1);
@@ -507,6 +517,8 @@
     if (guiInfo.StreamType != STREAMTYPE_CDDA &&
         guiInfo.StreamType != STREAMTYPE_VCD &&
         guiInfo.StreamType != STREAMTYPE_DVD &&
+        guiInfo.StreamType != STREAMTYPE_TV &&
+        guiInfo.StreamType != STREAMTYPE_DVB &&
         (!guiInfo.Filename || (guiInfo.Filename[0] == 0)))
         return;
 
@@ -721,6 +733,8 @@
     case STREAMTYPE_CDDA:
     case STREAMTYPE_VCD:
     case STREAMTYPE_DVD:
+    case STREAMTYPE_TV:
+    case STREAMTYPE_DVB:
 
         break;
 
@@ -786,6 +800,14 @@
 
         break;
 
+    case STREAMTYPE_TV:
+    case STREAMTYPE_DVB:
+
+        if (guiInfo.Playing == GUI_PLAY)
+            mp_input_queue_cmd(mp_input_parse_cmd("tv_step_channel -1"));
+
+        return;
+
     default:
 
         prev = listMgr(PLAYLIST_ITEM_GET_PREV, 0);
@@ -846,6 +868,14 @@
 
         break;
 
+    case STREAMTYPE_TV:
+    case STREAMTYPE_DVB:
+
+        if (guiInfo.Playing == GUI_PLAY)
+            mp_input_queue_cmd(mp_input_parse_cmd("tv_step_channel 1"));
+
+        return;
+
     default:
 
         next = listMgr(PLAYLIST_ITEM_GET_NEXT, 0);
--- a/gui/ui/render.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/ui/render.c	Fri Nov 29 12:41:32 2013 +0000
@@ -216,6 +216,11 @@
                     av_strlcat(trbuf, "d", sizeof(trbuf));
                     break;
 
+                case STREAMTYPE_TV:
+                case STREAMTYPE_DVB:
+                    av_strlcat(trbuf, "b", sizeof(trbuf));
+                    break;
+
                 default:
                     av_strlcat(trbuf, " ", sizeof(trbuf));
                     break;
--- a/gui/util/string.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/util/string.c	Fri Nov 29 12:41:32 2013 +0000
@@ -325,6 +325,17 @@
 
         break;
 
+    case STREAMTYPE_TV:
+    case STREAMTYPE_DVB:
+
+        p = MSGTR_NoChannelName;
+
+        if (guiInfo.mpcontext->stream)
+            stream_control(guiInfo.mpcontext->stream, STREAM_CTRL_GET_CURRENT_CHANNEL, &p);
+
+        av_strlcpy(fname, p, maxlen);
+        break;
+
     default:
 
         av_strlcpy(fname, MSGTR_NoMediaOpened, maxlen);
--- a/gui/win32/skinload.c	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/win32/skinload.c	Fri Nov 29 12:41:32 2013 +0000
@@ -62,6 +62,7 @@
     {   evPlayDVD,              "evPlayDVD"             },
     {   evLoadURL,              "evSetURL"              }, // legacy
     {   evLoadURL,              "evLoadURL"             },
+    {   evPlayTV,               "evPlayTV"              },
     {   evPlaySwitchToPause,    "evPlaySwitchToPause"   },
     {   evPauseSwitchToPlay,    "evPauseSwitchToPlay"   },
     {   evBackward10sec,        "evBackward10sec"       },
--- a/gui/win32/skinload.h	Fri Nov 29 12:34:21 2013 +0000
+++ b/gui/win32/skinload.h	Fri Nov 29 12:41:32 2013 +0000
@@ -150,6 +150,7 @@
   evPlayVCD,
   evPlayDVD,
   evLoadURL,
+  evPlayTV,
   evPlaySwitchToPause,
   evPauseSwitchToPlay,
   evBackward10sec,
--- a/help/help_mp-de.h	Fri Nov 29 12:34:21 2013 +0000
+++ b/help/help_mp-de.h	Fri Nov 29 12:41:32 2013 +0000
@@ -763,6 +763,7 @@
 #define MSGTR_Title "Titel %d"
 #define MSGTR_NoChapter "Kein Kapitel"
 #define MSGTR_Chapter "Kapitel %d"
+#define MSGTR_NoChannelName "Kein Sendername"
 #define MSGTR_NoFileLoaded "Keine Datei geladen."
 #define MSGTR_Filter_UTF8Subtitles "UTF-8 kodierte Untertitel (*.utf, *.utf-8, *.utf8)"
 #define MSGTR_Filter_AllSubtitles "Alle Untertitel"
@@ -847,6 +848,7 @@
 #define MSGTR_MENU_PlayVCD "Spiele VCD..."
 #define MSGTR_MENU_PlayDVD "Spiele DVD..."
 #define MSGTR_MENU_PlayURL "Spiele URL..."
+#define MSGTR_MENU_PlayTV "Spiele TV..."
 #define MSGTR_MENU_LoadSubtitle "Lade Untertitel..."
 #define MSGTR_MENU_DropSubtitle "Entferne Untertitel..."
 #define MSGTR_MENU_LoadExternAudioFile "Lade externe Audiodatei..."
@@ -1015,6 +1017,7 @@
 #define MSGTR_PREFERENCES_SaveWinPos "Speichere Fensterposition"
 #define MSGTR_PREFERENCES_XSCREENSAVER "Deaktiviere XScreenSaver"
 #define MSGTR_PREFERENCES_PlayBar "Aktiviere die Playbar"
+#define MSGTR_PREFERENCES_TV_Digital "Digitaler TV-Empfang"
 #define MSGTR_PREFERENCES_NoIdle "Programm nach der Wiedergabe beenden"
 #define MSGTR_PREFERENCES_AutoSync "AutoSync ein/aus"
 #define MSGTR_PREFERENCES_AutoSyncValue "Autosyncwert: "
--- a/help/help_mp-en.h	Fri Nov 29 12:34:21 2013 +0000
+++ b/help/help_mp-en.h	Fri Nov 29 12:41:32 2013 +0000
@@ -557,6 +557,7 @@
 #define MSGTR_Title "Title %d"
 #define MSGTR_NoChapter "No chapter"
 #define MSGTR_Chapter "Chapter %d"
+#define MSGTR_NoChannelName "No channel name"
 #define MSGTR_NoFileLoaded "No file loaded."
 #define MSGTR_Filter_UTF8Subtitles "UTF-8 encoded subtitles (*.utf, *.utf-8, *.utf8)"
 #define MSGTR_Filter_AllSubtitles "All subtitles"
@@ -641,6 +642,7 @@
 #define MSGTR_MENU_PlayVCD "Play VCD..."
 #define MSGTR_MENU_PlayDVD "Play DVD..."
 #define MSGTR_MENU_PlayURL "Play URL..."
+#define MSGTR_MENU_PlayTV "Play TV..."
 #define MSGTR_MENU_LoadSubtitle "Load subtitle..."
 #define MSGTR_MENU_DropSubtitle "Drop subtitle..."
 #define MSGTR_MENU_LoadExternAudioFile "Load external audio file..."
@@ -808,6 +810,7 @@
 #define MSGTR_PREFERENCES_SaveWinPos "Save window position"
 #define MSGTR_PREFERENCES_XSCREENSAVER "Stop XScreenSaver"
 #define MSGTR_PREFERENCES_PlayBar "Enable playbar"
+#define MSGTR_PREFERENCES_TV_Digital "Digital TV reception"
 #define MSGTR_PREFERENCES_NoIdle "Quit after playing"
 #define MSGTR_PREFERENCES_AutoSync "AutoSync on/off"
 #define MSGTR_PREFERENCES_AutoSyncValue "Autosync: "