Helge Norberg [Thu, 29 Oct 2015 13:54:28 +0000 (14:54 +0100)]
* Absolutely *huge* performance improvement (or bugfix actually) in the rendering pipeline, allowing the next frame to be rendered immediately after the current frame has been *sent* to consumers, instead of *after* the consumers are ready for next frame.
Helge Norberg [Thu, 29 Oct 2015 12:36:30 +0000 (13:36 +0100)]
* screen_consumer: Avoid logging dropped-frame diagnostics tags while moving or resizing window (pollEvent blocks while moving/resizing on at least Windows)
Helge Norberg [Wed, 28 Oct 2015 16:24:21 +0000 (17:24 +0100)]
* audio_mixer: Fixed bug where int32 -> float -> back to int32 could cause an overflow when the amplitude was at maximum. Changed to double (can represent all integer values of int32, which float can't). Also added graceful clipping instead of overflow support, and diagnostic for when it happens
Helge Norberg [Wed, 28 Oct 2015 14:01:06 +0000 (15:01 +0100)]
* Added logging of severe diagnostics events to log at warning level. graph::set_tag now takes a severity parameter allowing expected tags such as param and seek to not be logged as a warning
Helge Norberg [Tue, 27 Oct 2015 10:09:44 +0000 (11:09 +0100)]
* Removed some redundant logging from AsyncEventServer.
* Removed print() from client_connection in favor of always using address()
* Moved some logging from info to trace.
* Fixed potential lifetime issue with using asio post/dispatch in AsyncEventServer.
* Fixed problem where AsyncEventServer did not log the ip address of the remote client, only the servers address.
* Log the number total number of connections served by one AsyncEventServer on connect and disconnect.
Helge Norberg [Mon, 12 Oct 2015 13:36:00 +0000 (15:36 +0200)]
* Implemented FLS command (font list).
* Fixed some resource leaks in text_producer.
* Load font list each time a text_producer is created to discover fonts uploaded after start.
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.