Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
ebe1cae
Add libplacebo GPU module with render and shader filters
D-Ogi Feb 1, 2026
35e85eb
Fix MinGW build: portable format specifiers, add libplacebo to CI
D-Ogi Feb 2, 2026
394d73c
Fix clang-format violation in save_cache log line
D-Ogi Feb 3, 2026
32f8a47
Reuse GPU textures between chained placebo filters
D-Ogi Feb 4, 2026
d687bdf
Support DYNAMIC shader parameters and base64-encoded shader_text
D-Ogi Feb 4, 2026
cc02961
Fix clang-format-14 violations in placebo module
D-Ogi Feb 5, 2026
d84c6b4
Refactor image conversion
ddennedy May 5, 2026
332fadd
Apply suggestions from code review
ddennedy May 6, 2026
bc67662
fix early returns not releasing lock
ddennedy May 6, 2026
d26b3f3
change a log to debug level
ddennedy May 6, 2026
11bf94d
Merge branch 'feature/placebo-module' of https://github.com/D-Ogi/mlt…
ddennedy May 6, 2026
3b112bb
add MLT_PLACEBO_CACHE_PATH and replace atext()
ddennedy May 6, 2026
ce99364
Add placebo.convert filter
ddennedy May 6, 2026
1def44b
fix cppcheck and redundant workflow runs
ddennedy May 6, 2026
e80a020
fix ctest on msvc
ddennedy May 6, 2026
626cf8a
docs for placebo private image handling
ddennedy May 6, 2026
9f97a83
Enhance image conversion logic to handle private format cases
ddennedy May 6, 2026
739224f
Fix double-free of src_tex and out-of-bounds in imageconvert
Copilot May 6, 2026
86df189
Apply suggestions from code review
ddennedy May 6, 2026
7cd956a
fix lazy allocation not thread-safe
ddennedy May 6, 2026
9a6e134
fix races in placebo.shader
ddennedy May 6, 2026
f2a9e83
Add permanent failure flag for GPU initialization and fix leak
ddennedy May 6, 2026
8d7260a
Add permanent failure and shutdown flags for GPU management
ddennedy May 6, 2026
34b2717
use "mlt_image_private"
ddennedy May 7, 2026
ef2da1c
add `mlt_frame_prepend_convert_image()`
ddennedy May 7, 2026
0a90633
add `mlt_frame_prepend_convert_image()`
ddennedy May 7, 2026
ba97d1e
fix cppcheck and redundant workflow runs
ddennedy May 6, 2026
abead7f
fix ctest on msvc
ddennedy May 6, 2026
50c1f24
Merge branch 'refactor-image-convert' into libplacebo
ddennedy May 7, 2026
6c75bd1
remove placebo.convert filter
ddennedy May 7, 2026
2dcf694
fix cppcheck
ddennedy May 7, 2026
1844703
mlt_frame_append_convert_image()
ddennedy May 7, 2026
148bfa2
Merge branch 'refactor-image-convert' into libplacebo
ddennedy May 7, 2026
705b3e0
update CMakeLists.txt to require libplacebo version 5.229
ddennedy May 7, 2026
4c74b79
improve placebo.render meta & cleanup
ddennedy May 8, 2026
2ca901b
Merge branch 'master' into refactor-image-convert
ddennedy May 21, 2026
f44d211
Merge branch 'refactor-image-convert' into libplacebo
ddennedy May 21, 2026
8a1666b
Merge branch 'master' into libplacebo
ddennedy Jul 9, 2026
8985958
Change minimum Fedora build test version to 40
ddennedy Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions .github/workflows/build-distros.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ on:
- debian-stable
- fedora-42
- fedora-38
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
build:
Expand All @@ -34,35 +37,36 @@ jobs:
sed -i 's/^Types: deb/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
DEBIAN_FRONTEND=noninteractive apt-get -qq update
DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev libplacebo-dev
- name: ubuntu-22.04
image: ubuntu:22.04
setup_script: |
sed -i '/^#\sdeb-src /s/^#//' "/etc/apt/sources.list"
DEBIAN_FRONTEND=noninteractive apt-get -qq update
DEBIAN_FRONTEND=noninteractive apt-get -yqq build-dep mlt
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev
DEBIAN_FRONTEND=noninteractive apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev libplacebo-dev
- name: debian-unstable
image: debian:unstable
setup_script: |
echo 'deb-src http://deb.debian.org/debian unstable main' >> /etc/apt/sources.list
apt-get -qq update
apt-get -yqq build-dep mlt
apt-get -yqq install libplacebo-dev
- name: debian-testing
image: debian:testing
setup_script: |
echo 'deb-src http://deb.debian.org/debian testing main' >> /etc/apt/sources.list
apt-get -qq update
apt-get -yqq build-dep mlt
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev libplacebo-dev
- name: debian-stable
image: debian:stable
setup_script: |
echo 'deb-src http://deb.debian.org/debian stable main\ndeb-src http://deb.debian.org/debian stable-updates main' >> /etc/apt/sources.list
echo 'deb http://deb.debian.org/debian bookworm-backports main' >> /etc/apt/sources.list
apt-get -qq update
apt-get -yqq build-dep mlt
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev
apt-get -yqq install cmake qt6-base-dev libqt6svg6-dev libplacebo-dev
- name: fedora-42
image: fedora:42
setup_script: |
Expand All @@ -75,7 +79,8 @@ jobs:
libtheora-devel libvorbis-devel libvdpau-devel \
libsoup-devel liboil-devel python-devel alsa-lib \
pulseaudio-libs-devel gcc-c++ cmake ffmpeg-free-devel \
movit-devel rubberband-devel vid.stab-devel
movit-devel rubberband-devel vid.stab-devel \
libplacebo-devel
- name: fedora-38
image: fedora:38
setup_script: |
Expand Down
12 changes: 10 additions & 2 deletions .github/workflows/build-linux.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
name: build-test-linux-on-push

