Add intervalometer filter for automatic exposure control
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.
This commit is contained in:
12
build.ps1
12
build.ps1
@@ -98,9 +98,10 @@ if ($BuildType -eq 'IDSuEyeOnly') {
|
||||
$useStandaloneCMake = $false
|
||||
$pluginPaths = @(
|
||||
@{ Name = "libgstidsueye.dll"; RelPath = "sys\idsueye\Release\libgstidsueye.dll" },
|
||||
@{ Name = "libgstrollingsum.dll"; RelPath = "gst\rollingsum\Release\libgstrollingsum.dll" }
|
||||
@{ Name = "libgstrollingsum.dll"; RelPath = "gst\rollingsum\Release\libgstrollingsum.dll" },
|
||||
@{ Name = "libgstintervalometer.dll"; RelPath = "gst\intervalometer\Release\libgstintervalometer.dll" }
|
||||
)
|
||||
Write-Host "Building: All plugins (IDS uEye, Rolling Sum)" -ForegroundColor Yellow
|
||||
Write-Host "Building: All plugins (IDS uEye, Rolling Sum, Intervalometer)" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
@@ -292,9 +293,14 @@ try {
|
||||
Write-Host "Verify installation with:" -ForegroundColor Yellow
|
||||
Write-Host " gst-inspect-1.0 idsueyesrc" -ForegroundColor White
|
||||
Write-Host " gst-inspect-1.0 rollingsum" -ForegroundColor White
|
||||
Write-Host " gst-inspect-1.0 intervalometer" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Example pipeline:" -ForegroundColor Yellow
|
||||
Write-Host "Example pipelines:" -ForegroundColor Yellow
|
||||
Write-Host " # Rolling sum detection:" -ForegroundColor Gray
|
||||
Write-Host " gst-launch-1.0 idsueyesrc config-file=config.ini ! rollingsum window-size=1000 column-index=1 threshold=0.5 ! autovideosink" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host " # Auto-exposure time-lapse:" -ForegroundColor Gray
|
||||
Write-Host " 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 ! autovideosink" -ForegroundColor White
|
||||
}
|
||||
Write-Host ""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user