From 8dd95dab5e2d2fa641121b89830fc087b332357b Mon Sep 17 00:00:00 2001 From: Johns Date: Tue, 14 Feb 2012 22:29:17 +0100 Subject: [PATCH] VDPAU: Enable inverse telecine configuration. --- ChangeLog | 1 + README.txt | 3 +++ softhddevice.cpp | 16 ++++++++++++++++ video.c | 18 +++++++++++++++--- video.h | 3 +++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f432de4..fc4ce6c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ User johns + VDPAU: Enables inverse telecine configuration. Find AC3 (Dolby Digital) inside PES packet. Fix bug: audio increments invalid audio PTS. Fix bug: dvd plugin not working. diff --git a/README.txt b/README.txt index d087f63..c172606 100644 --- a/README.txt +++ b/README.txt @@ -127,6 +127,9 @@ Setup: /etc/vdr/setup.conf softhddevice..SkipChromaDeinterlace = 0 0 = disabled, 1 = enabled (for slower cards, poor qualität) + softhddevice..InverseTelecine = 0 + 0 = disabled, 1 = enabled + softhddevice..Denoise = 0 0 .. 1000 noise reduction level (0 off, 1000 max) diff --git a/softhddevice.cpp b/softhddevice.cpp index 11af6db..35d32ed 100644 --- a/softhddevice.cpp +++ b/softhddevice.cpp @@ -70,6 +70,9 @@ static int ConfigVideoDeinterlace[RESOLUTIONS]; /// config skip chroma static int ConfigVideoSkipChromaDeinterlace[RESOLUTIONS]; + /// config inverse telecine +static int ConfigVideoInverseTelecine[RESOLUTIONS]; + /// config denoise static int ConfigVideoDenoise[RESOLUTIONS]; @@ -389,6 +392,7 @@ class cMenuSetupSoft:public cMenuSetupPage int Scaling[RESOLUTIONS]; int Deinterlace[RESOLUTIONS]; int SkipChromaDeinterlace[RESOLUTIONS]; + int InverseTelecine[RESOLUTIONS]; int Denoise[RESOLUTIONS]; int Sharpen[RESOLUTIONS]; int AudioDelay; @@ -469,6 +473,9 @@ cMenuSetupSoft::cMenuSetupSoft(void) SkipChromaDeinterlace[i] = ConfigVideoSkipChromaDeinterlace[i]; Add(new cMenuEditBoolItem(tr("SkipChromaDeinterlace (vdpau)"), &SkipChromaDeinterlace[i], trVDR("no"), trVDR("yes"))); + InverseTelecine[i] = ConfigVideoInverseTelecine[i]; + Add(new cMenuEditBoolItem(tr("Inverse Telecine (vdpau)"), + &InverseTelecine[i], trVDR("no"), trVDR("yes"))); Denoise[i] = ConfigVideoDenoise[i]; Add(new cMenuEditIntItem(tr("Denoise (0..1000) (vdpau)"), &Denoise[i], 0, 1000)); @@ -538,6 +545,8 @@ void cMenuSetupSoft::Store(void) "SkipChromaDeinterlace"); SetupStore(buf, ConfigVideoSkipChromaDeinterlace[i] = SkipChromaDeinterlace[i]); + snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "InverseTelecine"); + SetupStore(buf, ConfigVideoInverseTelecine[i] = InverseTelecine[i]); snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Denoise"); SetupStore(buf, ConfigVideoDenoise[i] = Denoise[i]); snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Sharpen"); @@ -546,6 +555,7 @@ void cMenuSetupSoft::Store(void) VideoSetScaling(ConfigVideoScaling); VideoSetDeinterlace(ConfigVideoDeinterlace); VideoSetSkipChromaDeinterlace(ConfigVideoSkipChromaDeinterlace); + VideoSetInverseTelecine(ConfigVideoInverseTelecine); VideoSetDenoise(ConfigVideoDenoise); VideoSetSharpen(ConfigVideoSharpen); @@ -1292,6 +1302,12 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value) VideoSetSkipChromaDeinterlace(ConfigVideoSkipChromaDeinterlace); return true; } + snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "InverseTelecine"); + if (!strcmp(name, buf)) { + ConfigVideoInverseTelecine[i] = atoi(value); + VideoSetInverseTelecine(ConfigVideoInverseTelecine); + return true; + } snprintf(buf, sizeof(buf), "%s.%s", Resolution[i], "Denoise"); if (!strcmp(name, buf)) { ConfigVideoDenoise[i] = atoi(value); diff --git a/video.c b/video.c index 234350a..ecaa5ac 100644 --- a/video.c +++ b/video.c @@ -291,12 +291,12 @@ static VideoDeinterlaceModes VideoDeinterlace[VideoResolutionMax]; /// Default number of deinterlace surfaces static const int VideoDeinterlaceSurfaces = 4; - /// Default Inverse telecine flag (VDPAU only). -static char VideoInverseTelecine[VideoResolutionMax]; - /// Default skip chroma deinterlace flag (VDPAU only). static char VideoSkipChromaDeinterlace[VideoResolutionMax]; + /// Default inverse telecine flag (VDPAU only). +static char VideoInverseTelecine[VideoResolutionMax]; + /// Default amount of noise reduction algorithm to apply (0 .. 1000). static int VideoDenoise[VideoResolutionMax]; @@ -9060,6 +9060,18 @@ void VideoSetSkipChromaDeinterlace(int onoff[VideoResolutionMax]) VideoSurfaceModesChanged = 1; } +/// +/// Set inverse telecine on/off. +/// +void VideoSetInverseTelecine(int onoff[VideoResolutionMax]) +{ + VideoInverseTelecine[0] = onoff[0]; + VideoInverseTelecine[1] = onoff[1]; + VideoInverseTelecine[2] = onoff[2]; + VideoInverseTelecine[3] = onoff[3]; + VideoSurfaceModesChanged = 1; +} + /// /// Set denoise level (0 .. 1000). /// diff --git a/video.h b/video.h index b391205..4018ad2 100644 --- a/video.h +++ b/video.h @@ -92,6 +92,9 @@ extern void VideoSetDeinterlace(int[]); /// Set skip chroma deinterlace. extern void VideoSetSkipChromaDeinterlace(int[]); + /// Set inverse telecine. +extern void VideoSetInverseTelecine(int[]); + /// Set scaling. extern void VideoSetScaling(int[]);