mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Add auto-crop tolerance configuration.
This commit is contained in:
parent
c3b924a239
commit
4d74ed1bfc
@ -1,6 +1,7 @@
|
|||||||
User johns
|
User johns
|
||||||
Date:
|
Date:
|
||||||
|
|
||||||
|
Add auto-crop tolerance configuration.
|
||||||
Reduces audio latency, increases audio buffer time.
|
Reduces audio latency, increases audio buffer time.
|
||||||
Made video_test working again.
|
Made video_test working again.
|
||||||
Disabled VA-API Intel vaAssociateSubpicture workaround.
|
Disabled VA-API Intel vaAssociateSubpicture workaround.
|
||||||
|
@ -81,6 +81,7 @@ static int ConfigAudioPassthrough; ///< config audio pass-through
|
|||||||
|
|
||||||
static int ConfigAutoCropInterval; ///< auto crop detection interval
|
static int ConfigAutoCropInterval; ///< auto crop detection interval
|
||||||
static int ConfigAutoCropDelay; ///< auto crop detection delay
|
static int ConfigAutoCropDelay; ///< auto crop detection delay
|
||||||
|
static int ConfigAutoCropTolerance; ///< auto crop detection tolerance
|
||||||
|
|
||||||
static char ConfigSuspendClose; ///< suspend should close devices
|
static char ConfigSuspendClose; ///< suspend should close devices
|
||||||
static char ConfigSuspendX11; ///< suspend should stop x11
|
static char ConfigSuspendX11; ///< suspend should stop x11
|
||||||
@ -371,6 +372,7 @@ class cMenuSetupSoft:public cMenuSetupPage
|
|||||||
int AudioPassthrough;
|
int AudioPassthrough;
|
||||||
int AutoCropInterval;
|
int AutoCropInterval;
|
||||||
int AutoCropDelay;
|
int AutoCropDelay;
|
||||||
|
int AutoCropTolerance;
|
||||||
int SuspendClose;
|
int SuspendClose;
|
||||||
int SuspendX11;
|
int SuspendX11;
|
||||||
protected:
|
protected:
|
||||||
@ -462,6 +464,9 @@ cMenuSetupSoft::cMenuSetupSoft(void)
|
|||||||
AutoCropDelay = ConfigAutoCropDelay;
|
AutoCropDelay = ConfigAutoCropDelay;
|
||||||
Add(new cMenuEditIntItem(tr("autocrop delay (n * interval)"),
|
Add(new cMenuEditIntItem(tr("autocrop delay (n * interval)"),
|
||||||
&AutoCropDelay, 0, 200));
|
&AutoCropDelay, 0, 200));
|
||||||
|
AutoCropTolerance = ConfigAutoCropTolerance;
|
||||||
|
Add(new cMenuEditIntItem(tr("autocrop tolerance (pixel)"),
|
||||||
|
&AutoCropTolerance, 0, 32));
|
||||||
//
|
//
|
||||||
// suspend
|
// suspend
|
||||||
//
|
//
|
||||||
@ -514,7 +519,8 @@ void cMenuSetupSoft::Store(void)
|
|||||||
|
|
||||||
SetupStore("AutoCrop.Interval", ConfigAutoCropInterval = AutoCropInterval);
|
SetupStore("AutoCrop.Interval", ConfigAutoCropInterval = AutoCropInterval);
|
||||||
SetupStore("AutoCrop.Delay", ConfigAutoCropDelay = AutoCropDelay);
|
SetupStore("AutoCrop.Delay", ConfigAutoCropDelay = AutoCropDelay);
|
||||||
VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay);
|
SetupStore("AutoCrop.Tolerance", ConfigAutoCropTolerance = AutoCropTolerance);
|
||||||
|
VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay, ConfigAutoCropTolerance);
|
||||||
|
|
||||||
SetupStore("Suspend.Close", ConfigSuspendClose = SuspendClose);
|
SetupStore("Suspend.Close", ConfigSuspendClose = SuspendClose);
|
||||||
SetupStore("Suspend.X11", ConfigSuspendX11 = SuspendX11);
|
SetupStore("Suspend.X11", ConfigSuspendX11 = SuspendX11);
|
||||||
@ -1208,12 +1214,16 @@ bool cPluginSoftHdDevice::SetupParse(const char *name, const char *value)
|
|||||||
|
|
||||||
if (!strcmp(name, "AutoCrop.Interval")) {
|
if (!strcmp(name, "AutoCrop.Interval")) {
|
||||||
VideoSetAutoCrop(ConfigAutoCropInterval =
|
VideoSetAutoCrop(ConfigAutoCropInterval =
|
||||||
atoi(value), ConfigAutoCropDelay);
|
atoi(value), ConfigAutoCropDelay, ConfigAutoCropTolerance);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!strcmp(name, "AutoCrop.Delay")) {
|
if (!strcmp(name, "AutoCrop.Delay")) {
|
||||||
VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay =
|
VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay =
|
||||||
atoi(value));
|
atoi(value), ConfigAutoCropTolerance);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!strcmp(name, "AutoCrop.Tolerance")) {
|
||||||
|
VideoSetAutoCrop(ConfigAutoCropInterval, ConfigAutoCropDelay, ConfigAutoCropTolerance = atoi(value));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
video.c
26
video.c
@ -873,6 +873,7 @@ typedef struct _auto_crop_ctx_
|
|||||||
static const int AutoCropLogoIgnore = 24;
|
static const int AutoCropLogoIgnore = 24;
|
||||||
static int AutoCropInterval; ///< auto-crop check interval
|
static int AutoCropInterval; ///< auto-crop check interval
|
||||||
static int AutoCropDelay; ///< auto-crop switch delay
|
static int AutoCropDelay; ///< auto-crop switch delay
|
||||||
|
static int AutoCropTolerance; ///< auto-crop tolerance
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Detect black line Y.
|
/// Detect black line Y.
|
||||||
@ -2443,12 +2444,13 @@ static void VaapiAutoCrop(VaapiDecoder * decoder)
|
|||||||
(decoder->InputAspect.den * 16);
|
(decoder->InputAspect.den * 16);
|
||||||
crop16 = (decoder->InputHeight - crop16) / 2;
|
crop16 = (decoder->InputHeight - crop16) / 2;
|
||||||
|
|
||||||
// -2 for rounding errors
|
if (decoder->AutoCrop->Y1 >= crop16 - AutoCropTolerance
|
||||||
if (decoder->AutoCrop->Y1 >= crop16 - 2
|
&& decoder->InputHeight - decoder->AutoCrop->Y2 >=
|
||||||
&& decoder->InputHeight - decoder->AutoCrop->Y2 >= crop16 - 2) {
|
crop16 - AutoCropTolerance) {
|
||||||
next_state = 16;
|
next_state = 16;
|
||||||
} else if (decoder->AutoCrop->Y1 >= crop14 - 2
|
} else if (decoder->AutoCrop->Y1 >= crop14 - AutoCropTolerance
|
||||||
&& decoder->InputHeight - decoder->AutoCrop->Y2 >= crop14 - 2) {
|
&& decoder->InputHeight - decoder->AutoCrop->Y2 >=
|
||||||
|
crop14 - AutoCropTolerance) {
|
||||||
next_state = 14;
|
next_state = 14;
|
||||||
} else {
|
} else {
|
||||||
next_state = 0;
|
next_state = 0;
|
||||||
@ -5792,12 +5794,13 @@ static void VdpauAutoCrop(VdpauDecoder * decoder)
|
|||||||
(decoder->InputAspect.den * 16);
|
(decoder->InputAspect.den * 16);
|
||||||
crop16 = (decoder->InputHeight - crop16) / 2;
|
crop16 = (decoder->InputHeight - crop16) / 2;
|
||||||
|
|
||||||
// -2 for rounding errors
|
if (decoder->AutoCrop->Y1 >= crop16 - AutoCropTolerance
|
||||||
if (decoder->AutoCrop->Y1 >= crop16 - 2
|
&& decoder->InputHeight - decoder->AutoCrop->Y2 >=
|
||||||
&& decoder->InputHeight - decoder->AutoCrop->Y2 >= crop16 - 2) {
|
crop16 - AutoCropTolerance) {
|
||||||
next_state = 16;
|
next_state = 16;
|
||||||
} else if (decoder->AutoCrop->Y1 >= crop14 - 2
|
} else if (decoder->AutoCrop->Y1 >= crop14 - AutoCropTolerance
|
||||||
&& decoder->InputHeight - decoder->AutoCrop->Y2 >= crop14 - 2) {
|
&& decoder->InputHeight - decoder->AutoCrop->Y2 >=
|
||||||
|
crop14 - AutoCropTolerance) {
|
||||||
next_state = 14;
|
next_state = 14;
|
||||||
} else {
|
} else {
|
||||||
next_state = 0;
|
next_state = 0;
|
||||||
@ -8362,11 +8365,12 @@ void VideoSetAudioDelay(int ms)
|
|||||||
///
|
///
|
||||||
/// Set auto-crop parameters.
|
/// Set auto-crop parameters.
|
||||||
///
|
///
|
||||||
void VideoSetAutoCrop(int interval, int delay)
|
void VideoSetAutoCrop(int interval, int delay, int tolerance)
|
||||||
{
|
{
|
||||||
#ifdef USE_AUTOCROP
|
#ifdef USE_AUTOCROP
|
||||||
AutoCropInterval = interval;
|
AutoCropInterval = interval;
|
||||||
AutoCropDelay = delay;
|
AutoCropDelay = delay;
|
||||||
|
AutoCropTolerance = tolerance;
|
||||||
#ifdef USE_VDPAU
|
#ifdef USE_VDPAU
|
||||||
if (VideoVdpauEnabled) {
|
if (VideoVdpauEnabled) {
|
||||||
VdpauResetAutoCrop();
|
VdpauResetAutoCrop();
|
||||||
|
2
video.h
2
video.h
@ -101,7 +101,7 @@ extern void VideoSetSharpen(int[]);
|
|||||||
extern void VideoSetAudioDelay(int);
|
extern void VideoSetAudioDelay(int);
|
||||||
|
|
||||||
/// Set auto-crop parameters.
|
/// Set auto-crop parameters.
|
||||||
extern void VideoSetAutoCrop(int, int);
|
extern void VideoSetAutoCrop(int, int, int);
|
||||||
|
|
||||||
/// Clear OSD.
|
/// Clear OSD.
|
||||||
extern void VideoOsdClear(void);
|
extern void VideoOsdClear(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user