Draft: feat: Add multiple audio tracks playback support
Add multiple audio tracks playback support
Google Summer of Code 2023
Mentee: Ayush Dey
Mentor: Thomas Guillem
Description
Add support for playing multiple audio tracks simultaneously from a media on systems using PulseAudio as the sound server.
gsoc-audio-test-2
Work breakdown
- Modify the audio output (aout) module API to support multiple streams by splitting device and stream handling.
- Implement the aout API within the PulseAudio module.
- Adapt the core to conditionally handle device and stream splitting (i.e., stream handling for adapted aout modules and device handling for legacy aout modules).
- Enhance the Player API to provide users with greater control over multiple audio streams.
- Incorporate these modifications into the Qt/VLC-ports to create an optimal GUI for controlling multiple streams.
Current features
- Multiple audio track selection is disabled by default but can be enabled from the GUI, similar to subtitles.
- An infinite number of audio streams can be initiated from a single aout object.
- A single Play/Pause/Mute/Volume button controls all the tracks playing in parallel.
- The core will generate multiple streams from a single aout object for adapted modules and multiple aout objects for legacy modules.
Future work
- Adaptation of the remaining common aout modules (Wasapi, Auhal, AAudio, Pipewire, etc.).
- Individual Play/Pause/Mute/Volume buttons for each track.
Acknowledgement
I would like to thank the team at VideoLAN for their support and especially my mentor Thomas Guillem, who has guided me actively throughout the development of this feature.
Edited by Ayush Dey
Merge request reports
Activity
Filter activity
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
added 36 commits
- cb72be5b - contrib: dav1d: update to 1.2.1
- ec50ed9b - audiotrack: do not call deprecated setLegacyStreamType() on Android API level 26+
- cee27115 - mmdevice: move MTA initialization to the worker thread
- c8183559 - contrib: mimic the Android CMake toolchain
- eedffa06 - contrib: libarchive: build with CMake
- 73d41c2d - network: httpd: move URL callbacks in a new function
- 90396cd3 - network: httpd: always NULL-check before url cb
- b4f8f7f0 - network: httpd: remove unused variable
- 8a886fbe - network: httpd: fix lock usage of URL callbacks
- d4095e44 - qt/navigation_history: Fix the 'getCurrent' function
- 781710a4 - qml/mainctx: Add the 'mediaLibraryVisible' property
- edaf358e - qml/MainInterface: Add the 'mediaLibraryVisible' support
- dfa2519f - qml/TopBar: Update the 'pinned' implementation
- 94c8c7be - qml/TopBar: Fix the 'menubar' margin
- 32742704 - qt/menus: Create 'media_library.svg'
- 14261da8 - qt/menus: Add the 'Media Library' entry
- 84f126ac - CI: target Windows 10 19H1 for UWP builds
- 9bbb3e99 - contrib: mingw64: allow GetHandleInformation in 19H1+ UWP
- 228d18a9 - contrib: remove patches to disable GetHandleInformation() calls in UWP
- e75c67bf - contrib: libarchive: update stdin patch
- ca365f4b - contrib: mingw64: allow CreateHardLinkW in 19H1+ UWP only
- 8e882543 - contrib: mingw64: allow some module API in 19H1+ UWP only
- 6fa3c152 - contrib: mingw64: allow registry API in 19H1+ UWP only
- b6031c53 - contrib: mingw64: allow GetFileInformationByHandle in 19H1+ UWP only
- 4ec4190b - contrib: mingw64: allow VirtualAlloc in 19H1+ UWP only
- ba1ef008 - contrib: use SF for all sourceforge contribs
- 90b635da - qml: remove obsolete comment
- 8274fc62 - qml: use fallbackImage in AudioGridItem
- 9d137d02 - qml: use fallbackImage in artist grid item
- 178070a9 - qml: use fallbackImage in artist album grid item
- 7ba19694 - qml: use fallbackImage in genre grid item
- cb6b11a5 - qml: use fallbackImage in video grid item
- c780e397 - qml: use fallbackImage in Services Sources grid item
- b3798902 - qml: use fallbackImage in TableColumns
- 4fb88f1b - qml: release failsafe image incase we have main image
- cb1a97ad - aout: move struct aout_stream declaration to include/vlc_aout.h
Toggle commit list- Resolved by Ayush Dey
You should also update your master branch to hide the master commits from your MR.
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
added 39 commits
-
4eae0528...55612cbe - 36 commits from branch
master
- 351c5880 - aout: move aout_stream to the core
- 957a6d80 - aout: move struct aout_stream declaration to include/vlc_aout.h
- 9ad245e8 - aout: add function vlc_FromRet()
Toggle commit list-
4eae0528...55612cbe - 36 commits from branch
added 2 commits
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
added 4 commits
Toggle commit listadded 13 commits
-
39cf063a...c5851fd4 - 10 commits from branch
master
- 3bdb7baa - aout: modify the return type of aout->start method to (aout_stream_t*) from (int)
- 8ba8c12d - aout: modify the Start() function to return (aout_stream_t*) instead of int
- 6ea690e4 - aout: adapt the core to handle the updated return value of aout->start method
Toggle commit list-
39cf063a...c5851fd4 - 10 commits from branch
- Resolved by Ayush Dey
added 64 commits
-
6ea690e4...f9757321 - 57 commits from branch
master
- fc7477c6 - aout: define VLC_ENODEV in include/vlc_common.h
- 3b3089a0 - aout: move the struct aout_stream declaration to the core (include/vlc_aout.h)
- 3fcc0230 - aout: modify the methods of aout_stream to return VLC generic int error codes
- 525a10b2 - aout: rename `struct vlc_aout_stream` to `struct vlc_aout_stream_owner` and...
- fdfb05c3 - aout: declare a method stream_stream inside struct audio_output_t that returns...
- 02f10f2e - aout: implemented the aout->stream_stream method in the Windows(mmdevice) module
- 9ad31e0e - aout: adapt the core to conditionally call the stream or device method for...
Toggle commit list-
6ea690e4...f9757321 - 57 commits from branch
- Resolved by Ayush Dey
- Resolved by Ayush Dey
added 21 commits
-
9ad31e0e...df6ab081 - 13 commits from branch
master
- 9933fa3c - aout: define VLC_ENODEV in include/vlc_common.h
- 805e471f - aout: move the struct aout_stream declaration to the core (include/vlc_aout.h)
- 04292b15 - aout: modify the methods of aout_stream to return VLC generic int error codes
- e962ccc5 - aout: rename `struct vlc_aout_stream` to `struct vlc_aout_stream_owner`
- d4f8bfd9 - aout: rename `struct aout_stream` to `struct vlc_aout_stream`
- 260361da - aout: declare a method start_stream inside struct audio_output_t that starts...
- e59edd92 - aout: define a wrapper function vlc_aout_stream_Start() that starts the aout module.
- 15159fe0 - aout: adapt the vlc_aout_stream_Start() function to conditionally call the...
Toggle commit list-
9ad31e0e...df6ab081 - 13 commits from branch
- Resolved by Ayush Dey
added 1 commit
- e91a3a4e - aout: rename the Start function to StartStream and modify it to return a vlc_aout_stream object
added 1 commit
- 9f57953e - aout: adapt the PulseAudio module to implement the vlc_aout_stream methods
- Resolved by Ayush Dey
added 90 commits
-
9f57953e...963a01e5 - 79 commits from branch
master
- 950c05b4 - aout: define VLC_ENODEV in include/vlc_common.h
- 6d41ac43 - aout: move the struct aout_stream declaration to the core (include/vlc_aout.h)
- 151437ac - aout: modify the methods of aout_stream to return VLC generic int error codes
- 9306dd16 - aout: rename `struct vlc_aout_stream` to `struct vlc_aout_stream_owner`
- f4bca244 - aout: rename `struct aout_stream` to `struct vlc_aout_stream`
- 8f3e2f50 - aout: declare a method start_stream inside struct audio_output_t that starts...
- b9c4e364 - aout: define a wrapper function vlc_aout_stream_Start() that starts the aout module.
- ce032457 - aout: adapt the vlc_aout_stream_Start() function to conditionally call the...
- 78a6edd1 - aout: modify and add methods(drain, volume_set, mute_set) in struct vlc_aout_stream.
- 98da4453 - aout: adapt the PulseAudio module to implement the vlc_aout_stream methods.
- f6e26e3d - aout: adapt the core to handle the device and stream split conditionally.
Toggle commit list-
9f57953e...963a01e5 - 79 commits from branch
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
added 86 commits
-
f6e26e3d...b8f82e45 - 75 commits from branch
master
- ba3741f0 - aout: define VLC_ENODEV in include/vlc_common.h
- 1edce3c7 - aout: move the struct aout_stream declaration to the core (include/vlc_aout.h)
- de187a73 - aout: modify the methods of aout_stream to return VLC generic int error codes
- 85c56a56 - aout: rename `struct vlc_aout_stream` to `struct vlc_aout_stream_owner`
- 4b322118 - aout: rename `struct aout_stream` to `struct vlc_aout_stream`
- 3a2407eb - aout: declare a method start_stream inside struct audio_output_t that starts...
- 1c6abdb9 - aout: define a wrapper function vlc_aout_stream_Start() that starts the aout module.
- dd03ac89 - aout: adapt the vlc_aout_stream_Start() function to conditionally call the...
- b242e949 - aout: modify and add methods(drain, volume_set, mute_set) in struct...
- e4171ec3 - aout: adapt the PulseAudio module to implement the vlc_aout_stream methods.
- 0c9a2f49 - aout: adapt the core to handle the device and stream split conditionally.
Toggle commit list-
f6e26e3d...b8f82e45 - 75 commits from branch
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
- Resolved by Ayush Dey
added 9 commits
-
aeb1114c - 1 commit from branch
master
- f2860ef5 - aout: define VLC_ENODEV in include/vlc_common.h
- 2dc6bb5e - aout: move the struct aout_stream declaration to the core (include/vlc_aout.h)
- 2f623150 - aout: modify the methods of aout_stream to return VLC generic int error codes
- 414b8410 - aout: rename `struct vlc_aout_stream` to `struct vlc_aout_stream_owner`
- 07217a67 - aout: rename `struct aout_stream` to `struct vlc_aout_stream`
- be107b1e - aout: declare a method start_stream inside struct audio_output_t that starts a...
- a30a7199 - aout: adapt the PulseAudio module to implement the vlc_aout_stream methods
- bf7bb7dc - aout: adapt the core to handle the device and stream split conditionally
Toggle commit list-
aeb1114c - 1 commit from branch
- Resolved by Ayush Dey
added 44 commits
-
bf7bb7dc...5df262a4 - 36 commits from branch
master
- 7e1f03bc - aout: define VLC_ENODEV in include/vlc_common.h
- 677c8d7d - aout: move the struct aout_stream declaration to the core (include/vlc_aout.h)
- f9558c95 - aout: modify the methods of aout_stream to return VLC generic int error codes
- f2fd5c52 - aout: rename `struct vlc_aout_stream` to `struct vlc_aout_stream_owner`
- b97d71eb - aout: rename `struct aout_stream` to `struct vlc_aout_stream`
- c0b30211 - aout: declare a method start_stream inside struct audio_output_t that starts a...
- 94906e5d - aout: adapt the PulseAudio module to implement the vlc_aout_stream methods
- d48c008f - aout: adapt the core to handle the device and stream split conditionally
Toggle commit list-
bf7bb7dc...5df262a4 - 36 commits from branch
- Resolved by Ayush Dey
Please register or sign in to reply