on: [push, pull_request]
on:
push:
branches:
- master
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
python:
Expand Down Expand Up @@ -39,7 +47,7 @@ jobs:
sudo apt-get -qq update
sudo apt-get -yqq build-dep mlt
sudo apt-get -yqq install qt6-base-dev libqt6svg6-dev libqt6core5compat6-dev
sudo apt-get -yqq install cmake ninja-build kwalify
sudo apt-get -yqq install cmake ninja-build kwalify libplacebo-dev
cmake -D CMAKE_BUILD_TYPE=Debug -D BUILD_TESTING=ON -D SWIG_PYTHON=ON -S . -B build -G Ninja
cmake --build build
sudo cmake --install build
Expand Down
12 changes: 11 additions & 1 deletion .github/workflows/build-msys2-mingw64.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
name: build-test-msys2-mingw64-on-push

on: [push, pull_request, workflow_dispatch]
on:
push:
branches:
- master
pull_request:
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
build:
Expand Down Expand Up @@ -59,6 +68,7 @@ jobs:
mingw-w64-x86_64-x264
mingw-w64-x86_64-x265
mingw-w64-x86_64-zimg
mingw-w64-x86_64-libplacebo

- uses: actions/checkout@v4

Expand Down
12 changes: 10 additions & 2 deletions .github/workflows/build-windows-msvc.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
name: build-test-windows-msvc-on-push

on: [push, pull_request]
on:
push:
branches:
- master
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
packages: write
Expand Down Expand Up @@ -55,4 +63,4 @@ jobs:

- name: Run tests
run: |
ctest --test-dir build -C Debug
ctest --test-dir build -C Debug --rerun-failed --output-on-failure
14 changes: 13 additions & 1 deletion .github/workflows/static-code-analysis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
name: static-code-analysis

on: [push, pull_request]
on:
push:
branches:
- master
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
cppcheck:
Expand All @@ -19,6 +27,10 @@ jobs:
--library=cppcheck.cfg
--suppress=ctuOneDefinitionRuleViolation
--suppress=syntaxError:src/modules/xml/common.c
--suppress=syntaxError:src/modules/placebo/filter_placebo_convert.c
--suppress=syntaxError:src/modules/placebo/filter_placebo_render.c
--suppress=syntaxError:src/modules/placebo/filter_placebo_shader.c
--suppress=syntaxError:src/modules/placebo/gpu_context.c
steps:
- uses: actions/checkout@v4
- name: Install Cppcheck
Expand Down
15 changes: 14 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ option(MOD_NORMALIZE "Enable Normalize module (GPL)" ON)
option(MOD_OLDFILM "Enable Oldfilm module" ON)
option(MOD_OPENCV "Enable OpenCV module" OFF)
option(MOD_OPENFX "Enable OpenFX module (GPL)" ON)
option(MOD_MOVIT "Enable OpenGL module" ON)
Comment thread
ddennedy marked this conversation as resolved.
Outdated
option(MOD_PLACEBO "Enable libplacebo GPU module" ON)
option(MOD_PLUS "Enable Plus module" ON)
option(MOD_PLUSGPL "Enable PlusGPL module (GPL)" ON)
option(MOD_QT6 "Enable Qt6 module (GPL)" ON)
Expand Down Expand Up @@ -98,7 +100,7 @@ endif()

