Skip to content

Releases: cubicibo/SUPer

v0.2.4

10 Feb 09:05
Compare
Choose a tag to compare

SUPer v0.2.4
This release focus on stability and speed. Multithreading is finally here!

Windows users of the Python package should do a fresh pip install to add a new dependency.

Front-end

  • Add support for HFR 60 fps BDN XML (UHD BD only).
  • Add "abort" button to GUI for all OS.
  • Remove --tslong (Conservative PTS/DTS strategy).
  • Remove --nodts option as it was not longer working, and pointless as it was out of spec.

Back-end

  • Add multithreading! Available on both GUI (drop-down menu) and CLI (--threads N or -t N), 1 <= N <= 8.
  • Fix orphaned composition objects with normal case object redefinition enabled.
  • Fix crash in the logic that performs time shift of object decoding.
  • Add more stream compliancy tests.
  • Perform adaptive padding to renderer space and windows.
  • Fix handling of BDN XML with split events.
  • Fix a silent crash on some (ARM?) Windows related to numba.
  • Fix crash due to object blinking.
  • Add use_gpu option to config.ini to optionally disable GPU usage.
  • Clean and optimise quite a few functions.
  • Fix crash on isolated events with dual windows.

Many Thanks to Alllen for bug hunting and testing.

v0.2.3

01 Jan 13:46
Compare
Choose a tag to compare

SUPer v0.2.3
This release improves the event filter, users should see fewer dropped events. It was stress-tested with a heavily typeset ASSA of Kareshi Kanojō no Jijō.

Front-end

  • Changed the default value of --extra-acq (-e) from 0 to 2.
  • Add --ssim-tol to slightly tune the event filter decision making. This should not be used in most if any realistic scenario.
  • Add progress bar to display the event analysis and filtering progress

Back-end

  • Use edge structural similarity measure (eSSIM) to improve the event filter decision.
  • Use active window area to adaptively position in time the additional acquisition after a chain of palette update.
  • Add mechanism to shift object definitions and drawing in time to reduce the number of dropped acquisitions.
  • Fix a crash whenever a normal case object redefinition event was promoted to an acquisition due to epoch start collision.
  • Improve binary mask definition in event filter.
  • Fix two crashs linked to the rendering of bitmaps (hotfixes made for v0.2.2a)

v0.2.2a

25 Nov 21:42
Compare
Choose a tag to compare

SUPer v0.2.2
Numerous improvements made to the rendering pipeline. There should be fewer discarded events in some situations and an improved psycho-visual perception for complex effects.

Front-end

  • Add option to perform acquisitions after N palette updates. This ensures the quality of stills that directly follow palette animations.
  • Add a target bitrate test at stream output to help authorers anticipate excessive bitrate before a mux. (v0.2.1b)
  • Add optional logging to file. (v0.2.1b)
  • (v0.2.2a) Add a field (--ssim-tol N for cli) to tune slightly the structural similarity threshold. Default is 0.

Back-end

  • Optimise buffer slots dimensions to the maximum area shown within each window. Fairly isolated moves will now be much more consistent.
  • Replace windows definition algorithm with a new one that finds optimised layouts.
  • Perform BDN XML preprocessing to remove consecutive events with identical PNGs, rewrite event timeline on the fly accordingly.
  • Allocate all transparent pixels to palette ID 0xFF, one palette ID saved in general case, two saved in normal case object definitions!
  • Append an acquisition after palette updates to wipe any potential defect (optional feature enabled by user)
  • Avoid encoding dropped events to improve quality of preceding events in palette effect chains.
  • Fix screen wipes preceeding acquisitions. These could be out of spec in rare cases (but thankfully caught by the stream compliancy checker).
  • Add spatial consistency checks for windows and compositions.
  • (v0.2.2a) Fix crash whenever masked objects were used with normal case object redefinition.
  • (v0.2.2a) Fix crash in optim code whenever a bitmap was not using the entire palette and had no transparency.

v0.2.1

18 Sep 10:53
Compare
Choose a tag to compare

SUPer v0.2.1

