Add auto-crop tolerance configuration.

This commit is contained in:
Johns 2012-01-27 23:49:05 +01:00
parent c3b924a239
commit 4d74ed1bfc
4 changed files with 30 additions and 15 deletions

View File

@ -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.

View File

@ -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
View File

@ -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();

View File

@ -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);