To apply for this task please complete this mandatory coding challenge together with your application: T872
Applications without matching coding challenge completed will not be considered.
---
To be able to provide special video data, e.g. RAW data or unusual color space, which is not supported by many video players or editors, so called frame server is used.Frame server is an application which provides video data, Basically it is an application which provides video data through some virtual filelike RAW, e.g.to video players or editors, in AVI or MPEGwhich don't support this format. Most approaches use FUSE (Filesystem in Userspace) to intercept system calls to such a file and to provide data to the calling video player/editor.
Additionaly it has to be ensured that memory usage is low enough and performance acceptable. Next step would be a mechanism to provide proxy of the clips for not high-end machines. The focus of this task is to implement OpenCine module, which re-uses OCcore lib to provide video data through libfuse/DokanyFUSE (Filesystem in Userspace) as dummy AVI file.
**Goals:**
- Create a frame server module using libfuse and attach OCcore as data provider
- Extend OCcore for providing consequent frames, so the video is playable in a video player
- Add user interface to control frame server settings, like frames per second (FPS) or de-Bayering processor
- Add Dokany, to be able to run frame server on Windows and adjust CMake scripts accordingly, for consistent build process without user intervention, like on Linux
**Prerequisites:**
- **Windows**
-- VisualStudio 2017 and higher or QtCreator
-- Qt 5.10 and higher
-- CMake
-- Git
-- optionally: GUI client for Git (e.g. GitKraken or SourceTree)
orYou are expected to have working knowledge of (most of) the following:
- **Linux** (e.g. LinuxMint 18.1-- C and C++ and their coding standards (Any IDE)
-- Qt 5.10 and higher-- CMake
-- QtCreator-- FUSE (file in user space for linux)
-- CMake-- RAW12, MLV, AVI, BMP, Adobe DNG file formats
-- OpenGL headers from freeglut3-dev package-- Qt 5.10 and higher (for creating the User Interface)
-- Git-- Dynamic libraries (and their linking - see T872 for appropriate task that tests this)
-- optionally: GUI client for Git (e.g.-- Git based workflow, GitKraken)
**Required programming skills:**Github account and Git client
- C / C++ or similar language experience-- Debayering methods and their implementation in OpenCine (T872 tests this)
--- Basic understanding of image processing
**Difficulty level:** Medium
**Mentors:** Andrej, Supragya
**References:****Links**
- Frameserver: https://en.wikipedia.org/wiki/Frameserver
**Links**
- Open Cine Overview: https://www.apertus.org/opencine
- Wiki: https://wiki.apertus.org/index.php/OpenCine
- FUSE: https://de.wikipedia.org/wiki/Filesystem_in_Userspace
- libfuse: https://github.com/libfuse/libfuse
- Dokany: https://github.com/dokan-dev/dokany
- MLV file format: https://www.magiclantern.fm/forum/index.php?topic=7122.0
- DNG file format: https://helpx.adobe.com/in/photoshop/digital-negative.html
- Frame server prototype (FUSE / AVI): https://github.com/BAndiT1983/OC_FrameServer/tree/dev
To get in touch with any mentor check the [[ https://www.apertus.org/GSoC-2019-Mentor-Contact-List | Mentor Contact List]].