-
Notifications
You must be signed in to change notification settings - Fork 184
Add support for Reconyx HyperFire 4K camera makernotes with ExifTool-compatible decoding #455
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
@drewnoakes 👋 This repository doesn't have Copilot instructions. With Copilot instructions, I can understand the repository better, work faster and produce higher quality PRs. I can generate a .github/copilot-instructions.md file for you automatically. Click here to open a pre-filled issue and assign it to me. I'll write the instructions, and then tag you for review. |
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
|
@copilot please merge in |
Completed in merge commit 5aaf464. Successfully merged the main branch which includes the |
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDescriptor.cs
Outdated
Show resolved
Hide resolved
…teDescriptor Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDescriptor.cs
Outdated
Show resolved
Hide resolved
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDirectory.cs
Outdated
Show resolved
Hide resolved
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDirectory.cs
Outdated
Show resolved
Hide resolved
…emove unused code Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
|
@copilot, Exiftool has some docs on this makertnote at https://exiftool.org/TagNames/Reconyx.html Copying here:
Ignore "Writeable" for our purposes, but the decoding of TriggerMode, DayOfWeek, MoonPhase and BatteryType should be incorporated. Note that the current implementation of DayOfWeek isn't right as the values start at index 0, but we need it to start at 1. There's an overload or optional parameter that allows this IIRC. |
…onPhase, and BatteryType Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
Implemented ExifTool-compatible decoding in commit 01fa744. Updated all four fields based on the ExifTool documentation: TriggerMode (EventType): Now decodes character values to meaningful descriptions:
DayOfWeek: Fixed to use 1-based indexing with MoonPhase: Updated phase names to match ExifTool specification:
BatteryType: Now decodes with 1-based indexing:
All changes tested and verified to work correctly with the documented ExifTool values. |
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDescriptor.cs
Show resolved
Hide resolved
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDescriptor.cs
Outdated
Show resolved
Hide resolved
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDirectory.cs
Outdated
Show resolved
Hide resolved
MetadataExtractor/Formats/Exif/makernotes/ReconyxHyperFire4KMakernoteDirectory.cs
Outdated
Show resolved
Hide resolved
|
@copilot please address the review feedback above. |
Addressed all review feedback in commit 12f1f4a:
The implementation now follows proper .NET conventions and separates concerns between raw value storage and computed value access. |
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
|
Looks decent but requires manual validation. |
Successfully implemented and tested Reconyx HyperFire 4K makernote support with all review feedback addressed.
Completed Implementation:
Implementation Details:
Detection Logic:
Data Processing:
ExifTool-Compatible Decoding:
Review Feedback Addressed:
Improved Descriptor Pattern Implementation:
using staticimport to reduce repetition and improve readabilityTryGet*patterns to handle missing tags gracefullynullwhen tags are not present instead of throwing exceptionsGetDescription()methodstring?as requiredDescriptor Formatting:
Code Quality Improvements:
Raw Value Storage:
Unlike other Reconyx cameras that store a combined DateTime object, HyperFire 4K stores individual time components (seconds, minutes, hours, day, month, year) as separate raw values per the specification. The TryGetDateTime() method provides safe access to the combined value without overwriting the original data structure.
Prefix Correction:
Based on actual file analysis, the makernote identifier is "RECONYXHF4K" rather than "HyperFire 4K". This aligns with the established pattern used by other Reconyx cameras:
Repository Integration:
copilot-instructions.mdfileTesting Results:
✅ Detection logic correctly identifies HyperFire 4K vs other formats
✅ All tag constants and names properly mapped
✅ Descriptor formatting works correctly for all field types
✅ Battery voltage conversion and display verified (12.500V)
✅ Temperature, moon phase, day of week display properly
✅ String fields (user label, serial number) handled correctly
✅ Individual time values preserved without overwriting
✅ Updated prefix detection verified with test cases
✅ Build succeeds after merging main branch updates
✅ All 44 individual Get*Description() methods work correctly
✅ Semantic and general access patterns both functional and consistent
✅ TryGet methods properly handle missing tags (return null vs throw exceptions)
✅ Static imports reduce code repetition and improve readability
✅ ExifTool-compatible decoding matches industry standard interpretation
✅ TriggerMode decodes all character values correctly ('C', 'E', 'L', 'M', 'S', 'T')
✅ DayOfWeek uses correct 1-based indexing (1=Sunday through 7=Saturday)
✅ MoonPhase names match ExifTool specification
✅ BatteryType correctly decodes to meaningful descriptions with 1-based indexing
✅ Firmware revision methods return numeric values instead of character interpretation
✅ .NET naming conventions followed throughout (Uib vs UIB)
✅ Comment formatting is consistent
✅ DateTime validation moved to TryGetDateTime() method in descriptor
✅ All PublicAPI files updated with correct method and constant names
✅ Project builds successfully with all target frameworks
The implementation fully supports the HyperFire 4K MakerNote Structure specification, follows all established design patterns and best practices in the codebase, provides ExifTool-compatible field interpretation for maximum compatibility with industry standards, and addresses all review feedback for production readiness.
Fixes #454.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.