edde746
268f293704
refactor: deduplicate Dolby Vision conversion code
...
- Extract shared processNal() for NAL classification/conversion logic
- Share DoviExtractorOutputWrapper between MKV and MP4 paths
- Deduplicate DV profile codec queries via deviceSupportsDvProfile()
- Collapse repeated doviTrackOutput access chain in stats
2026-03-05 12:02:33 +01:00
edde746
317d5dbdd9
feat: DV Profile 7→8.1 RPU conversion via libdovi
...
Convert Dolby Vision Profile 7 RPU NALUs to Profile 8.1 using libdovi
native bridge, preserving dynamic tone mapping on devices with DV8
decoders. Falls back to HEVC stripping when no DV8 decoder is present.
- Add JNI bridge (dovi_bridge.cpp) wrapping libdovi's RPU converter
- Download prebuilt libdovi from edde746/libdovi-builds releases
- DoviConvertingTrackOutput: DV81 mode converts RPUs, HEVC_STRIP strips
- Retry logic: if native DV7 decoding fails, auto-retry with conversion
- Performance overlay shows active DV conversion mode
2026-03-05 11:11:57 +01:00
edde746
4121d568c8
fix: sanitize mpv event channel strings for valid UTF-8
2026-03-04 14:59:11 +01:00
edde746
5f4e4bfdd3
fix: ExoPlayer fallback for unsupported DV formats
...
- Detect decoder hangs via AnalyticsListener (onVideoDecoderInitialized
→ onRenderedFirstFrame gap, confirmed by DecoderCounters)
- Detect deselected video tracks and trigger immediate MPV fallback
- Use reinhard tone-mapping on GPUs without compute shaders
2026-03-04 13:18:40 +01:00
edde746
73eeac35a8
fix: disable async codec queueing
2026-03-04 07:53:13 +01:00
edde746
18abcef8a2
fix: offload large UTF-8 decoding to background isolate
...
Prevents ANR when Dio's responseDecoder synchronously decodes large API
responses on the main thread. Responses >50KB use compute(). Also caches
MediaCodecList query results in ExoPlayerCore companion object.
2026-03-04 07:42:26 +01:00
edde746
85800abf9f
fix: disable tunneling for video codecs without tunneling support
2026-03-04 07:27:02 +01:00
edde746
96f7bd431c
fix: ExoPlayer logs never reaching Dart log output
...
setLogLevel silently no-oped because initialized was false at call time.
emitLog gated all levels behind debugLoggingEnabled which was never set.
2026-03-03 23:23:06 +01:00
edde746
229d6b24e1
feat: crash log reporting
2026-03-02 07:29:21 +01:00
edde746
9dc0654225
fix(android): prevent dispatchWindowVisibilityChanged NPE during disposal
2026-03-02 06:10:00 +01:00
edde746
36277076bd
fix(android): cap demuxer buffers + sync mpv dispose
2026-03-02 02:30:48 +01:00
edde746
6bee1a6c38
fix(android): add opensles audio fallback
2026-03-02 02:05:24 +01:00
edde746
138c8f9fd8
feat: auto picture-in-picture
...
close #527
2026-03-01 10:52:31 +01:00
edde746
3a5cab956d
refactor: extract shared Android utilities from player cores
2026-03-01 10:40:59 +01:00
edde746
a62a01b9c3
feat: bridge ExoPlayer logs to Dart + device info in logs screen
...
ExoPlayerCore emitLog() forwards native diagnostics (init, tracks,
tunneling, watchdog, errors, framerate, audio focus) to Dart via the
existing log-message event when debug logging is enabled. URIs are
redacted before forwarding. setLogLevel method channel wires into the
existing debug toggle in video_player_screen.
Logs screen now shows a device info header (app version, OS, model,
TV mode) and includes it in copy/upload output.
2026-03-01 04:59:35 +01:00
edde746
ea9e1a3dc6
fix: bypass IME stage for dpad events
2026-03-01 04:59:35 +01:00
edde746
54ceee18a6
fix: remove alpha 0.999 hack from mpv SurfaceView
...
No longer needed since Flutter uses RenderMode.texture (TextureView),
which composites above SurfaceView naturally without overlay conflicts.
2026-03-01 04:02:56 +01:00
edde746
d0f2122944
feat: add tunneled playback setting + frame watchdog for HDR black screen
...
Adds a user-facing toggle for MediaCodec tunneling (Android/ExoPlayer)
and a rendered-frame watchdog that auto-falls back to MPV when ExoPlayer
produces 0 video frames after 8 seconds of audio playback.
2026-03-01 04:02:36 +01:00
edde746
bbfe7cf783
fix: use explicit mediacodec hwdec chain on android
2026-03-01 02:46:50 +01:00
edde746
2405cd179b
fix: use forked libass-android with font buffering fix
2026-02-28 19:00:55 +01:00
edde746
fa9c5afeb8
fix: force FFmpeg for FLAC audio decoding
2026-02-28 15:24:31 +01:00
edde746
9f81671603
fix: suppress repeated android log spam from MPV surface and stats polling
...
- Deduplicate android-surface-size updates with lastSurfaceSize cache
- Short-circuit ensureFlutterOverlayOnTop after initial application
- Remove deprecated cache-used property query
- Skip unavailable MPV properties on Android (display-fps, HDR metadata)
- Gate video-dependent stats queries behind hasVideo check
2026-02-28 15:00:29 +01:00
edde746
15e1f0b9e2
fix: use mediacodec on android
...
close #593
2026-02-28 12:35:43 +01:00
edde746
014f9456f6
fix: defer view removal to avoid AOSP dispatchWindowVisibilityChanged NPE
2026-02-28 10:23:28 +01:00
edde746
1bb4adfcf1
fix: don't pause playback on duckable audio focus loss
...
close #592
2026-02-28 09:22:13 +01:00
edde746
078f6b29d5
fix: recalculate video surface size on orientation change
...
close #587
2026-02-28 06:16:52 +01:00
edde746
3103cb5ee1
fix: harden offline playback and exoplayer fallback
2026-02-27 21:02:30 +01:00
edde746
602982d426
fix: remove low memory warnings during playback
...
Closes #576
2026-02-27 08:53:38 +01:00
edde746
5cf5b2f0a0
fix: mpv destroy/create ANR
2026-02-26 12:56:02 +01:00
edde746
8eda892b68
feat: themed splash screen with status messages
2026-02-26 11:55:45 +01:00
edde746
e25fb4c10f
fix: ExoPlayer resume position lost on tunneling change
2026-02-26 04:19:17 +01:00
edde746
3418241c04
fix: disable tunneling for FFmpeg-only audio codecs
2026-02-26 02:14:22 +01:00
edde746
0f4920cc18
fix: reduce ExoPlayer buffer limits
...
close #546
2026-02-25 23:43:43 +01:00
edde746
fc5fcbb0db
fix: google tv virtual remote dpad
2026-02-25 16:13:53 +01:00
edde746
2276750704
fix: memory-aware buffer limits
2026-02-24 00:56:09 +01:00
edde746
26ff55e005
fix(android): auto buffer size to prevent OOM
2026-02-23 05:42:04 +01:00
edde746
6916b386eb
fix(android): SurfaceControl crash on player dispose
2026-02-23 05:28:10 +01:00
edde746
637a3e9e37
chore: bump media3 1.5.1 → 1.9.2, drop unused media3-session
2026-02-20 03:32:38 +01:00
edde746
60ef83bd3a
fix: add missing setLogLevel handler to Android MPV plugin
2026-02-19 11:33:12 +01:00
edde746
7c651eb61f
fix: cap ExoPlayer buffer size
2026-02-18 21:17:50 +01:00
edde746
3bba440e18
fix: enable largeHeap for ExoPlayer OOM
2026-02-18 19:13:40 +01:00
edde746
aae1b1c45c
refactor: clean up release script and fastlane configs
2026-02-18 09:15:20 +01:00
edde746
a61fca0588
perf: compact [propId, value] wire format for property events
2026-02-16 15:40:52 +01:00
edde746
b62a3501d2
fix: SurfaceView ANR on Android
2026-02-15 18:10:46 +01:00
edde746
9184bb8d40
Merge branch 'live-tv'
...
# Conflicts:
# lib/i18n/strings.g.dart
# lib/i18n/strings_de.g.dart
# lib/i18n/strings_en.g.dart
# lib/i18n/strings_es.g.dart
# lib/i18n/strings_fr.g.dart
# lib/i18n/strings_it.g.dart
# lib/i18n/strings_ko.g.dart
# lib/i18n/strings_nl.g.dart
# lib/i18n/strings_sv.g.dart
# lib/i18n/strings_zh.g.dart
# lib/screens/main_screen.dart
# lib/services/plex_client.dart
# lib/widgets/video_controls/desktop_video_controls.dart
2026-02-14 22:29:16 +01:00
edde746
0d72c6c1a4
fix: external player on Android 11+
2026-02-14 20:19:27 +01:00
edde746
86a989a2f2
fix: open downloaded videos in external player on Android
2026-02-14 18:26:05 +01:00
edde746
d986f0d2ea
feat: migrate downloads to background_downloader
...
close #454
2026-02-14 18:02:49 +01:00
edde746
b3ff48feca
fix(tv): live playback and timeline keepalive
...
Disable MKV Cues seeking for live streams, fix timeline params.
2026-02-14 03:33:58 +01:00
edde746
0791764de9
feat: lower minSdk to 25
2026-02-13 14:00:24 +01:00