Overview
Implementing a custom decoder involves:- Implementing the
Decodertrait - Creating codec descriptors
- Registering with a
CodecRegistry - Using your custom decoder
Implementing the Decoder Trait
TheDecoder trait defines the interface all decoders must implement.
Trait Requirements
Key Methods
try_new()
try_new()
Instantiates your decoder with the given parameters:
decode()
decode()
The core decoding method that converts packets to audio:
reset()
reset()
Resets decoder state after seeks:
last_decoded()
last_decoded()
Returns the last decoded buffer:
Creating Codec Descriptors
Codec descriptors tell Symphonia about your codec.Define Codec Type
First, declare your codec type:Create Descriptor
support_codec! macro expands to:
Registering Custom Decoders
Once implemented, register your decoder with aCodecRegistry.
Complete Example
Here’s a complete example implementing a simple PCM pass-through decoder:Best Practices
Validate Parameters
Always validate
CodecParameters in try_new(). Return descriptive errors for missing or invalid values.Handle Errors Gracefully
Clear internal buffers when
decode() fails. Return buffers with length 0 from last_decoded().Optimize Buffer Reuse
Reuse internal buffers across
decode() calls to minimize allocations.Implement Reset Properly
Ensure
reset() clears all stateful data so seeking works correctly.Advanced Topics
Verification Support
If your codec supports verification (checksums, etc.):Sample Format Conversion
Return different sample formats:Multi-Codec Decoders
Support multiple related codecs:Testing Your Decoder
Next Steps
Format Detection
Learn how to register custom formats
API Reference
Full codec API documentation