Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
188 commits
Select commit Hold shift + click to select a range
13e054e
Move RecorderStats to utils.stats
C-Achard Jun 24, 2026
50c5666
Preserve mono frames & add recorder timing
C-Achard Jun 24, 2026
77ecc7d
Add preserve_mono camera option and UI support
C-Achard Jun 24, 2026
d829a43
Add actual_pixel_format and preserve_mono support
C-Achard Jun 24, 2026
888894b
Basler: track camera pixel format and mono output
C-Achard Jun 24, 2026
77b31c3
Show detected output format & mono option
C-Achard Jun 24, 2026
6dc6cbc
Track actual pixel/output formats in camera backends
C-Achard Jun 24, 2026
50966c3
Use make_two_field_row for Output row
C-Achard Jun 24, 2026
db0f958
Use display labels for multi-camera GUI
C-Achard Jun 24, 2026
afea17b
Update tests: display_id naming and fallback
C-Achard Jun 24, 2026
b31a36f
Remove tiled frame generation and accessors
C-Achard Jun 24, 2026
bd03613
Use runtime FPS for recording; add fallbacks
C-Achard Jun 24, 2026
e99bfd7
Track encoding errors with writer_timing
C-Achard Jun 24, 2026
5b123de
Use _camera_pixel_format in camera backends
C-Achard Jun 24, 2026
158e86a
Add TYPE_CHECKING in stats
C-Achard Jun 24, 2026
c492d22
test: remove duplicate stable camera ID test
C-Achard Jul 14, 2026
44f5144
Fix camera ID fallback and stop state reset
C-Achard Aug 11, 2026
8574e73
Clear camera runtime info during shutdown
C-Achard Aug 11, 2026
d9704ae
Harden frame rate handling in video recorder
C-Achard Aug 11, 2026
4807ab8
Suggest mono preserve instead of auto-enable
C-Achard Aug 11, 2026
30409ef
Stabilize preview rendering GUI test
C-Achard Aug 11, 2026
14b64f8
Refactor WriteGear option handling
C-Achard Aug 12, 2026
22f672b
Clarify docs: Route camera open/probe requests to UI thread
C-Achard Aug 13, 2026
7066c9d
Only check output format once in read
C-Achard Aug 18, 2026
c522abf
Type hint fix
C-Achard Aug 18, 2026
7a11ebb
Harden recording FPS resolution logic
C-Achard Aug 18, 2026
f549aba
Filter None WriteGear option values
C-Achard Aug 18, 2026
4c26d33
Centralize WriteGear option validation
C-Achard Aug 18, 2026
827ec1b
Use one-by-one Basler grab strategy
C-Achard Jun 26, 2026
3ba4546
Ignore profiling output artifacts
C-Achard Jun 26, 2026
29fcfeb
Add profiling extra with Scalene
C-Achard Jun 26, 2026
dd4e863
Optimize recording pipeline and encoder options
C-Achard Jun 26, 2026
0516496
Enable timing logs and enrich recorder stats
C-Achard Jun 26, 2026
8cf3ae8
Expand recording behavior test coverage
C-Achard Jun 26, 2026
b5eed13
Persist fast encoding setting in GUI
C-Achard Jun 29, 2026
d671625
Always wire recording setting signal handlers
C-Achard Jun 29, 2026
7efe8f9
Disable default timing logs and fix stats import
C-Achard Jun 29, 2026
c1d2202
Fix writer defaults and buffer time fallback
C-Achard Jun 29, 2026
19fbcac
Defer recording until preview frames are ready
C-Achard Jun 30, 2026
b978818
Disable delayed auto-start of recording
C-Achard Jun 30, 2026
b610d68
Update main_window.py
C-Achard Jun 30, 2026
e609b6a
Centralize trigger debug logging flag
C-Achard Aug 11, 2026
6e3a7cd
Normalize WriteGear options and rename overrides
C-Achard Aug 11, 2026
59ed076
Align tests with writer options override rename
C-Achard Aug 12, 2026
cbbe14f
Fix merge conflict
C-Achard Aug 12, 2026
9c32b26
Guard recording start when no cameras configured
C-Achard Aug 18, 2026
b9feabd
Update tests for writegear option builder
C-Achard Aug 18, 2026
9bcd61b
Add Basler acquisition stats debug logging
C-Achard Aug 19, 2026
b114242
Add frame timestamp metadata helper class
C-Achard Jun 29, 2026
acd2d42
Propagate hardware timestamp metadata
C-Achard Jun 29, 2026
c3b4747
Update aravis_backend.py
C-Achard Jun 29, 2026
056eea6
Update basler_backend.py
C-Achard Jun 29, 2026
34cd9b3
Update gentl_backend.py
C-Achard Jun 29, 2026
744e08d
Update opencv_backend.py
C-Achard Jun 29, 2026
c4c29dc
Update tests for CapturedFrame read API
C-Achard Jun 29, 2026
436085a
Rename metadata key to frame_timestamps
C-Achard Jun 29, 2026
0b2ef60
Add timestamp metadata coverage across tests
C-Achard Jun 29, 2026
6e055c0
Harden Basler timestamp metadata handling
C-Achard Jun 29, 2026
191217c
Drop legacy timestamps assertions in tests
C-Achard Jun 29, 2026
e84949b
Guard default timestamp field
C-Achard Jun 29, 2026
e3b907c
Run pre-commit
C-Achard Aug 12, 2026
ee85179
Refactor Basler test fixture injection
C-Achard Aug 12, 2026
25ab973
Add Basler timestamp metadata edge-case tests
C-Achard Aug 12, 2026
6892d33
Remove unused last_frame_timestamp_metadata
C-Achard Aug 12, 2026
fb4bded
Lock processor settings during DLC inference
C-Achard Jun 30, 2026
cc0f5da
Improve processor discovery and logging
C-Achard Jul 1, 2026
b5a6c84
Add processors package exports
C-Achard Jul 1, 2026
1150f26
Move example socket processors to examples module
C-Achard Jul 1, 2026
31d1c0f
Update plugin docs for processor examples
C-Achard Jul 1, 2026
33a6592
Skip socket base module in processor scan
C-Achard Jul 1, 2026
c58bbef
Update processor_utils.py
C-Achard Jul 1, 2026
e5a8bba
Warn on duplicate processor registration
C-Achard Jul 1, 2026
2f54a91
Update examples.py
C-Achard Jul 1, 2026
0523759
Refine processor package scan typing
C-Achard Jul 1, 2026
0e8caf0
Update examples.py
C-Achard Jul 1, 2026
60e757a
Fix dlclive Processor import paths
C-Achard Jul 1, 2026
9c805a2
Extract processor registry into new module
C-Achard Jul 1, 2026
fb27336
Fix dlclive mock structure in processor tests
C-Achard Jul 1, 2026
ed3da71
Make Engine a str enum and normalize model_type
C-Achard Jul 1, 2026
27f4fd9
Persist custom processor folder in settings
C-Achard Jul 1, 2026
7c18a0f
Improve recorder error logging and handling
C-Achard Jul 1, 2026
5b7222d
Hide base socket processor from discovery
C-Achard Aug 12, 2026
f2aae7c
Unify processor discovery and scan metadata
C-Achard Aug 12, 2026
2d75f4a
Deprecate legacy processor registry API
C-Achard Aug 12, 2026
d0bbed4
Update processor discovery tests
C-Achard Aug 12, 2026
1a0cf15
Require dlclive in socket processor tests
C-Achard Aug 12, 2026
c314533
Add discovery tests for built-in processors
C-Achard Aug 12, 2026
c3a1c87
Update processor plugin system docs
C-Achard Aug 12, 2026
d451166
Refine custom processor UI controls
C-Achard Aug 12, 2026
a67ae4c
Improve processor session override GUI test
C-Achard Aug 12, 2026
25f8dee
Add test for processor control re-enable
C-Achard Aug 12, 2026
6d2a168
Improve processor discovery and logging
C-Achard Jul 1, 2026
3010eea
Add processors package exports
C-Achard Jul 1, 2026
44d6281
Move example socket processors to examples module
C-Achard Jul 1, 2026
a568617
Skip socket base module in processor scan
C-Achard Jul 1, 2026
9179b4e
Update processor_utils.py
C-Achard Jul 1, 2026
798b7de
Warn on duplicate processor registration
C-Achard Jul 1, 2026
f2a0204
Extract processor registry into new module
C-Achard Jul 1, 2026
bf6468b
Normalize recording container handling
C-Achard Jul 2, 2026
6819af1
Add DLC timing instrumentation in GUI path
C-Achard Jul 2, 2026
4fa1163
Prioritize latest frame when queue is full
C-Achard Jul 2, 2026
4c3ef7f
Lower camera backend logs to debug
C-Achard Jul 2, 2026
a789bf8
Harden DLC worker startup and timing logs
C-Achard Jul 2, 2026
2f7fbf3
Disable pose latency debug logging
C-Achard Jul 2, 2026
0271f11
Fix shutdown order in camera preview stop
C-Achard Jul 2, 2026
c9a7b48
Add mono-preserving output mode to GenTL
C-Achard Jul 2, 2026
82b0eb9
Async recording stop and queued frame dispatch
C-Achard Jul 2, 2026
80bd121
Update recording_manager.py
C-Achard Jul 3, 2026
48ef319
Use runner pose directly in DLC processor
C-Achard Aug 13, 2026
025b6f6
Split timing loggers across worker thread
C-Achard Aug 13, 2026
2dd4186
pre-commit
C-Achard Aug 13, 2026
a2c748d
Remove duplicate node value reader
C-Achard Aug 14, 2026
3f79790
Pass timestamp metadata to frame writer
C-Achard Aug 18, 2026
40061a6
Stabilize rec manager async write tests
C-Achard Aug 18, 2026
eefcb66
Lock processor settings during DLC inference
C-Achard Jun 30, 2026
39edcd7
Improve processor discovery and logging
C-Achard Jul 1, 2026
7b601d2
Add processors package exports
C-Achard Jul 1, 2026
b6fd701
Move example socket processors to examples module
C-Achard Jul 1, 2026
8ff43e0
Skip socket base module in processor scan
C-Achard Jul 1, 2026
2ce7696
Update processor_utils.py
C-Achard Jul 1, 2026
a0e637e
Warn on duplicate processor registration
C-Achard Jul 1, 2026
d2f827c
Fix dlclive Processor import paths
C-Achard Jul 1, 2026
4801de2
Extract processor registry into new module
C-Achard Jul 1, 2026
e63ede7
Refactor camera worker and recording pipeline
C-Achard Jul 2, 2026
55c3f7e
Route recording frames through recording sink
C-Achard Jul 2, 2026
6146d7d
Update recording manager test imports
C-Achard Jul 2, 2026
bdae9c8
Propagate capture metadata in single-camera flow
C-Achard Jul 2, 2026
4624747
Add timestamp metadata to frame signal
C-Achard Jul 3, 2026
4168e05
Comment previous signals
C-Achard Jul 3, 2026
a0c9fa5
Fix dispatcher lifecycle and add flush API
C-Achard Jul 3, 2026
4cedf3d
Update tests for CapturedFrame integration
C-Achard Jul 3, 2026
ec6571d
Stabilize recording and camera tests
C-Achard Jul 3, 2026
58c2e89
Harden recording dispatcher shutdown flow
C-Achard Aug 14, 2026
df31298
Retry recorder stop until success
C-Achard Aug 14, 2026
b6fb344
Disable debug timing log
C-Achard Aug 14, 2026
8cd58ec
Add timeout for recorder stop retries
C-Achard Aug 18, 2026
ad60136
Rename recording frame toggle API
C-Achard Aug 18, 2026
f932fd6
Respect configured OpenCV device name
C-Achard Jul 8, 2026
9240eea
Use display IDs in camera UI labels
C-Achard Jul 8, 2026
af9b807
Make controls panel scrollable with fixed footer
C-Achard Jul 8, 2026
9288018
Fix test assertion
C-Achard Jul 8, 2026
f6e805c
Refactor settings store and add preference APIs
C-Achard Jul 10, 2026
2b86afd
Persist processor and DLC camera selections
C-Achard Jul 10, 2026
d26a189
Expand settings store unit test coverage
C-Achard Jul 10, 2026
7007239
Improve config path handling in main window
C-Achard Jul 10, 2026
9550ac1
pre-commit
C-Achard Aug 14, 2026
e45ad53
Persist recording filename in user settings
C-Achard Aug 14, 2026
bff7bf1
Restore local prefs only on initial config load
C-Achard Aug 17, 2026
3b073d4
Include camera ID in unknown camera label
C-Achard Aug 17, 2026
ee65fb4
Fix loading of last config file setting
C-Achard Aug 18, 2026
8ab76cb
Add Help menu link to documentation
C-Achard Aug 19, 2026
9a9076b
Add camera settings fixture
C-Achard Jul 8, 2026
f223bf9
Refactor full-queue frame drop test
C-Achard Jul 8, 2026
14da581
Add SingleCameraWorker service unit tests
C-Achard Jul 8, 2026
2a0a110
Add GUI tests for preview and recording lifecycle
C-Achard Jul 8, 2026
f2d43ea
Drop strobe settings when fields are hidden
C-Achard Jul 8, 2026
327c474
Add trigger config dialog GUI test coverage
C-Achard Jul 8, 2026
49163c9
Sync settings after saving config
C-Achard Jul 10, 2026
7d10d3c
Add unit tests for GenTL discovery utils
C-Achard Jul 10, 2026
6c53b4e
Add GUI tests for config and camera fallback
C-Achard Jul 10, 2026
dd21845
Refactor recording option tests
C-Achard Aug 12, 2026
064fd02
Add mono output format tests for GenTL backend
C-Achard Aug 14, 2026
8cbf620
Use isHidden in trigger config test
C-Achard Aug 17, 2026
4c3ea9d
Update test_config.py
C-Achard Aug 18, 2026
acfd272
Build processors inside DLC worker when needed
C-Achard Jul 9, 2026
dc14462
Add mock proc test fiels
C-Achard Jul 9, 2026
bbd7f8c
Update main_window.py
C-Achard Jul 9, 2026
0d1731c
Add recording file context and recorder path accessors
C-Achard Jul 10, 2026
e6de711
Add recording lifecycle hooks for processors
C-Achard Jul 10, 2026
d5624d5
Add processor recording-context tests
C-Achard Jul 10, 2026
a478e3a
Remove custom proc testing folder
C-Achard Jul 10, 2026
cf4e9fc
pre-commit
C-Achard Aug 17, 2026
a700f05
Use shared worker-build processor helper
C-Achard Aug 17, 2026
1d7eaef
Preserve processor recording context lifecycle
C-Achard Aug 17, 2026
e1bb575
Defer DLC processor cleanup until worker exits
C-Achard Aug 17, 2026
c2a48b1
Fix processor recording context cleanup
C-Achard Aug 17, 2026
b06d9bf
Improve processor reset and recording hooks
C-Achard Aug 17, 2026
1e22072
Disable debug log
C-Achard Aug 17, 2026
b1435ad
Fix save path and recording context resolution
C-Achard Aug 17, 2026
87ed4ef
Expand recording context test coverage
C-Achard Aug 17, 2026
64fe64c
Fix recording start flag and add worker test
C-Achard Aug 17, 2026
9c07a8b
fix: save processor data before destroying it when stopping inference…
deruyter92 Jul 23, 2026
50048b5
revert 3eba29f85b7e187c37bb791307c4a1b0e94caa27
deruyter92 Jul 23, 2026
0d59b32
fix dlc_processor: clean up custom processor during DLC shutdown
deruyter92 Jul 23, 2026
9571c2a
warn: confirm before stopping inference while recording
deruyter92 Jul 23, 2026
bf8f402
Update dlclivegui/gui/main_window.py
deruyter92 Aug 10, 2026
8ad9d6f
Update dlclivegui/gui/main_window.py
deruyter92 Aug 10, 2026
c9264f3
Fix message when stopping inference while recording
C-Achard Aug 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -113,3 +113,8 @@ venv.bak/
!dlclivegui/config.py
# uv package files
uv.lock