Front-end

  • Add conservative PTS/DTS strategy checkbox/cli flag.
  • Parse config.ini in cli.
  • Remove the event overlap checkbox ("additional Scenarist BD checks") as it is always enabled internally.

Back-end

  • Rewrite and optimise RLE encoders and decoders.
  • Rewrite events filter. Watch for the minimum delta between two PTS when filtering.
  • Revisit PTS and DTS calculations, fix wrong WDS PTS, fix wrong DS decode duration with no ODS.
  • Fix normal case object redefinition, it was prone to crashing.
  • Estimate the number of colours necessary with PIL when encoding an animation via PILIQ.
  • Prevent usage of colour 0x00 to avoid illegal RLE line lengths above bitmap width + 16.
  • Add PTS/DTS test at the end to catch errors.
  • Terminate all epochs with a palette update to clear the screen rather than a drawing operation.
  • Additonally wipe the screen if there's enough time between two epochs.

Hotfixes (0.2.1a/b)

  • Fix normal case object redefinition to use "END" segment rather than composition order to draw unredefined object.
  • Add a target bitrate checker with a leaky buffer model.
  • Add an option to log the conversion to a log file for future inspection.
  • Smartly select between screen redraw or palette update depending of time between events to reduce stream size.
  • Skip screen layout analysis if the event is small and isolated.
  • Update PILIQ and ScenariStream dependencies (you need to pip install again if you do not use the executables).

v0.2.0

18 Aug 15:02
Compare
Choose a tag to compare

SUPer v0.2.0
Includes all of the hotfixes made to v0.1.9 (released as 9a, b, c...) and fixes the quantization issues on highly transparent images.

Front-end

  • Remove the inject functionality.
  • Add config.ini to setup a custom quantizer.
  • Remove PIL option in quantization dropdown list.

Back-end

  • Add PILIQ library to bind to pngquant or libimagequant (provided they are on your system in some form)
  • Improve PIL+KMeans mode. When PIL fails to quantize an image, SUPer fall-back to K-Means.
  • Correct negative WDS PTS timestamps.
  • v0.1.9x hotfixes like enabling NORMAL CASE object redefinition, event shift in time and epoch definitions.

If you have pngquant in your path, SUPer will automatically detect it and make it available on the GUI. Else you must specify its location (or libimagequant) via the config.ini file.
SUPer GUI will print: SUPui: INFO : Advanced image quantizer armed: [...] if it manages to bind to either pngquant or libimagequant on your system automatically or via the provided user config.

v0.1.9c

05 Aug 16:15
Compare
Choose a tag to compare

SUPer v0.1.9

This version addresses the issues faced by files generated by SUPer imported in Scenarist BD.

Front-end

  • Add a checkbox to force SUPer to always write the entire palette rather than just the difference. Enforced for PES output.
  • Add a stricter mode to further constrain the PG stream and ensure it passes all Scenarist BD checks without warnings or undesirable modifications. Enforced for PES output.
  • Add a checkbox to output PES and SUP together. Handy for validation of the output on a video player of the authored file.
  • v0.1.9a: Add a tickbox to enable normal case object redefinition whenever they are worthwile.
  • v0.1.9b: Rearrange layout.

Back-end

  • Fix a grouping engine regression. It could get stuck in a loop.
  • Fix timestamps, PTS and DTS should be always identical to Scenarist BD now.
  • Filter out empty palette updates.
  • Fix a missing palette assignment on screen wipes preceeding an acquisition point.
  • v0.1.9a: Fix normal case object redefinition
  • v0.1.9a: Fix a fomula error when performing event shifting.
  • v0.1.9b: Fix two crashes: work around a bug in Pillow where quantize does not return the full palette, fix epoch definition logic.

Dependencies

  • Updated to ScenariStream v0.0.4 to have accurate negative PTS and DTS in PES+MUI.
  • v0.1.9c: Use hotfix in ScenariStream branch. Timestamps could be computed wrong for first segments under certain conditions.

v0.1.8

02 Aug 15:38
60cc4ad
Compare
Choose a tag to compare

SUPer v0.1.8
Credits to Masstock for the many tips, testing and feedback that made this update as complete as it is!

