Skip to content

Added metadata handlers#83

Merged
djthorpe merged 13 commits into
mainfrom
djt/0712/metadata
Jul 13, 2026
Merged

Added metadata handlers#83
djthorpe merged 13 commits into
mainfrom
djt/0712/metadata

Conversation

@djthorpe

Copy link
Copy Markdown
Member

This pull request adds support for building and testing the libheif library, which enables HEIF/HEIC image format support in the project. The Makefile is updated to download, configure, build, and install libheif with appropriate dependency detection, and to run corresponding tests. Additionally, a new _gomedia/main.go CLI entry point is introduced, providing a structured command-line interface for media operations.

Build system enhancements:

  • Added libheif (v1.23.1) as a build dependency: the Makefile now downloads, configures (with autodetection for optional codecs), builds, and installs libheif alongside other libraries. [1] [2] [3]
  • Updated build targets so that libheif is included in both the main build (cmd) and test dependencies. [1] [2]

Testing improvements:

  • Added test-heif target to run tests for sys/libheif and pkg/heif, and included it in the main test target. [1] [2]
  • Added test-metadata and test-gomedia targets for additional test coverage of the metadata and gomedia packages.

Command-line interface:

  • Introduced a new _gomedia/main.go CLI entry point using the kong library, with structured command groups (list, fingerprint, probe, decode, remux, play, exif), context management, signal handling, and integration with the task.Manager.

Copilot AI review requested due to automatic review settings July 12, 2026 15:34
@djthorpe djthorpe self-assigned this Jul 12, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request expands go-media’s format and metadata support by adding libheif bindings/tests (enabling HEIF/HEIC/AVIF handling) and introducing new metadata extraction handlers (including embedded artwork). It also includes a broader CLI/manager/schema refactor by moving functionality into a new gomedia/ layer and removing older pkg/ffmpeg/task and HTTP handler code.

Changes:

  • Added CGO bindings and tests for sys/libheif, plus HEIF MIME registration and HEIF metadata plumbing.
  • Added metadata framework enhancements: MIME detection helpers and new handlers for image/audio/video metadata (including RAW + artwork extraction).
  • Introduced gomedia/schema, gomedia/manager, and gomedia/cmd building blocks; updated cmd/gomedia entrypoint; removed legacy pkg/ffmpeg/task and pkg/ffmpeg/httphandler code; added _old/ archived examples.

Reviewed changes

