apps/fplay: major player updates, performance, usability and UI improvements, bugfixes #560

Merged
Burer merged 7 commits from fplay-next into main 2026-07-19 06:32:02 +00:00
Owner

Very briefly:

  • feat: add playback timer and MP3 album art support
  • feat: async file reading with adaptive cache for smoother playback
  • feat: smart frame skipping (preserves sync, prevents lags on slow drives)
  • feat: add OSD volume and Tab info overlay
  • feat: mouse wheel volume control, and basic hotkeys
  • feat: support >2GB files, automatic HW acceleration check
  • fix: crash/memory corruption on videos without audio or with unknown duration
  • fix: freeze issues and audio-video desync after seeking
  • fix: correct playback speed for silent videos and playback of files with corrupted timestamps
  • fix: auto-hide volume slider in narrow windows and restore window controls layout
Very briefly: - feat: add playback timer and MP3 album art support - feat: async file reading with adaptive cache for smoother playback - feat: smart frame skipping (preserves sync, prevents lags on slow drives) - feat: add OSD volume and Tab info overlay - feat: mouse wheel volume control, and basic hotkeys - feat: support >2GB files, automatic HW acceleration check - fix: crash/memory corruption on videos without audio or with unknown duration - fix: freeze issues and audio-video desync after seeking - fix: correct playback speed for silent videos and playback of files with corrupted timestamps - fix: auto-hide volume slider in narrow windows and restore window controls layout
Author
Owner

Новые возможности

  • Счётчик времени — внизу окна отображаются прошедшее и общее время воспроизведения.
  • Чтение файла вынесено в отдельный поток — звук больше не заикается из-за медленного диска или тормозящего видео. Если буфер почти пуст (например, при чтении с медленной флешки), данные загружаются на полной скорости.
  • Адаптивный кэш — его размер автоматически подстраивается под объём свободной памяти, благодаря чему большие файлы воспроизводятся плавнее.
  • Отображение обложек MP3.
  • При изменении громкости поверх видео отображается оверлей «VOL: XX%».
  • Информация о видео по клавише Tab:
    • первое нажатие — FPS, кодеки, битрейт и разрешение;
    • второе — только FPS;
    • третье — скрыть информацию.
  • Добавлена поддержка файлов размером более 2 ГБ.
  • Автоматический выбор способа вывода изображения — плеер сам определяет, доступно ли аппаратное ускорение.
  • Умный пропуск кадров — если процессор не успевает декодировать видео, плеер пропускает часть кадров, не позволяя изображению отставать от звука. Если причиной является медленное чтение с диска, кадры не отбрасываются — отображается всё, что успело загрузиться.
  • В диалог открытия файлов добавлены форматы MP3 и VOB.

Улучшено управление

  • Изменение громкости колесом мыши.
  • Новые горячие клавиши:
    • ← / → — перемотка на 5 секунд;
    • ↑ / ↓ — изменение громкости;
    • M — отключение звука;
    • O — открыть другой файл;
    • 1 / 2 / 3 — масштаб окна: 50%, 100% и 200% от размера видео.
  • Полноэкранный режим теперь можно включать средней кнопкой мыши

Исправления

  • Исправлено падение при воспроизведении видео без звуковой дорожки.
  • Устранены зависания при перемотке — исправлены три независимые причины, включая ошибку в звуковой подсистеме.
  • Исправлен рассинхрон после перемотки — теперь звук и изображение синхронизируются за доли секунды.
  • Уменьшены просадки FPS при воспроизведении с медленных накопителей — плеер больше не отбрасывает кадры, если узким местом является чтение, а не декодирование.
  • Исправлена скорость воспроизведения видео без звуковой дорожки — раньше такие файлы проигрывались настолько быстро, насколько позволял процессор.
  • Исправлено падение и повреждение памяти при открытии файлов с неизвестной длительностью. Для таких файлов больше не отображаются отрицательное время и заполненный прогресс-бар, а перемотка автоматически отключается.
  • Исправлена потеря кадров на файлах с некорректными таймстампами, которая могла приводить к бесконечному стоп-кадру.
  • Панель управления и заголовок окна теперь корректно появляются после выхода из полноэкранного режима.
  • Кнопка разворота окна возвращена на привычное место в заголовке.
  • В узких окнах регулятор громкости автоматически скрывается, не перекрывая остальные кнопки.
  • Больше не нужен fplay_run для открытия Fplay с файлом в параметре
