Difference between revisions of "SoC 2022"

From VideoLAN Wiki
Jump to navigation Jump to search
(Initial import)
 
 
(26 intermediate revisions by 3 users not shown)
Line 16: Line 16:
 
=== Summer of Code ===
 
=== Summer of Code ===
  
Google Summer of Code is a way to have a paid '''internship''' by '''Google''' to work on open source projects and become top developers!
+
Google Summer of Code is a way for anyone to work on open source projects and become top developers, while being paid by Google.
  
 
[[VideoLAN]] was a ''Google Summer of Code'' mentoring organization in [[SoC 2007|2007]], [[SoC 2008|2008]], [[SoC 2009|2009]], [[SoC 2010|2010]], [[SoC 2011|2011]], [[SoC 2013|2013]], [[SoC 2016|2016]], [[SoC_2017|2017]], [[SoC_2018|2018]], [[SoC_2019|2019]], [[SoC_2020|2020]] and [[SoC_2021|2021]].
 
[[VideoLAN]] was a ''Google Summer of Code'' mentoring organization in [[SoC 2007|2007]], [[SoC 2008|2008]], [[SoC 2009|2009]], [[SoC 2010|2010]], [[SoC 2011|2011]], [[SoC 2013|2013]], [[SoC 2016|2016]], [[SoC_2017|2017]], [[SoC_2018|2018]], [[SoC_2019|2019]], [[SoC_2020|2020]] and [[SoC_2021|2021]].
  
This page lists some ideas for Summer of Code projects on '''dav1d''', VLMC, '''libVLC''' and {{VLC}}, but also on ''VLC infrastructure'' projects.
+
This page lists some ideas for Summer of Code projects on '''dav1d''', VLMC, '''libVLC''' and {{VLC}}, but also on ''VLC infrastructure'' projects.<br>
 +
We accept ideas also on other multimedia projects related to {{VLC}}.
  
 
=== VLC & libVLC  ===
 
=== VLC & libVLC  ===
Line 34: Line 35:
 
=== dav1d ===
 
=== dav1d ===
  
'''dav1d''' is the reference AV1 decoder that is shipped inside VLC, Chrome, Edge and Firefox.
+
'''dav1d''' is the reference AV1 decoder that is shipped inside VLC, Chrome, Edge, Firefox and Windows.
  
 
It's a very low-level codec, mostly written in C and assembly.
 
It's a very low-level codec, mostly written in C and assembly.
Line 41: Line 42:
 
