summaryrefslogtreecommitdiff
path: root/gst/videosignal
diff options
context:
space:
mode:
Diffstat (limited to 'gst/videosignal')
-rw-r--r--gst/videosignal/gstvideodetect.c26
-rw-r--r--gst/videosignal/gstvideodetect.h1
2 files changed, 20 insertions, 7 deletions
diff --git a/gst/videosignal/gstvideodetect.c b/gst/videosignal/gstvideodetect.c
index e26e15611..2e8b0d37a 100644
--- a/gst/videosignal/gstvideodetect.c
+++ b/gst/videosignal/gstvideodetect.c
@@ -120,7 +120,8 @@
#define DEFAULT_PATTERN_HEIGHT 16
#define DEFAULT_PATTERN_COUNT 4
#define DEFAULT_PATTERN_DATA_COUNT 5
-#define DEFAULT_PATTERN_SENSITIVITY 0.2
+#define DEFAULT_PATTERN_CENTER 0.5
+#define DEFAULT_PATTERN_SENSITIVITY 0.3
#define DEFAULT_LEFT_OFFSET 0
#define DEFAULT_BOTTOM_OFFSET 0
@@ -132,6 +133,7 @@ enum
PROP_PATTERN_HEIGHT,
PROP_PATTERN_COUNT,
PROP_PATTERN_DATA_COUNT,
+ PROP_PATTERN_CENTER,
PROP_PATTERN_SENSITIVITY,
PROP_LEFT_OFFSET,
PROP_BOTTOM_OFFSET
@@ -273,12 +275,16 @@ gst_video_detect_420 (GstVideoDetect * videodetect, GstBuffer * buffer)
GST_DEBUG_OBJECT (videodetect, "brightness %f", brightness);
if (i & 1) {
- /* odd pixels must be white */
- if (brightness < (1.0 - videodetect->pattern_sensitivity))
+ /* odd pixels must be white, all pixels darker than the center +
+ * sensitivity are considered wrong. */
+ if (brightness <
+ (videodetect->pattern_center + videodetect->pattern_sensitivity))
goto no_pattern;
} else {
- /* even pixels must be black */
- if (brightness > videodetect->pattern_sensitivity)
+ /* even pixels must be black, pixels lighter than the center - sensitivity
+ * are considered wrong. */
+ if (brightness >
+ (videodetect->pattern_center - videodetect->pattern_sensitivity))
goto no_pattern;
}
}
@@ -300,9 +306,9 @@ gst_video_detect_420 (GstVideoDetect * videodetect, GstBuffer * buffer)
/* calc brightness of width * height box */
brightness =
gst_video_detect_calc_brightness (videodetect, d, pw, ph, stride);
- /* update pattern */
+ /* update pattern, we just use the center to decide between black and white. */
pattern_data <<= 1;
- if (brightness > 0.5)
+ if (brightness > videodetect->pattern_center)
pattern_data |= 1;
}
@@ -361,6 +367,9 @@ gst_video_detect_set_property (GObject * object, guint prop_id,
case PROP_PATTERN_DATA_COUNT:
videodetect->pattern_data_count = g_value_get_int (value);
break;
+ case PROP_PATTERN_CENTER:
+ videodetect->pattern_center = g_value_get_double (value);
+ break;
case PROP_PATTERN_SENSITIVITY:
videodetect->pattern_sensitivity = g_value_get_double (value);
break;
@@ -400,6 +409,9 @@ gst_video_detect_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_PATTERN_DATA_COUNT:
g_value_set_int (value, videodetect->pattern_data_count);
break;
+ case PROP_PATTERN_CENTER:
+ g_value_set_double (value, videodetect->pattern_center);
+ break;
case PROP_PATTERN_SENSITIVITY:
g_value_set_double (value, videodetect->pattern_sensitivity);
break;
diff --git a/gst/videosignal/gstvideodetect.h b/gst/videosignal/gstvideodetect.h
index 99912a28a..0c39f3285 100644
--- a/gst/videosignal/gstvideodetect.h
+++ b/gst/videosignal/gstvideodetect.h
@@ -54,6 +54,7 @@ struct _GstVideoDetect {
gint pattern_height;
gint pattern_count;
gint pattern_data_count;
+ gdouble pattern_center;
gdouble pattern_sensitivity;
gint left_offset;
gint bottom_offset;