Skip to content

Add Fedora 43 Linux port artifacts and AppImage build flow#13

Open
NickPittas wants to merge 31 commits into
mainfrom
linux-port-fedora43-merged
Open

Add Fedora 43 Linux port artifacts and AppImage build flow#13
NickPittas wants to merge 31 commits into
mainfrom
linux-port-fedora43-merged

Conversation

@NickPittas
Copy link
Copy Markdown
Owner

Summary

  • Adds Fedora 43 Linux port planning, workflow, and verification artifacts for the current Wayland/AppImage effort.
  • Updates .gitignore for Linux build outputs and AppImage packaging artifacts.
  • Checks in Linux build/package outputs and checkpoints from the Fedora 43 validation work, including playback and UI fixes.
  • Bumps the project version to 1.8.6.

Testing

  • Not run
  • Commit history includes prior Linux playback, annotation, file operation, and converter validation work
  • Packaging/build artifacts were generated as part of the Fedora 43 port workflow

- capture completed annotation serialization work
- identify remaining overlay and sequence state gaps
- keep video annotations on a transparent overlay above tlRender
- reset sequence annotation session state and preserve moved item serialization
- add focused QtTest coverage for moved annotation serialization
- record verification results and manual Wayland follow-up in summary
- mark summary self-check as passed
- preserve task commit ledger for orchestrator handoff
Fix MOV reverse playback:
- Fix pts comparison in decodeFrameForTimestamp (pts <= targetTs instead of pts < targetTs)
- Fix stepBackward to pass preferPreviousFrame=true
- Fix reverse playback timer rescheduling in onPlaybackTick
- Fix scaled image cache clearing in presentBufferedFrame
- Fix Wayland raster presentation path for MOV files

Fix MP4 reverse playback:
- Add manual reverse playback via m_manualReversePlaybackActive flag
- Fix deferred playback path to use manual reverse instead of native reverse
- Start reverse playback immediately without deferring when rate < 0
- Add stepBackwardInternal() to avoid stopping manual reverse during playback
- Remove premature stop check in onUpdateTimer

Fix autoplay regression:
- Reset playback rate to 1.0 in PreviewOverlay::showVideo

Test improvements:
- Add MOV matrix test across 5 real files
- Use frame-number assertions instead of fingerprints where appropriate
- Add stabilization waits for flaky MP4 reverse test
The backward frame buffer oscillated between two frames when stepping
backward after a forward seek. Root cause: presentBufferedFrame()
unconditionally pushed every presented frame into the backward buffer,
including seek results. This caused seek-result frames to pollute the
backward history and create an oscillation loop.

Fix: add pushToBackwardBuffer parameter to presentBufferedFrame().
- stepBackward() passes false when presenting popped frames (already consumed from buffer)
- seekToTimestampInternal() passes false for seek results (not forward playback history)

Known remaining issues:
- MOV reverse/step-back after forward seek still needs verification
- Tests use frame-number assertions but may need multi-frame validation
Replace the synchronous blocking seek in onPlaybackTick() reverse mode with
an async two-phase approach:
- After presenting each backward frame, immediately post the next reverse seek
  to the decode thread (non-blocking) so it runs in parallel with the frame's
  display window rather than after it.
- The next timer tick checks m_seekResultReady without blocking; if the result
  is not yet ready it retries in 1 ms.
- Add postReverseSeek() and postReverseSeekIfNeeded() helpers that post a
  seek request without stopping the playback timer or blocking on the result.
- End-of-stream (beginning of file) during reverse is handled inline with the
  same loop-mode logic as the forward path.

This changes effective per-frame latency from (frame_duration + seek_time) to
max(frame_duration, seek_time), enabling real-time reverse playback for
intra-frame codecs such as ProRes where each seek decodes a single frame.
Move loop mode and playback rate combos from their own hidden row into the
audio controls group on the right. Remove the separate playbackControlsGroup
row entirely to eliminate dead vertical space.

