[vlc-devel] [vlc-commits] compat: replace aligned_alloc() rather than posix_memalign()
Steve Lhomme
robux4 at gmail.com
Tue Jun 20 13:46:15 CEST 2017
On Tue, Jun 20, 2017 at 1:10 PM, <remi at remlab.net> wrote:
> There are no reasons why Windows Vista or later cannot run compiled C11 or
> C++11. This is purely a deficiency of your SDK(s) if you prefer that name
It's not my SDK. It's all of the Windows SDKs.
> over "toolchain(s)". To the extreme, the SDK could use aligned allocations
> for every thing and it would work. Considering the increasing popularity of
> C++11, it is even odd that it has hypothetically not already been fixed.
std::aligned_alloc() is part of C++17 not C++11.
> (Even 2000/XP/2003 but threads support is a bit of a problem there.)
>
>
> Le 20 juin 2017 13:44:23 GMT+03:00, Steve Lhomme <robux4 at gmail.com> a écrit
> :
>>
>> On Tue, Jun 20, 2017 at 12:34 PM, <remi at remlab.net> wrote:
>>>
>>> The OS kernel allocates memory at page level. Depending where the line
>>> is
>>> drawn between OS and the C & C++ runtimes, there may be some higher
>>> level
>>
>>
>> Yes, the line where to draw the limit can be thin. But here you rely
>> on functions that do not match anything in the Windows OS and that
>> exist in no Windows toolchain. So either we decide to drop Windows
>> support because all we want is pure C11 code. Or we do things
>> differently.
>>
>>> function provided by the OS.
>>>
>>> Still, fact is that standard allocation functions and free() are
>>> toolchain
>>> responsibility to provide on top of the OS specifics (Windows has its
>>> own
>>> heap management...). Another fact is that aligned_alloc() does not
>>> require
>>> any OS functionality that malloc() wouldn't also. And last fact is that
>>> VLC
>>> is written in ISO C and C++ which require all the functions above.
>>>
>>>
>>> Le 20 juin 2017 13:18:22 GMT+03:00, Steve Lhomme <robux4 at gmail.com> a
>>> écrit
>>> :
>>>>
>>>>
>>>> On Tue, Jun 20, 2017 at 12:14 PM, <remi at remlab.net> wrote:
>>>>>
>>>>>
>>>>> It has everything to do with the toolchain. The toolchain provides
>>>>> the
>>>>> hosted ISO C library.
>>>>
>>>>
>>>>
>>>> The toolchain doesn't do the allocation, the OS does. And it also
>>>> imposes how this memory needs to be free'd.
>>>>
>>>> But you can argue endlessly on what part is broken, the fact is the
>>>> core is currently unusable on Windows due to your patches. And your
>>>> best answer is "I don't care".
>>>>
>>>>> Le 20 juin 2017 13:05:49 GMT+03:00, Steve Lhomme <robux4 at gmail.com> a
>>>>> écrit
>>>>> :
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Jun 20, 2017 at 11:53 AM, <remi at remlab.net> wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Repeating myself but this patch does not change the fallback
>>>>>>> logic,
>>>>>>> so
>>>>>>> it
>>>>>>> can't break anything.
>>>>>>>
>>>>>>> And to paraphrase other devs "I don't care" about non-ISO
>>>>>>> toolchains.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> The fact on Windows the aligned malloc needs to be freed with an
>>>>>> aligned version of free() has nothing to do with the toolchain.
>>>>>>
>>>>>>>
>>>>>>> Le 20 juin 2017 12:40:41 GMT+03:00, Steve Lhomme
>>>>>>> <robux4 at gmail.com> a
>>>>>>> écrit
>>>>>>> :
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Jun 20, 2017 at 11:35 AM, Steve Lhomme <robux4 at gmail.com>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Jun 20, 2017 at 11:28 AM, <remi at remlab.net> wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> The goal is to use aligned_alloc() instead of posix_memalign()
>>>>>>>>>> since
>>>>>>>>>> the
>>>>>>>>>> earlier is required by ISO C and C++ (and slightly simpler to
>>>>>>>>>> use).
>>>>>>>>>>
>>>>>>>>>> This patch only changes the behaviour on supported non-POSIX
>>>>>>>>>> toolchains
>>>>>>>>>> by
>>>>>>>>>> removing the need for POSIX emulation code. If the toolchain
>>>>>>>>>> is
>>>>>>>>>> broken,
>>>>>>>>>> then
>>>>>>>>>> the fallback logic is unchanged: posix_memalign(), else
>>>>>>>>>> memalign()
>>>>>>>>>> else
>>>>>>>>>> screw-you.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> There is no posix_memalign() or memalign() on Windows. So right
>>>>>>>>> now
>>>>>>>>> VLC and libvlc cannot be used at all.
>>>>>>>>>
>>>>>>>>> Proper support requires using __mingw_aligned_malloc() or
>>>>>>>>> _aligned_malloc(). But that means using __mingw_aligned_free()
>>>>>>>>> and
>>>>>>>>> _aligned_free() as well.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> For the record, calling free() instead of these aligned free
>>>>>>>> functions
>>>>>>>> results in a crash.
>>>>>>>>
>>>>>>>>> Next time you may break the core, please submit patches for
>>>>>>>>> review
>>>>>>>>> first.
>>>>>>>>>
>>>>>>>>>> Le 20 juin 2017 12:07:38 GMT+03:00, Steve Lhomme
>>>>>>>>>> <robux4 at gmail.com>
>>>>>>>>>> a
>>>>>>>>>> écrit
>>>>>>>>>> :
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sat, Jun 17, 2017 at 2:35 PM, Rémi Denis-Courmont
>>>>>>>>>>> <git at videolan.org>
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> vlc | branch: master | Rémi Denis-Courmont
>>>>>>>>>>>> <remi at remlab.net> |
>>>>>>>>>>>> Sat
>>>>>>>>>>>> Jun
>>>>>>>>>>>> 17 15:27:16 2017 +0300|
>>>>>>>>>>>> [34cd965645cb0246f3d74515bbd5e55367f7d884]
>>>>>>>>>>>> |
>>>>>>>>>>>> committer: Rémi Denis-Courmont
>>>>>>>>>>>>
>>>>>>>>>>>> compat: replace aligned_alloc() rather than
>>>>>>>>>>>> posix_memalign()
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=34cd965645cb0246f3d74515bbd5e55367f7d884
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ---
>>>>>>>>>>>>
>>>>>>>>>>>> compat/{posix_memalign.c => aligned_alloc.c} | 62
>>>>>>>>>>>> ++++++++++++++--------------
>>>>>>>>>>>> configure.ac | 4 +-
>>>>>>>>>>>> include/vlc_common.h | 8 +---
>>>>>>>>>>>> include/vlc_fixups.h | 6 +--
>>>>>>>>>>>> 4 files changed, 36 insertions(+), 44 deletions(-)
>>>>>>>>>>>>
>>>>>>>>>>>> diff --git a/compat/posix_memalign.c
>>>>>>>>>>>> b/compat/aligned_alloc.c
>>>>>>>>>>>> similarity index 55%
>>>>>>>>>>>> rename from compat/posix_memalign.c
>>>>>>>>>>>> rename to compat/aligned_alloc.c
>>>>>>>>>>>> index 3c6ffdfe28..9a61c0010f 100644
>>>>>>>>>>>> --- a/compat/posix_memalign.c
>>>>>>>>>>>> +++ b/compat/aligned_alloc.c
>>>>>>>>>>>> @@ -1,7 +1,7 @@
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> /*****************************************************************************
>>>>>>>>>>>> - * posix_memalign.c: POSIX posix_memalign() replacement
>>>>>>>>>>>> + * aligned_alloc.c: C11 aligned_alloc() replacement
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> *****************************************************************************
>>>>>>>>>>>> - * Copyright © 2012 Rémi Denis-Courmont
>>>>>>>>>>>> + * Copyright © 2012, 2017 Rémi Denis-Courmont
>>>>>>>>>>>> *
>>>>>>>>>>>> * This program is free software; you can redistribute it
>>>>>>>>>>>> and/or
>>>>>>>>>>>> modify
>>>>>>>>>>>> it
>>>>>>>>>>>> * under the terms of the GNU Lesser General Public
>>>>>>>>>>>> License
>>>>>>>>>>>> as
>>>>>>>>>>>> published by
>>>>>>>>>>>> @@ -22,46 +22,44 @@
>>>>>>>>>>>> # include <config.h>
>>>>>>>>>>>> #endif
>>>>>>>>>>>>
>>>>>>>>>>>> +#include <assert.h>
>>>>>>>>>>>> #include <stdlib.h>
>>>>>>>>>>>> #include <errno.h>
>>>>>>>>>>>> +#if !defined (HAVE_POSIX_MEMALIGN) && !defined (_WIN32) &&
>>>>>>>>>>>> !defined
>>>>>>>>>>>> (__APPLE__)
>>>>>>>>>>>> +# include <malloc.h>
>>>>>>>>>>>> +#endif
>>>>>>>>>>>>
>>>>>>>>>>>> -static int check_align (size_t align)
>>>>>>>>>>>> +void *aligned_alloc(size_t align, size_t size)
>>>>>>>>>>>> {
>>>>>>>>>>>> - for (size_t i = sizeof (void *); i != 0; i *= 2)
>>>>>>>>>>>> - if (align == i)
>>>>>>>>>>>> - return 0;
>>>>>>>>>>>> - return EINVAL;
>>>>>>>>>>>> -}
>>>>>>>>>>>> -
>>>>>>>>>>>> -#if !defined (_WIN32) && !defined (__APPLE__)
>>>>>>>>>>>> -#include <malloc.h>
>>>>>>>>>>>> + /* align must be a power of 2 */
>>>>>>>>>>>> + /* size must be a multiple of align */
>>>>>>>>>>>> + if ((align & (align - 1)) || (size & (align - 1)))
>>>>>>>>>>>> + {
>>>>>>>>>>>> + errno = EINVAL;
>>>>>>>>>>>> + return NULL;
>>>>>>>>>>>> + }
>>>>>>>>>>>>
>>>>>>>>>>>> -int posix_memalign (void **ptr, size_t align, size_t size)
>>>>>>>>>>>> -{
>>>>>>>>>>>> - if (check_align (align))
>>>>>>>>>>>> - return EINVAL;
>>>>>>>>>>>> +#ifdef HAVE_POSIX_MEMALIGN
>>>>>>>>>>>> + if (align < sizeof (void *)) /* POSIX does not allow
>>>>>>>>>>>> small
>>>>>>>>>>>> alignment */
>>>>>>>>>>>> + align = sizeof (void *);
>>>>>>>>>>>>
>>>>>>>>>>>> - int saved_errno = errno;
>>>>>>>>>>>> - void *p = memalign (align, size);
>>>>>>>>>>>> - if (p == NULL)
>>>>>>>>>>>> + void *ptr;
>>>>>>>>>>>> + int err = posix_memalign(&ptr, align, size);
>>>>>>>>>>>> + if (err)
>>>>>>>>>>>> {
>>>>>>>>>>>> - errno = saved_errno;
>>>>>>>>>>>> - return ENOMEM;
>>>>>>>>>>>> + errno = err;
>>>>>>>>>>>> + ptr = NULL;
>>>>>>>>>>>> }
>>>>>>>>>>>> + return ptr;
>>>>>>>>>>>>
>>>>>>>>>>>> - *ptr = p;
>>>>>>>>>>>> - return 0;
>>>>>>>>>>>> -}
>>>>>>>>>>>> +#elif !defined (_WIN32) && !defined (__APPLE__)
>>>>>>>>>>>>
>>>>>>>>>>>> -#else
>>>>>>>>>>>> -
>>>>>>>>>>>> -int posix_memalign (void **ptr, size_t align, size_t size)
>>>>>>>>>>>> -{
>>>>>>>>>>>> - if (check_align (align))
>>>>>>>>>>>> - return EINVAL;
>>>>>>>>>>>> + return memalign(align, size);
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Is the goal that this code is never called for Windows and
>>>>>>>>>>> Apple
>>>>>>>>>>> OSes
>>>>>>>>>>> ? Because it worked and this function always return NULL.
>>>>>>>>>>>
>>>>>>>>>>>> - *ptr = NULL;
>>>>>>>>>>>> - return size ? ENOMEM : 0;
>>>>>>>>>>>> -}
>>>>>>>>>>>> +#else
>>>>>>>>>>>>
>>>>>>>>>>>> + if (size > 0)
>>>>>>>>>>>> + errno = ENOMEM;
>>>>>>>>>>>> + return NULL;
>>>>>>>>>>>> #endif
>>>>>>>>>>>> +}
>>>>>>>>>>>> diff --git a/configure.ac b/configure.ac
>>>>>>>>>>>> index b1883a18b7..67fc7deb1a 100644
>>>>>>>>>>>> --- a/configure.ac
>>>>>>>>>>>> +++ b/configure.ac
>>>>>>>>>>>> @@ -597,8 +597,8 @@ dnl Check for system libs needed
>>>>>>>>>>>> need_libc=false
>>>>>>>>>>>>
>>>>>>>>>>>> dnl Check for usual libc functions
>>>>>>>>>>>> -AC_CHECK_FUNCS([daemon fcntl flock fstatvfs fork getenv
>>>>>>>>>>>> getpwuid_r
>>>>>>>>>>>> isatty lstat memalign mkostemp mmap open_memstream openat
>>>>>>>>>>>> pread
>>>>>>>>>>>> posix_fadvise posix_madvise setlocale stricmp strnicmp
>>>>>>>>>>>> strptime
>>>>>>>>>>>> tdestroy
>>>>>>>>>>>> uselocale])
>>>>>>>>>>>> -AC_REPLACE_FUNCS([atof atoll dirfd fdopendir ffsll
>>>>>>>>>>>> flockfile
>>>>>>>>>>>> fsync
>>>>>>>>>>>> getdelim getpid lldiv memrchr nrand48 poll posix_memalign
>>>>>>>>>>>> recvmsg
>>>>>>>>>>>> rewind
>>>>>>>>>>>> sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup
>>>>>>>>>>>> strnlen
>>>>>>>>>>>> strnstr
>>>>>>>>>>>> strsep strtof strtok_r strtoll swab tfind timegm
>>>>>>>>>>>> timespec_get
>>>>>>>>>>>> strverscmp
>>>>>>>>>>>> pathconf])
>>>>>>>>>>>> +AC_CHECK_FUNCS([daemon fcntl flock fstatvfs fork getenv
>>>>>>>>>>>> getpwuid_r
>>>>>>>>>>>> isatty lstat memalign mkostemp mmap open_memstream openat
>>>>>>>>>>>> pread
>>>>>>>>>>>> posix_fadvise posix_madvise posix_memalign setlocale stricmp
>>>>>>>>>>>> strnicmp
>>>>>>>>>>>> strptime tdestroy uselocale])
>>>>>>>>>>>> +AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir
>>>>>>>>>>>> ffsll
>>>>>>>>>>>> flockfile fsync getdelim getpid lldiv memrchr nrand48 poll
>>>>>>>>>>>> recvmsg
>>>>>>>>>>>> rewind
>>>>>>>>>>>> sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup
>>>>>>>>>>>> strnlen
>>>>>>>>>>>> strnstr
>>>>>>>>>>>> strsep strtof strtok_r strtoll swab tfind timegm
>>>>>>>>>>>> timespec_get
>>>>>>>>>>>> strverscmp
>>>>>>>>>>>> pathconf])
>>>>>>>>>>>> AC_REPLACE_FUNCS([gettimeofday])
>>>>>>>>>>>> AC_CHECK_FUNC(fdatasync,,
>>>>>>>>>>>> [AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to
>>>>>>>>>>>> fsync()
>>>>>>>>>>>> if
>>>>>>>>>>>> missing.])
>>>>>>>>>>>> diff --git a/include/vlc_common.h b/include/vlc_common.h
>>>>>>>>>>>> index e1cf885379..0bfb1b9b04 100644
>>>>>>>>>>>> --- a/include/vlc_common.h
>>>>>>>>>>>> +++ b/include/vlc_common.h
>>>>>>>>>>>> @@ -854,13 +854,7 @@ VLC_API bool vlc_ureduce( unsigned *,
>>>>>>>>>>>> unsigned
>>>>>>>>>>>> *,
>>>>>>>>>>>> uint64_t, uint64_t, uint64_t )
>>>>>>>>>>>> # define vlc_memalign(align, size) (_aligned_malloc(size,
>>>>>>>>>>>> align))
>>>>>>>>>>>> # define vlc_free(base) (_aligned_free(base))
>>>>>>>>>>>> #else
>>>>>>>>>>>> -static inline void *vlc_memalign(size_t align, size_t
>>>>>>>>>>>> size)
>>>>>>>>>>>> -{
>>>>>>>>>>>> - void *base;
>>>>>>>>>>>> - if (unlikely(posix_memalign(&base, align, size)))
>>>>>>>>>>>> - base = NULL;
>>>>>>>>>>>> - return base;
>>>>>>>>>>>> -}
>>>>>>>>>>>> +# define vlc_memalign(align, size) aligned_alloc(align,
>>>>>>>>>>>> size)
>>>>>>>>>>>> # define vlc_free(base) free(base)
>>>>>>>>>>>> #endif
>>>>>>>>>>>>
>>>>>>>>>>>> diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h
>>>>>>>>>>>> index 8bfb76888f..44b8426f2c 100644
>>>>>>>>>>>> --- a/include/vlc_fixups.h
>>>>>>>>>>>> +++ b/include/vlc_fixups.h
>>>>>>>>>>>> @@ -88,7 +88,7 @@ typedef struct
>>>>>>>>>>>> # include <stdio.h> /* FILE */
>>>>>>>>>>>> #endif
>>>>>>>>>>>>
>>>>>>>>>>>> -#if !defined (HAVE_POSIX_MEMALIGN) || \
>>>>>>>>>>>> +#if !defined (HAVE_ALIGNED_ALLOC) || \
>>>>>>>>>>>> !defined (HAVE_MEMRCHR) || \
>>>>>>>>>>>> !defined (HAVE_STRLCPY) || \
>>>>>>>>>>>> !defined (HAVE_STRNDUP) || \
>>>>>>>>>>>> @@ -302,8 +302,8 @@ int setenv (const char *, const char *,
>>>>>>>>>>>> int);
>>>>>>>>>>>> int unsetenv (const char *);
>>>>>>>>>>>> #endif
>>>>>>>>>>>>
>>>>>>>>>>>> -#ifndef HAVE_POSIX_MEMALIGN
>>>>>>>>>>>> -int posix_memalign (void **, size_t, size_t);
>>>>>>>>>>>> +#ifndef HAVE_ALIGNED_ALLOC
>>>>>>>>>>>> +void *aligned_alloc(size_t, size_t);
>>>>>>>>>>>> #endif
>>>>>>>>>>>>
>>>>>>>>>>>> #if defined(__native_client__) && defined(__cplusplus)
>>>>>>>>>>>>
>>>>>>>>>>>> ________________________________
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> vlc-commits mailing list
>>>>>>>>>>>> vlc-commits at videolan.org
>>>>>>>>>>>> https://mailman.videolan.org/listinfo/vlc-commits
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ________________________________
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> vlc-devel mailing list
>>>>>>>>>>> To unsubscribe or modify your subscription options:
>>>>>>>>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Envoyé de mon appareil Android avec Courriel K-9 Mail.
>>>>>>>>>> Veuillez
>>>>>>>>>> excuser
>>>>>>>>>> ma
>>>>>>>>>> brièveté.
>>>>>>>>>>
>>>>>>>>>> ________________________________
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> vlc-devel mailing list
>>>>>>>>>> To unsubscribe or modify your subscription options:
>>>>>>>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ________________________________
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> vlc-devel mailing list
>>>>>>>> To unsubscribe or modify your subscription options:
>>>>>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
>>>>>>> excuser
>>>>>>> ma
>>>>>>> brièveté.
>>>>>>>
>>>>>>> ________________________________
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> vlc-devel mailing list
>>>>>>> To unsubscribe or modify your subscription options:
>>>>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>>>>
>>>>>>
>>>>>>
>>>>>> ________________________________
>>>>>>
>>>>>>
>>>>>>
>>>>>> vlc-devel mailing list
>>>>>> To unsubscribe or modify your subscription options:
>>>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez
>>>>> excuser
>>>>> ma
>>>>> brièveté.
>>>>>
>>>>> ________________________________
>>>>>
>>>>>
>>>>> vlc-devel mailing list
>>>>> To unsubscribe or modify your subscription options:
>>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>>
>>>>
>>>> ________________________________
>>>>
>>>>
>>>> vlc-devel mailing list
>>>> To unsubscribe or modify your subscription options:
>>>> https://mailman.videolan.org/listinfo/vlc-devel
>>>
>>>
>>>
>>> --
>>> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser
>>> ma
>>> brièveté.
>>>
>>> ________________________________
>>>
>>> vlc-devel mailing list
>>> To unsubscribe or modify your subscription options:
>>> https://mailman.videolan.org/listinfo/vlc-devel
>>
>> ________________________________
>>
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>
>
> --
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma
> brièveté.
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list