cisco / thor

Thor Video Codec
BSD 2-Clause "Simplified" License
697 stars 101 forks source link

Assembly optimisations - offer of code #7

Open kupix opened 9 years ago

kupix commented 9 years ago

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!

metajack commented 9 years ago

I wonder if any of HEVCasm could be used in Daala.

Is there a reason you don't have NEON support?

cc @tterribe @tdaede

kupix commented 9 years ago

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.