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.
Helge Norberg [Fri, 8 May 2015 18:16:52 +0000 (20:16 +0200)]
* Compiled ffmpeg for Linux as similary to Zeranoe Windows build as possible.
* Support for finding files on Linux in a case insensitive way.
* Enable stack trace in Linux
* Replaced boost::timer with caspar::timer because of too low resolution on Linux with boost::timer.
* Decoupled copying of runtime dependencies (dll:s and so:s) from shell to the module most directly dependant on the file.
* Extracted module startup from server.cpp to a generated included_modules.h.
* Each module CMakeLists.txt adds itself to included_modules.h, so if a project is not built under for example linux included_modules.h will not try to include the flash module.
* Removed hard dependencies to XML based consumer factories, so that server.cpp does not need to know what kind of consumers there are when iterating the <consumers /> element.
* Enabled modules like flash and html (will be merged soon) to hook in CG functionality without AMCPCommandsImpl.cpp needing too know about them.
* Removed hard dependencies to flash module from AMCP, CLK and CII protocol implementations, using the above mentioned abstractions.
Reduced the coupling between specific modules and InfoCommand, VersionCommand and main.cpp by enabling modules to contribute system information via providers
Helge Norberg [Fri, 27 Mar 2015 14:02:48 +0000 (15:02 +0100)]
Merged ffmpeg duration column and media_info_repository in CLS and CINF from master, and abstracted CLIP_TYPE as well, so that the CLS command does not need to know about media types.
Helge Norberg [Thu, 19 Mar 2015 15:59:35 +0000 (16:59 +0100)]
Created CMake build system for building CasparCG Server. To build:
1. Install CMake
2. Create a folder called build in the root.
3. With the build folder as working directory write:
cmake -A x64 -G "Visual Studio 12 2013" ..
4. Open build/CasparCG Server.sln
Helge Norberg [Mon, 9 Mar 2015 10:20:33 +0000 (11:20 +0100)]
* Added RxCpp library for LINQ api, replacing Boost.Range based iterations where appropriate (often becomes easier to read). It is missing some features but seems to be somewhat extendable when it comes to terminal operations via its aggregate() method.
Helge Norberg [Thu, 5 Mar 2015 21:10:47 +0000 (22:10 +0100)]
OGL image_mixer: Fixed a performance hotspot where an idle channel without any layers performs zero initialization of memory for each frame. Now uses a shared memory buffer as big as the biggest video mode available for all channels.
Helge Norberg [Wed, 4 Mar 2015 14:12:28 +0000 (15:12 +0100)]
- Fixed diag to work with new SFML version.
- Added thread local contextual information which currently include channel and layer where applicable (used by diag).
- Created graph_sink abstraction, separating diag backend from diag API.
- Bundled liberation fonts for use with SFML font rendering.
- In addition to ordinary diag OSD window backend an OSC backend has also been implemented:
/diag/[graph_id]/text <string> for the name of the graph
/diag/[graph_id]/color/[value-name] <int> for the 32-bit rgba value of the color for the tag or value with the a given name.
/diag/[graph_id]/context/channel <int> for the channel that the graph concerns (if any)
/diag/[graph_id]/context/layer <int> for the layer that the graph concerns (if any)
/diag/[graph_id]/value/[value-name] <float> for the value generally within 0.0 <= n <= 1.0
/diag/[graph_id]/tag/[value-name] only sent when an "event" happens, like a dropped frame or similar. Generally no values are sent for value-names dedicated for tagging.
Helge Norberg [Fri, 20 Feb 2015 20:47:19 +0000 (21:47 +0100)]
Created template alias for std::vector<T, tbb::cache_aligned_allocator<T>> to caspar::cache_aligned_vector<T> which we use heavily throughout the code.
Helge Norberg [Thu, 12 Feb 2015 15:52:55 +0000 (16:52 +0100)]
* Upgraded to Visual Studio 2013
* Notable changes needed because of boost upgrade:
- custom async implementation removed in favor of std::async. (boost::async still does not have support for deferred launch policy).
- std::future instead of boost::future throughout the code because of above change.
- std::future requires default constructibility, so for example caspar::array has been affected. spl::shared_ptr has been changed to std::shared_ptr in cases where required.
- boost.log changes adopted from 2.0.7.
* Fixed bugs where some OpenGL resources was not destructed on ogl thread.
* Fixed audio cadence issues in ffmpeg producer.