Sep 07, 2017
OpenShot 2.4.0 Released | Improved Stability & More!
The latest and greatest version of OpenShot Video Editor (version 2.4.0) has been officially released, and I'm proud to bring you all the details! This is a stability-focused release, and much of the effort was "behind-the-scenes" type work.
Vastly improved stability, improved undo/redo history (now being saved inside each project file), new freeze and zoom menu, updated translations, and many bug fixes!
I have spent the past few months working along side a few other brave developers (huge thanks to Craig and Peter), determined to solve a very difficult stability issue, which is the leading cause of crashes in the OpenShot 2.x source code. The challenge was to isolate the crash, and find a way to reliably reproduce the crash in our development environments. This proved very difficult, and often we could run hours and hours of test code before a crash would happen. And of course, debuggers and analysis tools would slow the code down, and reduce the likelihood of a crash even more, often preventing the crash completely.
For those who want more technical details on the crash, please keep reading. The crash was a race condition and memory corruption bug, caused by a few different things. We process video and audio data in a thread pool, and sometimes things happen in a very unpredictable order. In a very rare condition, memory was being cleared while it was still being accessed. Also, we switched from an older tr1::shared_ptr to std::shared_ptr, and changed the way we initialize our shared_ptr instances, reducing the amount of memory being requested. Also, there were a few spots that needed to be protected between threads, and required locks. So, in summary, a handful of small changes, and a few months of debugging, and we can no longer crash libopenshot during video processing or video encoding! I'm very excited about solving this one if you can't tell!
Here is the full list of improvements:
openshot-qt (Video Editor)
Improving undo/redo support. Now the last X number of undo/redo actions are stored in the project file. The number can be adjusted in the prefences, under the auto-save tab. This also vastly improves the usefulness of the auto-save system, since it saves your undo/redo history as well.
Fixed Image Sequence exporting. Supports PNG, JPG, PPM, BMP and a few others. Also added 'Audio Only' and 'Video Only' export options.
Adding new Freeze and Freeze & Zoom presets, to quickly insert freezes into clips.
Removing 'show waveform' from separate audio menu, to increase speed of separating audio.
Protect file menu from invalid file_id.
Protect timeline dropEvent from empty item_id.
Cloaking timeline body until Angular loads fully (so we don't see the occasional pop-in debug layout).
Updating translations and supporters.
Bumping version to 2.4.0 (minimum libopenshot version 0.1.8).
libopenshot (Video Library)
Prevent crashes related to too many threads (on 24+ thread systems).
Migrating tr1 to std, adding C++11 support to build scripts, fixing crash in FFmpegReader (caused by shared_ptr, buffer, and last_video_frame corruption). Much improved stability with this change. Thanks to Craig and Peter for the help!
Fixing crash on Ubuntu build server.
Fixed a strange bug related to exporting image sequences. The filename property was not being set on the AVFormatContext. Also fixed a bug when exporting to JPEG image sequences related to max_b_frames and certain codecs.
Fixing issue with incorrect image size caches, which results in blurry/smudgy scaling on certain things.
Fix issue with loading time curves that are never processed (i.e. have no values)
Adding additional locks when adding/changing audio data. Reducing FrameMapper to a single frame at a time.
Fixing crash on Time keyframes where it would sometimes calculate an invalid frame number.
Fixing audio pops when stacking multiple clips with different offsets (pretty big issue for some people, just depending on your source framerates and position/start of clips).
Removing nested OMP processing from FrameMapper. Adding lock inside time mapping (to prevent crashes when speeding up/slowing down clips). Adding omp critial lock to Frame GetAudioChannelsCount() and GetAudioSamplesCount() methods.
Bumping version to 0.1.8 (SO version 13).