edde746
94dbae0af9
fix(playback): prevent spurious seek jumps
...
close #946
2026-05-05 09:52:19 +02:00
edde746
955bc9548c
refactor: adopt shared mixins, helpers, and sliver widgets
2026-05-05 03:06:56 +02:00
edde746
ed4be7b96d
refactor: strip obvious comments
2026-05-04 22:40:18 +02:00
edde746
aa3c83bad1
fix(jellyfin): handle external transcode subtitles
2026-05-03 10:12:11 +02:00
edde746
036d99f11f
perf(android): optimize DV conversion hot path
...
Remove avoidable per-RPU allocations and copies during DV fallback conversion, and add debug controls to force conversion modes while profiling playback.
2026-05-01 17:50:59 +02:00
edde746
9bd5732f2b
chore: clean up redundant comments
2026-05-01 05:02:26 +02:00
edde746
c5867861eb
fix(playback): coalesce concurrent player init to fix MPV hang
2026-04-28 04:16:02 +02:00
edde746
52b70a0080
perf(mediaquery): use scoped accessors (sizeOf, paddingOf, etc.)
2026-04-25 12:30:53 +02:00
edde746
feba5b6f74
lint: enforce unawaited_futures, prefer_final_locals, etc.
2026-04-25 12:27:28 +02:00
edde746
d0a93d57dd
refactor: codebase review cleanup
2026-04-25 03:16:11 +02:00
edde746
3a69e49ab8
perf: parallelize playback startup
2026-04-24 23:20:31 +02:00
edde746
839465b7f2
feat(exoplayer): box-fit modes (letterbox/cover/stretch)
2026-04-21 18:17:25 +02:00
edde746
ee020d81bd
refactor: trakt/download hardening and cleanup sweep
2026-04-21 13:57:03 +02:00
edde746
5937e5c721
refactor: extract shared mixins and helpers to dedupe
2026-04-20 21:25:50 +02:00
edde746
1fd415ae31
feat(android): display switch delay
...
close #894
2026-04-20 17:34:54 +02:00
edde746
3da51f9d64
chore: pre-commit ci hook, dart format
2026-04-18 12:40:35 +02:00
edde746
91057c12a4
feat: bold/italic subtitle toggles
...
close #883
2026-04-17 15:03:23 +02:00
edde746
1e62c6c756
feat: bandwidth limit modal on stream 500
2026-04-17 13:12:07 +02:00
edde746
8b40e0993f
fix: normalize EOF playback state
...
close #828
2026-04-09 05:55:03 +02:00
edde746
ad8faab9ea
fix: android video surface lifecycle management
...
close #771
2026-03-29 18:07:50 +02:00
edde746
48e57fd375
fix: match content frame rate
...
close #736
2026-03-22 08:12:16 +01:00
edde746
d355e07e10
refactor: switch to libmpv-android fork, fix ANR and track selection
2026-03-21 08:53:08 +01:00
edde746
2d37d37596
refactor: extract TrackManager, fix subtitle bugs
...
- Extract track lifecycle logic from VideoPlayerScreen (3248→2928 lines) into TrackManager
- Parse isDefault/isForced for subtitle tracks in parseTrackList
- Emit forced flag from ExoPlayer's emitTrackList
- Fix detectSubtitleMimeType failing on URLs with query params
- Add missing external_ ID prefix in ExoPlayer addSubtitleTrack
- Replace polling loop with stream in selectAndApplyTracks
- Handle play() failure in resumeAfterSubtitleLoad
- Handle addExternalSubtitles failure in onBackendSwitched
2026-03-20 03:32:32 +01:00
edde746
0100b2a2ea
fix: preserve start position and subtitles in ExoPlayer→MPV fallback
2026-03-15 11:32:25 +01:00
edde746
23a100afdc
feat: auto-reconnect VOD playback after network loss
2026-03-10 18:47:31 +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
c1e2bc36ea
refactor: share Apple MPV core and media helpers
2026-03-06 10:16:33 +01:00
edde746
551bd83ffe
fix: player disposed race condition
2026-03-04 14:37:51 +01:00
edde746
13b5d7bae8
feat: secondary subtitle tracks
...
close #625
2026-03-04 09:35:36 +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
1b673743b2
fix: handle int end-file reason from mpv on Windows/Linux
2026-03-03 19:00:32 +01:00
edde746
1c31f0effa
fix: request audio focus before player init guard
2026-03-02 23:12:00 +01:00
edde746
94395feaba
feat: implement sub-visibility toggle
...
Closes #597
2026-03-02 19:07:56 +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
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
602982d426
fix: remove low memory warnings during playback
...
Closes #576
2026-02-27 08:53:38 +01:00
edde746
7472e3a2f7
fix: broken imports
2026-02-26 14:57:37 +01:00
edde746
4588457319
refactor: consolidate files
2026-02-26 13:41:51 +01:00
edde746
e489a97847
fix: throttle demuxer-cache-time updates
2026-02-26 13:12:25 +01:00
edde746
a56ef0e3ca
fix: throttle cache state parsing
2026-02-26 12:28:42 +01:00
edde746
a5fa8a4c99
fix: don't clear buffer state on playback restart
2026-02-26 11:55:45 +01:00
edde746
b193a23524
fix: video stuck on still frame after long pause
...
close #536
2026-02-25 08:17:14 +01:00
edde746
d1d5b808bb
fix: reduce widget tree depth
2026-02-24 02:40:04 +01:00
edde746
2276750704
fix: memory-aware buffer limits
2026-02-24 00:56:09 +01:00
edde746
8f50da4a75
fix: resolve all dart analyze warnings
...
- Migrate RadioListTile to RadioGroup API (Flutter 3.32+)
- Guard BuildContext usage across async gaps
- Use const BorderRadius.all / EdgeInsets.all constructors
- Extract nested ternaries into helpers
- Prefer .first over [0], ??= over if-null assignment
- Prefix unused FocusNode params with _
- Add library directive for dangling doc comments
2026-02-23 13:50:56 +01:00
edde746
26ff55e005
fix(android): auto buffer size to prevent OOM
2026-02-23 05:42:04 +01:00
edde746
0159c18497
feat: discontinuous buffer ranges on timeline
2026-02-21 04:50:10 +01:00
edde746
7c651eb61f
fix: cap ExoPlayer buffer size
2026-02-18 21:17:50 +01:00
edde746
8d5b5d2e0c
fix: guard against post-disposal stream controller access
2026-02-18 09:20:48 +01:00
edde746
2bc2c0a0ec
feat: use FlTextureGL for Linux mpv video rendering
2026-02-17 08:55:29 +01:00