summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--softhddevice.cpp16
-rw-r--r--video.c26
-rw-r--r--video.h2
4 files changed, 30 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 140e85a..4a07c47 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
User johns
Date:
+ Add auto-crop tolerance configuration.
Reduces audio latency, increases audio buffer time.
Made video_test working again.
Disabled VA-API Intel vaAssociateSubpicture workaround.
diff --git a/softhddevice.cpp b/softhddevice.cpp
index 8e3a336..d882ce3 100644
--- a/softhddevice.cpp
+++ b/softhddevice.cpp
@@ -81,6 +81,7 @@ static int ConfigAudioPassthrough; ///< config audio pass-through
static int ConfigAutoCropInterval; ///< auto crop detection interval
static int ConfigAutoCropDelay; ///< auto crop detection delay
+static int ConfigAutoCropTolerance; ///< auto crop detection tolerance
static char ConfigSuspendClose; ///< suspend should close devices
static char ConfigSuspendX11; ///< suspend should stop x11
@@ -371,6 +372,7 @@ class cMenuSetupSoft:public cMenuSetupPage
int AudioPassthrough;
int AutoCropInterval;
int AutoCropDelay;
+ int AutoCropTolerance;
int SuspendClose;
int SuspendX11;
protected:
@@ -462,6 +464,9 @@ cMenuSetupSoft::cMenuSetupSoft(void)
AutoCropDelay = ConfigAutoCropDelay;
Add(new cMenuEditIntItem(tr("autocrop delay (n * interval)"),
&AutoCropDelay, 0, 200));
+ AutoCropTolerance = ConfigAutoCropTolerance;
+ Add(new cMenuEditIntItem(tr("autocrop tolerance (pixel)"),
+ &AutoCropTolerance, 0, 32));
//
// suspend
//
@@ -514,7 +519,8 @@ void cMenuSetupSoft::Store(void)
SetupStore("AutoCrop.Interval", ConfigAutoCropInterval = AutoCropInterval);
SetupStore("AutoCrop.Delay", ConfigAutoCropDelay = AutoCropDelay);
- VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay);
+ SetupStore("AutoCrop.Tolerance", ConfigAutoCropTolerance = AutoCropTolerance);
+ VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay, ConfigAutoCropTolerance);
SetupStore("Suspend.Close", ConfigSuspendClose = SuspendClose);
SetupStore("Suspend.X11", ConfigSuspendX11 = SuspendX11);
@@ -1208,12 +1214,16 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value)
if (!strcmp(name, "AutoCrop.Interval")) {
VideoSetAutoCrop(ConfigAutoCropInterval =
- atoi(value), ConfigAutoCropDelay);
+ atoi(value), ConfigAutoCropDelay, ConfigAutoCropTolerance);
return true;
}
if (!strcmp(name, "AutoCrop.Delay")) {
VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay =
- atoi(value));
+ atoi(value), ConfigAutoCropTolerance);
+ return true;
+ }
+ if (!strcmp(name, "AutoCrop.Tolerance")) {
+ VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay, ConfigAutoCropTolerance = atoi(value));
return true;
}
diff --git a/video.c b/video.c
index bf946e0..349ad92 100644
--- a/video.c
+++ b/video.c
@@ -873,6 +873,7 @@ typedef struct _auto_crop_ctx_
static const int AutoCropLogoIgnore = 24;
static int AutoCropInterval; ///< auto-crop check interval
static int AutoCropDelay; ///< auto-crop switch delay
+static int AutoCropTolerance; ///< auto-crop tolerance
///
/// Detect black line Y.
@@ -2443,12 +2444,13 @@ static void VaapiAutoCrop(VaapiDecoder * decoder)
(decoder->InputAspect.den * 16);
crop16 = (decoder->InputHeight - crop16) / 2;
- // -2 for rounding errors
- if (decoder->AutoCrop->Y1 >= crop16 - 2
- && decoder->InputHeight - decoder->AutoCrop->Y2 >= crop16 - 2) {
+ if (decoder->AutoCrop->Y1 >= crop16 - AutoCropTolerance
+ && decoder->InputHeight - decoder->AutoCrop->Y2 >=
+ crop16 - AutoCropTolerance) {
next_state = 16;
- } else if (decoder->AutoCrop->Y1 >= crop14 - 2
- && decoder->InputHeight - decoder->AutoCrop->Y2 >= crop14 - 2) {
+ } else if (decoder->AutoCrop->Y1 >= crop14 - AutoCropTolerance
+ && decoder->InputHeight - decoder->AutoCrop->Y2 >=
+ crop14 - AutoCropTolerance) {
next_state = 14;
} else {
next_state = 0;
@@ -5792,12 +5794,13 @@ static void VdpauAutoCrop(VdpauDecoder * decoder)
(decoder->InputAspect.den * 16);
crop16 = (decoder->InputHeight - crop16) / 2;
- // -2 for rounding errors
- if (decoder->AutoCrop->Y1 >= crop16 - 2
- && decoder->InputHeight - decoder->AutoCrop->Y2 >= crop16 - 2) {
+ if (decoder->AutoCrop->Y1 >= crop16 - AutoCropTolerance
+ && decoder->InputHeight - decoder->AutoCrop->Y2 >=
+ crop16 - AutoCropTolerance) {
next_state = 16;
- } else if (decoder->AutoCrop->Y1 >= crop14 - 2
- && decoder->InputHeight - decoder->AutoCrop->Y2 >= crop14 - 2) {
+ } else if (decoder->AutoCrop->Y1 >= crop14 - AutoCropTolerance
+ && decoder->InputHeight - decoder->AutoCrop->Y2 >=
+ crop14 - AutoCropTolerance) {
next_state = 14;
} else {
next_state = 0;
@@ -8362,11 +8365,12 @@ void VideoSetAudioDelay(int ms)
///
/// Set auto-crop parameters.
///
-void VideoSetAutoCrop(int interval, int delay)
+void VideoSetAutoCrop(int interval, int delay, int tolerance)
{
#ifdef USE_AUTOCROP
AutoCropInterval = interval;
AutoCropDelay = delay;
+ AutoCropTolerance = tolerance;
#ifdef USE_VDPAU
if (VideoVdpauEnabled) {
VdpauResetAutoCrop();
diff --git a/video.h b/video.h
index 443cf16..d544455 100644
--- a/video.h
+++ b/video.h
@@ -101,7 +101,7 @@ extern void VideoSetSharpen(int[]);
extern void VideoSetAudioDelay(int);
/// Set auto-crop parameters.
-extern void VideoSetAutoCrop(int, int);
+extern void VideoSetAutoCrop(int, int, int);
/// Clear OSD.
extern void VideoOsdClear(void);