Skip to content

MpvRx v1.5.0-preview.3

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 14 Jul 11:20

1.5.0-preview.3 — Preview Release

Playback Hotfix

  • Audio and video transitions rebuilt: Every item is loaded with file-local video-track selection, preventing audio state from producing a black screen on the next video.
  • Reliable next-item playback: Runtime navigation now sends an actual mpv loadfile replacement and clears the previous EOF pause state.
  • Preference-safe EOF handling: Autoplay, Repeat One, Repeat All, Shuffle, playlist mode, and close-at-end now behave consistently, including very short audio files.
  • Safe seeking: Audio never enters the native video-thumbnail path, and video thumbnails are generated only on demand while scrubbing—not automatically during file load.
  • Separated render surfaces: The blob surface is mounted only for media independently identified as audio, preventing it from covering video during track-list transitions.
  • True beat response: With audio-capture permission, real FFT data exclusively drives the blob; brightness and bloom are reduced while bass onsets pulse more clearly.

🔊 Audio Blob Visualizer

  • OpenGL ES 3.0 blob visualizer — when playing audio without cover art, a reactive 3D blob appears behind the player controls. The blob morphs, pulses, and shifts color based on audio energy with a bloom/glow post-process.
  • Touch rotation: Drag the blob to rotate it in 3D.
  • Pinch zoom fixed: The blob now properly shrinks/enlarges when pinching — pinchScaleFromRenderer() was hardcoded to always return 1f, resetting zoom on every new gesture.
  • Smaller default size: Camera distance increased so the blob fits cleanly within screen bounds instead of nearly filling the height.
  • Audio Preferences toggle: New "Audio blob visualizer" switch in Settings > Audio to enable or disable it.
  • Audio filter setting moved: Audio filter (compressor/equalizer) options now live in Audio Preferences instead of the player's MoreSheet.

🎬 yt-dlp Changes

  • Audio quality preferences: Independent bitrate caps for Auto, 64, 128, 192, and 256 kbps — composed with existing codec, resolution, FPS, HDR, and container selectors.
  • Serialized URL loading: Initial and replacement URL loads now use one cancellable serialized job, preventing overlapping libmpv commands when links are pasted rapidly.
  • Graceful error recovery: Recoverable URL load failures return to the player UI with an error message instead of escaping to the process-wide crash handler.
  • Audio quality removed from MoreSheet: yt-dlp audio quality selector moved from the player's MoreSheet to yt-dlp settings.

📻 Audio Browsing

  • MediaStore + filesystem discovery for common audio formats, neutral media counts, audio MIME mapping, and Android 13 READ_MEDIA_AUDIO permission handling.
  • Audio cards show metadata titles, embedded cover artwork when available (via audio-display=embedded-first), and a music-note fallback icon.
  • Portrait-only playback — audio files force sensor-portrait orientation and prevent the rotation action from switching back to landscape.
  • Sibling playlist includes audio — when "Include audio" is on, the next/previous track list includes audio files from the same folder.
  • Audio icon placeholder fix: Exported icon now displays correctly for audio files without cover art.
  • Audio pitch correction fix: Pitch correction no longer persists when switching to a new video — resets to default per-file.
  • Audio autoplay race condition fixed: Eliminated a race condition that could cause audio files to fail starting playback.

🌐 Network & External Playback

  • WebDAV PROPFIND fix: Connection checks now use a depth-zero PROPFIND request instead of Sardine's HEAD-based exists() call, making it work with servers like FileBrowser Quantum that reject HEAD on DAV collections.
  • WebDAV trailing slash: Collection URLs consistently keep a trailing slash during validation and browsing.
  • External-player discovery: Added a MIME-only intent filter so external-player pickers can find mpvRx before attaching the final video or audio URI.
  • More protocol support: Added gopher://, sctp://, and data:// to network stream detection and intent filters.
  • Stream compatibility improved: Better handling of edge-case media streams and improved browsing reliability.

