❌

Normale weergave

Blog: v7.36.0 released

29 December 2025 om 09:00

You can download it from GitHub.

This version adds image processing in linear color on the CPU (previously only Movit). Plus, it extends 10-bit video processing on the CPU to many more services.

Framework

  • Added mlt_image_default_colorspace()
  • Added mlt_image_default_trc()
  • Added mlt_image_default_primaries()
  • Added mlt_color_convert_trc()
  • Added the mlt_consumer property mlt_color_trc to drive a new color_transform normalizer filter. This sets the color transfer function to use for image/video effects. It is beneficial and correct to use linear color for any pixel mixing whether for blending or interpolation.
  • Removed atexit(mlt_factory_close) in mlt_factory_init(). Close the factory yourself if you feel the need to (not generally needed when exiting a process).
  • Prevent possible crash in mlt_service_connect_producer().
  • Added mlt_profile_is_valid() and Mlt::Profile::is_valid().
  • Fixed crash on invalid profile (CVE-2025-65834) in:
    • mlt_consumer_start()
    • mlt_factory_producer()
    • xml producer

Modules

  • Drop support for Qt 5.
  • Fixed bad color in luma transition’s dissolve (regression in v7.34.0).
  • Fixed HLG HDR broken in decklink consumer (regression in v7.34.0).
  • Fixed warnings when flushing audio in the avformat consumer.
  • Added support for hwaccel=vulkan to the avformat producer.
  • Added a color_transform normalizer filter to the core module to convert all image/video producers to and from linear color. It is abstract in the core module and drives the following filters:
    • avfilter.zscale
    • sws_colortransform
    • avfilter.scale
  • Added filter sws_colortransform that is more efficient than avfilter.swscale but requires FFmpeg 8.
  • Changed the default property values of the null consumer:
    • real_time: -1
    • terminate_on_pause: 1
  • Changed the luma and movit.luma transitions to progress linearly with linear color_trc.
  • Fixed the alpha channel dropped by the xml-clip producer.
  • Added mlt_image_rgba64 format to:
    • avcolor_space filter
    • avdeinterlace filter
    • affine filter and transition
    • audiolevelgraph filter
    • audiospectrum filter
    • audiowaveform filter
    • autofade filter
    • avformat producer and consumers
    • box_blur filter
    • brightness filter
    • pillar_echo filter
    • color producer
    • dropshadow filter
    • dynamictext filter (when used with qtext)
    • frei0r.alpha0ps filter
    • frei0r.alphagrad filter
    • frei0r.alphaspot filter
    • frei0r.bluescreen0r filter
    • frei0r.select0r filter
    • frei0r.transparency filter
    • gpsgraphic filter
    • gpstext filter
    • gradientmap filter
    • hslprimaries filter
    • hslrange filter
    • kdenlivetitle producer
    • lift_gamma_gain filter
    • lightshow filter
    • mask_apply (when used with qtblend)
    • movit.convert filter
    • outline filter
    • qtblend filter and transition
    • qtcrop filter
    • qtext producer
    • shape filter
    • spot_remover filter
    • strobe filter
    • subtitle filter (when used with qtext)
    • swscale filter
    • text filter (when used with qtext)
    • timeremap link
    • timer filter (when used with qtext)
    • vqm transition
  • Changed the mask_apply filter default transition to qtblend.
  • Removed the maximum for the alpha property on the brightness filter so that you can increase the opacity of an existing alpha channel.
  • Fixed background image scaling in the gpsgraphic filter.
  • Fix audio artifacts with pcm_s24le in mkv in avformat producer.

Other

  • Removed bitrate and quality limits in the vp9 and webm avformat presets.
  • Fixed melt on Windows not reading file path/name with extended characters (regression in v7.34.0).
  • Fixed building the ruby bindings with Ruby 3.0.
  • More fixes for MSVC.
  • Removed win32/strptime.c and replaced with Qt functions.
  • Stop showing melt usage on error exit.
  •  

Blog: v7.34.0 released

3 November 2025 om 09:00