Fix transport centering by using a QGridLayout where the transport widget
spans all columns (true center in full width) while the audio+controls group
sits in the right column without affecting the transport position.
- Include generated dependency files and AppImage contents
- Capture the merged Linux port build outputs and runtime logs
- Remove std::cerr debug spam from tlrender_viewport.cpp updateRasterFrame
- Remove unused #include <iostream> from ffmpeg_mov_player.cpp and tlrender_player.cpp
- Gate debugFramePresented signal behind a comment (no production consumer)
- Remove qDebug spam around playbackControlsGroup in preview_overlay.cpp
- Re-tighten test assertions: verify both frame counter and raster fingerprint changes
- Fix indentation in allMovFilesStepBackwardAndReverse test
- Update .gitignore to ignore *.d dependency files, squashfs-root/, and *.log
- Update TECH.md: Fedora 43 as validated platform, FFmpeg note for Linux MOV playback
- Update CHANGELOG.md with v1.8.6 Linux port entries
- Update ROADMAP.md: mark Phase 8/9 as In Progress with status notes
- Update ARCHITECTURE.md: qualify FFmpeg usage for Linux/Wayland live playback
Remove compiler dependency files (*.d), unpacked AppImage staging
(squashfs-root/), Octto session files (.octto/), and runtime logs
that were accidentally committed in 27066d8. These are now
protected by .gitignore entries added in the previous commit.
The playbackControlsGroup was turned into a zero-height no-op widget
in a previous refactor. Remove it entirely along with all show/hide
call sites and the member declaration from preview_overlay.h.
Add a 256 MiB memory threshold to pushBackwardFrame so that 4K+
content cannot inflate the backward frame buffer beyond a safe bound.
The existing frame-count cap (kPresentedHistoryFrames=64) is kept
and enforced alongside the new memory cap.
native/qt6/src/app.rc is a legacy Windows resource script that is
not referenced by native/qt6/CMakeLists.txt or the build pipeline.
The executable builds without it.
- live_preview_manager.cpp: remove unused ffmpegErrorString helper and
  the guarded libav* includes (no call sites in the file).
- preview_overlay.cpp: remove HAVE_FFMPEG include/comment block that
  described a non-existent FFmpegPlayer member and unused FFmpeg types.
Extend the Asset Info sidebar to show detailed video metadata for
selected movie files, replacing the old "Video file" placeholder.

Changes:
- VideoMetadata struct: add audioChannels, cameraName, cameraModel,
  lens, reelName, scene, take fields.
- probeVideoFile: extract audio channel count (FFmpeg API version-safe),
  and scan container/stream metadata for camera/production tags
  (ProRes/DNxHD/AVCHD common keys).
- MainWindow info panel: add 6 new QLabel widgets (Video Codec,
  Audio, Bitrate, Timecode, Camera, Shot) between Dimensions and
  Created/Modified.
- updateInfoPanel: call probeVideoFile for video extensions and
  populate all new labels; hide them for images/sequences or when
  metadata is unavailable.

Build verified: app and test harness compile and link successfully.
The previous commit only added rich video metadata to the main Asset
Manager's right sidebar (infoPanel). However, the File Manager view
has its own separate info panel (fmInfoPanel) with its own labels and
update function (updateFmInfoPanel). Users selecting videos in the
File Manager were still seeing the old 'Video file' placeholder.

This commit mirrors the metadata labels and probeVideoFile population
into the File Manager's info panel so both views show the same rich
video metadata:
- Video Codec + profile
- Audio codec + channels
- Bitrate (Mbps)
- Timecode
- Camera name/model/lens
- Reel / Scene / Take
Add detailed documentation for creating AppImage packages:
- New docs/APPIMAGE_CREATION.md with step-by-step process
- Troubleshooting section for common failure modes
- Explanation of critical flags (CMAKE_INSTALL_LIBDIR=lib)
- Build verification steps

Update references in:
- docs/INSTALL.md: link to detailed guide
- docs/linux-wayland-validation.md: link to detailed guide

Document key requirements learned from recent debugging:
- Clean build directory to avoid stale caches
- qt.conf recreation before cmake --install
- LIBDIR flag to prevent segfaults
- linuxdeploy alternatives
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant