SoC 2018

From VideoLAN Wiki
Jump to navigation Jump to search


gsoc2016-sun-373x373.png

This page summarize the current list of ideas for VideoLAN project, for Google Summer Of Code 2018.

The list is not exhaustive, and is not limitative. Feel free to apply with your own idea!

Introduction & Information

Asterix VLC.svg

This wiki page covers the attempt by the VideoLAN project to act as a mentoring organization for Google Summer of Code, in order to improve VLMC and VLC (or the libVLC engine).

Summer of Code

Google Summer of Code is a way for university students to have a paid internship by Google to work on open source projects and become top developers!

VideoLAN was a Google Summer of Code mentoring organization in 2007, 2008, 2009, 2010, 2011, 2013, 2016 and 2017.

This page list some ideas for Summer of Code projects on VLMC, libVLC and VLC media player.

VLC & libVLC

VLC media player is a cross-platform multimedia player, encoder and streamer application. It is one of the most successful open-source projects without any professional structure underneath.

VLC media player is downloaded at an approximate monthly rate of 23 millions from the main website and that's not including third-party distributions (Linux)!

You can find more information on VLC on Wikipedia or on this wiki.

The engine of VLC is libVLC, and is used by VLMC.

VideoLAN Movie Creator

VLMC is a cross-platform non-linear video editing software based on libVLC technology. It was started as a final year student project at the French IT school EPITECH.

VLMC currently awaits a transition to the current libvlc API and it's actual 1.0 release!

Summer of Code

If selected and developed, SoC projects for VLMC and VLC will be included in later releases.

All projects are covered by the GPL (v2+) or LGPL (v2.1+) licenses depending on the module.

How to Start

Find an idea

First, you need to find an idea.

This current page gives you a list of ideas. Those ideas are NOT exhaustive: you can bring your own idea! Some of the best ideas we've ever had were custom ideas!

Submit your idea

You need to submit your idea on the Google Summer of Code platform.

You should do so, very quickly, even before having finished compilation and the next steps, so that we can give you early feedback.

Compile libVLC or VLMC

This may sound trivial, but it's harder than many expect. See https://wiki.videolan.org/Category:Building/ for more informations.

You should come on IRC to get help to compile.

Provide a small patch

To demonstrate your skills, share a small patch with us. This will let you become familiar with Git, in case you don't know it already and our process on merging patches.

Let's get in touch

If you have a doubt, are not sure about anything or want clarification, please get in touch with us.

We have 3 major communication channels: Our mailing-lists to discuss patches and further development related topics. Furthermore, we have our web forums for VLC-related end-user support - a VLMC section will be created once the product is published. Finally, there is our IRC channel #videolan (for libVLC) and #vlmc on the Freenode network. It's open to any kind of discussion. Usage issues, questions how to compile VLC/VLMC, getting to know the fellow developers, etc.

Ideas for VLC & libVLC

libVLC AirPlay support

Project Description: libVLC is now able to send video to the ChromeCast devices. We want to be able to do the same using the Airplay protocol, for Apple devices.

We want to be able to cast from any device, including Android or Windows machines, on all support Airplay devices, like Apple TV, iOS devices and audio amplificators.

This will use the new renderer APIs added in libVLC 3.0. Those APIs will need to be extended to allow the renderer to kick in during the playback.

Tasks to do: The work will consist of the following tasks:

  • documentation on the AirPlay protocol,
  • documentation on the RAOP VLC module,
  • implementation of the detection/discovery of the supported devices,
  • implementation of the protocol to discuss with the device,
  • modify the device control in order to transcode on demand,
  • polish and release.

Advice Please have a look at the following files:

A motivated and fast enough student could pair this task with the UPnP renderer!

Requirements: This project requires C knowledge and access to some Airplay devices.

Proposed mentor: steve

Bonus: AirPlay target

See https://trac.videolan.org/vlc/ticket/5752

libVLC UPnP renderer support

Project Description: libVLC is now able to send video to the ChromeCast devices. We want to be able to do the same using the UPnP Renderer protocol, for all the connected TV devices that support this protocol.

We want to be able to do that from any device, including Android, iOS or Windows machines.

This will use the new renderer APIs added in libVLC 3.0. Those APIs will need to be extended to allow the renderer to kick in during the playback.

Tasks to do: The work will consist of the following tasks:

  • documentation on the UPnP renderer protocol and on the libupnp APIs,
  • implementation of the detection/discovery of the supported devices,
  • implementation of the protocol to discuss with the device,
  • modify the control of the device in order to transcode on demand,
  • polish and release.

Advice: Please have a look at the following files:

A motivated and fast enough student could pair this task with the Airplay renderer!

Requirements: This project requires C knowledge and access to some connected TV supporting this protocol.

Proposed mentor: tguillem

Advanced Audio Filters

Project Description: We are looking for a skilled audiophile that knows a lot about audio theory and practice to work on new audio filters for VLC.

Tasks to do:

  • SRS WoW like or other 3D effects;
  • channels mixing, notably upmixing, like Prologic-II;
  • tracks mixing, and transitions;
  • scriptable new audio filters in lua and enable users to create whatever audio filtering function they want in a Lua script;
  • LADSPA or other libraries integration.

Requirements: This project needs some good audio knowledge and good C experience.

Qualification task: Port any audio filter from MPlayer

Proposed mentor: geal

libVLC VR support

Project Description: libVLC is able to play most 2D and 360 videos, but the support of VR is very limited.

Because of 360 and VR support, the attention about VR is getting very popular those days. We need to support that in libVLC, with an Oculus, a Vive, or a similar headset.

Tasks to do:

  • understand the different types of 360, 360-stereo, VR movie types and the different headsets types,
  • integrate a new headset view in a libvlccore module,
  • integrate a new headset control in a libvlccore module, to get rotation,
  • integrate the control UI with the headset,
  • optionaly code a VR theater mode inside the OpenGL or D3D module.

Requirements: This project requires C knowledge and access to a VR headset.

Proposed mentor: adrien

VLC Qt interface redesign

Project Description: The VLC interface is quite outdated on Linux and Windows. It has a lot of features, but some are not properly exposed.

This project for the summer is to rework heavily this interface to make it beautiful and useful again.

Scope of the tasks to do:

The idea is to get closer to what the WinRT/UWP interface looks like (search on google image to get an idea), but other ideas are welcome.

The WinRT interface is simpler, more user friendly, and has a better "media center" feel into it.

It would require integration with the media library and with the current interface.

Qml is the preferred way of improving the current UI.

Requirements: This project requires Qt/C++ knowledge.

Proposed mentor: J-B

VLC macOS interface redesign

Project Description: The VLC interface is quite outdated on macOS.

This project for the summer is to rework heavily this interface to make it beautiful and useful again.

Scope of the tasks to do:

The idea is to get closer to what the Apple TV/iOS interface looks like (search on google image to get an idea), but other ideas are welcome.

The iOS/AppleTV interface is simpler, more user friendly, and has a better "media center" feel into it.

It would require integration with the media library and with the current interface.

Starting from the current UI is a requirement.

Requirements: This project requires Obj-C knowledge.

Proposed mentor: David Fuhrmann, Felix Paul Kühne

VLCKit Testsuite

Project Description: VLCKit is the wrapper framework around libvlc that powers VLC for iOS and the respective tvOS app. The framework is furthermore used by thousands of Apps all over the world and subject to everyday change.

Sadly it currently doesn't have any tests that ensure the stability of playback and deterministic behavior. This frequently leads to regressions that are noticed too late and unexpected behavior that sometimes even make it into the Appstore.

The project for this summer is to build a Testsuite around VLCKit to ensure that the framwork becomes and stays stable. This indirectly has a huge impact on the stability of the macOS app since iOS and macOS share a code base.

Tasks to do:

  • Get an overview of the current behavior of the Framework.
  • Write a suite with different testtargets to ensure the correct behavior of every single class
  • Use so called "stubbing" and "mocking" of classes for testing purposes
  • Make sure that the testtarget runs once every day on jenkins to ensure that no regressions have been introduced.

Requirements: This project requires Obj-C knowledge and ideally knowledge of writing tests for iOS but this can be learned.

Proposed mentor: Carola Nitz, Felix Paul Kühne

VLC cryptographic updates

Project Description: VLC is already using GPG signatures to achieve secure updates on the Windows platform.

But the updates are currently signed with a single master key which is pinned into the source code and VLCs in the wild aren't able to check for revocations of this key.

Tasks to do:

Therefore we would like to improve this situation by:

  • being able to sign developers' keys that can sign VLC binaries on behalf of this master key
  • support revocations of these developer's key
  • provide a master key upgrade path

Requirements: This project requires solid notions of C and Crypto.

Proposed mentor: geal