[[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 [http://www.epitech.eu EPITECH].
 
[[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 [http://www.epitech.eu EPITECH].
  
[[VLMC]] currently awaits a transition to the current libvlc API and it's actual 1.0 release!
+
[[VLMC]] currently awaits a transition to the current libvlc API and its actual 1.0 release!
  
 
=== Summer of Code rules ===
 
=== Summer of Code rules ===
Line 56: Line 57:
  
 
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!
 
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!
 +
 +
The duration of the projects is indicative, and can be adapted, if needed.
  
 
=== Submit your idea ===
 
=== Submit your idea ===
Line 62: Line 65:
 
You should do so, very quickly, even before having finished compilation and the next steps, so that we can give you early feedback.
 
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 ===
+
=== Compile VLC, libVLC or VLMC ===
This may sound trivial, but it's harder than many expect. See https://wiki.videolan.org/Category:Building/ for more informations.
+
This may sound trivial, but it's harder than many expect. You must compile the project you want to work on.
 +
 
 +
See https://wiki.videolan.org/Category:Building/ for more informations.
  
 
You should come on [[IRC]] to get help to compile.
 
You should come on [[IRC]] to get help to compile.
Line 80: Line 85:
  
 
= Ideas for VLC & libVLC =
 
= Ideas for VLC & libVLC =
 +
 +
== Port VLC to PinePhone / Ubuntu Touch ==
 +
'''Project Description''':
 +
We need someone to port VLC to the PinePhone or Ubuntu Touch
 +
 +
'''Duration''': 350h
 +
 +
'''Tasks to do''':
 +
* Get a PinePhone
 +
* Get a compilation toolchain working
 +
* Compile VLC core and modules to the PinePhone
 +
* Adapt the interface
 +
* Adapt the audio and video output modules
 +
* Adapt the hardware decoder.
 +
 +
'''Requirements''':
 +
This project needs some good audio knowledge and good C experience.
 +
 +
'''Qualification task:'''
 +
Compile a program on the Pinephone
 +
 +
''Proposed mentor: tguillem ''
 +
 
== Advanced Audio Filters ==
 
== Advanced Audio Filters ==
  
 
'''Project Description''':
 
'''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.
 
We are looking for a skilled audiophile that knows a lot about audio theory and practice to work on new audio filters for VLC.
 +
 +
'''Duration''': 350h
  
 
'''Tasks to do''':
 
'''Tasks to do''':
Line 99: Line 129:
  
 
''Proposed mentor: unidan ''
 
''Proposed mentor: unidan ''
 +
 +
== FFmpeg Audio Filters ==
 +
 +
'''Project Description''':
 +
FFmpeg has plenty of efficient [https://ffmpeg.org/ffmpeg-filters.html#Audio-Filters audio filters]. It would nice to have them in VLC.
 +
 +
'''Duration''': 175h
 +
 +
'''Tasks to do''':
 +
* Add one or more wrapper for the Ffmpeg audio filters as VLC filters;
 +
* Handle filter parameters dynamically so they can be adjusted in the GUI;
 +
* Possibly add libvlc entry points for some audio filters.
 +
 +
'''Requirements''':
 +
This project needs C experience and understanding the concept of VLC modules.
 +
 +
'''Qualification task:'''
 +
Use `anull` FFmpeg audio filter as a VLC module.
 +
 +
''Proposed mentor: robUx4 ''
 +
 +
== Unreal Engine libVLC module ==
 +
 +
The libVLC plugin for Unreal is a bit outdated and needs to be ported to the newer versions of Unreal Engine.
 +
 +
Also, we need to improve performances by using the new libVLC 4 API to share textures.
 +
 +
'''Requirements''':
 +
This project needs C experience and understanding a bit Unreal development.
 +
 +
'''Duration''': 350h
 +
 +
'''Qualification task:'''
 +
Compile the old Unreal module
 +
 +
''Proposed mentor: Pierre ''
 +
 +
== Re-implememt the netsync module ==
 +
 +
This module synchronizes more than one VLC instances to play the same media at the same time. Cf. modules/control/netsync.c
 +
 +
This module was disabled when we switched to the new vlc_clock.
 +
 +
Your goal will be to rewrite this module from 0, using the new vlc_clock API.
 +
 +
Tasks to do:
 +
* Expose the vlc_clock API to control modules
 +
* Implement the netsync module using the new vlc_clock API
 +
* Re-use or rewrite the network protocol, depending on its current state (legacy, old code, can it be improved ?)
 +
 +
'''Duration''': 350h
 +
 +
'''Requirements''':
 +
Those will be done in C and it requires familiarity with POSIX network APIs (socket, UDP, TCP, bind, accept, listen...)
 +
 +
''Proposed mentor: Thomas Guillem''
  
 
== VLC Qt interface redesign ==
 
== VLC Qt interface redesign ==
Line 105: Line 191:
  
 
We are currently reworking the interface, but we need help.
 
We are currently reworking the interface, but we need help.
 +
 +
'''Duration''': 350h
  
 
'''Scope of the tasks to do''':
 
'''Scope of the tasks to do''':
Line 120: Line 208:
  
 
''Proposed mentor: Pierre''
 
''Proposed mentor: Pierre''
 +
 +
== Improve chromecast support (subtitles) ==
 +
 +
Your goal will be to help an engineer who is already working on chromecast improvements.
 +
 +
Tasks to do:
 +
* Add support for images subtitles (DVD, Bluray, MVK): configure the chromecast module so that it blend the subtitle image video with a video frame
 +
* Help with text subtitles support
 +
* Various improvements and bugfixes that are chromecast related (cf. issues from our gitlab) 
 +
   
 +
'''Duration''': 350h
 +
 +
'''Requirements''':
 +
Those will be done in C and C++.
 +
 +
''Proposed mentor: Thomas Guillem and Alaric Senat''
  
 
== VLC.js ==
 
== VLC.js ==
Line 126: Line 230:
  
 
This requires working close to the toolchain, compilation and the web browsers.
 
This requires working close to the toolchain, compilation and the web browsers.
 +
 +
'''Duration''': 350h or 175h
  
 
'''Scope of the tasks to do''':
 
'''Scope of the tasks to do''':
Line 147: Line 253:
  
 
This project for the summer is to rework heavily this interface to make it beautiful and useful again.
 
This project for the summer is to rework heavily this interface to make it beautiful and useful again.
 +
 +
'''Duration''': 350h or 175h
  
 
'''Scope of the tasks to do''':
 
'''Scope of the tasks to do''':
  
There is a full design already done and tested. The major hurdle is to actually implement it the way we want it to be. The iOS/tvTV interface is simpler, more user friendly, and has a better "media center" feel into it, which influenced what we want to achieve on the Mac. Note that the objective is to use AppKit. UIKit (aka "Marzipan") will not be part of this project.
+
There is a full design already done and tested. The major hurdle is to actually implement it the way we want it to be. The iOS/tvOS interface is simpler, more user friendly, and has a better "media center" feel into it, which influenced what we want to achieve on the Mac. Note that the objective is to use AppKit. UIKit will not be part of this project.
  
 
Iterating from the current UI and closely collaborating with the team currently working on it is a requirement.
 
Iterating from the current UI and closely collaborating with the team currently working on it is a requirement.
Line 164: Line 272:
  
 
This requires working close to the toolchain, VLC and understanding C.
 
This requires working close to the toolchain, VLC and understanding C.
 +
 +
'''Duration''': 350h
  
 
'''Scope of the tasks to do''':
 
'''Scope of the tasks to do''':
Line 177: Line 287:
  
 
''Proposed mentor: tguillem''
 
''Proposed mentor: tguillem''
 
  
 
== VLC iOS UI update ==
 
== VLC iOS UI update ==
Line 183: Line 292:
 
We're currently in the process of rewriting and updating the entire UI for VLC iOS  
 
We're currently in the process of rewriting and updating the entire UI for VLC iOS  
  
There is a lot of components that need refactoring and need to get an updated UI. Like for example the network navigation section.
+
There is a lot of components that need refactoring and need to get an updated UI.
  
 
The Android port of VLC has done most of that and was successful. We need the same level of features.
 
The Android port of VLC has done most of that and was successful. We need the same level of features.
 +
 +
'''Duration''': 350h or 175h
  
 
'''Tasks to do''':
 
'''Tasks to do''':
Line 197: Line 308:
 
This project requires '''Obj-C''' and '''Swift''' knowledge and ideally knowledge of writing tests for iOS but this can be learned.
 
This project requires '''Obj-C''' and '''Swift''' knowledge and ideally knowledge of writing tests for iOS but this can be learned.
  
''Proposed mentor: Soomin Lee, Felix Paul Kühne ''
+
''Proposed mentor: Felix Paul Kühne ''
  
  
Line 209: Line 320:
 
* Add interactive movies support inside VLC's MKV module
 
* Add interactive movies support inside VLC's MKV module
  
 +
'''Requirements''':
 
Those will be done in '''C''' and '''C++'''
 
Those will be done in '''C''' and '''C++'''
 +
 +
'''Duration''': 350h
  
 
''Proposed mentor: Thomas Guillem, Steve Lhomme''
 
''Proposed mentor: Thomas Guillem, Steve Lhomme''
 
  
 
== Develop a MPD server inside VLC ==
 
== Develop a MPD server inside VLC ==
  
The idea is to add support for VLC to act as a MPD server.
+
The idea is to continue adding support for VLC to act as a MPD server.
  
 
'''Tasks to do''':
 
'''Tasks to do''':
Line 222: Line 335:
 
* Code a MPD server as a control module that will connect to the [https://code.videolan.org/videolan/medialibrary medialibrary]
 
* Code a MPD server as a control module that will connect to the [https://code.videolan.org/videolan/medialibrary medialibrary]
  
Those will be done in '''C''' and '''C++''', and it requires familiarity with an MPD client
+
'''Duration''': 350h
 +
 
 +
'''Requirements''':
 +
Those will be done in '''C''' and '''C++''', and it requires familiarity with an MPD client.
 +
 
 +
The base was done in a previous year, one just needs to finish it.
  
 
''Proposed mentor: Thomas Guillem''
 
''Proposed mentor: Thomas Guillem''
 
  
 
== Improve the web interface of VLC in Vue.js ==
 
== Improve the web interface of VLC in Vue.js ==
Line 231: Line 348:
 
The idea is to improve the new web interface of VLC, that is currently in '''Vue.JS'''. It requires significant improvements
 
The idea is to improve the new web interface of VLC, that is currently in '''Vue.JS'''. It requires significant improvements
  
 +
'''Duration''': 350h
 +
 +
'''Tasks to do''':
 
* Review the current code
 
* Review the current code
 
* Clean and improve the modularity
 
* Clean and improve the modularity
Line 237: Line 357:
 
* Improve the look
 
* Improve the look
  
 +
'''Requirements''':
 
Those will be done in '''JS''' and '''C++''', and it requires familiarity with the Vue.JS framework
 
Those will be done in '''JS''' and '''C++''', and it requires familiarity with the Vue.JS framework
 
''Proposed mentor: David''
 
''Proposed mentor: David''
Line 246: Line 367:
 
Currently VLCKit is not very '''Swift''' friendly.
 
Currently VLCKit is not very '''Swift''' friendly.
 
Indeed, it will be beneficial for VLCKit to have a better '''Swift''' interoperability interface than one generated by default.
 
Indeed, it will be beneficial for VLCKit to have a better '''Swift''' interoperability interface than one generated by default.
 +
 +
'''Duration''': 350h
  
 
'''Tasks to do''':
 
'''Tasks to do''':
Line 255: Line 378:
 
'''Requirements''': This project requires '''Objective-C''' and '''Swift''' knowledge.
 
'''Requirements''': This project requires '''Objective-C''' and '''Swift''' knowledge.
  
'''Proposed mentor''': Felix Paul Kühne, Soomin Lee
+
'''Proposed mentor''': Felix Paul Kühne
 +
 
 +
== Improve libNDI and integrate in VLC ==
 +
 
 +
'''Project description''':
 +
Improve the libNDI project supporting the NDI protocol to support more formats.
 +
 
 +
'''Duration''': 350h
 +
 
 +
'''Tasks to do''':
 +
 
 +
* Study the NDI protocol, implement and test and integrate inside VLC.
 +
 
 +
'''Requirements''':
 +
* NDI understanding
 +
* C knowledge.
 +
 
 +
'''Proposed mentor''': j-b
 +
 
 +
== Implement DVD-Audio deciphering ==
 +
 
 +
'''Project description''':
 +
Support DVD-Audio deciphering using dvdcpxm
 +
* https://offog.org/git/dvdaexplorer/
 +
* http://www.thescrapyard.org/software/libdvdcpxm.html
 +
* http://forum.doom9.org/showthread.php?t=167537
 +
* https://sourceforge.net/projects/dvdadecoder/
 +
 
 +
'''Duration''': 350h
 +
 
 +
'''Tasks to do''':
 +
* Understand DVD-Audio
 +
* Implement VLC module based on those modules
 +
 
 +
'''Requirements''':
 +
* Audio likeness
 +
* C knowledge.
 +
 
 +
'''Proposed mentor''': j-b
  
== Other ideas for VLC & libVLC ==
+
== Other short ideas for VLC & libVLC ==
  
 
Those ideas are not detailed, but they are ideas that we could help to spring new ideas.
 
Those ideas are not detailed, but they are ideas that we could help to spring new ideas.
 
We can help work with you to make those more detailed.
 
We can help work with you to make those more detailed.
 +
 +
Those ideas should be '''175h''' long
  
 
* Integrate '''Rust''' inside VLC, as a demuxer or a parser
 
* Integrate '''Rust''' inside VLC, as a demuxer or a parser
Line 283: Line 446:
  
 
Those will be done in '''Go''' and '''JS'''
 
Those will be done in '''Go''' and '''JS'''
 +
 +
'''Duration''': 350h
  
 
''Proposed mentor: David and j-b''
 
''Proposed mentor: David and j-b''
Line 303: Line 468:
  
 
'''Requirements''': This project requires '''C++/Qt/qml''' knowledge, and access to Android devices.
 
'''Requirements''': This project requires '''C++/Qt/qml''' knowledge, and access to Android devices.
 +
 +
'''Duration''': 350h
  
 
''Proposed mentors: Geoffrey/Hugo''
 
''Proposed mentors: Geoffrey/Hugo''
 
  
 
== Port to iOS ==
 
== Port to iOS ==
Line 322: Line 488:
  
 
'''Requirements''': This project requires '''C++/Qt/qml''' knowledge, and access to iOS devices. Previous iOS development experience is preferred.
 
'''Requirements''': This project requires '''C++/Qt/qml''' knowledge, and access to iOS devices. Previous iOS development experience is preferred.
 +
 +
'''Duration''': 350h
  
 
''Proposed mentors: Felix/Hugo''
 
''Proposed mentors: Felix/Hugo''
 
  
 
== Media Workflow rework ==
 
== Media Workflow rework ==
Line 346: Line 513:
 
= Ideas for dav1d =
 
= Ideas for dav1d =
  
== dav1d SSE2/AVX optimizations ==
+
== dav1d RISC-V optimizations ==
  
 
Improving the performance of the AV1 decoder is very important for VLC and the whole ecosystem.
 
Improving the performance of the AV1 decoder is very important for VLC and the whole ecosystem.
  
 
It requires to:
 
It requires to:
* Understanding the SSSE3 code of dav1d
+
* Understand of RISC-V assembly
* Port it to SSE2
+
* Understand a bit what a video decoder is
* Write AVX-512 optimizations
+
* Write RISC-V functions
  
 
'''Requirements''': This project requires '''C''' and '''ASM''' knowledge, as well as system programming skills
 
'''Requirements''': This project requires '''C''' and '''ASM''' knowledge, as well as system programming skills
 +
 +
'''Duration''': 175h
  
 
Contact 'j-b'
 
Contact 'j-b'
Line 366: Line 535:
  
 
This is a tricky project, but is doable during the summer
 
This is a tricky project, but is doable during the summer
 +
 +
'''Duration''': 350h
  
 
'''Requirements''': This project requires '''C''' and '''GPU Shaders''' knowledge, as well as system programming skills
 
'''Requirements''': This project requires '''C''' and '''GPU Shaders''' knowledge, as well as system programming skills
 
Contact 'j-b'
 
 
== dav1d Threading improvements ==
 
 
Improving the performance of the AV1 decoder is very important for VLC and the whole ecosystem.
 
 
This project aims to:
 
- improve the threading of AV1, notably to separate the threads for the filters
 
- provide an external threadpool for multiple players
 
- provide a good auto-setup of threads counts, after benchmarking.
 
 
This is a tricky project, but is doable during the summer
 
 
'''Requirements''': This project requires '''C''' and '''threading''' knowledge, as well as system programming skills
 
  
 
Contact 'j-b'
 
Contact 'j-b'
Line 397: Line 553:
  
 
'''Requirements''': This project requires '''C''' knowledge.
 
'''Requirements''': This project requires '''C''' knowledge.
 +
 +
'''Duration''': 175h
  
 
Contact 'unlord'
 
Contact 'unlord'
Line 423: Line 581:
 
* Knowledge of '''C''' as well as, ideally, graphics API fundamentals. (But the latter can be learned as part of the project)
 
* Knowledge of '''C''' as well as, ideally, graphics API fundamentals. (But the latter can be learned as part of the project)
 
* Ability to develop and test on Windows
 
* Ability to develop and test on Windows
 +
 +
'''Duration''': 175h
  
 
Contact 'haasn'
 
Contact 'haasn'
Line 449: Line 609:
 
Knowledge of libplacebo internals is not required, since the skeleton code for
 
Knowledge of libplacebo internals is not required, since the skeleton code for
 
this already exists - what's missing is the reshaping algorithm.
 
this already exists - what's missing is the reshaping algorithm.
 +
 +
'''Duration''': 350h
  
 
Contact 'haasn'
 
Contact 'haasn'
Line 469: Line 631:
 
* Good knowledge of both C and GLSL, especially compute shaders and other GPGPU techniques. (CUDA or OpenCL skills also transfer, though the shader will have to be GLSL)
 
* Good knowledge of both C and GLSL, especially compute shaders and other GPGPU techniques. (CUDA or OpenCL skills also transfer, though the shader will have to be GLSL)
 
* Ideally, general knowledge of video processing techniques (e.g. motion vector search) - at least enough to be able to understand what mvtools code is doing.
 
* Ideally, general knowledge of video processing techniques (e.g. motion vector search) - at least enough to be able to understand what mvtools code is doing.
 +
 +
'''Duration''': 350h
  
 
Contact 'haasn'
 
Contact 'haasn'
Line 486: Line 650:
  
 
'''Requirements''': This project require '''C''' knowledge, as well as system programming skills
 
'''Requirements''': This project require '''C''' knowledge, as well as system programming skills
 +
 +
'''Duration''': 175h
  
 
''Proposed mentor'': chouquette, tguillem
 
''Proposed mentor'': chouquette, tguillem
  
  
== rav1e, the AV1 encoder in Rust ==
 
 
The [https://github.com/xiph/rav1e rav1e] project aims to create a new AV1 encoder implementation in
 
Rust.
 
 
To support this we need better AV1 analysis tools that give detailed information about AV1 streams including:
 
 
* bit rate across the frame
 
* frame allocation within a scene
 
* display of frame data (block partitioning, mode decisions, motion vectors, etc)
 
* objective quality over time
 
* average rate (for streaming)
 
 
'''Requirements''': This project requires '''Rust''' knowledge.
 
 
Contact 'unlord'
 
  
  
 
{{GSoC}}
 
{{GSoC}}
 
[[Category:SoC]]
 
[[Category:SoC]]

Latest revision as of 14:24, 29 March 2022

gsoc2016-sun-373x373.png This page gives the current list of ideas for VideoLAN project, for the Google Summer Of Code 2022 program.

The list is long, but it is not exhaustive, and not limitative. Feel free to apply with your own idea!, we love original ideas.

Introduction & Information

Asterix VLC.svg

This page covers the VideoLAN program as a mentoring organization for Google Summer of Code, in order to improve VLC, VLMC and dav1d (or the libVLC engine), but also the VideoLAN infrastructure and some other related projects.

We have projects in C, C++, ASM, JS, Wasm, Go, Obj-C, GPU Shaders, C#, Java/Kotlin and Swift.

Summer of Code

Google Summer of Code is a way for anyone to work on open source projects and become top developers, while being paid by Google.

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

This page lists some ideas for Summer of Code projects on dav1d, VLMC, libVLC and VLC media player, but also on VLC infrastructure projects.
We accept ideas also on other multimedia projects related to 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 worldwide.

VLC media player is downloaded at an approximate monthly rate of 25 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 and mobile versions of VLC.

dav1d

dav1d is the reference AV1 decoder that is shipped inside VLC, Chrome, Edge, Firefox and Windows.

It's a very low-level codec, mostly written in C and assembly.

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 its actual 1.0 release!

Summer of Code rules

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.

The VideoLAN Code of Conducts applies to all Summer projects.

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!

The duration of the projects is indicative, and can be adapted, if needed.

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 VLC, libVLC or VLMC

This may sound trivial, but it's harder than many expect. You must compile the project you want to work on.

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

Port VLC to PinePhone / Ubuntu Touch

Project Description: We need someone to port VLC to the PinePhone or Ubuntu Touch

Duration: 350h

Tasks to do:

  • Get a PinePhone
  • Get a compilation toolchain working
  • Compile VLC core and modules to the PinePhone
  • Adapt the interface
  • Adapt the audio and video output modules
  • Adapt the hardware decoder.

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

Qualification task: Compile a program on the Pinephone

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.

Duration: 350h

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: unidan

FFmpeg Audio Filters

Project Description: FFmpeg has plenty of efficient audio filters. It would nice to have them in VLC.

Duration: 175h

Tasks to do:

  • Add one or more wrapper for the Ffmpeg audio filters as VLC filters;
  • Handle filter parameters dynamically so they can be adjusted in the GUI;
  • Possibly add libvlc entry points for some audio filters.

Requirements: This project needs C experience and understanding the concept of VLC modules.

Qualification task: Use `anull` FFmpeg audio filter as a VLC module.

Proposed mentor: robUx4

Unreal Engine libVLC module

The libVLC plugin for Unreal is a bit outdated and needs to be ported to the newer versions of Unreal Engine.

Also, we need to improve performances by using the new libVLC 4 API to share textures.

Requirements: This project needs C experience and understanding a bit Unreal development.

Duration: 350h

Qualification task: Compile the old Unreal module

Proposed mentor: Pierre

Re-implememt the netsync module

This module synchronizes more than one VLC instances to play the same media at the same time. Cf. modules/control/netsync.c

This module was disabled when we switched to the new vlc_clock.

Your goal will be to rewrite this module from 0, using the new vlc_clock API.

Tasks to do:

  • Expose the vlc_clock API to control modules
  • Implement the netsync module using the new vlc_clock API
  • Re-use or rewrite the network protocol, depending on its current state (legacy, old code, can it be improved ?)

Duration: 350h

Requirements: Those will be done in C and it requires familiarity with POSIX network APIs (socket, UDP, TCP, bind, accept, listen...)

Proposed mentor: Thomas Guillem

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.

We are currently reworking the interface, but we need help.

Duration: 350h

Scope of the tasks to do:

Use the new designs shared on the mailing list, and help developping part of those, using Qml.

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

It requires integration with the media library and with the current interface.

Qml is the technology needed to improve the current UI.

Requirements: This project requires Qt/C++ knowledge, and qml would be a nice plus.

Proposed mentor: Pierre

Improve chromecast support (subtitles)

Your goal will be to help an engineer who is already working on chromecast improvements.

Tasks to do:

  • Add support for images subtitles (DVD, Bluray, MVK): configure the chromecast module so that it blend the subtitle image video with a video frame
  • Help with text subtitles support
  • Various improvements and bugfixes that are chromecast related (cf. issues from our gitlab)

Duration: 350h

Requirements: Those will be done in C and C++.

Proposed mentor: Thomas Guillem and Alaric Senat

VLC.js

Project Description: We're currently porting VLC to the web, using WebAssembly. This is a current work in progress, so we need a lot of help to improve it

This requires working close to the toolchain, compilation and the web browsers.

Duration: 350h or 175h

Scope of the tasks to do:

There are lots of things to do (not all of them need to be done by the same person:

  • Improving compilation of the VLC core to Wasm,
  • Improving compilation of VLC 3rd party libraries,
  • Fixing the VLC core to support the Web platform,
  • Implement WebCodec inside VLC,
  • Improve audio pipeline inside VLC,
  • Improve emscripten :)

Requirements: This project requires C knowledge, and compilation.

Proposed mentor: JB

VLC macOS interface redesign

Project Description: The VLC interface is quite outdated on macOS and we are currently in the process of re-writing it to give it a modern feel, but also to integrate recent additions to libvlc regarding playback control and library management.

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

Duration: 350h or 175h

Scope of the tasks to do:

There is a full design already done and tested. The major hurdle is to actually implement it the way we want it to be. The iOS/tvOS interface is simpler, more user friendly, and has a better "media center" feel into it, which influenced what we want to achieve on the Mac. Note that the objective is to use AppKit. UIKit will not be part of this project.

Iterating from the current UI and closely collaborating with the team currently working on it is a requirement.

Requirements: This project requires Obj-C knowledge, a thorough understanding of OOP and proven previous Mac development experience. You cannot use swift for this project.

Proposed mentor: David Fuhrmann, Felix Paul Kühne

Scripting VLC with wasm

Project Description: We're would like to try to replace the lua scripting support of VLC with Wasm, like wasmer, directly inside VLC.

This requires working close to the toolchain, VLC and understanding C.

Duration: 350h

Scope of the tasks to do:

There are lots of things to do:

  • Study Wasm
  • Embed wasm inside VLC
  • Map VLC Scripts
  • Improve emscripten and wasm:)

Requirements: This project requires C knowledge, and compilation.

Proposed mentor: tguillem

VLC iOS UI update

Project Description: We're currently in the process of rewriting and updating the entire UI for VLC iOS

There is a lot of components that need refactoring and need to get an updated UI.

The Android port of VLC has done most of that and was successful. We need the same level of features.

Duration: 350h or 175h

Tasks to do:

  • Get an overview of the current App and components that need an update
  • Refactor and give the appropriate components a new look
  • See what is missing compared to the Android version
  • Code it :

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

Proposed mentor: Felix Paul Kühne


Interactive movie support

The idea is to add support for interactive movies inside VLC using the matroska.org mkv format. An interactive movie is like a gamebook but for movies.

Tasks to do:

  • Extend the MKV spec to add support for titles, menus, that will be used by interactive movies
  • Improve a MKV muxing tool (ffmpeg, mkvtoolnix) to support the extended spec
  • Add interactive movies support inside VLC's MKV module

Requirements: Those will be done in C and C++

Duration: 350h

Proposed mentor: Thomas Guillem, Steve Lhomme

Develop a MPD server inside VLC

The idea is to continue adding support for VLC to act as a MPD server.

Tasks to do:

  • Study the MPD protocol
  • Code a MPD server as a control module that will connect to the medialibrary

Duration: 350h

Requirements: Those will be done in C and C++, and it requires familiarity with an MPD client.

The base was done in a previous year, one just needs to finish it.

Proposed mentor: Thomas Guillem

Improve the web interface of VLC in Vue.js

The idea is to improve the new web interface of VLC, that is currently in Vue.JS. It requires significant improvements

Duration: 350h

Tasks to do:

  • Review the current code
  • Clean and improve the modularity
  • Adapt to the new playlist code
  • Connect to the new medialibrary
  • Improve the look

Requirements: Those will be done in JS and C++, and it requires familiarity with the Vue.JS framework Proposed mentor: David

Improve VLCKit Objective-C - Swift interoperability

Project description:

Currently VLCKit is not very Swift friendly. Indeed, it will be beneficial for VLCKit to have a better Swift interoperability interface than one generated by default.

Duration: 350h

Tasks to do:

  • Study exposed VLCKit methods
  • Improve Objective-C - Swift interop
  • Make a test Swift project to test the interoperability

Requirements: This project requires Objective-C and Swift knowledge.

Proposed mentor: Felix Paul Kühne

Improve libNDI and integrate in VLC

Project description: Improve the libNDI project supporting the NDI protocol to support more formats.

Duration: 350h

Tasks to do:

  • Study the NDI protocol, implement and test and integrate inside VLC.

Requirements:

  • NDI understanding
  • C knowledge.

Proposed mentor: j-b

Implement DVD-Audio deciphering

Project description: Support DVD-Audio deciphering using dvdcpxm

Duration: 350h

Tasks to do:

  • Understand DVD-Audio
  • Implement VLC module based on those modules

Requirements:

  • Audio likeness
  • C knowledge.

Proposed mentor: j-b

Other short ideas for VLC & libVLC

Those ideas are not detailed, but they are ideas that we could help to spring new ideas. We can help work with you to make those more detailed.

Those ideas should be 175h long

  • Integrate Rust inside VLC, as a demuxer or a parser
  • Improve Vulkan output for VLC, including HDR support
  • Improve id3 tag and metadata handling in VLC
  • Bridge module for GMI'C or other video filters
  • Automated Testing Environment like ffmpeg Fate (port ?) for demuxing, non-hw decoding
  • Integrate libavfilter in VLC
  • Improve the libVLCSharp bindings for VLC in C#
  • Provide setups for popular streaming services / sout templates (ui ?)

Ideas for VideoLAN infrastructure

Improve the VideoLAN crash reporter in Go and Vue.js

The idea is to improve the current crash reporter of VLC, called CrashDragon.

The tasks are the following:

  • Review the current code
  • Improve the API in Go
  • Write a new Vue.js frontend

Those will be done in Go and JS

Duration: 350h

Proposed mentor: David and j-b

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.

Duration: 350h

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 iOS devices. Previous iOS development experience is preferred.

Duration: 350h

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

Ideas for dav1d

dav1d RISC-V optimizations

Improving the performance of the AV1 decoder is very important for VLC and the whole ecosystem.

It requires to:

  • Understand of RISC-V assembly
  • Understand a bit what a video decoder is
  • Write RISC-V functions

Requirements: This project requires C and ASM knowledge, as well as system programming skills

Duration: 175h

Contact 'j-b'

dav1d GPU Compute Shaders

Improving the performance of the AV1 decoder is very important for VLC and the whole ecosystem.

This project requires to port one of the filter, like SGR or Wiener to one of the Shader languages. iPhones or Xbox One would be a good target.

This is a tricky project, but is doable during the summer

Duration: 350h

Requirements: This project requires C and GPU Shaders knowledge, as well as system programming skills

Contact 'j-b'

dav1d statistics extractions

The dav1d AV1 decoder is a new high performance AV1 decoder by VideoLAN.

Current open source tools for AV1 analysis use instrumentation in the reference decoder libaom to extract decode-time metadata for display and reporting, but support for sophisticated analysis is lacking.

To speed development of AV1 tools like the rav1e, it would be helpful to add similar decoder metadata extraction APIs to the dav1d decoder so that rapid testing of encoder algorithms is easier. This includes the ability to quickly produce statistics, visualizations and other reporting that can be used for tuning encoder parameters or guiding development. Advanced ideas include adding similar encoder metadata API to rav1e that add encode-time visualizations.

Requirements: This project requires C knowledge.

Duration: 175h

Contact 'unlord'

Ideas for libplacebo

Direct3D 11 backend

Project Description:

libplacebo uses a GPU abstraction with a number of backends. The goal would be to add a new backend based on Direct3D 11, since Vulkan and OpenGL support on Windows are often of limited quality, especially for older hardware.

Lots of example code for how this implementation would look can be found as part of the mpv project .

Large parts can be copy/pasted and adapted to the libplacebo API.

Tasks to do:

  1. Add a new `pl_gpu` backend based on Direct3D 11
  2. Integration into the build system, test framework and CI infrastructure

Requirements:

  • Knowledge of C as well as, ideally, graphics API fundamentals. (But the latter can be learned as part of the project)
  • Ability to develop and test on Windows

Duration: 175h

Contact 'haasn'

Dolby Vision Profile 5 (IPT-PQ)

Project Description:

Dolby IPT-PQ is a HDR color space similar to ITU-R ICtCp, but with proprietary Dolby modifications (reshaping algorithm). Your goal is to implement this reshaper in the form of a GLSL shader, using knowledge from known Dolby patents and dumped headers.

Tasks to do:

  1. Figure out, and (if necessary) reverse engineer the stream format for the Dolby reshaping algorithm described in several of their patents.
  2. Implement this algorithm in GLSL
  3. Integration into libplacebo (optional)
  4. Test against reference implementations of Dolby Vision profile 5

Requirements:

  • Knowledge of GLSL and C. Knowledge of colorspaces in general is an obvious plus, but the theory here is not important - only the implementation.
  • (Possibly) Ability to reverse engineer any still-unknown or differing-from-patents parts of the stream headers.

Knowledge of libplacebo internals is not required, since the skeleton code for this already exists - what's missing is the reshaping algorithm.

Duration: 350h

Contact 'haasn'

GPU motion interpolation (mvtools)

Project Description

Your goal is to develop GPU shaders for motion-adaptive frame interpolation in the style of [mvtools](https://github.com/dubhater/vapoursynth-mvtools).

This is an open-ended project. If not completed, any progress towards this goal is good enough.

Sub-goals:

  1. Recreate the motion vector search algorithms from MAnalyze
  2. Implement the pixel masking and pixel flow algorithms from MFlowFps

These can be tackled and complete out-of-order.

Requirements:

  • Good knowledge of both C and GLSL, especially compute shaders and other GPGPU techniques. (CUDA or OpenCL skills also transfer, though the shader will have to be GLSL)
  • Ideally, general knowledge of video processing techniques (e.g. motion vector search) - at least enough to be able to understand what mvtools code is doing.

Duration: 350h

Contact 'haasn'

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

Duration: 175h

Proposed mentor: chouquette, tguillem



VideoLAN Google Summer of Code (GSoC/SoC) mentoring projects
20072008200920102011 (GCi 2011SOCIS x264 2011)20122013201620172018201920202021