## Новые возможности - Счётчик времени — внизу окна отображаются прошедшее и общее время воспроизведения. - Чтение файла вынесено в отдельный поток — звук больше не заикается из-за медленного диска или тормозящего видео. Если буфер почти пуст (например, при чтении с медленной флешки), данные загружаются на полной скорости. - Адаптивный кэш — его размер автоматически подстраивается под объём свободной памяти, благодаря чему большие файлы воспроизводятся плавнее. - Отображение обложек MP3. - При изменении громкости поверх видео отображается оверлей «VOL: XX%». - Информация о видео по клавише Tab: - первое нажатие — FPS, кодеки, битрейт и разрешение; - второе — только FPS; - третье — скрыть информацию. - Добавлена поддержка файлов размером более 2 ГБ. - Автоматический выбор способа вывода изображения — плеер сам определяет, доступно ли аппаратное ускорение. - Умный пропуск кадров — если процессор не успевает декодировать видео, плеер пропускает часть кадров, не позволяя изображению отставать от звука. Если причиной является медленное чтение с диска, кадры не отбрасываются — отображается всё, что успело загрузиться. - В диалог открытия файлов добавлены форматы MP3 и VOB. ## Улучшено управление - Изменение громкости колесом мыши. - Новые горячие клавиши: - ← / → — перемотка на 5 секунд; - ↑ / ↓ — изменение громкости; - M — отключение звука; - O — открыть другой файл; - 1 / 2 / 3 — масштаб окна: 50%, 100% и 200% от размера видео. - Полноэкранный режим теперь можно включать средней кнопкой мыши ## Исправления - Исправлено падение при воспроизведении видео без звуковой дорожки. - Устранены зависания при перемотке — исправлены три независимые причины, включая ошибку в звуковой подсистеме. - Исправлен рассинхрон после перемотки — теперь звук и изображение синхронизируются за доли секунды. - Уменьшены просадки FPS при воспроизведении с медленных накопителей — плеер больше не отбрасывает кадры, если узким местом является чтение, а не декодирование. - Исправлена скорость воспроизведения видео без звуковой дорожки — раньше такие файлы проигрывались настолько быстро, насколько позволял процессор. - Исправлено падение и повреждение памяти при открытии файлов с неизвестной длительностью. Для таких файлов больше не отображаются отрицательное время и заполненный прогресс-бар, а перемотка автоматически отключается. - Исправлена потеря кадров на файлах с некорректными таймстампами, которая могла приводить к бесконечному стоп-кадру. - Панель управления и заголовок окна теперь корректно появляются после выхода из полноэкранного режима. - Кнопка разворота окна возвращена на привычное место в заголовке. - В узких окнах регулятор громкости автоматически скрывается, не перекрывая остальные кнопки. - Больше не нужен fplay_run для открытия Fplay с файлом в параметре
Leency requested review from Developers 2026-07-09 22:16:24 +00:00
Leency requested review from Owners 2026-07-09 22:16:25 +00:00
Leency closed this pull request 2026-07-12 17:32:13 +00:00
Leency reopened this pull request 2026-07-16 20:15:21 +00:00
Burer changed title from Fplay: major player updates, performance, usability and UI improvements, bugfixes to apps/fplay: major player updates, performance, usability and UI improvements, bugfixes 2026-07-18 16:13:09 +00:00
Burer approved these changes 2026-07-18 16:13:26 +00:00
Doczom approved these changes 2026-07-18 21:49:54 +00:00
Doczom left a comment
Owner

The changes look logical and I don’t see any obvious issues. No blocking comments from my side.
That said, I assume that the full context and potential impact on related systems are best known to the author and the team, so the final deployment decision and any associated risks remain with them — as per our usual review practice. My approval is a sanity check, not a full-scope guarantee.

The changes look logical and I don’t see any obvious issues. No blocking comments from my side. That said, I assume that the full context and potential impact on related systems are best known to the author and the team, so the final deployment decision and any associated risks remain with them — as per our usual review practice. My approval is a sanity check, not a full-scope guarantee.
Burer added 7 commits 2026-07-19 06:18:49 +00:00
- feat: add playback timer and MP3 album art support
- feat: async file reading with adaptive cache for smoother playback
- feat: smart frame skipping (preserves sync, prevents lags on slow drives)
- feat: add OSD volume and Tab info overlay
- feat: mouse wheel volume control, and basic hotkeys
- feat: support >2GB files, automatic HW acceleration check
- fix: crash/memory corruption on videos without audio or with unknown duration
- fix: freeze issues and audio-video desync after seeking
- fix: correct playback speed for silent videos and playback of files with corrupted timestamps
- fix: auto-hide volume slider in narrow windows and restore window controls layout
pxgl.c (pixlib-gl.dll):
- update_fb() declared a local "EGLImageKHR screen" that was never
  assigned, then overwrote px->screen with it right after the real
  screen EGLImage had been created and validated. px->screen ended up
  as stack garbage, so any later use or destruction of the screen
  image was undefined. Drop the dead local and the bogus assignment.

pixlib3.c:
- pxInit() used to be one-shot: once any driver was set, every later
  call returned early, so pxInit(0) could not switch to the software
  path after the GL driver had been loaded. Rework the init state:
  * pxInit(0) now always selects the software driver;
  * a successfully initialized HW driver is cached and reused;
  * a failed HW probe is remembered and not retried (no repeated
    slow service/dll probing);
  * pxFini() finalizes the cached HW driver and resets the state so
    a full re-init is possible.
  This lets a client probe the hardware path at runtime and fall back
  to software rendering (used by FPlay's present self-test: on setups
  where GL initializes but never reaches the screen, e.g. Intel GMA
  3150 with the KMS driver, the player now detects it and switches to
  the software blitter instead of showing a black window).

data/common/lib/pixlib-gl.dll: rebuilt with the fix.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sync with programs/develop/libraries/menuetlibc/include/SDL/SDL_keysym.h,
which already has this entry. Fixes SDLK_LAST being one short, which
undersizes SDL_KeyState[]/keynames[] in SDL_keyboard.c.
fplay: put the built player where the image takes it from
Test PR / Build (en_US) (pull_request) Successful in 4m13s
Test PR / Build (es_ES) (pull_request) Successful in 4m19s
Test PR / Build (ru_RU) (pull_request) Successful in 2m22s
26be5afb58
The new binary was added next to the sources, at contrib/media/fplay/fplay,
which nothing reads. data/Tupfile.lua copies data/common/media/fplay onto the
image, and that file was left untouched, so none of the player work in this
branch would have reached users. Move it there, as was already done for
pixlib-gl.dll.
Burer force-pushed fplay-next from abbae96e8a to 26be5afb58 2026-07-19 06:18:49 +00:00 Compare
Burer merged commit 8c48f1d18b into main 2026-07-19 06:32:02 +00:00
Burer deleted branch fplay-next 2026-07-19 06:32:03 +00:00
Sign in to join this conversation.
No Reviewers
KolibriOS/Developers
No labels
3 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: KolibriOS/kolibrios#560