1 Movit 1.7.1, July 22nd, 2023
3 - Fix a bug when compiling in shaders, that could cause errors
4 with certain shader compilers. Reported by Stefano Rivera.
7 Movit 1.7.0, July 15th, 2023
9 - Compile shaders into the library. It is now allowed to give ""
10 as the data directory, which will use the compiled-in shaders.
11 Most users should probably just do that.
13 - Use exact sRGB matrix values for COLORSPACE_sRGB.
16 Movit 1.6.3, July 7th, 2019
21 Movit 1.6.2, March 18th, 2018
26 Movit 1.6.1, January 31st, 2018
28 - Loosen up some restrictions on strong one-to-one-effects. In particular,
29 this fixes a bug with MixEffect and compute shaders that hit some
33 Movit 1.6.0, January 24th, 2018
35 - Support for effects that work as compute shaders. Compute shaders are
36 generally slower than fragment shaders for the same algorithm,
37 but allow some forms of communication between shader invocations
38 and have more flexible output, which can enable more efficient algorithms.
39 See effect.h for more details. Note that the fastest rendering API on
40 EffectChain is now to a texture if possible, not to an FBO. This will
41 only matter if the last effect is a compute shader.
43 - Movit now includes a compute shader implementation of DeinterlaceEffect,
44 which is automatically used instead of the fragment shader implementation
45 if your GPU and OpenGL driver supports it (in practice, this means on
46 all platforms except on macOS). The compute shader version is typically
47 20–80% faster than the fragment shader version, depending on your GPU
50 A compute shader implementation of ResampleEffect was written but
51 ultimately failed to be faster, and so is not included.
53 - Support for microbenchmarks of effects through the Google microbenchmarking
54 framework (optional). Currently, DeinterlaceEffect and ResampleEffect has
55 benchmarks; enable them by running the unit test with --benchmark (also try
58 - Effects can now explicitly request _not_ to have mipmaps, which means they
59 can do so without needing to request bounce and fiddling with the sampler
60 state. Note that this is an API change for effects.
62 - Movit now requires C++11, both to build and to #include the header files.
63 Support for SDL1 has been dropped; unit tests and the demo program now need
66 - Various smaller bugfixes and optimizations.
69 Movit 1.5.3, August 10th, 2017
74 Movit 1.5.2, July 5th, 2017
76 - The texture generation for ResampleEffect (when the size is changed)
79 - Work around an NVIDIA driver threading bug by aggressively caching VAOs.
82 Movit 1.5.1, May 29th, 2017
84 - Allow YCbCrInput to change input format after finalize.
86 - Some minor YCbCrInput bugfixes.
89 Movit 1.5.0, March 21st, 2017
91 - Support interleaved Y'CbCr input (4:4:4 in a single texture).
93 - Support 10-bit and 12-bit Y'CbCr, both for input and output. For planar,
94 these are supported packed in 16-bit ints; for interleaved, 10:10:10:2 is
95 supported. (Efficient conversion to and from v210, ie. 10-bit 4:2:2,
96 is possible using compute shaders, but Movit does not include support
97 for them at the current point.) Note that this now means the num_levels
98 flag in YCbCrFormat actually matters, although 0 will be interpreted
99 as 256 (8-bit) for the benefit of older applications.
101 - Limited support for having multiple Y'CbCr outputs from a chain.
103 - Allow changing the Y'CbCr output coefficients runtime, ie., after finalize.
105 - Fix an issue where the last pass would have been rendered with the sRGB
106 flag set, which confused Qt applications running in certain NVIDIA
110 Movit 1.4.0, November 5th, 2016
112 - Allow setting the intermediate format for chains, instead of hardcoding
113 it at 16-bit RGBA; advanced users can use this to e.g. ask for 8-bit
114 sRGB intermediates, reducing the amount of memory bandwidth needed
115 at the cost of reduced precision. Whether this is a good tradeoff or not
116 depends on the exact chain and your requirements.
118 - Fix an issue where a (cached) shader program could be used from multiple
119 threads at a time, causing the uniforms to contain unpredictable values.
121 - Make the error printed on check_error() slightly friendlier: Include the
122 enum if possible, and print it to stderr instead of stdout.
125 Movit 1.3.2, February 23rd, 2016
127 - Fix an issue with initialization in certain locales. Patch from
128 Jean-Baptiste Mardelle.
131 Movit 1.3.1, February 15th, 2016
133 - Fix an issue where certain effect chains (particularly involving
134 out-of-tree effects that return only a constant color) could cause
135 texture coordinates not to be set properly. (The new code probably
136 also has slightly lower OpenGL driver overhead.) Reported by
137 Christophe Thommeret.
140 Movit 1.3.0, January 31st, 2016
142 - Movit now requires GLSL 1.30 (so a driver from 2008 or later);
143 before, it claimed to support 1.10, but actually used 1.30 features.
144 Note that some OpenGL drivers, in particular on OS X, only supports
145 GLSL 1.30 (actually, 1.50) if you have an OpenGL core context.
147 - Add a deinterlacer, based on YADIF.
149 - Allow parallel output to RGBA and Y'CbCr textures at the same time.
151 - Make FlatInput and YCbCrInput support taking in external OpenGL
152 textures. Also allow them to change width/height after instantiation.
154 - Various compatibility and performance fixes. In particular,
155 fp16 conversion on older (non-Haswell) CPUs is much faster, due to
156 new conversion code by Fabian Giesen.
159 Movit 1.2.0, September 24th, 2015
161 - Movit now ships a version.h with a #define MOVIT_VERSION that
162 increases on every API change, including in git. (The number
163 itself carries no semantic meaning beyond this.) Movit 1.2.0
164 is not API or ABI compatible with 1.1.x, so there has been a
165 soname bump to libmovit.so.3.
167 - More flexible Y'CbCr input; in particular, a special input
168 for 4:2:2 interleaved data (UYVY), and support for semi-planar
169 input (Cb and Cr in the same texture, like in NV12). Note that
170 you should now also set the new “num_levels” member of
171 YCbYCbCrFormat to 256 (signifying 8-bit input), although
172 it is not used yet; this is a stepping stone towards supporting
173 10- and 12-bit Y'CbCr.
175 - Basic support for Y'CbCr _output_. Currently only 8-bit,
176 and only 4:4:4 (ie., you'll need to subsample yourself
177 afterwards). It is possible to split the output into multiple
178 textures, though, if you want a luma/chroma split (NV12-like)
181 - Support top-left origin for output. This is only really useful
182 if you are rendering directly into some memory area with top-left
183 origin; most users will get the expected behavior by using
184 bottom-left as before.
186 - Rework uniform handling for less OpenGL overhead. Note that
187 this means your effects now need to register uniforms in the
188 C++ code instead of declaring them in the .frag file.
190 - Make the PaddingEffect border subpixel-aware, and also support
191 an arbitrary (subpixel) border offset. This means that you can
192 compose PaddingEffect with an integral left/top offset
193 (use the new IntegralPaddingEffect for potentially more speed)
194 and ResampleEffect with a subpixel left/top offset (and zoom to
195 compensate) to get Lanczos interpolation for the pixels and a
196 simple bilinear interpolation for the border itself.
198 - Fix a bug that could cause very bad filter weights in
201 - Various performance improvements, in particular with regards to
202 CPU usage in ResampleEffect.
205 Movit 1.1.3, March 29th, 2015
207 - Fix accuracy issues in ResampleEffect, particularly when
208 zooming. Note that this might cost a few percent performance.
209 Reported by Christophe Thommeret.
211 - Make the number of BlurEffect taps configurable.
212 Based on patch by Christophe Thommeret.
214 - Multiple other bugfixes, some courtesy Dan Dennedy and
215 Christophe Thommeret. In particular, thread-safety fixes
216 related to locales and chain finalization.
219 Movit 1.1.2, August 12th, 2014
221 - Performance bugfix: Fix texture freelist behavior so that it's
222 LRU instead of the exact opposite. Patch by Christophe Thommeret.
224 - Performance bugfix: Correct the number of blur taps read in the
225 blur filter (it was reading about twice as many as it should).
226 Also found by Christophe Thommeret.
229 Movit 1.1.1, April 12th, 2014
231 - Fix an issue that could cause assertion failure in ResourcePool
232 when FBOs are reused, especially with NVIDIA's drivers.
235 Movit 1.1, April 10th, 2014
237 - NOTE: Movit now uses libepoxy rather than GLEW. This is needed because
238 of core context and GLES3 support (see below). Movit 1.1 should be
239 generally API-compatible with 1.0.3 (with the exception of the next
240 point), but is not ABI-compatible, so there has been a soname bump
243 - NOTE: The rules for using an EffectChain or ResourcePool in multiple
244 OpenGL contexts or threads have changed somewhat; see the comments in
247 - Movit will now work in OpenGL core contexts, and on GLES 3.0 or newer.
248 (GLES2 devices are not supported.) This also holds for all unit tests,
249 provided that you use SDL2 and not SDL1 (because SDL2 is needed to set
250 up such contexts). Note that the included demo application still requires
251 a classic OpenGL context.
253 - ResampleEffect can now do sub-pixel translate and/or zoom.
255 - LumaMixEffect now has an “invert” flag, as a convenience to e.g. change
256 a left-to-right wipe into a right-to-left one.
258 - Significant reduction in driver overhead, especially on NVIDIA drivers.
260 - Various smaller bugfixes and performance improvements.
263 Movit 1.0.3, March 16th, 2014
265 - Yet more build system tweaks mainly related to distribution packaging.
268 Movit 1.0.2, March 16th, 2014
270 - Make a few tweaks to “make install”, to make distributions' lives easier.
273 Movit 1.0.1, March 16th, 2014
275 - Fix so that shared libraries are built.
278 Movit 1.0, March 16th, 2014