🌲 Tree View Navigation

  • Configurable path compression: New Off, 1–5, and Unlimited choices for single-child folder flattening. Applied independently per navigation step, preserving predictable physical paths. Tree View refreshes instantly when the depth changes.

🎨 Icon Consistency

  • Converted all three painterResource(R.drawable.ic_material_symbols_check) usages to Icons.Default.Check through the app's AppIcon / Icon system.
  • SectionHeader.leadingIcon and CompactExpressiveIconButton.imageVector now accept AppIcon instead of raw ImageVector, keeping everything on the unified icon pipeline.

🔊 Audio Playback Runtime Fixes

  • local_media_path extra: Internal launches now pass the resolved filesystem path alongside the content URI, giving mpv a reliable fallback when content:// URIs fail.
  • Serialized load dispatcher: Added a dedicated Dispatchers.Default.limitedParallelism(1) dispatcher for media loading — prevents race conditions when queuing multiple load commands.
  • vid=auto before playback: Non-M3U file loads explicitly reset the video track to auto before loading, avoiding "no video track" state from previous audio-only plays.
  • audio-display=embedded-first: Enabled MPV's embedded cover art rendering for audio files.
  • Orientation on audio launch: setOrientation() checks isKnownAudioLaunch() immediately, before the track-list event settles — fixes the black-screen + landscape glitch on audio start.
  • Subtitle "Off" option: Added an explicit "Off" choice in the player subtitle sheet so users can disable subtitles without cycling through all tracks.

🗑️ Folder Deletion Behavior

  • Media-only deletion (default): Deleting a folder now only removes audio/video files — other files (images, logs, documents) are left untouched.
  • "Delete folder + all contents" toggle: New option in Appearance Settings > File Browser to switch back to full recursive deletion when needed.
  • Album View cleanup fix: Fixed an issue where the last video file in a folder was deleted but the empty folder remained.

📱 Tablet & Display

  • Dynamic refresh rate: The player can now dynamically adjust the display refresh rate to match the video frame rate for smoother playback.
  • Dual-pane navigation fix: Resolved a state leak that could cause crashes when navigating in tablet dual-pane mode.
  • Dual-pane settings button hidden: The redundant settings button is no longer shown in dual-pane mode on tablets.
  • Folder card height fix: Manual grid column counts now align properly with folder card heights in dual-pane layout.

🔍 Settings Search

  • Search history: Recently searched terms are saved and displayed for quick re-selection.
  • Search suggestions: The search field now shows contextual suggestions as you type.
  • Reflection-based fallback: Settings search can dynamically discover settings via reflection when static indices are incomplete.

Checksums

Variant SHA-256
arm64-v8a 83ed6765f26c09f496a8b44f2d079abe4e23fd0d1390a1b3d2e29c14d43da559
armeabi-v7a e82c44e48b13adb33b059ea45459668e5ee105ea76d395eb1dd6ce5aa2869815
Universal 67e5f1115d7f36dc14f44492f88038a52519341efe11e05737a9aa0e7851d823
x86 b42268a2553158dfd6bfc771a02420963fac13199ecc76396b95d93a0209a7e1
x86_64 a669725cd34d17b53a65745844415f58e1ba8db611261a3f3a561c7c0187d3d4

What's Changed

  • feat(settings): implement dynamic, localized reflection-based fallback for settings search by @Arnab11 in #194
  • fix(ui): resolve tablet dual-pane navigation state leak and hide redundant settings button by @Arnab11 in #195
  • fix(browser): align manual grid default column count and folder heights in dual pane mode by @Arnab11 in #197
  • i18n: Arabic localization by @AhmedRX20 in #203
  • 1.5.0-preview.3 — Audio browsing, WebDAV fix, yt-dlp audio quality, tree flatten, icon cleanup by @Riteshp2001 in #212

New Contributors

Full Changelog: v1.5.0-preview.2...v1.5.0-preview.3