Changes between Version 30 and Version 31 of SponsoringPrograms/STF/2024


Ignore:
Timestamp:
Feb 12, 2024, 7:34:56 PM (2 years ago)
Author:
Pierre-Anthony Lemieux
Comment:

Update proposal with SOWs from Michael Niedermayer and Niklas Haas

Legend:

Unmodified
Added
Removed
Modified
  • SponsoringPrograms/STF/2024

    v30 v31  
    147147**Purpose:** Prepare a project description for review board.
    148148
    149 ### **1) Describe the technology this effort will support.**
     149== **1) Describe the technology this effort will support.**
    150150
    151151The proposed effort aims to support FFmpeg, a leading multimedia framework recognized for its versatile capabilities.
     
    153153FFmpeg serves as a comprehensive solution for decoding, encoding, transcoding, multiplexing, demultiplexing, streaming, filtering, and playback of a wide array of multimedia formats. It stands out by seamlessly handling formats from ancient, obscure standards to cutting-edge ones, making it a cornerstone in the multimedia processing landscape.
    154154
    155 ### **2) Where is this technology being used? Why is it relevant and critical? How does this technology serve the public interest?**
     155== **2) Where is this technology being used? Why is it relevant and critical? How does this technology serve the public interest?**
    156156
    157157FFmpeg is a ubiquitous technology, deeply embedded in the fabric of modern multimedia processing and touching the lives of millions every day. FFmpeg is an integral component in a vast array of end-user devices, including desktops, laptops, mobile phones, smartwatches, and smart TVs. FFmpeg also powers major video distribution and streaming platforms like YouTube, Vimeo, AWS, and Microsoft Azure, shaping the landscape of online content consumption.
     
    161161The relevance and criticality of FFmpeg lies in its role as the backbone of multimedia processing. It serves the public interest by facilitating the seamless functioning of everyday technologies, from video playback in web browsers like Firefox and Chromium, to applications like Kodi, MPlayer, and OBS Studio. Furthermore, FFmpeg plays a crucial role in public sector use cases, website interactions, and even in the transmission of multimedia content within emails. In essence, FFmpeg's impact is far-reaching, touching both the private and public spheres. FFmpeg's reliability is paramount for the secure and efficient functioning of digital multimedia.
    162162
    163 ### **3) What are the problems the proposed work is trying to address? What activities do you propose and how do they address the problems described? How do those activities fit into [STF’s mission](https://www.sovereigntechfund.de/mission)?**
     163== **3) What are the problems the proposed work is trying to address? What activities do you propose and how do they address the problems described? How do those activities fit into [STF’s mission](https://www.sovereigntechfund.de/mission)?**
    164164
    165165The proposed work addresses critical challenges in maintaining FFmpeg's sustainability, security, and innovation. Activities include:
     
    172172These activities align with STF’s mission by supporting the maintenance and security of open source components and the strengthening the Open Source ecosystem.
    173173
    174 ### **4) Who is going to be performing the work and how are they qualified to do so?**
     174== **4) Who is going to be performing the work and how are they qualified to do so?**
    175175
    176176The work will be performed by key FFmpeg project contributors and other experienced developers. Their qualifications have been demonstrated through years of active involvement in FFmpeg development, participating in diverse tasks including code contributions, code review, user support, and administration.
    177177
    178 ### **5) How is the technology maintained or governed? Is there a community behind the technology, and do they approve of the work?**
     178== **5) How is the technology maintained or governed? Is there a community behind the technology, and do they approve of the work?**
    179179
    180180FFmpeg's maintenance and governance in based on a flat hierarchy, with decisions being made transparently through written communications in mailing lists.
     
    182182The proposed work aligns with the community's focus on quality, security, and openness and will/has been approved following the community's operating governance processes.
    183183
    184 ### **6) Describe the Milestones Using the Template below**
    185 
    186 **Milestone 1:** Ecosystem and Infrastructure Support
    187 
    188 **Cost:**
    189 
    190 **Duration:** Throughout the Project (12 months)
    191 
    192 In this initial milestone, the focus is on fortifying FFmpeg's security posture and ensuring the robustness of its infrastructure. This milestone also includes enhancements in other areas like user support on this TRAC system and the mailing lists.
    193 This milestone's activities include:
    194 
    195 - **Security Fixes and Hardening (€??.???):** Fix the majority of coverity issues (674 issues), fix coverage testing of existing oss-fuzz in some form (possibly on separate infrastructure)
    196 - **Administration of FFmpeg Infrastructure (€??.???):** Enhancing the overall administration experience and the reliability of FFmpeg's infrastructure.
    197 - **User Support via TRAC and Mailing List (€??.???):** Streamlining user support mechanisms through TRAC and the user mailing list.
    198 - **Reviewing Code Submissions (€??.???):** Ensuring the quality and security of code submissions through a robust review process.
    199 
    200 **Milestone 2:** Enhancing Existing Implementations (€??.???)
    201 
    202 This milestone is dedicated to advancing existing codecs, formats, and filters within FFmpeg. Activities include:
    203 
    204 - **Improving ABCD (€5,000):** Enhancing the functionality and efficiency of ABCD. (X Months)
    205 - **Improving EFGH (AAAA) Muxer/Demuxer (€7,000):** Addressing inefficiencies and improving the handling of EFGH formats. (Y Months)
    206 
    207 
    208 ### **7) Please fill out the following Supplementary Information**
    209 
    210 - **Preferred Mode of Invoicing:**
    211 - **Contracting Entity (Is it a fiscal host?):** SPI
    212 - **Total Budget Requested:**
    213 - **Requested Fully Loaded Hourly Rate (Total cost divided by number of person hours):**
    214 - **Project Actual Duration:** 12 Months
    215 - **Earliest possible starting date:**
    216 
    217 == Template 1 ==
    218 
    219 '''Description:''' Improve the foo bar
    220 
    221 '''Expected results:''' a foo bar that has fully thread safe logging
    222 
    223 '''Duration:''' 350 hours
    224 
    225 '''Payment:''' 28,000€
    226 
    227 '''Developer:''' Donald Duck
    228 
    229 
    230 == Template 2 ==
    231 
    232 '''Description:''' Work on improving the bar foo
    233 
    234 '''Expected results:''' Spend 6 month fulltime work on improving bar foo, fixing bugs and regression people report, refactor the code to make it more maintainable
    235 
    236 '''Duration:''' 6 Months
    237 
    238 '''Payment:''' 35,000€
    239 
    240 '''Developer:''' NA
     184== **6) Describe the Milestones Using the Template below**
     185
     186=== Classify and fix outstanding issues identified by Coverity and improve related code.
     187
     188==== Overview
     189
     190Coverity is a static code analysis system that is used to analyze FFmpeg code
     191to find bugs with an emphasis on quality and security issues. There are
     192currently 673 outstanding issues identified by Coverity
     193(https://scan.coverity.com/projects/ffmpeg?tab=overview). Some of these
     194issues are false positives while others could open the door to security
     195vulnerabilities.
     196
     197The objective of this work is to identify the Coverity issues that are
     198not false positives, and fix 90% of them, split into three tranches of 30%.
     199
     200Any issue that require modules rewrite or redesign are outside the scope of
     201this SoW. Any related issues will be fixed / cleaned up if practical. An
     202example of this is the use of literal 4 instead of a named identifier for the
     203number of planes in a false positive "out of array access" issue. The issue
     204was closed as false positive yet patches to make the code more robust and
     205easier to understand where submitted none the less.
     206
     207**Developer**: Michael Niedermayer <michael-ffwork@niedermayer.cc>
     208
     209**Duration**: 12 months
     210
     211==== Milestones
     212
     213===== Milestone C
     214
     215* **Description**: Review all outstanding Coverity issues and, for each one, determine whether it is a false positive.
     216
     217* **Deliverables**: List of both false positive and potentially real issues posted to the FFMPEG dev mailing list.
     218
     219===== Milestone S1
     220
     221* **Description**. Fix the first 30% tranche of outstanding real issues.
     222
     223* **Deliverables**. Patches submitted for review to the FFMPEG dev mailing list.
     224
     225===== Milestone M1
     226
     227* **Description**. Commit to the FFMPEG master branch 90% of the changes from S1.
     228
     229* **Deliverables**. Link to the commits containing the changes.
     230
     231===== Milestone S2
     232
     233* **Description**. Fix the second 30% tranche of outstanding real issues.
     234
     235* **Deliverables**. Patches submitted for review to the FFMPEG dev mailing list.
     236
     237===== Milestone M2
     238
     239* **Description**. Commit to the FFMPEG master branch 90% of the changes from S2.
     240
     241* **Deliverables**. Link to the commits containing the changes.
     242
     243===== Milestone S2
     244
     245* **Description**. Fix the third 30% tranche of outstanding real issues.
     246
     247* **Deliverables**. Patches submitted for review to the FFMPEG dev mailing list.
     248
     249===== Milestone M2
     250
     251* **Description**. Commit to the FFMPEG master branch 90% of the changes from S2.
     252
     253* **Deliverables**. Link to the commits containing the changes.
     254
     255=== Maintain the FFV1 Codec
     256
     257==== Overview
     258
     259FFv1 has become one of the entirely open and free de facto standard lossless
     260codecs for video archival. There has however been insufficient resources to
     261maintain it and there are, as a result, several outstanding issues and pull
     262requests to address:
     263
     264https://github.com/FFmpeg/FFV1/issues
     265https://github.com/FFmpeg/FFV1/pulls
     266
     267The objective of the work is
     268
     269**Developer**: Michael Niedermayer <michael-ffwork@niedermayer.cc>
     270
     271**Duration**: 12 months
     272
     273==== Milestones
     274
     275===== Fuzzing
     276
     277* **Description**: Add encoder and decoder fuzzing to find new security issues.
     278
     279* **Deliverables**: Scripts and input files necessary for fuzzing
     280
     281===== Bug fix
     282
     283* **Description**. Fix 90% of outstanding bugs and merge 90% of outstanding pull requests intended to fix outstanding bugs.
     284
     285* **Deliverables**. Link to commits on the FFMPEG master branch containing the changes.
     286
     287===== Add support for floating point samples
     288
     289* **Description**. The objective is to add support for floating point samples
     290to FFv1. This would allow lossless storage of a wider range of content in
     291archives using FFv1.
     292
     293* **Deliverables**. List of git commits on the FFMPEG master branch adding
     294broadening the support of formats in the specification, encoder and decoder
     295
     296=== Improving and modernizing libswscale
     297
     298==== Overview
     299
     300libswscale is an old and integral component of FFmpeg which is relied on,
     301in some form, by almost every user. Despite this, it is one of the hardest
     302parts of FFmpeg to extend and understand, owing to its historical growth
     303in complexity. The aim of this project will be to alleviate some of the
     304issues and start work on bringing libswscale into a cleaned up, more
     305maintainable state.
     306
     307**Developer**: Niklas Haas <ffmpeg@haasn.xyz>
     308
     309**Duration**: 12 months
     310
     311==== Milestones
     312
     313===== Design new high-level API
     314
     315* **Description**: Develop and design a new high-level API
     316(libswscale/avscale.h), which is capable of abstracting away the internal
     317messy, stateful details of libswscale. This API *should* ideally also be
     318written in such a way that we can internally use zscale or libplacebo instead
     319of libswscale, possibly even at the same time (e.g. if incompatible, complex,
     320multi-step transformations are requested), be almost entirely stateless
     321(backed by some sort of "state cache" object?), and allow for implementing
     322things like slice or frame threading at a higher level (thus freeing
     323libswscale from the burden of managing cascaded contexts internally).
     324
     325* **Deliverables**: RFC of complete API draft posted to mailing list, with at
     326least general consensus that this API represents a step in the right
     327direction.
     328
     329===== Implement backends for new API
     330
     331* **Description**. The previously designed API should be fully implemented,
     332hooked up to at least libswscale, in particular, in a way that solves the
     333existing issues of libswscale's statefulness (e.g. errors after reconfiguring
     334to different bit depths or color spaces). If time allows, also hook it up to
     335libplacebo and/or zscale as a proof of concept, possibly just to provide an
     336initial backing for operations which libswscale does not yet support (e.g.
     337colorspace conversions, GPU frame support).
     338
     339* **Deliverables**. Series merged to git master introducing new API and backing
     340implementation, vf_scale successfully ported to avscale.h.
     341
     342===== Extend and fix regression tests
     343
     344* **Description**. Fix existing known issues with libswscale's self-tests,
     345and extend them by adding coverage for more paths. In particular, add
     346checkasm support for existing assembly primitives. Fix any issues that are
     347uncovered by the additional tests.
     348
     349* **Deliverables**. Patch series merged to git master, closing existing
     350issues (e.g.  #10824), adding testing for at least half of assembly routines,
     351and fixing whatever is needed to ensure that the assembly passes checkasm.
     352
     353===== Remove legacy code paths
     354
     355* **Description**. In the interest of making subsequent refactoring work more
     356achievable, libswscale should first be slimmed down to the essentials of
     357what's needed for reasonably modern platforms. Older code, assembly routines
     358for rarely used platforms, legacy speed hacks like runtime-generated MMX code
     359etc. should be identified, analyzed to figure out what actual benefit they
     360provide, and proposed for removal.
     361
     362* **Deliverables**. A list of proposed removals, plus justification (e.g. in
     363the form of benchmarks or platform statistics) is posted to the mailing list.
     364All proposals are either accepted by the community (and merged), or rejected
     365(and discarded).