Skip to content

This repository serves as a comprehensive record of my work during the Google Summer of Code (GSoC) 2023 period for the project: VLC Qt interface Redesign. Here, you will find the progress updates related to my contributions to the VLC media player.

Notifications You must be signed in to change notification settings

mohit-marathe/vlc-gsoc-2023-report

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 

Repository files navigation

My GSoC 2023 Report

Student: Mohit Marathe(@mohit-marathe)

Organization: VideoLAN

Project: VLC Qt Interface Redesign

Mentor: Pierre Lamot


Overview

VLC is a free and open-source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols. Check out the official site for more information.

Project

The goal of this project is to contribute to the development of VLC 4.0.0, an upcoming version that showcases a redesigned interface. The project focuses on enhancing user experience and introducing a more intuitive "media center" feel.

Within this context, the project entails integrating the new interface with the existing media library and current interface. By incorporating various features, the aim is to enhance usability and enrich the software with additional functionalities. These improvements will empower users with a more intuitive and feature-rich media playback experience.

VLC uses QML(Qt Modeling Language) as the front end and C++ as the back end.

Work

Community Bonding Period

In this period, I mostly focused on gaining a solid grasp of QML and Qt framework in general. For this, I followed Qt/QML Tutorial Playlist by KDAB. I also read some of the chapters of the book Qt5 Cadaques.

Apart from these, I tried to work on some issues as it is the best way to learn about the codebase.

Some Merge Requests before the official coding period

VLC 4 provide the ability to run on TV (on a set-top box, or a raspberry pi for example), TV has constraints regarding where you're allowed to put graphical elements, see https://en.wikipedia.org/wiki/Safe_area_(television). There were some alignment issues in this setup. I didn't even know QML when I started working on this issue 😅. But with the help of my mentor, I got my first patch merged to VLC.

Context Menu

This was supposed to be a good first issue but it turned out to be a bit challenging (at least for beginners). I learned a lot about VLC's codebase while working on this issue as I had to understand how each component connects with each other. Working on this MR gave me good insights about model-view-delegate architecture in Qt. Initially, I wrote the function to open parent directory 2 times (for video and audio), and then my mentor suggested I refactor it (to avoid code duplication). Then I learned about a really powerful thing called template in C++, with the help the which I was able to refactor the function.

Coding Period

Before After

This was my first task in the coding period. The idea was to make synchronizing audio and subtitles easier for the users. Now you don't have to calculate the delay in the track manually. I learned about a lot of things includings things specific to Qt framework and also a lesson on good code design vs bad code design. It was while working on this feature that I realized the power of Signals and Slots in Qt. I also learned about how to create custom components in C++ that can be used in QML. Initially I connected the delay buttons with the spinbox to change the value of subtitle or audio delay in the spinbox, which will then change the delay. This was an easier and intuitive way to implement this feature but its a bad code design because this is how it works: Calculate Delay with the help of buttons --> Change the value of SpinBox --> Change the actual delay to the value of SpinBox__. This is also known as spaghetti code. My mentor suggested this instead: Calculate Delay with the buttons --> Change the delay to the calculated delay. The reason why the latter structure is better is because its less complicated and hence easier to maintain.

Commits

deleteURL

With VLC, you can stream videos or radio from the internet by using URL. After you stream any media, it gets added to the history. The task was to add an option to delete any media item from the history. While working on this task, I learned how to use glue code to access code from different modules that would otherwise be incompatible. I also learned to use Lambda expressions in C++.

Commits:

Simple Preferences

VLC allows a lot of customization options. The task was to add some preset layouts for the user to choose from. For this, I had to get familiar with Qt Widgets. I also had to learn how to use Qt Designer application to work with .ui files.

Commits:

This feature allows user to toggle play/pause when clicked anywhere on the video screen. I also added a config option to disable this feature. A discussion is going on whether this option should be added to "Simple Preferences" or not. This will be merged after some other related patch will be merged.

Commits:

interactive video

Whenever you move the mouse, the controlbar at the top and the bottom of the player becomes visible. In case of interactive videos, the controlbar may overlap with the interactive element of the video and can be quite annoying. This merge request adds a button to toggle control bar visibility in case of interactive videos.

Commits:

About

This repository serves as a comprehensive record of my work during the Google Summer of Code (GSoC) 2023 period for the project: VLC Qt interface Redesign. Here, you will find the progress updates related to my contributions to the VLC media player.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published