Skip to content

Commit 6388ae7

Browse files
committed
perf(preview): decode 8-bit H.264 in software on macOS
1 parent fed3a45 commit 6388ae7

1 file changed

Lines changed: 14 additions & 6 deletions

File tree

‎crates/compositor/src/pipeline_macos.rs‎

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,15 @@ impl Drop for PacketGuard {
9595
const SEEK_FORWARD_MAX_SEC: f64 = 0.5;
9696

9797
/// Pourquoi ce décodeur est ouvert. La preview et l'export ne demandent pas la même chose
98-
/// au décodeur, et sur macOS ils ne prennent donc pas le même backend.
98+
/// au décodeur. Sur macOS ils prennent aujourd'hui le même backend (logiciel pour le H.264
99+
/// 8 bits, cf. `open_with`), mais l'intention reste journalisée pour les rapports de bug.
99100
///
100101
/// La preview lit au temps réel : il lui suffit de tenir la cadence, et elle scrube, donc la
101102
/// latence d'un seek pèse plus que le débit. Une marche d'export déroule aussi vite que la
102103
/// machine le permet — c'est du débit pur, et l'arbitrage n'est pas le même.
103104
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
104105
pub enum DecodeIntent {
105-
/// Lecture temps réel (`live.rs`). Arbitrage historique, inchangé.
106+
/// Lecture temps réel (`live.rs`).
106107
Preview,
107108
/// Marche d'export (`timeline_walk`, `gif_export`).
108109
Export,
@@ -286,10 +287,17 @@ impl Decoder {
286287
//
287288
// RESTE NON MESURÉ : 10 bits. Il garde VideoToolbox, la condition l'écarte
288289
// par construction (`format == YUV420P`), et le chemin logiciel le tronquerait
289-
// en 8 bits (`CpuFrames` ne rend que du NV12). La preview aussi n'a pas été
290-
// mesurée, et la changer sans la mesurer serait exactement l'erreur que ce
291-
// commit corrige.
292-
_ if intent == DecodeIntent::Export && is_h264_8bit => false,
290+
// en 8 bits (`CpuFrames` ne rend que du NV12).
291+
//
292+
// LA PREVIEW AUSSI, mesurée depuis (#585). Mac mini M1, aperçu 4K60 H.264 :
293+
//
294+
// VideoToolbox 50 frames manquées / 1200 seek 254 ms
295+
// logiciel 1 frame manquée / 1200 seek 152 ms
296+
//
297+
// À 120 fps en 4K, VideoToolbox décroche. Le prix : 0,3 à 0,65 cœur et 3 à 5x
298+
// plus de mémoire. Batterie non mesurée. Le H.264 8 bits passe donc en
299+
// logiciel quelle que soit l'intention ; HEVC et 10 bits restent sur VT.
300+
_ if is_h264_8bit => false,
293301
_ => true,
294302
};
295303
let r = if want_hw {

0 commit comments

Comments
 (0)