# profiling
profile*.svg
scalene*.json
scalene*.html
20 changes: 17 additions & 3 deletions dlclivegui/cameras/backends/aravis_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import numpy as np

from ...config import CameraSettings
from ..base import CameraBackend, SupportLevel, register_backend
from ..base import CameraBackend, CapturedFrame, SupportLevel, register_backend
from ..factory import DetectedCamera

LOG = logging.getLogger(__name__)
Expand Down Expand Up @@ -52,6 +52,8 @@ def __init__(self, settings):
self._actual_width: int | None = None
self._actual_height: int | None = None
self._actual_fps: float | None = None
self._camera_pixel_format: str | None = None
self._actual_output_format: str | None = None

self._camera = None
self._stream = None
Expand All @@ -69,6 +71,16 @@ def actual_fps(self) -> float | None:
"""Return the actual frame rate of the camera after opening."""
return self._actual_fps

@property
def actual_pixel_format(self) -> str | None:
"""Camera/native pixel format requested/reported for Aravis."""
return self._camera_pixel_format or self._pixel_format

@property
def actual_output_format(self) -> str | None:
"""Current Aravis backend emits BGR uint8 frames."""
return self._actual_output_format or "BGR8"

@classmethod
def is_available(cls) -> bool:
"""Check if Aravis is available on this system."""
Expand Down Expand Up @@ -360,7 +372,7 @@ def open(self) -> None:

