summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--po/de_DE.po5
-rw-r--r--softhddev.c65
-rw-r--r--softhddevice.cpp10
4 files changed, 54 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index 782ac89..a6e4255 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
+User Dr. Seltsam
+Date: Tue Nov 5 16:46:34 CET 2013
+
+ Add support to configure and clear buffers on channel switch.
+
User johns
-Date:
+Date: Tue Oct 8 10:18:04 CET 2013
CLOCK_REALTIME -> CLOCK_MONOTONIC to allow time changes.
Add function VideoStreamOpen and always use VideoStreamClose.
diff --git a/po/de_DE.po b/po/de_DE.po
index 91867ef..7edfebb 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: VDR \n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2013-08-03 17:21+0200\n"
+"POT-Creation-Date: 2013-10-06 22:20+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -510,6 +510,9 @@ msgstr "Sanftanlauf A/V Sync"
msgid "Black during channel switch"
msgstr "Schwarz während Kanalwechsel"
+msgid "Clear decoder on channel switch"
+msgstr "Decoder bei Kanalwechsel leeren"
+
msgid "Brightness (-1000..1000) (vdpau)"
msgstr "Helligkeit (-1000..1000) (vdpau)"
diff --git a/softhddev.c b/softhddev.c
index 91a031a..ce032f5 100644
--- a/softhddev.c
+++ b/softhddev.c
@@ -83,6 +83,7 @@ static char VdpauDecoder = 1; ///< vdpau decoder used
#endif
extern int ConfigAudioBufferTime; ///< config size ms of audio buffer
+extern int ConfigVideoClearOnSwitch; //< clear decoder on channel switch
char ConfigStartX11Server; ///< flag start the x11 server
static char ConfigStartSuspended; ///< flag to start in suspend mode
static char ConfigFullscreen; ///< fullscreen modus
@@ -2465,45 +2466,47 @@ uint8_t *GrabImage(int *size, int jpeg, int quality, int width, int height)
*/
int SetPlayMode(int play_mode)
{
- VideoDisplayWakeup();
- // tell video parser we have new stream
- if (MyVideoStream->Decoder && !MyVideoStream->SkipStream) {
- if (MyVideoStream->ClearClose) { // replay clear buffers on close
- Clear(); // flush all buffers
- MyVideoStream->ClearClose = 0;
- }
- if (MyVideoStream->CodecID != AV_CODEC_ID_NONE) {
- MyVideoStream->NewStream = 1;
- MyVideoStream->InvalidPesCounter = 0;
- // tell hw decoder we are closing stream
- VideoSetClosing(MyVideoStream->HwDecoder);
- VideoResetStart(MyVideoStream->HwDecoder);
+ switch (play_mode) {
+ case 0: // audio/video from decoder
+ // tell video parser we get new stream
+ if (MyVideoStream->Decoder && !MyVideoStream->SkipStream) {
+ // clear buffers on close configured always or replay only
+ if (ConfigVideoClearOnSwitch || MyVideoStream->ClearClose) {
+ Clear(); // flush all buffers
+ MyVideoStream->ClearClose = 0;
+ }
+ if (MyVideoStream->CodecID != AV_CODEC_ID_NONE) {
+ MyVideoStream->NewStream = 1;
+ MyVideoStream->InvalidPesCounter = 0;
+ // tell hw decoder we are closing stream
+ VideoSetClosing(MyVideoStream->HwDecoder);
+ VideoResetStart(MyVideoStream->HwDecoder);
#ifdef DEBUG
- VideoSwitch = GetMsTicks();
+ VideoSwitch = GetMsTicks();
#endif
- }
- }
- if (MyAudioDecoder) { // tell audio parser we have new stream
- if (AudioCodecID != AV_CODEC_ID_NONE) {
- NewAudioStream = 1;
- }
- }
- switch (play_mode) {
- case 0: // nothing
- case 1: // audio/video from player
+ }
+ }
+ if (MyAudioDecoder) { // tell audio parser we have new stream
+ if (AudioCodecID != AV_CODEC_ID_NONE) {
+ NewAudioStream = 1;
+ }
+ }
break;
- case 2: // audio only
- Debug(3, "softhddev: FIXME: audio only, silence video errors\n");
+ case 1: // audio/video from player
+ VideoDisplayWakeup();
+ Play();
break;
- case 3: // audio only, black screen
+ case 2: // audio only from player, video from decoder
+ case 3: // audio only from player, no video (black screen)
Debug(3, "softhddev: FIXME: audio only, silence video errors\n");
+ VideoDisplayWakeup();
+ Play();
break;
- case 4: // video only
+ case 4: // video only from player, audio from decoder
+ VideoDisplayWakeup();
+ Play();
break;
}
-
- Play();
-
return 1;
}
diff --git a/softhddevice.cpp b/softhddevice.cpp
index c2839ce..76d924d 100644
--- a/softhddevice.cpp
+++ b/softhddevice.cpp
@@ -91,6 +91,7 @@ static char ConfigVideoStudioLevels; ///< config use studio levels
static char ConfigVideo60HzMode; ///< config use 60Hz display mode
static char ConfigVideoSoftStartSync; ///< config use softstart sync
static char ConfigVideoBlackPicture; ///< config enable black picture mode
+char ConfigVideoClearOnSwitch; ///< config enable Clear on channel switch
static int ConfigVideoBrightness; ///< config video brightness
static int ConfigVideoContrast = 1000; ///< config video contrast
@@ -595,6 +596,7 @@ class cMenuSetupSoft:public cMenuSetupPage
int _60HzMode;
int SoftStartSync;
int BlackPicture;
+ int ClearOnSwitch;
int Brightness;
int Contrast;
@@ -785,6 +787,8 @@ void cMenuSetupSoft::Create(void)
trVDR("no"), trVDR("yes")));
Add(new cMenuEditBoolItem(tr("Black during channel switch"),
&BlackPicture, trVDR("no"), trVDR("yes")));
+ Add(new cMenuEditBoolItem(tr("Clear decoder on channel switch"),
+ &ClearOnSwitch, trVDR("no"), trVDR("yes")));
Add(new cMenuEditIntItem(tr("Brightness (-1000..1000) (vdpau)"),
&Brightness, -1000, 1000, tr("min"), tr("max")));
@@ -1010,6 +1014,7 @@ cMenuSetupSoft::cMenuSetupSoft(void)
_60HzMode = ConfigVideo60HzMode;
SoftStartSync = ConfigVideoSoftStartSync;
BlackPicture = ConfigVideoBlackPicture;
+ ClearOnSwitch = ConfigVideoClearOnSwitch;
Brightness = ConfigVideoBrightness;
Contrast = ConfigVideoContrast;
@@ -1133,6 +1138,7 @@ void cMenuSetupSoft::Store(void)
VideoSetSoftStartSync(ConfigVideoSoftStartSync);
SetupStore("BlackPicture", ConfigVideoBlackPicture = BlackPicture);
VideoSetBlackPicture(ConfigVideoBlackPicture);
+ SetupStore("ClearOnSwitch", ConfigVideoClearOnSwitch = ClearOnSwitch);
SetupStore("Brightness", ConfigVideoBrightness = Brightness);
VideoSetBrightness(ConfigVideoBrightness);
@@ -2852,6 +2858,10 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value)
VideoSetBlackPicture(ConfigVideoBlackPicture = atoi(value));
return true;
}
+ if (!strcasecmp(name, "ClearOnSwitch")) {
+ ConfigVideoClearOnSwitch = atoi(value);
+ return true;
+ }
if (!strcasecmp(name, "Brightness")) {
VideoSetBrightness(ConfigVideoBrightness = atoi(value));
return true;