You can download it from GitHub.

This versions adds 10-bit video processing on the CPU, but you must ensure you are using compatible filters and transitions.

Framework

  • Added mlt_image_rgba64 format. This change touched core, avformat, and qt modules as well.
  • Added mlt_color_trc, mlt_color_primaries, and more mlt_colorspaces along with functions:
    • mlt_image_color_trc_name
    • mlt_image_color_trc_id
    • mlt_image_colorspace_name
    • mlt_image_colorspace_id
    • mlt_image_color_pri_name
    • mlt_image_color_pri_id
  • Fixed some minor memory leaks with cppcheck.

Modules

  • Added rgba and rgba64 formats to the luma transition.
  • Added rgba64 format to affine filter and transition.
  • Added rgba64 format to the qtblend transition.
  • Added support for FFmpeg 8 to the avformat module.
  • Fixed audio panner filter for 5.1 channel layout.
  • Fixed converting 10-bit full to limited range in avformat producer (regression in v7.30.0).
  • Fixed shadow not working for multi-line template titles in kdenlivetitle producer.
  • Fixed mask_apply filter with custom transition.
  • Added input_chmask & output_chmask properties to mono filter.
  • Added channel_mask property to LADSPA/LV2/VST2 filters.
  • Added channel_mask to the volume filter.
  • Added an outline video filter.
  • Fixed a deadlock on image with a % in the name in qimage producer.
  • Added scrubbing to the decklink consumer.
  • Fixed & not decoded to & in the xml producer.
  • Fixed converting BT.709 to BT.2020 in the avformat module.
  • Fixed building a ladspa module without JACK as dependency.
  • Deprecate a JACK Rack XML file in the jackrack and ladspa modules.
  • Added filter qtblend_mode.
  • Fixed incorrect alpha channel breaking optimization of qtblend.
  • Fixed pixel format gbrap (Ut Video with alpha channel) in the avformat producer.
  • Fixed opencv_tracker filter on cut playlist clips.
  • Fixed warning about missing color range for avfilters that use it (e.g. avfilter.colorspace).
  • Added typewriter properties to the qtext filter.
  • Fixed color distortion or a crash if using hwaccel with orientation rotation in avformat producer.

Other

  • Enable Qt 6 and disable Qt 5 modules in CMake by default.
  • Disable the SDL1 module in CMake by default.
  • Changed melt now exits with 1 if the producer is invalid.
  • Various changes to work with MSVC compiler.
  • Changed SVT-AV1 encode presets to VBR for Opus audio.
  • Fixed initializing Qt on the main thread in melt.
  • Documented the -progress2 option for melt.
  • Increased the minimum C++ version to C++20.
  • Converted many modules to use CMake find_package().
  • Added libgen.c and libgen.h for MSVC.
  •  

Blog: v7.32.0 released

7 Mei 2025 om 09:00

You can download it from GitHub.

