Skip to content

feat(decoder): Add real-time Stereo-to-7.1 Upmixing Engine to IAMF Renderer - #111

Closed
AytacDoyran wants to merge 3 commits into
AOMediaCodec:mainfrom
AytacDoyran:main
Closed

AytacDoyran wants to merge 3 commits into
AOMediaCodec:mainfrom
AytacDoyran:main

Conversation

@AytacDoyran

Copy link
Copy Markdown

Summary

This pull request introduces a lightweight, low-latency, and royalty-free Stereo-to-7.1 Upmixing Engine directly into the IamfDecoder architecture.

As legacy stereo assets still dominate streaming catalogs (e.g., YouTube), this implementation provides a standardized way to dynamically expand 2.0 channel PCM input into an immersive 8-channel (7.1) spatial layout without altering downstream bandwidth or requiring multi-channel server side re-encoding.

Technical Implementation

The upmix algorithm operates in the time-domain using explicit channel separation principles to avoid artificial phasing effects:

  • Center (C) Extraction: Identifies in-phase signals between Left and Right channels via mid-side matrix analysis.
  • Front (L/R) Management: Balances original frequency responses while shifting ambient side-components.
  • Surround Side (Ls/Rs) & Back (Lb/Rb): Captures out-of-phase ambient content and applies discrete 20ms and 40ms circular delay lines to produce natural spatial depth.
  • LFE Channel: Handles low-frequency routing for subwoofers below the crossover point.

Specifications & Optimization

  • Google C++ Style Guide Compliant: The class definitions, variable namings (snake_case_), and namespace structural guidelines are strictly followed.
  • Zero Allocation: Memory allocations for delay circular buffers happen exclusively on class initialization, ensuring zero overhead during the real-time processing loop.
  • Licensing: Fully compatible with AOMedia's Royalty-Free Patent License Agreement. No third-party dependencies are introduced.

Add ApplyStereoTo71Upmix function for stereo upmixing
Added IamfDecoder class with initialization and decoding methods.
@jwcullen

jwcullen commented Oct 5, 2026

Copy link
Copy Markdown
Collaborator

Thank you for your interest in IAMF.

We are going to close this PR because the IamfDecoder class is designed to strictly be an implementation of this specification, we want to decouple any supplementary processing. Additionally, this a very large feature that would take significant time to review and maintain. Architecturally, it seems that upmixing would be better handled as a stage of processing after the native IamfDecoder output, rather than be bundled with it.

@jwcullen jwcullen closed this Oct 5, 2026
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