<div dir="ltr">Hello all,<div><br></div><div>Attached is the initial proposed implementation for ch.mapping 253/3, based on the IETF proposal: <a href="https://tools.ietf.org/html/draft-ietf-codec-ambisonics-03">https://tools.ietf.org/html/draft-ietf-codec-ambisonics-03</a> </div><div><br></div><div>A brief overview of the patch, as it is slightly lengthy:</div><div>After discussion with Jean-Marc, we determined that ch.253/3 will need the demixing matrix as part of the encoder/decoder struct stack and thus will require a new Encoder/Decoder structure. For this, I've proposed OpusPEnc/OpusPDec (for "projection"), which wraps OpusMSEnc/OpusMSDec aside from the addition of the mixing matrix structure. The functionality also wraps the functionality of the multistream API aside from matrix transforms during encode/decode.</div><div><br></div><div>We have included 3 mixing/demixing matrix pairs that are sufficient for coding/decoding 1st/2nd/3rd order content respecitvely.</div><div><br></div><div>I've modified the multistream api slightly, first to include some supplemental API extensions to allow wrapping and moved the declaration of the MSEnc/MSDec to opus_private so that the projection API can compile.</div><div><br></div><div>Some basic tests to ensure matrix multiplication and encoding/decoding using projection has been included.</div><div><br></div><div>I am of course happy and eager to take any and all suggestions/comments/questions/recommendations regarding the patch, including naming conventions/style/etc. </div><div><br></div><div>Looking forward to your feedback,</div><div><br></div><div>Cheers,</div><div>Drew</div></div>