| 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 | |
| | 190 | Coverity is a static code analysis system that is used to analyze FFmpeg code |
| | 191 | to find bugs with an emphasis on quality and security issues. There are |
| | 192 | currently 673 outstanding issues identified by Coverity |
| | 193 | (https://scan.coverity.com/projects/ffmpeg?tab=overview). Some of these |
| | 194 | issues are false positives while others could open the door to security |
| | 195 | vulnerabilities. |
| | 196 | |
| | 197 | The objective of this work is to identify the Coverity issues that are |
| | 198 | not false positives, and fix 90% of them, split into three tranches of 30%. |
| | 199 | |
| | 200 | Any issue that require modules rewrite or redesign are outside the scope of |
| | 201 | this SoW. Any related issues will be fixed / cleaned up if practical. An |
| | 202 | example of this is the use of literal 4 instead of a named identifier for the |
| | 203 | number of planes in a false positive "out of array access" issue. The issue |
| | 204 | was closed as false positive yet patches to make the code more robust and |
| | 205 | easier 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 | |
| | 259 | FFv1 has become one of the entirely open and free de facto standard lossless |
| | 260 | codecs for video archival. There has however been insufficient resources to |
| | 261 | maintain it and there are, as a result, several outstanding issues and pull |
| | 262 | requests to address: |
| | 263 | |
| | 264 | https://github.com/FFmpeg/FFV1/issues |
| | 265 | https://github.com/FFmpeg/FFV1/pulls |
| | 266 | |
| | 267 | The 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 |
| | 290 | to FFv1. This would allow lossless storage of a wider range of content in |
| | 291 | archives using FFv1. |
| | 292 | |
| | 293 | * **Deliverables**. List of git commits on the FFMPEG master branch adding |
| | 294 | broadening the support of formats in the specification, encoder and decoder |
| | 295 | |
| | 296 | === Improving and modernizing libswscale |
| | 297 | |
| | 298 | ==== Overview |
| | 299 | |
| | 300 | libswscale is an old and integral component of FFmpeg which is relied on, |
| | 301 | in some form, by almost every user. Despite this, it is one of the hardest |
| | 302 | parts of FFmpeg to extend and understand, owing to its historical growth |
| | 303 | in complexity. The aim of this project will be to alleviate some of the |
| | 304 | issues and start work on bringing libswscale into a cleaned up, more |
| | 305 | maintainable 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 |
| | 317 | messy, stateful details of libswscale. This API *should* ideally also be |
| | 318 | written in such a way that we can internally use zscale or libplacebo instead |
| | 319 | of libswscale, possibly even at the same time (e.g. if incompatible, complex, |
| | 320 | multi-step transformations are requested), be almost entirely stateless |
| | 321 | (backed by some sort of "state cache" object?), and allow for implementing |
| | 322 | things like slice or frame threading at a higher level (thus freeing |
| | 323 | libswscale from the burden of managing cascaded contexts internally). |
| | 324 | |
| | 325 | * **Deliverables**: RFC of complete API draft posted to mailing list, with at |
| | 326 | least general consensus that this API represents a step in the right |
| | 327 | direction. |
| | 328 | |
| | 329 | ===== Implement backends for new API |
| | 330 | |
| | 331 | * **Description**. The previously designed API should be fully implemented, |
| | 332 | hooked up to at least libswscale, in particular, in a way that solves the |
| | 333 | existing issues of libswscale's statefulness (e.g. errors after reconfiguring |
| | 334 | to different bit depths or color spaces). If time allows, also hook it up to |
| | 335 | libplacebo and/or zscale as a proof of concept, possibly just to provide an |
| | 336 | initial backing for operations which libswscale does not yet support (e.g. |
| | 337 | colorspace conversions, GPU frame support). |
| | 338 | |
| | 339 | * **Deliverables**. Series merged to git master introducing new API and backing |
| | 340 | implementation, 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, |
| | 345 | and extend them by adding coverage for more paths. In particular, add |
| | 346 | checkasm support for existing assembly primitives. Fix any issues that are |
| | 347 | uncovered by the additional tests. |
| | 348 | |
| | 349 | * **Deliverables**. Patch series merged to git master, closing existing |
| | 350 | issues (e.g. #10824), adding testing for at least half of assembly routines, |
| | 351 | and 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 |
| | 356 | achievable, libswscale should first be slimmed down to the essentials of |
| | 357 | what's needed for reasonably modern platforms. Older code, assembly routines |
| | 358 | for rarely used platforms, legacy speed hacks like runtime-generated MMX code |
| | 359 | etc. should be identified, analyzed to figure out what actual benefit they |
| | 360 | provide, and proposed for removal. |
| | 361 | |
| | 362 | * **Deliverables**. A list of proposed removals, plus justification (e.g. in |
| | 363 | the form of benchmarks or platform statistics) is posted to the mailing list. |
| | 364 | All proposals are either accepted by the community (and merged), or rejected |
| | 365 | (and discarded). |