Move VLC build system to Meson Build

Project Description: VLC Currently uses autotools but using Meson would make it easier to use it with IDEs and use a more modern language.

This project for the summer is to build the core VLC, its modules and libvlc with Meson Build on Linux, Windows, MacOS and possibly Android, iOS and Universal Windows.

Scope of the tasks to do:

Building VLC can be tricky because of all the dependencies and reliance on autotools. Using a meta-build system like Meson Build would make things easier. Because we support a lot of platforms it can also be tricky to handle all the configurations where VLC can be built.

Integration in XCode and Visual Studio should help with such a meta-build system. It would also help the integration of other languages like Rust in the whole project.

Building some of the contribs with Meson Build would be a good plus.

Requirements: This project requires Python, autotools and bash knowledge.

Proposed mentor: Steve Lhomme

GPU shader filters

Project Description: VLC is using OpenGL and Direct3D11 on modern machines. It is now possible to do all kinds of video processing that was done in the CPU directly in the GPU.

This project for the summer is to port some of the existing CPU filters to the GPU using shaders.

Scope of the tasks to do:

The first task will be to identify all the video filters in VLC and identify the ones that could be done as shaders. Then implement them. Either in OpenGL shaders, Direct3D11 shaders, both and maybe Vulkan.

Requirements: This project requires OpenGL or Direct3D11 shaders knowledge as well as knowledge on video filters in general.

Proposed mentor: Steve Lhomme

libplacebo integration and improvement