Front-end
• Add a command line client (guizero can be removed from requirements.txt if you prefer to use the cli over the gui)
• Add an option to further tune acquisition rate (for compression when animations are used).
• Update existing tooltips and add more.
• Compatibility mode tickbox now disables cropping.
• DTS checkbox is automatically ticked and cannot be unticked for PES+MUI output.
• Auto-add SUP extension on GUI if none provided.
• Try to fix a rare bug where the GUI kept using the first selected BDNXML file.

Back-end:
Rendering:
• Optimise composition objects together to better distribute the palette entries.
• Use palette update to undisplay graphics in the middle of a palette animation.
• Implement double buffering to decouple decoding and rendering to let hardware decoders perform multitasking! (*)
• Implement NORMAL CASE object redefinition, used if worthwile.
• Implement palette updates buffering to perform screen updates while long object decoding is in progress.
• Implement events dropping to ensure necessary object definitions are feasible and stream is strictly compliant. (**)
• Reduce memory usage and fix numerous small issues.
PG bytestream:
• Re-implement PTS and DTS computation to be identical to Scenarist BD.
• Fix a bug that caused the penultimate display set of an epoch to refresh the object.
• Prevent the usage of the palette entry ID 255, apparently it should not be used.
• Cycle through palettes ID when palette version overflows to increase compatibility.
• Remove the work-around for palette updates with two objects.
• Add auto-cropping of objects to minimize transfer time on hardware decoders.
Parsing:
• Escape BDNXML files to avoid a crash on badly encoded data.
• Filter out zero duration events in BDNXML (events where InTC == OutTC)

Notes:
(*) Hardware decoders are designed to perform decoding and rendering at the same time. It is possible to continuously decode incoming display sets as long as the decoder does not write to the memory region that the renderer is reading! This is alleviated by performing double buffering and using the numerous palettes.
(**) the dropped event is generally one or two frames long at 23.976-29.97 fps and should go unnoticed.

v0.1.7

20 May 09:14
Compare
Choose a tag to compare

SUPer v0.1.7

Front-end
• Add Scenarist BD output format PES+MUI (Output dialog box -> select .PES format at the bottom)
• Add option to enforce DTS timestamps in stream. This should NOT be used unless your muxing software is terrible.
• Add more tooltips on the checkboxes

Back-end
• Fix timecode conversions and rounding errors, SUPer should now be frame accurate.
• Use adaptive structual similarity threshold to account for possible large transparent areas.
• Fix a crash due to blinking bitmaps.
• Filter out empty bitmaps generated for blinking subtitles - saves bandwidth.
• Avoid acquisitions to undisplay one object when two are on screen - saves bandwidth.

Known issue
• A runtime warning is sometime displayed by numpy about empty slice. This is not a bug and has no effect whatsoever on the output.

v0.1.6

05 May 21:22
Compare
Choose a tag to compare

SUPer is now distributed as stand-alone binaries! An Apple M1 (aarch64) build is attached. Windows executables may follow later.

Front-end

  • Add option to use K-Means quantization on all frames (guarantees quality but slow)
  • Add option to fix a possible time drift with NTSC framerates (23.976, 29.97)
  • Add compatibility mode option for software players that do not decode palette update display sets correctly.
  • Add a progress bar while generating an epoch bytestream.

Back-end

  • Revisit again the grouping engine to make it faster and more robust.
  • Fix a memory leak in the conversion pipeline.
  • Some clean-ups.

Known issue:

  • A very small object (< 8x8 pixels) on the very edge of the screen will not render correctly. You should not put any subtitles in the common overscan area anyway.

v0.1.5

01 May 21:06
86f855e
Compare
Choose a tag to compare

SUPer has a brand new BDNXML -> SUP conversion pipeline! With higher quality output and smarter bandwidth usage.

User interface
• None, it is all under the hood.

Back-end
• Implement a brand new grouping engine to define windows.
• Implement a brand new conversion pipeline using some image processing to define objects and find refreshs.
• Optimise the code and algorithms, add numba support. Up to 10x faster on some costly functions.
• Add code to perform palette updates with two objects.
• Update TimeConv internals to have accurate SMPTE timings.
• Drop some dead code.
• Fix many small issues