# HG changeset patch
# User ib
# Date 1385728892 0
# Node ID 28ea255e40ce245eff0be24bfef8de58302b89d8
# Parent 7766530caa76d0a71a63494860a538b5ffb8ca25
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.
diff -r 7766530caa76 -r 28ea255e40ce Changelog
--- 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:
diff -r 7766530caa76 -r 28ea255e40ce DOCS/man/de/mplayer.1
--- 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),
diff -r 7766530caa76 -r 28ea255e40ce DOCS/man/en/mplayer.1
--- 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),
diff -r 7766530caa76 -r 28ea255e40ce DOCS/xml/de/skin.xml
--- 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 @@
vStream ist eine Video-CD
dStream ist eine DVD
uStream ist eine URL
+ bStream ist eine TV/DVB-Übertragung
@@ -1086,6 +1087,15 @@
+ evPlayTV
+
+
+ Versucht die TV/DVB-Wiedergabe zu beginnen.
+
+
+
+
+
evPlaySwitchToPause
diff -r 7766530caa76 -r 28ea255e40ce DOCS/xml/en/skin.xml
--- 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 @@
vstream is a Video CD
dstream is a DVD
ustream is a URL
+ bstream is a TV/DVB broadcast
@@ -931,6 +932,13 @@
+ evPlayTV
+
+ Tries to start TV/DVB broadcast.
+
+
+
+
evPlaySwitchToPause
The opposite of evPauseSwitchToPlay. This message starts
diff -r 7766530caa76 -r 28ea255e40ce gui/app/app.c
--- 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" },
diff -r 7766530caa76 -r 28ea255e40ce gui/app/app.h
--- 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,
diff -r 7766530caa76 -r 28ea255e40ce gui/app/cfg.c
--- 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 },
diff -r 7766530caa76 -r 28ea255e40ce gui/app/cfg.h
--- 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;
diff -r 7766530caa76 -r 28ea255e40ce gui/app/gui.h
--- 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))
diff -r 7766530caa76 -r 28ea255e40ce gui/dialog/menu.c
--- 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 );
diff -r 7766530caa76 -r 28ea255e40ce gui/dialog/pixmaps/tv.xpm
--- /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",
+"((((((((((((((((",
+"((((((((((((((((",
+"( (",
+" !!!!!!!!!!!! ",
+" ! ! ",
+" ! #$%&''&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&!!&%$# ! ",
+" ! #$%&''&%$# ! ",
+" ! ! ",
+" !!!!!!!!!!!! ",
+"( (",
+"((((((((((((((((",
+"(((((((((((((((("
+};
diff -r 7766530caa76 -r 28ea255e40ce gui/dialog/preferences.c
--- 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 );
diff -r 7766530caa76 -r 28ea255e40ce gui/interface.c
--- 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);
diff -r 7766530caa76 -r 28ea255e40ce gui/ui/actions.c
--- 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);
diff -r 7766530caa76 -r 28ea255e40ce gui/ui/render.c
--- 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;
diff -r 7766530caa76 -r 28ea255e40ce gui/util/string.c
--- 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);
diff -r 7766530caa76 -r 28ea255e40ce gui/win32/skinload.c
--- 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" },
diff -r 7766530caa76 -r 28ea255e40ce gui/win32/skinload.h
--- 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,
diff -r 7766530caa76 -r 28ea255e40ce help/help_mp-de.h
--- 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: "
diff -r 7766530caa76 -r 28ea255e40ce help/help_mp-en.h
--- 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: "