Work through the lesson sequence to build enough assembly knowledge to read and understand FFmpeg's hand-written SIMD optimizations for video encoding.
Use the lessons as a reference to learn how modern CPUs handle scalar versus vector operations before attempting to write performance-critical multimedia code.
Contribute assembly-level optimizations to the FFmpeg project after completing the course and passing the paired assignments.
Requires solid C knowledge including pointers, plus high-school-level vector math, assignments were not yet uploaded at time of writing.
This repository contains a set of lessons on assembly language programming, produced by the FFmpeg project. Assembly language is the lowest-level human-readable form of instructions that a computer processor actually executes. Most programmers work in higher-level languages like Python or JavaScript and never touch it, but understanding assembly reveals what is happening inside the machine at a fundamental level. The lessons are specifically aimed at the style of assembly used inside FFmpeg, a widely used open-source toolkit for processing audio and video files. The FFmpeg codebase contains a large amount of hand-written assembly to squeeze out maximum speed from modern processors, particularly for video encoding and decoding tasks. These lessons are designed to help people reach the point where they can understand and contribute to that code. The course requires two things before you start: familiarity with the C programming language (especially pointers), and high school level mathematics including the difference between scalar values and vectors. Assignments paired with each lesson exist but had not been uploaded to the repository at the time of writing. The README is brief and the course content lives in the lesson files themselves rather than in this description. A Discord server is available for asking questions. The lessons are also available in French, Spanish, Turkish, and Chinese translations.
← ffmpeg on gitmyhub — every repo by this author, as a profile.
Verify against the repo before relying on details.