thor
thor copied to clipboard
Assembly optimisations - offer of code
Would the Thor team consider using our library of video coding assembly optimisations? This is a collection of permissively licensed assembly with test and demonstration code aimed primarily at HEVC encoding and decoding using x86/x64/AVX2. Thor primitives could easily be added and it seems likely that transforms are already interchangeable.
https://github.com/kupix/hevcasm/tree/develop
Happy to adapt and improve (and rename!) the HEVCasm library to Cisco's requirements :) We'd eventually love it to be a one-stop-shop for all the optimised primitives you might need for an encoder or decoder of modern video formats. HEVCasm is currently in use in Parabola products and collaborative R&D projects.
The "primitives API" as exposed by HEVCasm is a natural interface already existing in most codec implementations. It could be used to enable reuse of some of the most time-consuming work between encoders and decoders of different formats. So many codecs come with their own primitives built in and this represents vast duplication of effort between projects - our goal is to rise above politics and egos to improve that situation!
I wonder if any of HEVCasm could be used in Daala.
Is there a reason you don't have NEON support?
cc @tterribe @tdaede
It would be fantastic to support Daala primitives in HEVCasm. Focus has been on HEVC and 64-bit Windows/Linux - no reason why we couldn't also offer Daala functions and Neon for that matter if someone had the time and tools (or funding).
HEVCasm is a work in [very slow] progress. Philosophy is lowest common denominator language (C not C++ or C99) and lowest common denominator copyright license (BSD or MIT, not GPL or LGPL) for maximum compatibility with other projects.
Current project brings together assembly from f265 (now abandoned), libvpx and a few routines by Parabola. All wrapped in a consistent API with CPU detection and function pointer table management. In principle it could support any codec from JPEG to Daala - it's intended to be an old fashioned library from which you just link the parts you want.