- Added brightness-smoothing parameter (0-1, default 0.1)
- Implements exponential moving average to filter transient brightness changes
- Samples brightness every frame but smooths before adjusting exposure
- Reduces oscillation from people/cars/birds moving through scene
- Updated DEBUG.md with complete implementation details
Recommended settings for dawn/dusk time-lapse:
ramp-rate=vslow update-interval=1000 brightness-smoothing=0.1
- Added brightness-smoothing parameter (0-1, default 0.1)
- Implements exponential moving average to filter transient brightness changes
- Samples brightness every frame but smooths before adjusting exposure
- Reduces oscillation from people/cars/birds moving through scene
- Updated DEBUG.md with complete implementation details
Recommended settings for dawn/dusk time-lapse:
ramp-rate=vslow update-interval=1000 brightness-smoothing=0.1
- Fixed instant exposure jumps causing visible flickering
- Implemented proper gradual ramping using ramp_step variable
- Added IDS uEye SDK integration for accurate exposure range query
- Added hcam property to idsueyesrc to expose camera handle
- Updated intervalometer to query on first frame when camera is ready
- Added comprehensive debug documentation with tuning guide
For dawn/dusk time-lapse, use:
ramp-rate=vslow update-interval=1000
- Remove hardcoded exposure (0.85/1.24ms) and gain (0/52) limits
- Add automatic querying of camera capabilities on startup
- Query current exposure/gain settings from camera on reset
- Add update-interval property for rate limiting (default 100ms)
- Prevent algorithm from running at full framerate (750fps)
- Expand property ranges to support any camera capabilities
- Algorithm now fully automated and adapts to camera limits
Fixed GLib-GObject-CRITICAL errors caused by incorrect enum type
registration in the intervalometer plugin.
The issue was on line 189 where g_param_spec_enum() was being called
with GST_TYPE_INTERVALOMETER (the class type) instead of a proper
enum GType for the ramp-rate property.
Changes:
- Added gst_intervalometer_ramp_rate_get_type() function to properly
register the GstIntervalometerRampRate enum as a GType
- Defined GST_TYPE_INTERVALOMETER_RAMP_RATE macro
- Updated PROP_RAMP_RATE property installation to use the correct
enum type
This fixes the following errors that appeared during pipeline launch:
- g_param_spec_enum: assertion 'G_TYPE_IS_ENUM (enum_type)' failed
- validate_pspec_to_install: assertion 'G_IS_PARAM_SPEC (pspec)' failed
- g_param_spec_ref_sink: assertion 'G_IS_PARAM_SPEC (pspec)' failed
- g_param_spec_unref: assertion 'G_IS_PARAM_SPEC (pspec)' failed
Implements YASS-inspired automatic exposure control for IDS uEye cameras.
The intervalometer filter analyzes video brightness in real-time and
smoothly ramps camera exposure and gain settings during changing light
conditions - ideal for sunset/sunrise time-lapse photography.
Key features:
- Automatic exposure ramping (0.85-1.24ms configurable range)
- Automatic gain control (0-52 configurable range)
- Real-time brightness analysis (GRAY8, GRAY16, RGB, BGR, BGRA)
- YASS-inspired ramping algorithm (exposure priority, then gain)
- Configurable ramp rates (VSlow/Slow/Medium/Fast/VFast)
- Exposure compensation (±4 stops)
- CSV logging of exposure parameters
- Direct GObject property control (no message bus overhead)
Technical implementation:
- GstBaseTransform filter for in-place processing
- Discovers upstream camera element by name
- Controls camera via g_object_set() for synchronous updates
- Frame-by-frame brightness calculation with format support
Files added:
- gst/intervalometer/gstintervalometer.c: Main implementation (734 lines)
- gst/intervalometer/gstintervalometer.h: Header with structure definitions
- gst/intervalometer/CMakeLists.txt: Build configuration
- gst/intervalometer/README.md: Comprehensive documentation
Files modified:
- gst/CMakeLists.txt: Added intervalometer subdirectory
- build.ps1: Added intervalometer to build and deployment pipeline
Usage example:
gst-launch-1.0 idsueyesrc name=cam ! \\
intervalometer enabled=true camera-element=cam \\
exposure-min=0.85 exposure-max=1.24 \\
gain-min=0 gain-max=52 ramp-rate=medium ! \\
autovideosink
Inspired by YASS (Yet Another Sunset Script) for CHDK cameras by
waterwingz, based on work by Fbonomi and soulf2.