Framework

  • Added mlt_service_set_consumer() and `Mlt::Service::set_consumer().
  • Optimized mlt_multitrack to not request a frame from a producer that is both hidden and muted.

Modules

  • Fixed pixel format for VP8/VP9 streams in avformat producer.
  • Fixed yuva422p pixel format in avformat producer.
  • Added MLT_AVFORMAT_HWACCEL & MLT_AVFORMAT_HWACCEL_DEVICE environment variables to avformat producer.
  • Updated decklink module for recent hardware and drivers.
  • Added colorspace and color_trc (including HDR) properties to the decklink consumer.
  • Fixed silencing extra audio channel (e.g. 6 => 8) in decklink consumer.
  • Fixed 5.1 C/LFE channels swapped over HDMI in decklink consumer.
  • Fixed text outline had sharp angles in kdenlivetitle producer.
  • Fixed default gamma to be Rec. 709 for 10-bit Y’CbCr from movit module.
  • Added support for HLG gamma to movit module (requires ddennedy/movit fork).
  • Fixed opencv_tracker filter should require multiple keyframes to be ready.
  • Fixed OpenCV crash on rect <= 1 pixel in opencv_tracker filter.
  • Fixed aspect ratio in qtblend filter and transition.
  • Fixed QT_QPA_PLATFORM=offscreen not working in qt and glaxnimate modules.
  • Improved preview scaling in qtblend filter.
  • Fixed requesting huge images on multiple qtblend filters or transitions.
  • Fixed sdl2 consumer on macOS.
  • Fixed the strobe filter not working with movit.
  • Fixed color and gamma using timeremap link with movit.
  • Fixed consumer properties (e.g. channels) missing on qglsl consumer injected by the xml producer.
  •  

Blog: v7.30.0 released

19 Januari 2025 om 09:00

You can download it from GitHub.

Framework

  • Fixed Mlt::Producer::set_creation_time() not exported on i686.
  • Fixed Mlt::Properties::set(int64_t) symbol version.
  • Fixed mlt_factory_init() on Linux/BSD may fail to initialize when compiled with -DRELOCATABLE.
  • Added generic non-drop-frame timecode in mlt_property.c. Previously, it was only done for 30000/1001 and 60000/1001 frame rates, but 24000/1001 is especially important as well.
  • Added support for MLT XML embedded in chains. This, along with xml-clip producer handles mismatching frame rate between parent and child producers and facilites time-affecting links on the child.
  • Added mlt_image_full_range(const char *color_range) where any of the following strings return true (1): full, jpeg, pc.

Modules

  • Added xml-clip producer.
  • Fixed link in and out properties arenot serialized in the xml consumer.
  • Added hslprimaries and hslrange filters to the plus module.
  • Added a gradientmap filter to the plus module.
  • Fixed avfilter audio filters with FFmpeg 7.
  • Fixed incorrect frame rate for AVCHD (and possibly others) in avformat.
  • Fixed window_id property in consumer sdl2 by using SDL_CreateWindowFrom(), especially important for embedding in GTK+ or Qt.
  • Fixed text not rendering in transition vqm since Qt 6.
  • Added decimals keyword to gpstext filter and move RAW keyword check.
  • Fixed time_offset property handling in gpstext filter.
  • Fixed reading and writing SRT files with unicode in the path.
  • Fixed subtitle_feed filter on producers with an in point > 0.
  • Fixed opaque alpha channels become translucent in luma transition.
  • Fixed a crash in the mix transition with consumer producer.
  • Fixed freeze filter freezing too much.
  • Fixed avfilter.fillborders with preview scaling.
  • Fixed non-proportional scaling in qtblend transition and filter.
  • Fixed avfilter color distortion with mlt_image_rgb and mlt_image_rgba.
  • Extended support for colorspace=2020 consumer property and the BT.2020 colorspace in the avformat producer and consumer. This does not imply HDR, which is signaled through a color_trc property.
  • Added support for mlt_image_yuv420p10, mlt_image_yuv444p10, and mlt_image_yuv422p16 in avfilter, swscale, and rescale filters. This facilitates using these pixel formats end-to-end when using only FFmpeg producers, certain avfilters, and avformat consumer. This means it is possible to do 10-bit end-to-end on the CPU when being careful to select compatible components and options to avoid conversions. One can pass-through HDR; however, you must set the color_trc and pix_fmt properties on the avformat consumer (see ffmpeg -h full for these values). The avformat consumer automatically converts MLT colorspace (integer value) to FFmpeg’s colorspace and color_primaries (unless explicit) options.

Other

  • Cleaned up the examples in src/swig.
  • Changed the x264-medium preset to a higher quality.
  •  

Blog: v7.28.0 released

12 September 2024 om 09:00

You can download it from GitHub.

This fixes a couple of major regressions in the previous version 7.26.0:

  • Fixed seeking and frozen video due by reverting β€œImproved performance with intra-only video and reducing the frame rate.”
  • Fixed using melt to render MLT XML with OpenGL effects from movit.

Other fixes and changes:

  • Deprecated the composite transition and the sdl and ndi modules.
  • Fixed Android camera video has the wrong frame rate (broken in v7.26.0).
  • Fixed audio not playing for audio-only DTS WMA.
  • Fixed using β€œhttps:” URLs in the xml producer.
  • Fixed crash on exit when running melt -query or melt -query links.
  • Added a transition property to the watermark filter. Now, it defaults to using affine.
  • Changed affine transition argument to set rect property if supplied.
  •  

Blog: v7.26.0 released

25 Augustus 2024 om 09:00

You can download it from GitHub.

This release adds support for subtitles and LV2 & VST2 audio plugins.

Framework

  • Fixed a double-free crash in Mlt::Service::profile().

Modules

  • Fixes and improvements to the avformat producer:
    • Changed to prefer r_frame_rate over avg_frame_rate.
    • Fixed lowres if set too high.
    • Fixed audio_index=all.
    • Fixed variable_frame_rate incorrectly set true on 59.94 fps in Matroska.
    • Improved performance with intra-only video and reducing the frame rate.
    • Fixed mono audio handling regression on FFmpeg 7.
    • Fixed audio samples may be dropped unexpectly esp. with uncompressed.
  • Fixed movit transitions with a non-movit filter on one of its inputs.
  • Fixed duration in the glaxnimate producer off by one frame.
  • Added dropshadow filter to the qt module.
  • Fixed resetting animation in kdenlivetitle producer.
  • Added support for LV2 and VST2 plugins in the jackrack module.
  • Fixed crash using av.declick audio filter on FFmpeg 7.
  • Added subtitle filter and producer and subtitle_feed filter to the plus module.
  • Added subtitle encoding to the avformat consumer (new properties beginning with β€œsubtitle.”).
  • Fixed alang in the the avformat consumer.
  • Added #gps_power keyword to the gpstext filter.
  • Fixed tab handling in the kdenlivetitle producer.

Other

  • Added 8- and 10-bit encode presets for SVT-AV1.
  • Fixed building on OpenBSD.
  • Fixed building on musl libc.
  • Fixed consumer properties not updating the automatic profile on the melt command line.
  • Added -loglevel command line option to melt.
  •  

Blog: v7.24.0 released

27 April 2024 om 09:00

You can download it from GitHub.

The highlight of this release is support for FFmpeg 7 and Ambsonic audio.

Framework

  • Fixed a small memory leak in mlt_repository.
  • Fixed a small memory leak in MltPushConsumer C++ class.
  • Block connecting a null producer to a service.
  • Include locale.h on any GNU libc platform.

Modules

  • Added a new spatialaudio module with filters:
    • ambisonic-decoder
    • ambisonic-encoder
  • Fixed building with FFmpeg 7.
  • Fixed text keywords do not work with non-ASCII filenames on Windows:
    • pixbuf producer
    • opencv_tracker filter
    • dynamictext filter
    • qimage producer
  • Added β€œmeta.media.aspect_ratio” property to the avformat producer.
  • Fixed distort property not working in movit.rect filter.
  • Fixed frames dropping or repeating in the multi consumer.
  • Fixed the dynamic_loudness filter maximizing audio gain.
  • Fixed distortion in the mono filter.
  • Also check for WAYLAND_DISPLAY to detect a graphical session in the qt and glaxnimate modules.
  • Fixed the wave filter distorts if wave = 1 with preview scaling.
  • Added the read-only meta.media.%u.codec.layout property to avformat producer.
  • Set the channel_layout property on the frame for the noise and tone audio producers.
  • Fixed outline maximum for the text and dynamictext filters.

Other

  • Fixed crash when using -chain from melt.
  • Fixed a small memory leak on Windows fopen().
  •  

Blog: v7.22.0 released

28 November 2023 om 09:00

You can download it from GitHub.

The highlight of this release is support animation easing functions via new keyframe types. Also, new versions of the smooth keyframe type is added that avoids overshoots and cusps.

Framework

  • Added new functions:
    • mlt_property_is_color()
    • mlt_property_is_numeric()
    • mlt_property_is_rect()
  • Many new keyframe types:
    • mlt_keyframe_smooth_loose - ~= (same as old mlt_keyframe_smooth - Unity Catmull-Rom spline)
    • mlt_keyframe_smooth_natural - $= (Centripetal Catmull-Rom spline with natural slope)
    • mlt_keyframe_smooth_tight - -= (Centripetal Catmull-Rom spline with 0 slope)
    • mlt_keyframe_sinusoidal_in - a=
    • mlt_keyframe_sinusoidal_out - b=
    • mlt_keyframe_sinusoidal_in_out - c=
    • mlt_keyframe_quadratic_in - d=
    • mlt_keyframe_quadratic_out - e=
    • mlt_keyframe_quadratic_in_out - f=
    • mlt_keyframe_cubic_in - g=
    • mlt_keyframe_cubic_out - h=
    • mlt_keyframe_cubic_in_out - i=
    • mlt_keyframe_quartic_in - j=
    • mlt_keyframe_quartic_out - k=
    • mlt_keyframe_quartic_in_out - l=
    • mlt_keyframe_quintic_in - m=
    • mlt_keyframe_quintic_out - n=
    • mlt_keyframe_quintic_in_out - o=
    • mlt_keyframe_exponential_in - p=
    • mlt_keyframe_exponential_out - q=
    • mlt_keyframe_exponential_in_out - r=
    • mlt_keyframe_circular_in - s=
    • mlt_keyframe_circular_out - t=
    • mlt_keyframe_circular_in_out - u=
    • mlt_keyframe_back_in - v=
    • mlt_keyframe_back_out - w=
    • mlt_keyframe_back_in_out - x=
    • mlt_keyframe_elastic_in - y=
    • mlt_keyframe_elastic_out - z=
    • mlt_keyframe_elastic_in_out - A=
    • mlt_keyframe_bounce_in - B=
    • mlt_keyframe_bounce_out - C=
    • mlt_keyframe_bounce_in_out - D=
  • Fixed missing support for mlt_service_transition in Mlt::Producer() C++ constructor.

Modules

  • Fixed rotoscoping filter crash on image with height = 0.
  • Fixed crashed due to qtblend transition requesting an image of 0 width or height.
  • Added support for RtAudio 6 in the rtaudio consumer.
  • Fixed createdate keyword deletes preceeding text in dynamictext filter.
  • Added opacity property to filters that use qtext:
    • dynamictext
    • gpstext
    • qtext
    • timer
  • Added fade_video, fade_audio, and fade_color properties to autofade filter.
  • Added backwards compatibility for changed filter names in frei0r v2.3.1:
    • frei0r.measure_pr0be
    • frei0r.measure_pr0file
    • frei0r.tehroxx0r
    • frei0r.alpha0ps_alpha0ps
    • frei0r.alpha0ps_alphagrad
    • frei0r.alpha0ps_alphaspot
    • frei0r.denoise_hqdn3d
  • Fixed a memory leak in avformat producer with consumer deinterlacer=yadif.
  • Fixed qimage producer color if consumer color_range=pc pix_fmt=yuv444p.

Other

  • Fixed ten_bit/ProRes 422 avformat preset produced ProRes 444.
  • Fixed YouTube avformat preset did not output high profile with some hardware encoders.
  •  

Blog: v7.20.0 released

1 Oktober 2023 om 09:00

You can download it from GitHub.

Framework

  • Fixed β€œblank” in a playlist does not have audio normalization filters.
  • Fixed serializing mlt_color transparent black as β€œ#00000000” when the property was set using an integer or mlt_color.
  • Fixed mlt_chain_set_source() would always fetch a frame from the producer even if it has β€œmeta.media.frame_rate_num” and β€œmeta.media.frame_rate_den” properties making things slow.
  • Fixed Mlt::Chain leaking memory.

Modules

  • Added a blank producer to the core module.
  • Added keywords to gpstext filter:
    • #gps_cadence#
    • #gps_grade_degrees#
    • #gps_grade_percentage#
    • #gps_temperature#
  • Added some color_styles to the gpsgraphic filter:
    • 10 = color by speed (max 100 km/h)
    • 11 = color by grade (max 90 degrees)
    • 12 = color by grade (max 20 degrees)
  • Added more unit formats to legend_unit property of gpsgraphic filter:
    • mmin or m/min
    • ftmin or ft/min
  • Added keywords to dynamictext filter:
    • #basename#
    • #filename#
  • Fixed installing filter_audioseam.yml.
  • Added an avlink link to the avformat module for FFmpeg filters that can benefit from future frames such as adeclick.
  • Added the preserve_alpha property to the box_blur filter.
  • Fixed loading service metadata for the qt6 and glaxnimate-qt6 modules.
  • Fixed a crash when changing the rotate property in avformat producer with interlace video.
  • Add astream and vstream properties to avformat producer. Unlike audio_index and video_index are absolute indices across the entire array of streams regardless their type, these new 0-based properties are relative to the type audio or video. For example, astream=1 is the second audio stream.
  • Fixed a possible crash in the avformat producer’s mlt_producer_probe virtual function.
  • Updated the glaxnimate module to version 0.5.4.
  • Fixed the sdl2 consumer crashing with the Linux radeonsi_dri driver and showing only all black with the Linux nvidia driver.

Other

  • Fix compiling on Android (not supported by the core developers).
  • Changed the avformat consumer FLAC preset to use the flac format.
  • Fixed the melt Shift+H and Shift+L keyboard shortcuts when the SDL2 window has focus.
  •  

Blog: v7.18.0 released

28 Juli 2023 om 09:00

You can download it from GitHub.

Framework

  • Added mlt_audio_free_data().
  • Added meta.playlist.clip_position and meta.playlist.clip_length properties to mlt_playlist.
  • Fixed mlt_frame_get_audio fails on mlt_audio_none.

Modules

  • Added two audio filters to core module to be used on a playlist/track:
    • audioseam
    • autofade
  • Fixed a crash in vidstab filter on image format change.
  • Fixed font weight in qtext filter on Qt 6.
  • Fixed yuv420p not working in rescale filter.
  • Fixed text shadow outline in kdenlivetitle producer.
  • Fixed crash when changing the profile with count producer.
  • Fixed constructor corruption in frei0r module.
  • Fixed deinterlace link was added to invalid producer in xml producer.
  • Fixed producers not indicating progressive scan video:
    • kdenlivetitle
    • pango
    • qimage
    • qtext
  • Fixed video scan mode detection in avformat producers that only indicate on their container format and not on frames such as Ut Video in Matroska.
  • Fixed very large images in qimage producer on Qt 6.
  • Fixed seeking on clips that use speed_map in timeremap link.
  • Fixed a color level problem with sRGB inputs in the movit module.
  • Fixed avformat producer’s deallocation function for AVCodecContext.
  • Fixed field order of qtblend and frei0r.cairoblend transitions.
  • Changed the avformat producer seek_threshold default to 64.
  • Updated ebur128 filter to version 1.2.6.
  •  

3.0.1

Door: Mintsuki
8 Maart 2026 om 03:04

CSMWrap Version 3.0.1

Changelog since CSMWrap 3.0.0

Bug Fixes

  • ap_trampoline: Skip APIC disable when x2APIC is active, preventing #GP on systems with locked x2APIC (e.g. Nova Lake xAPIC deprecation).
  • apic: Clear stale vector bits when configuring LINT0/LINT1 for ExtINT/NMI.
  • mptable: Read LAPIC address and version from MSR instead of MADT, fixing x2APIC mode where MMIO LAPIC reads don't work.
  • video: Backport GOP quirks and fixes from Limine - reject PixelBltOnly/unknown pixel formats, validate all-zero PixelBitMask, check PixelsPerScanLine, and calculate correct BPP for non-32bpp PixelBitMask modes.

SeaBIOS

  • mptable: Use x2APIC MSR for APIC version read when in x2APIC mode.

Full Changelog: 3.0.0...3.0.1

  •  

3.0.0

Door: Mintsuki
27 Februari 2026 om 19:17

CSMWrap Version 3.0.0

Changelog since CSMWrap 2.1.0

New Features

  • INI configuration file support - CSMWrap now reads an optional csmwrap.ini placed alongside the EFI executable. See README.md for available options.
  • Runtime-configurable serial output - Serial debug is now controlled via the config file instead of a compile-time flag.
  • VGA device selection - A non-primary video card can be selected by PCI address for multi-GPU setups.
  • Verbose mode - Screen output is suppressed by default; banner and panics always shown.

Bug Fixes

  • Fix framebuffer address double-adjustment during BAR relocation - A PCI bridge's prefetchable and non-prefetchable windows could alias after relocation, causing the framebuffer address to be adjusted twice to a wrong address.
  • Fix BIOS proxy helper ready signal race (SeaBIOS) - The helper core now signals ready only after its first mailbox check, eliminating a startup race condition.

Other Changes

  • README.md updated with clearer instructions and new FAQ entries and more.

Full Changelog: 2.1.0...3.0.0

  •  

2.1.0

Door: Mintsuki
26 Februari 2026 om 04:48

CSMWrap Version 2.1.0

Changelog since CSMWrap 2.0.0

Bug Fixes

  • Fix heap buffer overflow in uacpi_kernel_io_map() bounds tracking
  • Fix find_table buffer overread and add VBIOS size bounds check
  • Fix SMBIOS 2.1 entry point checksum covering wrong range
  • Fix printf format specifier for EFI_PHYSICAL_ADDRESS on ia32
  • Fix off-by-one page count in thunk data allocation
  • Fix BAR type check to match exactly type 2 (64-bit) instead of any bit-2-set value
  • Fix division by zero in get_nanoseconds_since_boot for sub-1GHz TSC
  • Fix get_nanoseconds_since_boot() intermediate overflow
  • Fix uACPI-to-MADT interrupt flag conversion for PCI link device routing
  • Fix ExitBootServices retry to re-call GetMemoryMap to avoid stale map key
  • Guard vbios_loc memcpy against NULL
  • Guard __builtin_ffs against zero PixelBitMask to avoid bogus mask position
  • Reject extended config space offsets in PIO fallback
  • Use -1ULL for EfiAcpiAddressRangeHole to ensure consistent width on ia32
  • Widen get_unix_epoch nanosecond parameter to uint32_t to match EFI_TIME
  • Re-hide P2SB before early return on ia32 BARH overflow

New Features & Enhancements

  • Add TSC calibration, delay functions, and CPUID-based frequency detection (time.c/h)
  • Use TSC-based timing for uACPI instead of low-resolution RTC
  • Add RDNA 4 (Navi 48/44, 0x75xx) to AMD discrete GPU detection
  • Add Lunar Lake (model 0xBD) PIT clock gating workaround
  • Initialize CMOS memory registers for legacy software compatibility
  • Add panic() function
  • Add bounds check for PCI interrupt routing entries
  • Warn when pci_early_initialize fails
  • Check acpi_init() return value

IOMMU

  • Disable VT-d interrupt remapping and queued invalidation
  • Add pause instruction to VT-d polling loops
  • Remove VT-d polling timeout and unnecessary AMD-Vi polling

Legacy Handoff

  • Zero CR3, TR, and GDTR before legacy handoff
  • Mask stale LVT entries before legacy handoff
  • Send second SIPI per Intel MP spec INIT-SIPI-SIPI sequence
  • Hardware-disable helper core LAPIC to prevent stale IPIs from legacy OS
  • Remove all MADT entries for helper core (both LAPIC and x2APIC)
  • Limit helper core selection to xAPIC-addressable APIC IDs (<255)
  • Allocate helper stack as RuntimeServicesData to prevent OS reuse
  • Align helper signature to 8 bytes and use aligned 64-bit scan
  • Move mailbox out of EBDA
  • Invalidate ConOut after ExitBootServices to prevent stale access

Dependencies

  • Update uACPI from 3.2.0 to 4.0.0
  • Update SeaBIOS submodule

Code Quality

  • Convert CRLF line endings to LF
  • Replace VLA swap buffer in qsort with fixed-size chunked copy
  • Use uintptr_t comparison in memmove to avoid relational pointer UB
  • Cache CLFLUSH CPUID check to avoid repeated serializing instruction
  • Drop CPUID 0x16 TSC frequency fallback
  • Round up delay_us() tick count for sub-MHz timer frequencies
  • Check add_bar return value for bridge window BARs
  • Remove dead type==0 check in e820 (convert_memory_type never returns 0)
  • Remove unused AssignedDriveNumber (SeaBIOS uses BootPriority only)
  • Fix misleading PAM0 comments
  • Remove double semicolon in PCI code

Full Changelog: 2.0.0...2.1.0

  •  

2.0.0

Door: Mintsuki
2 Februari 2026 om 05:43

CSMWrap Version 2.0.0

Major New Features

  • PCI BAR Relocation - Automatically relocate PCI BARs from >4GB to <4GB, eliminating the need to disable "Above 4G Decoding" in UEFI settings.
  • PCIe Resizable BAR Support - Shrink large BARs (e.g., 4GB GPU VRAM) to 256MB using PCIe ReBAR capability, eliminating the need to disable "Resizable Bar/Smart Access Memory" in UEFI settings.
  • BIOS Proxy Helper Core - Dedicate an AP for BIOS calls from the BSP. This allows usage of CSMWrap with legacy OSes calling BIOS routines from Virtual 8086 Mode and other improvements.
  • MP Table Generation - Generate Intel MPS 1.4 tables from ACPI MADT for legacy OSes that don't support ACPI.
  • SMBIOS 3.0 β†’ 2.x Synthesis - Generate SMBIOS 2.x entry point when only 3.0 is available.
  • Boot Device Detection - Auto-detect boot drive and build BBS table with correct priority.

Platform Support

  • IOMMU Disable - Automatically disable Intel VT-d and AMD-Vi before legacy OS handoff.
  • x2APIC Handling - Transition to xAPIC mode if possible or configure ExtINT passthrough for PIC interrupts.
  • Intel PIT Workaround - Fix timer interrupts on Arrow Lake, Meteor Lake, Panther Lake.
  • AMD RDNA+ Detection - Force SeaVGABIOS for RDNA/RDNA2/RDNA3 GPUs with broken legacy OpROMs.

Video

  • Flanterm Integration - Faster, better video output via Flanterm library.
  • GOP Modesetting Fixes - Handle Intel iGPU where default mode has FrameBufferBase=0.
  • VGA Arbitration - Only claim VGA routing when using OpROM path.

Many other minor fixes and improvements!

Full Changelog: 1.3.0...2.0.0

  •  

1.3.0

Door: Mintsuki
4 Juli 2025 om 03:01

Many bug fixes and improvements, and reapplication of (fixed versions of) previously reverted commits.

Add support for loading a custom VGA Video BIOS from \EFI\CSMWrap\vgabios.bin, if present.

Merged pull requests

New Contributors

  • @Gelip made their first contribution in #92

Full Changelog: 1.2.3...1.3.0

  •  

1.2.3

Door: FlyGoat
19 Juni 2025 om 00:02

This is a follow-up to fix regression introduced in previous release (#87).

What's Changed

  • Remove a potentially unnecessary statement that increments pmm_base by LOW_STACK_SIZE by @Mintsuki in #84

Full Changelog: 1.2.2...1.2.3

  •  

1.2.2

Door: FlyGoat
17 Juni 2025 om 21:28

New wiki site

Thanks to @FarelRA and other contributors, we now have a comprehensive documentation collection on our GitHub wiki!

What's Changed

New Contributors

Full Changelog: 1.2.1...1.2.2

  •  

1.1.0

Door: FlyGoat
11 Mei 2025 om 18:08

Implement VGA Arbitration mechanism.

  •  
❌