fix: resolve Windows CLI dependencies and implement OIIO image writing - #63
Merged
Merged
Conversation
…iting (fixes #58, fixes #59) - Fixes #58: Configure OpenUTVDeps bin, python, and PySide6 directories in PATH and set OPENUTV_DEPS_ROOT, PYTHONHOME, QT_PLUGIN_PATH, and QT_QPA_PLATFORM_PLUGIN_PATH in install.ps1. Auto-discover dependencies and configure environment in openutv-diagnostics.cmd and openutv-check-updates.cmd. Remove obsolete legacy qt.conf that blocked Qt 6 plugin resolution. Add --help and --silent support to openutv-diagnostics.py.
…nd add hermetic CLI shims for Windows and macOS
…e formats - Replace non-existent APIs in IOoiio::writeImage: FrameBuffer::pixelAspect() -> pixelAspectRatio(), FrameBuffer::data<void>() -> pixels<unsigned char>(), ImageSpec::pixelaspect -> "PixelAspectRatio" attribute. - Query OIIO's output_format_list / extension map at plugin construction and only register Write for extensions that have an OIIO writer in this build. Homebrew's OIIO has no QOI or DDS writer, so these are now Read-only and utvio reports "No plugins support (write) format" instead of failing inside the OIIO plugin. - Correct plugin identifiers in the native-writer comment. Refs #59 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Michael Oliver <mcoliver@gmail.com>
formats.gto and movieformats.gto were generated by custom commands that only depended on the image_formats/movie_formats utility targets. Utility target dependencies order the build but do not trigger re-runs, so an incremental build kept stale plugin capabilities after a plugin changed, and GenericIO routed reads/writes based on outdated information. rv_stage now records each IMAGE_FORMAT/MOVIE_FORMAT plugin's output file on the aggregate target, and the cache generators depend on those files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Michael Oliver <mcoliver@gmail.com>
- Drop a trailing alpha channel when the OIIO writer does not support alpha (PNM), instead of failing with "pnm does not support 4-channel". - Write integer samples for PNM: OIIO's PNM writer emits bottom-to-top PFM for any floating point spec regardless of extension, which produced vertically flipped .ppm/.pgm files from float frame buffers. - Promote HALF to FLOAT for FITS: OIIO writes BITPIX=-32 for HALF but still writes 16-bit samples, producing a truncated, unreadable file (still present on OIIO main). - Install the temporary FrameBuffer cleanup guard before any conversion so intermediates are not leaked if a conversion throws. - Check ImageOutput::close() and report its error. Refs #59 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Michael Oliver <mcoliver@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #58 (Windows CLI tools can't find their dependencies). Fixes #59 (
utviofails to write PNG/DPX/WebP/QOI with a blankERROR:).#58: Windows dependency resolution
install.ps1: configures the OpenUTVDeps runtime (bin, bundled Python, PySide6/Qt plugins) and setsUTV_DEPS_ROOT/OPENUTV_DEPS_ROOT,PYTHONHOMEandQT_PLUGIN_PATH..cmdwrappers (utvio,utvls,utvpkg,py-interp,openutv-run,openutv-diagnostics,openutv-check-updates) find the dependencies and set up the environment for each process.UTVLauncherWin.cpp: hardened dependency discovery.qt.confthat blocked Qt 6 plugin resolution.UTVLauncherhonorsUTV_DEPS_ROOT,OPENUTV_DEPS_ROOTandHOMEBREW_PREFIX, exportsUTV_HOME/UTV_DEPS_ROOT, and adds a--run <tool>mode..shwrappers pick up the Homebrew environment.UTV_*names take precedence, withOPENUTV_*still honored as a fallback (UTV_HWACCEL,UTV_KEYBINDINGS_FILE,UTV_DEPS_ROOT).openutv-diagnostics: adds--helpand--silent.#59: OIIO image writing
IOoiio, so writes go toio_png,io_dpx, etc.IOoiio::writeImageis implemented (it was a stub that threw an empty exception). It handles planar merge, colorspace conversion, orientation, channel names, pixel aspect, compression and quality.IOoiioasks OIIO which formats this build can actually write. Homebrew's OIIO has no QOI or DDS writer, so those are now read-only..ppmname.Build
formats.gtoandmovieformats.gtoare now regenerated when a format plugin is relinked. Previously incremental builds kept a stale capability cache, which made plugin changes appear not to work.Verification (macOS, Apple Silicon)
--runmode,openutv-diagnostics --helpand the env var fallbacks all checked.QA
utvpkg,utvio,openutv-diagnostics.cmdfrom a fresh install (the fix: utvpkg fails to find dependencies on Windows 11 #58 scenario), with no DLL or Qt popupsutvio ... -o overlay.pngwith alphaFollow-up: #60's smoke suite is stacked on this branch in a separate draft PR.
🤖 Generated with Claude Code