Changes between Version 16 and Version 17 of SponsoringPrograms/STF/2025


Ignore:
Timestamp:
Aug 13, 2025, 1:51:17 PM (9 months ago)
Author:
Ramiro Polla
Comment:

Add "swscale AArch64 NEON backend" proposal

Legend:

Unmodified
Added
Removed
Modified
  • SponsoringPrograms/STF/2025

    v16 v17  
    132132
    133133'''Developer:''' Lynne
     134
     135=== swscale AArch64 NEON backend ===
     136
     137**One line summary:** This project will implement an AArch64 NEON backend for the new swscale framework.
     138
     139**Description:** The recent swscale rewrite has transformed it into a flexible and reliable framework to handle scaling, with the logic being decoupled from the DSP code. This simplifies writing backends with all the benefits and deterministic behaviour of the reference C implementation. This project will add an AArch64 NEON backend that generates optimized NEON SIMD assembly. This backend will be used to generate code at runtime for platforms where just-in-time code execution (JIT) is supported, and it will also be used to generate static assembly files that match the Continuation-Passing Style (CPS) code of the reference C and x86 implementations.
     140
     141**Expected results:** swscale AArch64 NEON backend, both JIT and non-JIT, with feature parity to the reference C and x86 implementations.
     142
     143**Duration:** 6 Months
     144
     145**Payment:** 30,000 EUR
     146
     147**Developer:** Ramiro Polla <ramiro.polla@gmail.com>
     148
     149==== Milestones
     150
     151===== '''asmjit''' backend
     152
     153* **Description**: A JIT proof-of-concept will be made using the '''asmjit''' library. This will allow us to validate the generated assembly code and obtain performance metrics.
     154
     155* **Deliverables**: An initial '''asmjit''' JIT proof-of-concept in a separate git repository. An RFC with a performance report posted to the FFmpeg-devel mailing list.
     156
     157===== Assembly generation abstraction layer
     158
     159* **Description**: The '''asmjit''' proof-of-concept will be split in two parts: an abstract assembly generation layer (with no '''asmjit''' dependency), and the '''asmjit''' code generator based on the abstract layer. This assembly generation layer should include a register allocator. It will then be possible to add other assembly output generators.
     160
     161* **Deliverables**: An update on the RFC on the FFmpeg-devel mailing list with the code split.
     162
     163===== Static non-JIT backend
     164
     165* **Description**: Using the assembly abstraction layer, it will be possible to generate static assembly files that match the Continuation-Passing Style (CPS) code of the reference C and x86 implementations. A tool (program or script) will be created to generate the static assembly files. This tool will be integrated into the FFmpeg codebase, and the static assembly files will be generated either at build-time or integrated into the FFmpeg codebase as well (to be determined).
     166
     167* **Deliverables**: Series merged to git master, effectively providing an initial AArch64 NEON backend.
     168
     169===== Explore other JIT implementations
     170
     171* **Description**: '''asmjit''' will not necessarily be the definitive JIT implementation. It will initially serve merely as a proof-of-concept, and as a springboard to the static non-JIT backend. At this point, other JIT generation backends will be explored, with a focus on either finding or creating a framework that can be cleanly integrated with FFmpeg's C codebase. This dependency should be lightweight or easy to integrate into FFmpeg itself.
     172
     173* **Deliverables**: An RFC with a report on the findings posted to the FFmpeg-devel mailing list. The community will help select the best implementation.
     174
     175===== Final JIT backend
     176
     177* **Description**: The final AArch64 NEON JIT backend will be integrated into the FFmpeg codebase, based on the implementation selected by the community. Support will be added incrementally for each platform, only after they are each properly tested an validated.
     178
     179* **Deliverables**: A pull request to be reviewed by the FFmpeg community.