Commit Graph

112 Commits

Author SHA1 Message Date
Jonathan Thomas
8f385c112a Improved Keyframe Performance (#197)
* Refactor of Coorindate and Keyframe optimized for performance (much faster than previously). Also refactored FrameMapper to not use a Keyframe, and to only process frame mapping when needed... speeding up Json loading of project files.

* Fixing FrameMapper linear calculation to match existing Keyframe calculation

* Fixing Keyframe to pass original unit tests, and correctly calculate the Keyframe repeat fractions and deltas.

* Small refactor of time mapped logic in Clip.cpp
2019-03-06 15:35:03 -06:00
Jonathan Thomas
7b6eb9c21b Integration of resvg SVG library (optional during build) (#185)
* Integration of libresvg SVG library (optional during build)

* Major refactor of max_width and max_height for preview optimization

* Fixed many bugs related to preview resizing, with regards to cached frames

* Updating gitlab CI to find RESVGDIR correctly for windows, and adding svgz support

* Updating cmake findresvg module to search for windows locations first, to prevent an issue on our windows builders and updating some CMake output.

* Removing folder path from resvg header, since it could be installed in different named folders. This is an attempt to fix Windows include issues.

* Making call to AV_FREE_FRAME conditional for non windows systems (because it crashes on Windows for seemingly no reason). Needs more investigation.
2019-01-19 02:18:52 -06:00
Jonathan Thomas
e879188a7d FFmpeg 3 & 4 support, Travis CI support, OpenMP schedule change (#160)
* FFmpeg4 support. Compile warnings fixes. Credit goes to many people, including ferdnyc, peterM, and other awesome folks!

* Adding environment checking to enable/disable omp taskwait after each video/audio frame is processed. This is experimental for some users with crashes.

* Moving `omp taskwait` to after the ProcessVideoPacket() method, since that is the only place it is useful.

* Fixing crashes on missing Clip source file, and changing FFmpeg scaling algorthm from SWS_BILINEAR to  SWS_LANCZOS (for higher quality scaling)

* Update FindFFmpeg.cmake module, and updating build script. Also enabling debug builds.

* Updating experimental travis build script

* Fixed unit test for newer version of FFmpeg (audio resampling)

* Experimental travis multiple jobs

* Adding OMP schedule hint (thanks PeterM), which prevents crashes in some circumstances.
2018-09-11 00:40:31 -05:00
Jonathan Thomas
2f45a4eb38 Adding new audio mixing enum, to allow for no automatic audio mixing, average mixing (where all overlapping clips average to 100% audio), or reduce mixing (where clips overlapping clips are all reduced by a constant value to reduce popping). (#131) 2018-06-27 01:35:38 -05:00
Jonathan Thomas
93c2c0247a Make copy of time mapped image data, so those frames can be manipulated (transformed, passed to effects, etc...) 2018-05-25 00:34:29 -05:00
Jonathan Thomas
7fc657c82b Removing anchor from clip properties (since it is unused) 2018-04-21 15:51:43 -05:00
Jonathan Thomas
181a8b42d8 Fixing regression on Clip constructor, and simplifying pointer initialization 2018-02-06 13:05:30 -06:00
Jonathan Thomas
f2b0f3a0f4 Adding metadata from format, audio stream, and video streams to ReaderBase.info, which in some cases includes the 'rotate' metadata added by certain cameras, and audio metadata like title, album, artist, copyright, dates, etc... Auto-Rotates any Clip with Reader metadata 'rotate' attribute. 2018-02-03 01:57:18 -06:00
Jonathan Thomas
566c8f5a82 Spelling and typo fixes. Thanks Gelma for the pull request 2018-01-06 02:22:05 -06:00
Jonathan Thomas
2b41ad9938 More experimental critial sections trying to prevent race conditions on high CPU core systems 2017-11-11 17:16:56 -06:00
Jonathan Thomas
2fcb35ddcc Removing throw statements from header files (thanks Peter) 2017-10-26 18:44:35 -05:00
Jonathan Thomas
c95db460d6 Big update! Updating all "long int" frame number types to int64_t, so all 3 OSes will produce the same depth and precision on frame numbers. Also removing variable bitrate support temporarily, since it causes more problems than it solves. 2017-09-28 16:03:01 -05:00
Jonathan Thomas
f12ffe692b 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! 2017-08-20 17:37:39 -05:00
Jonathan Thomas
b094ac8469 Fixing issue with incorrect image size caches, which results in blurry/smudgy scaling on certain things. 2017-07-27 02:25:20 -05:00
Jonathan Thomas
2134769f1a Fix issue with loading time curves that are never processed (i.e. have no values) 2017-07-24 15:43:35 -05:00
Jonathan Thomas
c30dbb90d8 Adding additional locks when adding/changing audio data. Reducing FrameMapper to a single frame at a time (increase seek speed and decrease crashes). Fixing crash on Time keyframes where it would sometimes calculate an invalid frame number. 2017-07-19 16:05:07 -05:00
Jonathan Thomas
a322411669 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. 2017-06-22 15:26:40 -05:00
Jonathan Thomas
5290f67a97 Fixing regression where source readers could have their info.has_video and info.has_audio set to an invalid state... causing crashes and freezes. 2017-05-30 15:35:43 -05:00
Jonathan Thomas
3a884e71dc Big improvement with handling invalid video and audio timestamps, defaulting to more sane values (when huge crazy timestamps are detected). Also fixing a bug when disabling video/audio tracks on FrameMappers. Also adding additional bail-out code when stuck searching for a video/audio packet that probably doesn't exist. Added improved "checked" handling, and once 1 frame is detected as invalid, clean out any other invalid ones as well. 2017-05-17 01:17:42 -05:00
Jonathan Thomas
97ec6298ff Adding frame number display options to a clip, which can be super useful when debugging issues. Options include: None, Clip, Timeline, or Both. Also improving missing frame detection, to have less false positives (i.e. flickering 1st frame) 2017-03-15 02:06:53 -05:00
Jonathan Thomas
dc25576fab Removing transform handles, since I will instead implement that in Python rather this library. Also, refactoring a bit of the clip transforms, to keep the rotation center correct. 2017-02-04 22:01:06 -06:00
Jonathan Thomas
559d6a0545 Huge refactor of keyframe point handles (bezier quadratic curves) to use CSS-style syntax. Basically, the left and right handles of a point now use percentages, such as 0.0, 1.0, 0.5, 1.0 (between 0 and 1), and become real coordinates based on the value differences between points (in real time). Also simplified the JSON property creation. Also, many unit tests have been updated, because they were actually generating the incorrect values from before... although only slightly in most cases. Now they have correct values from the default bezier handles. 2016-10-19 02:19:07 -05:00
Jonathan Thomas
d2b3651d87 Fixing crash when FrameMapper sometimes returns a blank Frame objects. Not sure why that is possible, but now it fails gracefully. Also, extending the cache clearing code on timeline +/- 1 more frame, to be sure we clear frames that have changed. 2016-09-19 22:27:36 -05:00
Jonathan Thomas
1743558f99 Improved image caching logic, to better estimate max image sizes possible, based on clip scale and keyframe settings... so we are always dealing with the smallest possible frame sizes for performance (without losing quality) 2016-09-17 17:14:27 -05:00
Jonathan Thomas
183b0714e2 Added a new optimized constructor to some readers (FFmpegReader, QtImageReader, ImageReader) to not Open() in the constructor, which dramatically speeds up creating hundreds of Readers (i.e. when opening a project). This is really only useful when inflating the reader with Json right after you instantiate it... 2016-09-16 17:43:26 -05:00