medialibrary issueshttps://code.videolan.org/videolan/medialibrary/-/issues2019-05-22T13:59:31Zhttps://code.videolan.org/videolan/medialibrary/-/issues/92Task can't be resume if a removable device changed its mountpoint2019-05-22T13:59:31ZHugo Beauzée-LuyssenTask can't be resume if a removable device changed its mountpointThe issue exhibits itself on iOS, where we try to rescan all the media as part of the 16->17 migration, but their location changed, since the "app folder" changes each time the application runs.
This leads to a case where we have an MRL...The issue exhibits itself on iOS, where we try to rescan all the media as part of the 16->17 migration, but their location changed, since the "app folder" changes each time the application runs.
This leads to a case where we have an MRL for the task (and also a file_id), but when we try to restore the FS instances, it fails because the mrl isn't valid anymore:
```
Error: /Users/bubu/Projects/videolabs/VLCMediaLibraryKit/libmedialibrary/medialibrary/src/utils/Directory.cpp:87 toAbsolute Failed to convert /Users/bubu/Library/Developer/CoreSimulator/Devices/353A33DD-F9B3-4923-A908-A3C052DC05F9/data/Containers/Data/Application/041C2071-FAB2-49C9-8F7A-3FDE1A443B4D/Documents/ to absolute path
Error: /Users/bubu/Projects/videolabs/VLCMediaLibraryKit/libmedialibrary/medialibrary/src/parser/Task.cpp:386 restoreLinkedEntities Failed to restore task: Failed to convert to absolute path: No such file or directory
Info: /Users/bubu/Projects/videolabs/VLCMediaLibraryKit/libmedialibrary/medialibrary/src/parser/Task.cpp:330 restoreLinkedEntities Restoring linked entities of task 2
```
We should be able to either use the file_id (which in itself is plenty enough), or to fallback to it in case we can't find the file.
I need to re-read and document the code better, since I'm quite confused by what seems to be hacked around fixes for some edge cases. Damn you past me...
It's unclear why we'd need to parse an external file, as the comment
```
// MRL will be empty if the task has been resumed from unparsed files
// parentFolderId == 0 indicates an external file
```
seems to indicate we can do
And it seems that there is support for removable files, as
```
// We might re-create tasks without mrl to ease the handling of files on
// external storage.
```
shows.
It might not be a large code change, but I'd like to avoid screwing this up and causing yet another migration.0.5.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/81Extract album covers from the album folder2019-05-16T17:18:13ZHugo Beauzée-LuyssenExtract album covers from the album folderThe medialibrary knows about the various albums/artists better than (lib)vlc, which is only based on the names.
Additionally, vlc only recognized a reduced set of patterns as a cover file.
Handling the cover extraction from the medialib...The medialibrary knows about the various albums/artists better than (lib)vlc, which is only based on the names.
Additionally, vlc only recognized a reduced set of patterns as a cover file.
Handling the cover extraction from the medialibrary will yield better results, and allows us to better manage the files we use as covers, instead of relying on VLC's cache.0.5.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/79Add songs to a folder : Only new songs appears2019-10-18T13:57:21ZAlexandre PerraudAdd songs to a folder : Only new songs appearsStep to reproduce
- Create a folder with songs on desktop
- Add this folder to an Android Device
- Refresh the Android medialibrary
- Add songs to the desktop folder
- Copy again this folder to the Android Device
- Refresh
- Only new son...Step to reproduce
- Create a folder with songs on desktop
- Add this folder to an Android Device
- Refresh the Android medialibrary
- Add songs to the desktop folder
- Copy again this folder to the Android Device
- Refresh
- Only new songs appears.
At this point, a complete rescan is required.
[vlc_media_before.db](/uploads/c6aef361d668e311024c8b783611ab5a/vlc_media_before.db)
[vlc_media_after.db](/uploads/0f82c96086b5631571c296ec9ffedee7/vlc_media_after.db)
[logcat.txt](/uploads/af3c58dcdeca198a556d76e53659769b/logcat.txt)0.4.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/69Database model must be updated as part of migration transactions2019-02-19T16:37:00ZHugo Beauzée-LuyssenDatabase model must be updated as part of migration transactionsMost upgrades are opening their own transaction, meaning that a failure during any upgrade would cause the migration to re-run, since the version wouldn't be upgraded in database.Most upgrades are opening their own transaction, meaning that a failure during any upgrade would cause the migration to re-run, since the version wouldn't be upgraded in database.0.4.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/67Rework Playlist API2019-04-04T12:41:57ZHugo Beauzée-LuyssenRework Playlist APIThe playlists were initially designed to hold unique media, which isn't the case anymore. This means we can't remove a single occurrence of a media that was inserted multiple times.
Another issue is that the position is in the [1;N] ran...The playlists were initially designed to hold unique media, which isn't the case anymore. This means we can't remove a single occurrence of a media that was inserted multiple times.
Another issue is that the position is in the [1;N] range, instead of the usually expected [0;N-1]
* [x] Use a [0;N-1] position/index to add items to the playlist
* [x] Curate the position records after deletion
* [x] Change the API to delete media based on the position
* [x] Change the API to move media based on the position
* [x] Index the PlaylistMediaRelation table by playlist_id & position
* [x] Migrate previous playlist to contiguous indexes
* [x] This must be part of model 16, since model 15 is already used as part of vlc-android beta
~~This needs to be backported to 0.4.x afterward~~0.5.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/65Playlist files are not updated when changed on disk2019-01-31T13:13:19ZHlaing Min ThantPlaylist files are not updated when changed on diskM3U Playlists file show in the Playlist Tab but cannot play or load the list of music. It can only be played by directly going to the actual file.M3U Playlists file show in the Playlist Tab but cannot play or load the list of music. It can only be played by directly going to the actual file.0.4.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/63Reimplement title decrapifier2019-11-20T10:04:57ZHugo Beauzée-LuyssenReimplement title decrapifierCurrently, show episodes are only recognized when they provide a show name & episode number meta. Otherwise, we simply fallback to regular video.
We need to be able to analyze the media title to extract the show name, and episode & seas...Currently, show episodes are only recognized when they provide a show name & episode number meta. Otherwise, we simply fallback to regular video.
We need to be able to analyze the media title to extract the show name, and episode & season numbers, just like we used to do in the iOS & UWP app.0.7.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/61Add thumbnails for Genre2019-07-05T11:14:57ZHugo Beauzée-LuyssenAdd thumbnails for GenreWhich thumbnail to use is open for discussion :)
It could be the thumbnail of the first track detected with a matching genre, or we could go the way that's used for the QML version of VLC, which fetches the first 4 tracks of that genre,...Which thumbnail to use is open for discussion :)
It could be the thumbnail of the first track detected with a matching genre, or we could go the way that's used for the QML version of VLC, which fetches the first 4 tracks of that genre, and displays their 4 thumbnails
If that's the way we go for, we need a way to select tracks with a generated thumbnail though.0.5.xHugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/477IMediaLibrary::searchPlaylists should have a PlaylistType parametter2023-10-24T09:48:20ZPierre LamotIMediaLibrary::searchPlaylists should have a PlaylistType parametterFiltering a on Video or Audio only view yields unrelated results without thisFiltering a on Video or Audio only view yields unrelated results without thishttps://code.videolan.org/videolan/medialibrary/-/issues/469medialibrary: VLC crashes when it fails to change the presence of a device2023-12-20T13:30:54ZLeon Vitanosmedialibrary: VLC crashes when it fails to change the presence of a deviceI am on dualboot (Windows/Ubuntu). After formatting Windows (where some of it's folders where included in the medialibrary on vlc on Ubuntu), i was getting this error:
`vlc: ../src/Device.cpp:95: void medialibrary::Device::setPresent(bo...I am on dualboot (Windows/Ubuntu). After formatting Windows (where some of it's folders where included in the medialibrary on vlc on Ubuntu), i was getting this error:
`vlc: ../src/Device.cpp:95: void medialibrary::Device::setPresent(bool): Assertion !"Can't change the presence of a non-removable device" failed.`
Only way to fix it was by deleting the mllibrary from the .local/shared/vlc folder
@chub @asenat
Attatched is the [ml.db](/uploads/b4f118c1e2736081eeaa278f75f5b4b6/ml.db) that was problematichttps://code.videolan.org/videolan/medialibrary/-/issues/462Can't build.2022-12-02T13:59:43ZjohnCan't build.This is what happened when I tried to build:
```
The Meson build system
Version: 0.49.2
Source dir: ~/src/medialibrary
Build dir: ~/src/medialibrary/build
Build type: native build
meson_options.txt:6:0: ERROR: Arguments may only be str...This is what happened when I tried to build:
```
The Meson build system
Version: 0.49.2
Source dir: ~/src/medialibrary
Build dir: ~/src/medialibrary/build
Build type: native build
meson_options.txt:6:0: ERROR: Arguments may only be string, int, bool, or array of those.
A full log can be found at ~/src/medialibrary/build/meson-logs/meson-log.txt
```
I have no idea why. I looked at meson_options.txt, but it looks like some custom programming language that I'm not going to try and figure out. I don't plan on ever adopting Meson for any of my projects. None of the options make any sense to me.
I was attempting to follow the build instructions for VLMC, which claimed that medialibrary would have a script called 'bootstrap'.
The meson-log.txt contains the same text as above, except without the line about where to find the full log.https://code.videolan.org/videolan/medialibrary/-/issues/453Subscription: an refreshAll() API would be handy2022-11-17T09:33:08ZNicolas PomepuySubscription: an refreshAll() API would be handyFor now, the port has to iterate on all the service, to get all the subscriptions and then refresh them all.
It would be handy to have a new API allowing the ports to refresh all the services / subscription. It should behave the same as...For now, the port has to iterate on all the service, to get all the subscriptions and then refresh them all.
It would be handy to have a new API allowing the ports to refresh all the services / subscription. It should behave the same as the parsing task and send some callbacks describing the progress.https://code.videolan.org/videolan/medialibrary/-/issues/452Subscription: crash when adding an existing subscription2022-11-16T10:32:21ZNicolas PomepuySubscription: crash when adding an existing subscriptionReproduction:
1. call `servicePtr->addSubscription(char_mrl)` with a link
1. Wait for the refresh
1. call `servicePtr->addSubscription(char_mrl)` with the same link
Crash:
```
2022-10-26 13:48:57.180 8173-11587 libc++abi ...Reproduction:
1. call `servicePtr->addSubscription(char_mrl)` with a link
1. Wait for the refresh
1. call `servicePtr->addSubscription(char_mrl)` with the same link
Crash:
```
2022-10-26 13:48:57.180 8173-11587 libc++abi org.videolan.vlc.debug E terminating with uncaught exception of type medialibrary::sqlite::errors::ConstraintUnique: Request [INSERT INTO Task(attempts_left, type, mrl, file_type, link_to_id, link_to_type, link_extra, link_to_mrl)VALUES(?, ?, ?, ?, ?, 0, 0, '')] aborted due to constraint violation (UNIQUE constraint failed: Task.mrl, Task.type, Task.link_to_id, Task.link_to_type, Task.link_extra, Task.link_to_mrl)
2022-10-26 13:48:57.183 8173-11587 libc org.videolan.vlc.debug A Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 11587 (DefaultDispatch), pid 8173 (main)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A Cmdline: org.videolan.vlc.debug
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A pid: 8173, tid: 11587, name: DefaultDispatch >>> org.videolan.vlc.debug <<<
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #01 pc 000000000009e8e8 /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libc++_shared.so (BuildId: fe1b5f695d356c857834778696686059de87f7f8)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #02 pc 000000000009eadc /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libc++_shared.so (BuildId: fe1b5f695d356c857834778696686059de87f7f8)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #03 pc 00000000000b0530 /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libc++_shared.so (BuildId: fe1b5f695d356c857834778696686059de87f7f8)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #04 pc 00000000000afe38 /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libc++_shared.so (__cxa_rethrow+196) (BuildId: fe1b5f695d356c857834778696686059de87f7f8)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #05 pc 00000000001df798 /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libmla.so (long medialibrary::sqlite::Tools::executeInsert<unsigned int const&, medialibrary::parser::Task::Type, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, medialibrary::IFile::Type, medialibrary::IService::Type&>(medialibrary::sqlite::Connection*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, unsigned int const&, medialibrary::parser::Task::Type&&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, medialibrary::IFile::Type&&, medialibrary::IService::Type&)+520) (BuildId: b1932553b9a19fdc9a165d3bc15ccaec7462c5ef)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #06 pc 00000000001d846c /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libmla.so (medialibrary::parser::Task::create(medialibrary::MediaLibrary const*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >, medialibrary::IService::Type)+468) (BuildId: b1932553b9a19fdc9a165d3bc15ccaec7462c5ef)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #07 pc 000000000022b10c /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libmla.so (medialibrary::Service::addSubscription(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >)+76) (BuildId: b1932553b9a19fdc9a165d3bc15ccaec7462c5ef)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #08 pc 0000000000110304 /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/lib/arm64/libmla.so (addSubscription(_JNIEnv*, _jobject*, _jobject*, int, _jstring*)+196) (BuildId: b1932553b9a19fdc9a165d3bc15ccaec7462c5ef)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #11 pc 00000000002dfb24 [anon:dalvik-classes25.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes25.dex] (org.videolan.medialibrary.media.MlServiceImpl.addSubscription+16)
2022-10-26 13:48:58.038 11892-11892 DEBUG pid-11892 A #13 pc 0000000000009400 [anon:dalvik-classes6.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes6.dex] (org.videolan.vlc.gui.discover.DiscoverBrowserFragment$onCreateView$1$1$invokeSuspend$$inlined$getFromMl$1.invokeSuspend+156)
2022-10-26 13:48:58.039 11892-11892 DEBUG pid-11892 A #17 pc 0000000000276396 [anon:dalvik-classes25.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes25.dex] (kotlinx.coroutines.internal.LimitedDispatcher.run+26)
2022-10-26 13:48:58.039 11892-11892 DEBUG pid-11892 A #19 pc 000000000027dd5e [anon:dalvik-classes25.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes25.dex] (kotlinx.coroutines.scheduling.TaskImpl.run+6)
2022-10-26 13:48:58.039 11892-11892 DEBUG pid-11892 A #21 pc 000000000027ce76 [anon:dalvik-classes25.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes25.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely+2)
2022-10-26 13:48:58.039 11892-11892 DEBUG pid-11892 A #23 pc 000000000027bb92 [anon:dalvik-classes25.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes25.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask+34)
2022-10-26 13:48:58.039 11892-11892 DEBUG pid-11892 A #25 pc 000000000027bcc0 [anon:dalvik-classes25.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes25.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker+56)
2022-10-26 13:48:58.039 11892-11892 DEBUG pid-11892 A #27 pc 000000000027bc70 [anon:dalvik-classes25.dex extracted in memory from /data/app/~~XrosotsLD5XfqPQBg-ZgGg==/org.videolan.vlc.debug-hzYLnpGDzltIbI_uEhRnLg==/base.apk!classes25.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run+0)
---------------------------- PROCESS ENDED (8173) for package org.videolan.vlc.debug ----------------------------
```https://code.videolan.org/videolan/medialibrary/-/issues/444Media scan gets stuck on larger folders (again)2022-08-11T13:32:19ZKirbyJoeMedia scan gets stuck on larger folders (again)<!--- Provide a general summary of the issue in the Title above -->
## Description
<!--- Describe your bug in detail -->
Same bug from vlc-android#679 and vlc-android#728. The issue was once fixed, but it's occurring again.
#### Expec...<!--- Provide a general summary of the issue in the Title above -->
## Description
<!--- Describe your bug in detail -->
Same bug from vlc-android#679 and vlc-android#728. The issue was once fixed, but it's occurring again.
#### Expected behavior
Media scan will scan large folders correctly.
#### Actual behavior
Large folder says empty when it's loaded.
#### Steps to reproduce
1. Update to 3.5.0
2. Look for large folders with 50+ files
## Context
#### App version
<!--You can find it in the About screen of the app-->
3.5.0
#### Android version
Android TV 10 (Google TV)
#### Device model
BRAVIA 4K VH2 (KJ-43X80J)
#### App mode
**TV**https://code.videolan.org/videolan/medialibrary/-/issues/438[OpenWrt Compile]: FAILED: src/libmedialibrary.a.p/utils_Strings.cpp.o2022-05-25T11:52:39ZBill Ross[OpenWrt Compile]: FAILED: src/libmedialibrary.a.p/utils_Strings.cpp.oAttempting to port VLC to openwrt (using contribs), for a tiled security camera app, X11 / support libraries already working.
Latest master VLC version, checked out yesterday.
Can someone toss me a bone to fix this?
Thanks;
Bill
Gett...Attempting to port VLC to openwrt (using contribs), for a tiled security camera app, X11 / support libraries already working.
Latest master VLC version, checked out yesterday.
Can someone toss me a bone to fix this?
Thanks;
Bill
Getting this compile error which I suspect is a build infrastructure issue, missing library or include:
```
[44/58] Compiling C++ object src/libmedialibrary.a.p/utils_Strings.cpp.o
FAILED: src/libmedialibrary.a.p/utils_Strings.cpp.o
aarch64-openwrt-linux-g++ -Isrc/libmedialibrary.a.p -Isrc -I../src -I. -I.. -Iinclude -I../include -I../src/utils/xxhash -I/include -I/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/include -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Wpedantic -std=c++14 -O2 -g -DHAVE_CONFIG_H=1 -fPIC -pthread -MD -MQ src/libmedialibrary.a.p/utils_Strings.cpp.o -MF src/libmedialibrary.a.p/utils_Strings.cpp.o.d -o src/libmedialibrary.a.p/utils_Strings.cpp.o -c ../src/utils/Strings.cpp
../src/utils/Strings.cpp: In function 'std::string medialibrary::utils::str::trim(std::string)':
../src/utils/Strings.cpp:44:11: error: no matching function for call to 'std::basic_string<char>::erase(std::basic_string<char>::iterator, __gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >)'
}));
^
In file included from /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/string:52,
from ../src/utils/Strings.h:25,
from ../src/utils/Strings.cpp:27:
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4632:7: note: candidate: 'std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::erase(std::basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]'
erase(size_type __pos = 0, size_type __n = npos)
^~~~~
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4632:7: note: no known conversion for argument 1 from 'std::basic_string<char>::iterator' {aka '__gnu_cxx::__normal_iterator<char*, std::basic_string<char> >'} to 'std::basic_string<char>::size_type' {aka 'long unsigned int'}
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4648:7: note: candidate: 'std::basic_string<_CharT, _Traits, _Alloc>::iterator std::basic_string<_CharT, _Traits, _Alloc>::erase(std::basic_string<_CharT, _Traits, _Alloc>::iterator) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; typename _Alloc::rebind<_CharT>::other::pointer = char*]'
erase(iterator __position)
^~~~~
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4648:7: note: candidate expects 1 argument, 2 provided
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4668:7: note: candidate: 'std::basic_string<_CharT, _Traits, _Alloc>::iterator std::basic_string<_CharT, _Traits, _Alloc>::erase(std::basic_string<_CharT, _Traits, _Alloc>::iterator, std::basic_string<_CharT, _Traits, _Alloc>::iterator) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; typename _Alloc::rebind<_CharT>::other::pointer = char*]'
erase(iterator __first, iterator __last);
^~~~~
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4668:7: note: no known conversion for argument 2 from '__normal_iterator<const char*,[...]>' to '__normal_iterator<char*,[...]>'
../src/utils/Strings.cpp:47:32: error: no matching function for call to 'std::basic_string<char>::erase(std::reverse_iterator<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::iterator_type, std::basic_string<char>::iterator)'
}).base(), value.end() );
^
In file included from /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/string:52,
from ../src/utils/Strings.h:25,
from ../src/utils/Strings.cpp:27:
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4632:7: note: candidate: 'std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::erase(std::basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]'
erase(size_type __pos = 0, size_type __n = npos)
^~~~~
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4632:7: note: no known conversion for argument 1 from 'std::reverse_iterator<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> > >::iterator_type' {aka '__gnu_cxx::__normal_iterator<const char*, std::basic_string<char> >'} to 'std::basic_string<char>::size_type' {aka 'long unsigned int'}
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4648:7: note: candidate: 'std::basic_string<_CharT, _Traits, _Alloc>::iterator std::basic_string<_CharT, _Traits, _Alloc>::erase(std::basic_string<_CharT, _Traits, _Alloc>::iterator) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; typename _Alloc::rebind<_CharT>::other::pointer = char*]'
erase(iterator __position)
^~~~~
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4648:7: note: candidate expects 1 argument, 2 provided
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4668:7: note: candidate: 'std::basic_string<_CharT, _Traits, _Alloc>::iterator std::basic_string<_CharT, _Traits, _Alloc>::erase(std::basic_string<_CharT, _Traits, _Alloc>::iterator, std::basic_string<_CharT, _Traits, _Alloc>::iterator) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >; typename _Alloc::rebind<_CharT>::other::pointer = char*]'
erase(iterator __first, iterator __last);
^~~~~
/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/aarch64-openwrt-linux-gnu/include/c++/8.4.0/bits/basic_string.h:4668:7: note: no known conversion for argument 1 from '__normal_iterator<const char*,[...]>' to '__normal_iterator<char*,[...]>'
[46/58] Compiling C++ object src/libmedialibrary.a.p/utils_ModificationsNotifier.cpp.o
ninja: build stopped: subcommand failed.
```
Here's what leads up to it:
```
cd medialibrary && CC="aarch64-openwrt-linux-gcc" CXX="aarch64-openwrt-linux-g++" LD="aarch64-openwrt-linux-ld" AR="aarch64-openwrt-linux-gcc-ar" CCAS="aarch64-openwrt-linux-gcc -c" RANLIB="aarch64-openwrt-linux-gcc-ranlib" STRIP="aarch64-openwrt-linux-strip" PATH="/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/extras/tools/build/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/host/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/hostpkg/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/host/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" PKG_CONFIG="/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/host/bin/pkg-config" CPPFLAGS="-Os -pipe -march=armv8-a -mtune=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3=vlc-3.0.17.3 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -DPIC -fPIC -Wno-error=format-security -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/libintl-full/lib/ -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/ -I/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/include" CFLAGS="-Os -pipe -march=armv8-a -mtune=cortex-a53 -fno-caller-saves -fno-plt -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result -fmacro-prefix-map=/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3=vlc-3.0.17.3 -Wformat -Werror=format-security -fstack-protector -D_FORTIFY_SOURCE=1 -Wl,-z,now -Wl,-z,relro -DPIC -fPIC -Wno-error=format-security -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/libintl-full/lib/ -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/ -I/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/include" CXXFLAGS=" -I/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/include " LDFLAGS="-L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/usr/lib -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/lib -znow -zrelro -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/ -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/libintl-full/lib/ -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/root-armvirt/usr/lib -Wl,-rpath-link=/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/root-armvirt/usr/lib -lssl -lcrypto -L/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/lib " env -i PATH="/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/extras/tools/build/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/host/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/hostpkg/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/toolchain-aarch64_cortex-a53_gcc-8.4.0_glibc/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/host/bin:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" PKG_CONFIG_PATH="/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/lib/pkgconfig:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/pkgconfig:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/share/pkgconfig" meson -Dpkg_config_path="/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/lib/pkgconfig:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/pkgconfig:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/share/pkgconfig" --default-library static --prefix "/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux" --backend ninja -Dlibdir=lib --buildtype debugoptimized --cross-file /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/cross/crossfile.meson -Dlibvlc=disabled -Dlibtool_workaround=true build
DEPRECATION: c_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: c_link_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: cpp_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
DEPRECATION: cpp_link_args in the [properties] section of the machine file is deprecated, use the [built-in options] section.
The Meson build system
Version: 0.61.4
Source dir: /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/cross/medialibrary
Build dir: /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/cross/medialibrary/build
Build type: cross build
Project name: medialibrary
Project version: 0.12.0
C compiler for the host machine: aarch64-openwrt-linux-gcc (gcc 8.4.0 "aarch64-openwrt-linux-gcc (OpenWrt GCC 8.4.0 r16495-bf0c965af0) 8.4.0")
C linker for the host machine: aarch64-openwrt-linux-gcc ld.bfd 2.35.1
C++ compiler for the host machine: aarch64-openwrt-linux-g++ (gcc 8.4.0 "aarch64-openwrt-linux-g++ (OpenWrt GCC 8.4.0 r16495-bf0c965af0) 8.4.0")
C++ linker for the host machine: aarch64-openwrt-linux-g++ ld.bfd 2.35.1
C compiler for the build machine: ccache cc (gcc 9.4.0 "cc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0")
C linker for the build machine: cc ld.bfd 2.34
C++ compiler for the build machine: ccache c++ (gcc 9.4.0 "c++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0")
C++ linker for the build machine: c++ ld.bfd 2.34
Build machine cpu family: x86_64
Build machine cpu: x86_64
Host machine cpu family: aarch64
Host machine cpu: aarch64
Target machine cpu family: aarch64
Target machine cpu: aarch64
Checking for function "link" : YES
Message: Checking for C++11 thread support
Message: Checking for C++11 mutex support
Message: Checking for C++11 thread_local support
Message: Checking for C++11 condition_variable support
Run-time dependency threads found: YES
Library atomic found: YES
Found pkg-config: /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/host/bin/pkg-config (1.7.3)
Run-time dependency sqlite3 found: YES 3.33.0
Dependency libvlc skipped: feature libvlc disabled
Found CMake: NO
Run-time dependency libxxhash found: NO (tried pkgconfig and cmake)
Configuring config.h using configuration
Run-time dependency benchmark found: NO (tried pkgconfig and cmake)
Build targets in project: 1
medialibrary 0.12.0
User defined options
Cross files : /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/cross/crossfile.meson
backend : ninja
buildtype : debugoptimized
default_library : static
libdir : lib
pkg_config_path : /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux/lib/pkgconfig:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/lib/pkgconfig:/home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/target-aarch64_cortex-a53_glibc/usr/share/pkgconfig
prefix : /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/build_dir/target-aarch64_cortex-a53_glibc/vlc-3.0.17.3/contrib/aarch64-openwrt-linux
libtool_workaround: true
libvlc : disabled
Found ninja-1.10.2 at /home/rossb/openwrt/v21.02.2/openwrt-v21.02.2/staging_dir/hostpkg/bin/ninja
ninja -C medialibrary/build
ninja: Entering directory `medialibrary/build'
[44/58] Compiling C++ object src/libmedialibrary.a.p/utils_Strings.cpp.o
```Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/435Convertion from external to internal lacks a callback2022-05-03T12:45:35ZHugo Beauzée-LuyssenConvertion from external to internal lacks a callbackThis is needed for the application to know that a media reappeared when an entry point gets added again.
See vlc#26854This is needed for the application to know that a media reappeared when an entry point gets added again.
See vlc#26854Hugo Beauzée-LuyssenHugo Beauzée-Luyssenhttps://code.videolan.org/videolan/medialibrary/-/issues/417Add Feature - Sort By2022-02-22T19:45:40ZChandan Kumarchandan.309kr@gmail.comAdd Feature - Sort ByThere should have been more options for sorting audio files on the basis of `date added,` `last played`, `most played`.![Screenshot_2021-10-04_at_11.16.16_AM](/uploads/5c56dca046b95a6a4823f28aa813d909/Screenshot_2021-10-04_at_11.16.16_AM...There should have been more options for sorting audio files on the basis of `date added,` `last played`, `most played`.![Screenshot_2021-10-04_at_11.16.16_AM](/uploads/5c56dca046b95a6a4823f28aa813d909/Screenshot_2021-10-04_at_11.16.16_AM.png)https://code.videolan.org/videolan/medialibrary/-/issues/416Crash when launching the app when targeting 0.11.02022-02-18T10:04:14ZNicolas PomepuyCrash when launching the app when targeting 0.11.0Just after targeting 0.11.0, the app crashes on start with this stacktrace:
[crash_ml.log](/uploads/3234b31492e1787e3e8d30ee73829d58/crash_ml.log)Just after targeting 0.11.0, the app crashes on start with this stacktrace:
[crash_ml.log](/uploads/3234b31492e1787e3e8d30ee73829d58/crash_ml.log)https://code.videolan.org/videolan/medialibrary/-/issues/406Crash at first sdcard index2022-01-14T15:15:16ZDuncan McNamaraCrash at first sdcard indexWhen first installing vlc-android, and after clicking yes on the dialog to index the sdcard, the medialibrary crashes. I was able to reproduce it on an Android 10 device, and Pixel 3C emulateur running Android 11.
Here is the verbose lo...When first installing vlc-android, and after clicking yes on the dialog to index the sdcard, the medialibrary crashes. I was able to reproduce it on an Android 10 device, and Pixel 3C emulateur running Android 11.
Here is the verbose logs, with the crash starting a l.5685
[crash-sdcard-verbose.log](/uploads/5e307f96c3490ae27738168b557898c1/crash-sdcard-verbose.log)
And here are vlc_media.db and vlc_media.db-journal, without restarting the app:
[vlc_media.db](/uploads/ca2b525ecce5dadbd78531416d33cb5a/vlc_media.db)
[vlc_media.db-journal](/uploads/869b19cc0fdd5696e11d9bc413719326/vlc_media.db-journal)https://code.videolan.org/videolan/medialibrary/-/issues/390RTSP stream with question mark fails on VLC Mobile2021-11-15T16:46:13ZMark BiesmaRTSP stream with question mark fails on VLC MobileUsing the following RTSP stream on a Windows computer with VLC v3.0.14 works fine:
`rtsp://admin:password@192.168.1.112:554/cam/realmonitor?channel=1&subtype=0`
But when using the same RTSP stream on VLC Mobile (VLC for iOS v3.2.13) it...Using the following RTSP stream on a Windows computer with VLC v3.0.14 works fine:
`rtsp://admin:password@192.168.1.112:554/cam/realmonitor?channel=1&subtype=0`
But when using the same RTSP stream on VLC Mobile (VLC for iOS v3.2.13) it fails to start the stream.
I think it has something to do with the question mark in the RTSP stream URL.Felix Paul Kühnefkuehne@videolan.orgFelix Paul Kühnefkuehne@videolan.org