Project Description: libplacebo (https://github.com/haasn/libplacebo) is a new library for GPU-accelerated video/image rendering primitives.

VLC is using OpenGL and Direct3D11 on modern machines via its own plugins. We plan to use future graphics library (Metal and Vulkain) via libplacebo (that will implements them). libplacebo also handle colorimetry via shaders (only OpenGL for now) or via future graphic library API. It will or already support HDR, jinc scaling, debanding...

This project for the summer is to add Metal/OpenGL/Direct3D support inside libplacebo, improve libplacebo and integrate it inside VLC as modules.

Scope of the tasks to do:

1. Implement vulkan context creation inside VLC using libplacebo or direct Vulkan API calls

2. Implement a new libplacebo video output module

3. Add the missing features to libplacebo and make it production-ready (needs lots of testing)

4. Implement support for more graphics APIs: OpenGL, Direct3D 11, Metal (via MoltenVK ?)

Tasks 1/2 and 3/4 can be done by 2 students in parallel.

Requirements: This project requires C, OpenGL, Vulkan, Metal, or generic image processing knowledge as well as knowledge on VLC vout display/window plugins.

More information about missing features and Metal support on the following discussion: https://mailman.videolan.org/pipermail/vlc-devel/2018-March/118229.html

Proposed mentor: Thomas Guillem

Ideas for VLMC

Port to Android

Project Description: VLMC is now working on the desktop. It would be nice to port it also to the mobile world, starting by Android.

This project would require to adapt to smaller screens, and simplify the UI to fit the Android workflow.

Tasks to do:

  1. Fix the VLMC build for Android. As libVLC works fine on Android, this is more focused on compiling the Qt part for Android.
  2. Split more parts of the UI in components that are reusable on mobile.
  3. Change the components to fit the small resolutions of the Android devices.
  4. Rewrite some UI components in QML.
  5. Write a simpler timeline widget for Mobile workflows.

Requirements: This project requires C++/Qt/qml knowledge, and access to Android devices.

Proposed mentors: Geoffrey/Hugo

Port to iOS

Project Description: VLMC is now working on the desktop. It would be nice to port it also to the mobile world, also on iOS.

This project would require to adapt to smaller screens, and simplify the UI to fit the iOS workflow.

Tasks to do:

  1. Fix the VLMC build for iOS. As libVLC works fine on iOS, this is more focused on compiling the Qt part for iOS.
  2. Split more parts of the UI in components that are reusable on mobile.
  3. Change the components to fit the small resolutions of the iOS devices.
  4. Rewrite some UI components in QML.
  5. Write a simpler timeline widget for Mobile workflows.

Requirements: This project requires C++/Qt/qml knowledge, and access to Android devices.

Proposed mentors: Felix/Hugo

Media Workflow rework

Project Description: VLMC is now working on the desktop, but the media workflow is quite slow and is missing some common use cases.

This should be fixed in MLT framework backend for libVLC and is the continuation from the work from the previous Summer of Code.

Tasks to do:

  1. Understand the MLT libVLC backend codebase,
  2. Clean the backend and port it to a cleaner code state in C++,
  3. Benchmark the code and make it more efficient,
  4. Work to merge this backend upstream,
  5. Implement all the missing features in libVLC.

Requirements: This project requires C/C++ knowledge, and understanding of multimedia concepts is a good positive point.

Proposed mentors: Hugo

Workflow audio filters

Project Description: VLMC is now working on the desktop, but we need to have a good setup of audio filters to make it usable for most people.

Tasks to do:

  1. Understand the VLMC and MLT codebase interactions,
  2. Add audio filters on the MLT framework backend using the LADSPA/LV2 library or a similar open source library,
  3. Code the interface corresponding to those filters, and their options,
  4. Prepare visualizations, and notably for soundwave filters,
  5. Integrate those inside the timeline UI,
  6. Optimize.

Requirements: This project requires C++/Qt/qml knowledge, and enough understanding of audio.

Proposed mentors: J-B

Workflow video filters

Project Description: VLMC is now working on the desktop, but we need to have a good setup of video filters to make it usable for most people.

Tasks to do:

  1. Understand the VLMC and MLT codebase interactions,
  2. Add video filters on the MLT framework backend using the movit library or a similar open source library,
  3. Code the interface corresponding to those filters, and their options,
  4. Add transitions between clips
  5. Code the interface to manage those transitions,
  6. Optimize the code.

Requirements: This project requires C/C++ knowledge.

Proposed mentors: Felix

Improve multiplatform support

VLMC is aiming at being fully cross platform, but drifted a bit from that goal. While most VLMC's code is cross platform, and can be easily built targeting platforms, some dependencies might prove more difficult to build or compose with VLMC.

Tasks to do:

  1. Fix MLT cross compilation for Windows (This will most likely require patching directly inside MLT, all contributions must be sent upstream).
  2. Fix medialibrary code & build process on macOS (and potentially iOS). The medialibrary misses some platform specific code to be able to list all connected drives (hard drives & USB removable storage, mostly) along with filesystem browsing
  3. Update the documentation along the way
  4. Create jenkins build configuration to have nightly builds on jenkins.videolan.org & nightlies.videolan.org for all supported platforms

Requirements: This project requires buildsystems/toolchains knowledge, basic system programming on macOS & Windows

Proposed mentors: Hugo

Remote UI

We would like to have a way to use VLMC from a web browser. You can easily imagine having a nice, shiny & simple UI for minimal movie edition, which would go hand in hand with the cloud storage feature.

Tasks to do: This task aims toward the uncoupling of the rendering backend & UI, as the renderer will run server side, while the UI runs on the client side.

The idea is to be able to have a UI interacting with the renderer without having to be in the same process, or even machine.

Requirements: This project requires C++ and JS knowledge.

Proposed mentor: jb, chouquette, fkuehne


Ideas for VLC dependencies

libmicrodns refactoring

Our current mDNS discoverer is working, but is not so respectful of the RFC. Possible improvements include:

  • Device TTL support
  • Device removal detection
  • Better request pacing
  • Delegate socket interactions to the caller
  • Unit testing
  • Fuzzing

Requirements: This project require C knowledge, as well as system programming skills

Proposed mentor: chouquette, tguillem

libdsm SMBv2/3 support

libdsm works great for SMBv1, but doesn't support later version of the protocol. This will become a problem soon, and we need to fix it.

Possible improvements include:

  • SMBv2 support
  • SMBv3 support
  • Unit testing
  • Fuzzing

Requirements: This project require C knowledge, as well as system programming skills

Proposed mentor: chouquette, tguillem

Other ideas for VLC & libVLC

Those ideas are not detailed, but they are ideas that we could help to spring new ideas.

  • Integrate Rust inside VLC, as a demuxer or a parser
  • Improve the SMB/Samba share library
  • Work on Vulkan output for VLC
  • VLC javascript work
  • Improve fast-seek in MP4 and WMV demuxers
  • Improve id3 tag parsing.
  • Provide setups for popular streaming services / sout templates (ui ?)
  • Bridge module for GMI'C or other video filters
  • Automated Testing Environment like ffmpeg Fate (port ?) for demuxing, non hw decoding
VideoLAN Google Summer of Code (GSoC/SoC) mentoring projects
20072008200920102011 (GCi 2011SOCIS x264 2011)201220132016201720182019