Copilot reviewed 135 out of 233 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
sys/libheif/library.go libheif library/version/init bindings
sys/libheif/library_test.go Tests for library/version/init bindings
sys/libheif/image_query_test.go Tests for image query helpers + decoding warnings
sys/libheif/image_handle_test.go Tests for image handle + metadata block querying
sys/libheif/error_test.go Tests for HeifError behavior
sys/libheif/encoding_test.go HEVC encode/decode roundtrip test (skips if no encoder)
sys/libheif/encoding_introspection_test.go Encoder descriptor/parameter introspection tests
sys/libheif/decoding_options_test.go Tests for decoding options + thread settings
sys/libheif/context_test.go Tests for context alloc/read/top-level image APIs
sys/libexif/content.go Fixes callback user-data plumbing using uintptr_t handle passing
pkg/xmp/xmp.go Builds XMP documents from generic metadata + namespace mapping
pkg/xmp/item.go Adds typed accessors (time/duration/bool/rational/GPS) for XMP items
pkg/segmenter/segmenter_test.go Adds regression guard for segment boundary flushing vs silence
pkg/raw/type.go Adds RAW camera content-type matcher regex for handlers
pkg/heif/mime.go Registers HEIF/AVIF extensions with Go’s mime registry
pkg/heif/metadata_test.go Exercises HEIF metadata + optional XMP extraction
pkg/ffmpeg/task/remux.go Removed legacy task-manager remux implementation
pkg/ffmpeg/task/probe.go Removed legacy task-manager probe implementation
pkg/ffmpeg/task/opt.go Removed legacy task-manager options plumbing
pkg/ffmpeg/task/manager.go Removed legacy task-manager constructor
pkg/ffmpeg/task/manager_test.go Removed tests for legacy task manager
pkg/ffmpeg/task/decode.go Removed legacy task-manager decode implementation
pkg/ffmpeg/task/codec.go Removed legacy task-manager codec listing
pkg/ffmpeg/task/audiofingerprint.go Removed legacy task-manager fingerprinting/lookup
pkg/ffmpeg/schema/probe.go Splits Artwork type out of probe schema (now separate file)
pkg/ffmpeg/schema/artwork.go New Artwork schema type file
pkg/ffmpeg/httphandler/sampleformat.go Removed HTTP handler for sample formats
pkg/ffmpeg/httphandler/pixelformat.go Removed HTTP handler for pixel formats
pkg/ffmpeg/httphandler/httphandler.go Removed HTTP handler registration + http error mapping
pkg/ffmpeg/httphandler/format.go Removed HTTP handler for formats
pkg/ffmpeg/httphandler/filter.go Removed HTTP handler for filters
pkg/ffmpeg/httphandler/codec.go Removed HTTP handler for codecs
pkg/ffmpeg/httphandler/audiochannellayout.go Removed HTTP handler for channel layouts
pkg/exif/exif.go Improves EXIF parsing robustness for HEIF EXIF payload shapes
pkg/exif/exif_test.go Adds HEIF EXIF payload-shape test coverage
metadata/video/artwork.go Adds video embedded-artwork metadata handler
metadata/mime.go Adds content-type detection + extension preference helpers
metadata/mime_test.go Tests content-type overrides + preferred extension selection
metadata/image/raw.go Adds RAW metadata handler (libraw + thumbnail EXIF + artwork)
metadata/image/image.go Adds generic image metadata handler (format/width/height)
metadata/image/image_test.go Tests generic image handler across multiple formats
metadata/image/heif.go Adds HEIF metadata + thumbnail artwork handlers
metadata/image/heif_test.go Tests HEIF metadata extraction on fixture
metadata/image/exif_test.go Walks fixtures and extracts metadata for any supported image type
metadata/audio/mime.go Registers audio extensions (m4a/flac) in mime registry
metadata/audio/artwork.go Adds audio embedded-artwork metadata handler
metadata.go Clarifies Metadata key format (namespace:key) in interface comment
gomedia/schema/stream.go CLI-friendly wrapper around ffmpeg stream schema + table helpers
gomedia/schema/segment_audio.go Request schema for audio segmentation operation
gomedia/schema/sampleformat.go Sample format schema + table helpers
gomedia/schema/probe.go Probe request/response schema for gomedia layer
gomedia/schema/metadata.go Metadata response schema with explicit JSON key/value emission
gomedia/schema/metadata_test.go Tests schema metadata JSON marshaling behavior
gomedia/schema/filter.go Filter schema + option extraction for table/JSON
gomedia/schema/audiofingerprint.go Fingerprint and lookup request/response schemas
gomedia/schema/audiochannellayout.go Audio channel layout schema + table/JSON helpers
gomedia/manager/test_test.go Shared test harness initialization for manager tests
gomedia/manager/segment_audio_test.go Tests audio segmentation output (.m4a)
gomedia/manager/sampleformat.go Moves sample-format listing into new manager layer
gomedia/manager/sampleformat_test.go Tests sample-format listing + filters
gomedia/manager/run.go Adds manager Run helper that blocks on context cancellation
gomedia/manager/probe.go Implements probe operation using ffmpeg reader + tracing
gomedia/manager/pixelformat.go Moves pixel-format listing into new manager layer
gomedia/manager/pixelformat_test.go Tests pixel-format listing + filters
gomedia/manager/opt.go Introduces manager options (tracer, AcoustID client)
gomedia/manager/metadata.go Adds manager metadata API (content-type + handler execution + warnings)
gomedia/manager/metadata_test.go Tests manager metadata API including non-seeker readers
gomedia/manager/manager.go New Media manager type + constructor
gomedia/manager/manager_test.go Tests manager initialization
gomedia/manager/format_test.go Tests format listing/filtering (manager layer)
gomedia/manager/filter.go Moves filter listing into new manager layer
gomedia/manager/filter_test.go Tests filter listing + name filter
gomedia/manager/codec.go Moves codec listing into new manager layer
gomedia/manager/codec_test.go Tests codec listing + filters
gomedia/manager/audiofingerprint.go Implements fingerprinting when built with chromaprint tag
gomedia/manager/audiofingerprint_test.go Tests fingerprinting (chromaprint build tag)
gomedia/manager/audiofingerprint_stub.go Stub implementation when chromaprint tag is absent
gomedia/manager/audiofingerprint_lookup.go Adds AcoustID lookup operation via configured client
gomedia/manager/audiochannellayout.go Moves channel-layout listing into new manager layer
gomedia/manager/audiochannellayout_test.go Tests channel-layout listing + filters
gomedia/cmd/template.go Adds template path expansion helper
gomedia/cmd/audiofingerprint_stub.go CLI stub for chromaprint commands when tag absent
gomedia/cmd/audiofingerprint_chromaprint.go CLI commands for fingerprint + lookup (chromaprint tag)
cmd/gomedia/main.go Reworks gomedia entrypoint to use go-server cmd runner + error formatting
cmd/gomedia/cli.go Wires CLI root type to gomedia/cmd command set
_old/sdl/video.go Adds archived SDL video code under _old/
_old/sdl/sdl.go Adds archived SDL context/event-loop code under _old/
_old/sdl/audio.go Adds archived SDL audio code under _old/
_old/generator/yuv420p_test.go Adds archived generator tests under _old/
_old/generator/sine_test.go Adds archived generator tests under _old/
_old/generator/generator.go Adds archived generator interface under _old/
_old/generator/ebu_test.go Adds archived generator tests under _old/
_old/ffmpeg/stream.go Adds archived ffmpeg stream wrapper under _old/
_old/ffmpeg/sampleformat.go Adds archived sample-format wrapper under _old/
_old/ffmpeg/sampleformat_test.go Adds archived sample-format tests under _old/
_old/ffmpeg/resampler_test.go Adds archived resampler test under _old/
_old/ffmpeg/re.go Adds archived resample/rescale helper under _old/
_old/ffmpeg/pixelformat.go Adds archived pixel-format wrapper under _old/
_old/ffmpeg/pixelformat_test.go Adds archived pixel-format tests under _old/
_old/ffmpeg/par_test.go Adds archived parameter tests under _old/
_old/ffmpeg/packet.go Adds archived packet wrapper under _old/
_old/ffmpeg/metadata.go Adds archived metadata wrapper under _old/
_old/ffmpeg/metadata_test.go Adds archived metadata tests under _old/
_old/ffmpeg/manager_test.go Adds archived manager tests under _old/
_old/ffmpeg/logging.go Adds archived logging helper under _old/
_old/ffmpeg/logging_test.go Adds archived logging tests under _old/
_old/ffmpeg/frame_test.go Adds archived frame tests under _old/
_old/ffmpeg/codec_test.go Adds archived codec tests under _old/
_old/ffmpeg/channellayout_test.go Adds archived channel-layout tests under _old/
_old/cmd/media/version.go Adds archived CLI version command under _old/
_old/cmd/media/main.go Adds archived CLI main under _old/
_old/cmd/media/fingerprint.go Adds archived fingerprint CLI under _old/
_old/cmd/ffmpeg/show_metadata/main.go Adds archived ffmpeg metadata example under _old/
_old/cmd/ffmpeg/README.md Adds archived examples README under _old/
_old/cmd/examples/transcode/main.go Adds archived transcode example under _old/
_old/cmd/examples/transcode/context.go Adds archived signal context helper under _old/
_old/cmd/examples/server/main.go Adds archived server example under _old/
_old/cmd/examples/server/handle_metadata.go Adds archived metadata handler example under _old/
_old/cmd/examples/sdlplayer/main.go Adds archived SDL player example under _old/
_old/cmd/examples/sdlplayer/context.go Adds archived SDL signal context helper under _old/
_old/cmd/examples/metadata/main.go Adds archived metadata example under _old/
_old/cmd/examples/encode/main.go Adds archived encode example under _old/
_old/cmd/examples/encode/context.go Adds archived signal context helper under _old/
_old/cmd/examples/demux/main.go Adds archived demux example under _old/
_old/cmd/examples/decode/main.go Adds archived decode example under _old/
_old/cmd/examples/capture/main.go Adds archived capture example under _old/
_old/cmd/examples/capture/context.go Adds archived signal context helper under _old/
_old/_gomedia/version.go Adds archived gomedia version helper under _old/
_old/_gomedia/remux.go Adds archived gomedia remux command under _old/
_old/_gomedia/probe.go Adds archived gomedia probe command under _old/
_old/_gomedia/play_nosdl.go Adds archived gomedia play stub under _old/
_old/_gomedia/main.go Adds archived kong-based gomedia CLI under _old/
_old/_gomedia/exif.go Adds archived exif command under _old/
_old/_gomedia/decode.go Adds archived decode command under _old/
_old/_gomedia/audiofingerprint.go Adds archived audio fingerprint command under _old/
_old/_gomedia/_server.go Adds archived server command under _old/

Comment thread metadata/mime.go
Comment thread cmd/gomedia/main.go
Comment thread pkg/exif/exif_test.go Outdated
Comment thread gomedia/manager/audiofingerprint_lookup.go Fixed
Comment thread gomedia/manager/probe.go Fixed
@djthorpe djthorpe merged commit 2719e1d into main Jul 13, 2026
4 checks passed
@djthorpe djthorpe deleted the djt/0712/metadata branch July 13, 2026 09:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants