Helge Norberg [Fri, 9 Oct 2015 09:54:07 +0000 (11:54 +0200)]
* Reenabled unit-test project after move to CMake.
* Reimplemented multichannel audio support from 2.0.7 but using ffmpeg's pan filter.
- Fixed bug in caspar::array where it assumed std::uint8_t instead of T.
- Started using caspar::array for audio as well, to allow for AVFrame to be the storage to avoid unnecessary copying when pan filtering audio.
* Made win32_exception a caspar_exception to enable full stack trace information when an access violation or similar occurs.
* FFMpeg Consumer now send more data via OSC to enable clients to indicate recording progress.
* Code changes required by Visual Studio 2015 including some local disabling of some warnings.
* Removed some workarounds previously required for Visual Studio 2013 but not for 2015.
* win32_exception is now a caspar_exception to allow complete stack trace information to be attached.
* streaming_consumer.cpp is now more backwards compatible with ffmpeg_consumer.cpp. Will hopefully be able to completely replace it.
* Fixed race condition in io_service shutdown.
* tbb_malloc does not work on vc14 yet. Disabled for now.
* Changed usage of BOOST_THROW_EXCEPTION to CASPAR_THROW_EXCEPTION in all places, to fill in stack trace information.
* Fixed double av_freep in ffmpeg_consumer
* Made all CG commands which operate on a running cg_proxy instance return 404 CG ERROR if no cg_proxy is running.
* Fixed bug in input where video without audio causes input to be ticked to much in the beginning.
* Merged read_fps code from 2.0 to 2.1 for correctly detecting framerate.
* Changed logging of execution of AMCP commands.
* Changed to int to simplify code in places in the photoshop producer where the exact size of the integer is not essential to correctly parse the document.
* Fixed subtle bug in photoshop producer where an uint16 was casted to int but should have been casted to int16 before casting to int (usually widening, so more than 16 bits).
* Reverted usage of wstring in pdf_reader to string.
* Fixed bug where lexical_cast from double to string in Linux where swprintf was used under the hood causing , to always be used regardless of C-locale or C++-locale by defining BOOST_NO_SWPRINTF on Linux.
* Added better info() to scene_producer.
* PSD producer is now implemented with more portable cstdint types where applicable.
* Added a lot of trace logging to PSD producer to debug file format easier when developing.
* Fixed serious bug in PSD producer where the code was dependant on function arg evaluation order (unspecified in C++).
* Fixed bug in PSD producer where PSD 'long' types should be interpreted as signed 32 bit values instead of unsigned.
* Fixed bug in PSD producer where EngineDict.StyleRun.RunArray..StyleSheet.StyleSheetData.FillColor.Values was not optional.
Helge Norberg [Wed, 26 Aug 2015 16:53:26 +0000 (18:53 +0200)]
* Improved precision of prec_timer on Linux.
* Made screen consumer poll the second field from the yadif filter after the first field has been displayed to better utilize the cpu time.
* Buffer more audio in oal_consumer when higher frame rates are used to reduce the possibility of audio pops.
Helge Norberg [Wed, 19 Aug 2015 15:56:28 +0000 (17:56 +0200)]
* Removed provide sync support from newtek_ivga_consumer. It didn't work as expected.
* Removed risk of newtek_ivga_consumer lagging the entire channel if bandwidth/cpu power is not sufficient.
Helge Norberg [Tue, 18 Aug 2015 20:14:01 +0000 (22:14 +0200)]
- Removed need of non-deterministic sleeps during server shutdown.
- Made KILL and RESTART shutdown as cleanly as "q".
- Added logging to some destructors to help when debugging shutdown issues.
- Fixed some deadlocks/lifetime issues.
Helge Norberg [Fri, 14 Aug 2015 14:43:33 +0000 (16:43 +0200)]
* Installed general protection fault handler in more places.
* Catch and log exceptions in all custom boost::threads
* Log the thread name when logging stack traces.
* Fixed bug in AsyncEventServer destructor where "this" will be destroyed when a posted task is executed.
Helge Norberg [Tue, 11 Aug 2015 17:55:56 +0000 (19:55 +0200)]
* Enforce help descriptions for consumers in code.
* Added HELP CONSUMER command to list available consumers and get help for them.
* Updated generate_docs.cpp to also include a wiki page for the consumers.
* Enforce help descriptions for producers in code.
* Added HELP PRODUCER command to list available producers and get help for them.
* Updated generate_docs.cpp to also include a wiki page for the producers.
* Refactored so that frame_producers are stored in a frame_producer_registry instance instead of being stored in global variables.
* Created a new executable called generate_docs which generates the relevant parts of the wiki which can be auto generated from the online help.
Helge Norberg [Tue, 30 Jun 2015 12:53:52 +0000 (14:53 +0200)]
* Merged RESUME command.
* Refactored AMCP commands to simply be implemented as free functions instead of a class for each command. Also added support for considering sub commands as a command on their own, to allow for example MixerCommand to be split up into MIXER FILL and MIXER OPACITY etc.
* Also simplified error handling in AMCP commands by embracing the use of exceptions more (letting AMCPCommandQueue.cpp create the error responses based on the type of exception).
* Created an online help system which could also be leveraged for generating parts of the wiki (AMCP command syntax and other artifacts that are tightly coupled to server code). This makes it easier to be forced to write documentation when adding new AMCP commands etc. The actual documentation for each AMCP command is documented close to the implementation of each command, making it easier to catch inconsistencies in the documentation.
* Added possibility for the SWAP command to swap mixer transformations in addition to the layers themselves.
* Fixed bug in INFO TEMPLATE command.
Helge Norberg [Thu, 18 Jun 2015 17:34:46 +0000 (19:34 +0200)]
* Merged layer_producer and channel_producer from 2.0 to the reroute module (replacing the existing implementation).
* In order to support route:// without the same intrusive changes in AMCPCommandsImpl.cpp from 2.0, refactored so that every producer factory gets a list of channels.
* Refactored so that frame_factory and video_format_desc is now part of a type called frame_producer_dependencies. The list of channels needed by reroute producer was also added to this class. Future dependencies will not need a change in the signature of every producer factory.
* Fixed possible race condition in stage.cpp where std::map could be modified from multiple threads
Helge Norberg [Tue, 16 Jun 2015 15:33:43 +0000 (17:33 +0200)]
* Merged streaming_consumer from 2.0
* Merged <CLIENT_IP_ADDRESS> paceholder support on ADD and REMOVE commands
* Made consumers support mixed case parameters, allowing streaming_consumer to work correctly.
* Modified newtek_ivga_consumer AMCP construction to require the parameter DONT_PROVIDE_SYNC instead of the parameter PROVIDE_SYNC, which makes more sense since the default is to provide sync.
Helge Norberg [Mon, 15 Jun 2015 13:53:11 +0000 (15:53 +0200)]
* Merged newtek iVGA consumer from 2.0.
* Merged possibility for consumers to not participate in frame presentation time synchronization by returning -1 as buffer depth, allowing for unnecessary lags to be avoided when adding/removing consumers that are not expected to present video/audio at a specific time.
* Fixed counter initialization in async destruction proxies (this time it should be fixed).
Helge Norberg [Fri, 12 Jun 2015 12:51:46 +0000 (14:51 +0200)]
* Implemented supports for timeline marks in scene_producer. A mark is set on a specific frame and can be of type start, stop, jump_to and remove:
- A start mark has a name and can be started via call() with "play()" as first parameter and the mark label as the second. A jump_to mark will also make the given start mark be played from (makes looping animations possible). Going to a start mark always causes the scene to unpause.
- A stop mark on a frame makes the scene pause until a call("play()", mark_label) occurs.
- When the timeline reaches a jump_to frame the corresponding start mark is seeked to.
- A remove mark removes the entire scene (saving resources after outro).
Special start marks are "intro" which will be the first frame if not defined, and "outro" which will be an empty frame if not defined.
call() with "next()" as first parameter will jump to the next start mark from the current position.
* Created cg_proxy for scene producer going to play mark "intro" on play() and "outro" on stop(). next() jumps to the next start mark from the current frame.
* Implemented interlaced support in scene_producer.
* Implemented support in psd_producer to use the timeline mark features in scene_producer. The marks are stored in the comment track of the psd. A comment on a frame can contain multiple comma separated marks, each with the syntax:
<mark_type> [label]
Examples of complete comment tracks (first number is frame number):
0 "start intro"
20 "start loop_begin"
80 "jump_to loop_begin, start outro"
100 "remove"
* Fixed bug where usage of chroma key was never reset in the shader.
Helge Norberg [Tue, 9 Jun 2015 10:52:40 +0000 (12:52 +0200)]
* Instead of merging the chroma key conditional compilation, the uniform conditional was moved directly to the main function in the shader, which seems to give the same effect.
Helge Norberg [Tue, 9 Jun 2015 09:33:50 +0000 (11:33 +0200)]
* Merged chroma key feature, but removed unsupported parameters and color names. Implemented chroma mode in image_transform instead of global layer setting, thus supporting animations as well.
* Implemented support for chroma in scene_producer as well.
Helge Norberg [Fri, 5 Jun 2015 12:35:27 +0000 (14:35 +0200)]
* Refactored blend_mode to be part of frame_transform instead of a global parameter on a layer.
* Added support for sub layers in the image mixer.
* Added blend_mode support to layers in a scene_producer.
Helge Norberg [Thu, 4 Jun 2015 14:42:59 +0000 (16:42 +0200)]
* Merged MIXER MIPMAP support from 2.0. Implemented as a setting in frame_transform so it does not have to be a global setting on a layer.
* Exposed mipmap and is_key setting to scene_producer.
* Fixed bug in async destruction of consumers and producers where counter was uninitialized.
Helge Norberg [Wed, 3 Jun 2015 21:15:46 +0000 (23:15 +0200)]
* Merged MIXER CROP, MIXER ANCHOR, MIXER ROTATION and MIXER PERSPECTIVE from 2.0
* Merged reporting of current MIXER values when no parameters are given.
* Changed so that each vertex / texture coordinate pair in frame_geometry is encapsulated in a struct, to not require producers to keep track of indexes in an a array.
* Changed so that the same code in image_kernel draws a single QUAD and a list of QUAD's
* TODO make perspective correction and cropping work with non default geometry like the text producer. Currently no cropping or perspective correction works for custom geometry.
* TODO make interaction coordinate translations work with new transforms.
* Reverted text_producer change so that the baseline of the font is the actual position.
* Fixed so that JSON encoded template data is also forwarded as is, instead of being interpreted as an .ftd file name.
* Implemented anchor, crop, perspective and rotation support in scene_producer
Helge Norberg [Tue, 26 May 2015 12:13:55 +0000 (14:13 +0200)]
* Added interactive parameter to screen consumer in XML configuration. Default is true.
* Made screen consumers created via ADD to by default be windowed and interactive. Add FULLSCREEN and NON_INTERACTIVE to negate behavior.
Helge Norberg [Tue, 19 May 2015 15:58:00 +0000 (17:58 +0200)]
* Fixed CEF compilation error in debug mode.
* Reenabled text producer.
* Upgraded StackWalker and increased STACKWALK_MAX_NAMELEN from 1024 to 4096 (crashes on long function names otherwise).
* Added psd documents as STILL media type in CLS and CINF.
Helge Norberg [Tue, 12 May 2015 11:16:07 +0000 (13:16 +0200)]
* Merged html producer and updated to latest CEF version (does not have satisfactory performance though see http://casparcg.com/forum/viewtopic.php?f=3&t=3153). Registers a cg_proxy implementation as well, to work seamlessly with CG commands.
* Modules can now intercept command line arguments (used by html module) and take complete control of server start up.
* Module uninitialization now in reverse order of initialization.