edde746
666b59c293
refactor(native-player): share player helpers
2026-03-11 01:30:11 +01:00
edde746
9aa019fe6f
fix: ANR in detachSurface
2026-03-10 19:07:33 +01:00
edde746
23a100afdc
feat: auto-reconnect VOD playback after network loss
2026-03-10 18:47:31 +01:00
edde746
af2ac2c993
fix: suppress ASS GL thread crash, update ass-media to 0.4.0
2026-03-10 06:41:43 +01:00
edde746
0fc64cdf81
fix: catch seek PlatformException at source, remove coordinator
...
Catch COMMAND_FAILED/NOT_INITIALIZED in PlayerNative.seek() and
PlayerAndroid.seek() directly, preventing unhandled PlatformException
crashes on macOS app resume. Remove the ~200-line
_PendingSeekCoordinator system and revert all callsites to direct
player.seek(clampSeekPosition(...)). Keep seekable property/stream
and media controls gating. Add ExoPlayer seekable emission.
2026-03-09 07:21:36 +01:00
edde746
c62e406749
refactor: gate sentry behind build flag
2026-03-08 18:15:19 +01:00
edde746
7b20543fa1
fix: support non-1x playback speed in audio position bypass
...
Scale raw AudioTrack position by playback speed to convert from real
time to media time. Captures reference points on speed changes for
correct mid-playback transitions.
2026-03-07 16:40:48 +01:00
edde746
d207185130
fix: bypass DefaultAudioSink position clamp for large audio frames
...
Fixes video stutter on files with 120ms Opus audio frames (e.g. Amlogic
S905X4). DefaultAudioSink clamps getCurrentPositionUs to writtenDuration
which lags between bursts, creating a sawtooth pattern that drops video
frames. PositionFixAudioSink bypasses the clamp using the raw AudioTrack
position when the delegate falls behind.
2026-03-07 16:27:29 +01:00
edde746
1318c54c0c
feat: improve performance overlay layout and add decoder details
2026-03-06 19:25:41 +01:00
edde746
43f4736936
fix: reopen ExoPlayer when tunneling mode changes
2026-03-06 13:49:03 +01:00
edde746
a4008d3d6b
fix: move mpv operations off UI thread
2026-03-05 16:55:44 +01:00
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
33d5760930
fix: uncommend play store release
2026-03-03 19:00:32 +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
1d739c74ec
fix: use universal APK for Amazon Appstore
...
Amazon Appstore doesn't auto-target by ABI like Google Play,
so split APKs could serve the wrong architecture to devices.
2026-03-01 03:47:46 +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
4cebff4367
move debug output
2026-02-27 21:19: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
4588457319
refactor: consolidate files
2026-02-26 13:41:51 +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