videolevels: Fix handling of interval for deciding when to auto adjust

This commit is contained in:
Joshua M. Doe 2010-04-23 16:08:00 -04:00
parent 97b2e8be4c
commit 0b181e7417

View File

@ -311,7 +311,7 @@ gst_videolevels_set_property (GObject * object, guint prop_id,
break; break;
case PROP_INTERVAL: case PROP_INTERVAL:
videolevels->interval = g_value_get_uint64 (value); videolevels->interval = g_value_get_uint64 (value);
videolevels->last_auto_timestamp = 0; videolevels->last_auto_timestamp = GST_CLOCK_TIME_NONE;
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -556,7 +556,7 @@ gst_videolevels_transform (GstBaseTransform * base, GstBuffer * inbuf,
gpointer input; gpointer input;
gpointer output; gpointer output;
gboolean ret; gboolean ret;
guint64 elapsed; GstClockTimeDiff elapsed;
/* We need to lock our videolevels params to prevent segfaults */ /* We need to lock our videolevels params to prevent segfaults */
GST_BASE_TRANSFORM_LOCK (videolevels); GST_BASE_TRANSFORM_LOCK (videolevels);
@ -569,9 +569,10 @@ gst_videolevels_transform (GstBaseTransform * base, GstBuffer * inbuf,
videolevels->auto_adjust = 0; videolevels->auto_adjust = 0;
} }
else if (videolevels->auto_adjust == 2) { else if (videolevels->auto_adjust == 2) {
elapsed = GST_BUFFER_TIMESTAMP (inbuf) - videolevels->last_auto_timestamp; elapsed = GST_CLOCK_DIFF (videolevels->last_auto_timestamp, inbuf->timestamp);
if (elapsed >= videolevels->interval || if (videolevels->last_auto_timestamp == GST_CLOCK_TIME_NONE ||
videolevels->last_auto_timestamp == GST_CLOCK_TIME_NONE) { elapsed >= (GstClockTimeDiff)videolevels->interval ||
elapsed < 0) {
gst_videolevels_auto_adjust (videolevels, input); gst_videolevels_auto_adjust (videolevels, input);
videolevels->last_auto_timestamp = GST_BUFFER_TIMESTAMP (inbuf); videolevels->last_auto_timestamp = GST_BUFFER_TIMESTAMP (inbuf);
} }