mirror of
https://github.com/FluxaMedia/fluxa.git
synced 2026-07-27 12:22:12 +00:00
Embedded MKV font attachments now reach libass reliably. The font scan was disabled for the local torrent proxy, which is where all torrent playback lives, so styled fansub tracks fell back to system fonts. Font sourcing is now layered: a persistent PrefixCaptureBuffer harvests attachments from the bytes ExoPlayer already downloads (the old capture died with each ExtractorInput ExoPlayer recreated per load), and an HTTP scan locates the Attachments element via the SeekHead and fetches it exactly instead of guessing with an 8 MB prefix. The scan waits for the player's own connection to open before touching the proxy, backs off hard between retries, and aborts once fonts exist from any source. Fonts that arrive after renderer creation recreate it and replay buffered events. Truncated attachments are dropped instead of being fed to FreeType half-parsed. Two compositing bugs caused the sheared "fake italic" glyphs: coverage rows are packed 4-byte aligned but ALPHA_8 copyPixelsFromBuffer consumes bitmap rowBytes, so odd-width glyphs skewed one pixel per row; and the glyph cache was keyed by the native ASS_Image bitmap pointer, which libass reuses across frames, serving stale glyphs. Rows are repacked when strides differ and the cache is keyed by content hash. Startup cost is now near zero: renderer creation moved off ExoPlayer's loader thread onto the libass HandlerThread, and XDG_CACHE_HOME points at app storage so fontconfig's /system/fonts scan (~2 s) is cached and subsequent inits take ~80 ms. libass diagnostics stream to logcat via ass_set_message_cb. |
||
|---|---|---|
| .. | ||
| libass | ||