Added metadata handlers#83
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
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, andgomedia/cmdbuilding blocks; updatedcmd/gomediaentrypoint; removed legacypkg/ffmpeg/taskandpkg/ffmpeg/httphandlercode; 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/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request adds support for building and testing the
libheiflibrary, which enables HEIF/HEIC image format support in the project. The Makefile is updated to download, configure, build, and installlibheifwith appropriate dependency detection, and to run corresponding tests. Additionally, a new_gomedia/main.goCLI entry point is introduced, providing a structured command-line interface for media operations.Build system enhancements:
libheif(v1.23.1) as a build dependency: the Makefile now downloads, configures (with autodetection for optional codecs), builds, and installslibheifalongside other libraries. [1] [2] [3]libheifis included in both the main build (cmd) and test dependencies. [1] [2]Testing improvements:
test-heiftarget to run tests forsys/libheifandpkg/heif, and included it in the maintesttarget. [1] [2]test-metadataandtest-gomediatargets for additional test coverage of themetadataandgomediapackages.Command-line interface:
_gomedia/main.goCLI entry point using thekonglibrary, with structured command groups (list, fingerprint, probe, decode, remux, play, exif), context management, signal handling, and integration with thetask.Manager.