if(NOT EXISTS ${MLT_DATA_OUTPUT_DIRECTORY})
if(WIN32) # symlinks require admin rights on Windows
file(COPY "${CMAKE_SOURCE_DIR}/src/modules" DESTINATION "${CMAKE_BINARY_DIR}/out/share" FILES_MATCHING REGEX yml|txt)
file(COPY "${CMAKE_SOURCE_DIR}/src/modules" DESTINATION "${CMAKE_BINARY_DIR}/out/share" FILES_MATCHING REGEX "yml|txt|ini|dict")
file(RENAME "${CMAKE_BINARY_DIR}/out/share/modules" "${MLT_DATA_OUTPUT_DIRECTORY}")
file(COPY "${CMAKE_SOURCE_DIR}/presets" DESTINATION "${MLT_DATA_OUTPUT_DIRECTORY}")
file(COPY "${CMAKE_SOURCE_DIR}/profiles" DESTINATION "${MLT_DATA_OUTPUT_DIRECTORY}")
Expand Down Expand Up @@ -309,6 +311,15 @@ if(MOD_OPENFX)
pkg_check_modules(glib IMPORTED_TARGET glib-2.0)
endif()

if(MOD_PLACEBO)
pkg_check_modules(libplacebo IMPORTED_TARGET libplacebo)
if(libplacebo_FOUND)
list(APPEND MLT_SUPPORTED_COMPONENTS placebo)
else()
set(MOD_PLACEBO OFF)
endif()
endif()
Comment thread
ddennedy marked this conversation as resolved.

if(MOD_PLUS)
pkg_check_modules(libebur128 IMPORTED_TARGET libebur128)
list(APPEND MLT_SUPPORTED_COMPONENTS plus)
Expand Down Expand Up @@ -583,6 +594,8 @@ add_feature_info("Module: Normalize" MOD_NORMALIZE "")
add_feature_info("Module: Oldfilm" MOD_OLDFILM "")
add_feature_info("Module: OpenCV" MOD_OPENCV "")
add_feature_info("Module: OpenFX" MOD_OPENFX "")
add_feature_info("Module: Movit" MOD_MOVIT "")
Comment thread
ddennedy marked this conversation as resolved.
Outdated
add_feature_info("Module: Placebo" MOD_PLACEBO "")
add_feature_info("Module: Plus" MOD_PLUS "")
add_feature_info("Module: PlusGPL" MOD_PLUSGPL "")
add_feature_info("Module: Qt6" MOD_QT6 "")
Expand Down
22 changes: 22 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
@@ -1,6 +1,28 @@
MLT Release Notes
-----------------

Version 7.40.0

Framework
- Added list-based image-conversion callback dispatch on mlt_frame.
Use `mlt_frame_push_convert_image()` to register a converter instead of
setting `frame->convert_image` directly. Multiple converters are tried in
registration order; the first that succeeds wins. New public API:
- `mlt_frame_push_convert_image()`
- `mlt_frame_convert_image()`
- `mlt_frame_next_convert_image()`
- `mlt_frame_has_convert_image()`
- `mlt_frame_copy_convert_image()`
- API behavior change: `mlt_frame_s::convert_image` is now read-only after
init and is permanently set to the dispatcher `mlt_frame_convert_image()`.
External code that set this field directly to a custom function will no
longer have that function called. If you really need that (never heard of
someone who does), clear the frame's "_convert_image_callbacks" property
and use `mlt_frame_push_convert_image()` instead.
- Image converters (`movit.convert`, `avcolor_space`, `imageconvert`) are
now attached data-driven via `loader.ini` key `image_convert`.


Version 7.38.0

Framework
Expand Down
6 changes: 5 additions & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,8 @@ cppcheck:
--include=src/framework/mlt_types.h \
--library=cppcheck.cfg \
--suppress=ctuOneDefinitionRuleViolation \
--suppress=syntaxError:src/modules/xml/common.c
--suppress=syntaxError:src/modules/xml/common.c \
--suppress=syntaxError:src/modules/placebo/filter_placebo_convert.c \
--suppress=syntaxError:src/modules/placebo/filter_placebo_render.c \
--suppress=syntaxError:src/modules/placebo/filter_placebo_shader.c \
--suppress=syntaxError:src/modules/placebo/gpu_context.c
Comment thread
ddennedy marked this conversation as resolved.
Outdated
9 changes: 9 additions & 0 deletions src/framework/mlt.vers
Original file line number Diff line number Diff line change
Expand Up @@ -687,3 +687,12 @@ MLT_7.36.0 {
mlt_color_convert_trc;
mlt_profile_is_valid;
} MLT_7.34.0;

MLT_7.40.0 {
global:
mlt_frame_push_convert_image;
mlt_frame_has_convert_image;
mlt_frame_convert_image;
mlt_frame_next_convert_image;
mlt_frame_copy_convert_image;
} MLT_7.36.0;
Loading
Loading