self._camera.start_acquisition()

def read(self) -> tuple[np.ndarray, float]:
def read(self) -> CapturedFrame:
"""Read a frame from the camera."""
if self._camera is None or self._stream is None:
raise RuntimeError("Aravis camera not initialized")
Expand Down Expand Up @@ -418,7 +430,7 @@ def read(self) -> tuple[np.ndarray, float]:
# Always push buffer back to stream
self._stream.push_buffer(buffer)

return frame, timestamp
return CapturedFrame(frame=frame, software_timestamp=timestamp, timestamp_metadata=None)

def stop(self) -> None:
"""Stop camera acquisition."""
Expand Down Expand Up @@ -615,10 +627,12 @@ def _configure_pixel_format(self) -> None:

if self._pixel_format in format_map:
self._camera.set_pixel_format(format_map[self._pixel_format])
self._camera_pixel_format = self._pixel_format
LOG.info(f"Pixel format set to '{self._pixel_format}'")
else:
# Try setting as string
self._camera.set_pixel_format_from_string(self._pixel_format)
self._camera_pixel_format = self._pixel_format
LOG.info(f"Pixel format set to '{self._pixel_format}' (from string)")
except Exception as e:
LOG.warning(f"Failed to set pixel format '{self._pixel_format}': {e}")
Expand Down
Loading
Loading