- Jan 26, 2024
-
-
On Android: ../../modules/control/cli/cli.c:335:9: warning: variable 'ret' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized] if (count > 0) ^~~~~~~~~ ../../modules/control/cli/cli.c:359:12: note: uninitialized uses occurs here return ret; ^~~ Return an error if count == 0 in the `#ifdef HAVE_WORDEXP` branch, and replace the if-condition by an assertion.
-
- Nov 28, 2023
-
-
-
A vlm_media_sys_t need not be a VLC object.
-
No message is ever logged for a media.
-
- Jul 21, 2023
-
-
The error message is printed (among others) when the major versions differ, not only when the current version is older than the expected one, so "too old" may be incorrect. Before: > meson too old After: > meson incompatible version (expected 0.51.1, got 1.1.1)
-
- Jun 02, 2023
-
-
Pass the nanoseconds value as an integer instead. Refs !3742
-
-
- Feb 14, 2023
-
-
If the core requests to change the vout format (because it added filters having a different format), recreate the interop and the filters to accept the new format without an additional converter.
-
The core is not ready to support size changes via the "update format" mechanism. Attempt to update the vout format only when the only difference between the old and new format is the chroma. Refs #1021
-
The vout is created first, based on the input format. Then filters (filter_t) could be added, possibly producing pictures in a different format. input ---> filters ---> MISMATCH [I420] vout I420 RGBA To avoid a mismatch between the output of the last filter and the expected format of the vout input, a converter was added when necessary to compensate: input ---> filters ---> converter ---> [I420] vout I420 RGBA I420 But this was often a waste, and it caused problems for opaque formats. Instead, request the vout to adapt itself to the actual format produced by the last filter. If it can, we can avoid an additional converter. input ---> filters ---> MISMATCH [I420] vout I420 RGBA input ---> filters ------------------> [RGBA] vout I420 RGBA If the vout does not support the new format (or does not accept to update its format), a converter is still added like before. Co-authored-by:
Alexandre Janniaux <ajanni@videolabs.io>
-
The video context must not be destroyed while the interop is alive.
-
- Feb 11, 2023
-
-
Several vlc_vector functions must not be called with count == 0: - it's useless (e.g. pushing 0 items to a vector) - with the current implementation, it can cause memcpy() to be called to copy 0 bytes (useless) with NULL pointer for the src parameter (triggers an error in ASAN).
-
When switching playback order from NORMAL to RANDOM, the current playlist items are added to the randomizer. However, if the playlist is empty, the items vector is empty, and its .data field is NULL. This causes the following error in ASAN: ../../src/playlist/randomizer.c:426:10: runtime error: null pointer passed as argument 2, which is declared to never be null If the playlist size is 0, then do not call randomizer_Add() at all.
-
- Feb 10, 2023
-
-
An unstable sort may confuse users. Since we already create a full array of items with their metadata before sorting, adding the initial index as an additional criteria is almost free. Fixes #27783
-
- Jan 23, 2023
-
-
According to the manpage, jrand48() must return a signed long integer uniformly distributed over the interval [-2^31, 2^31). The old implementation first computed iterate48(), which returns a positive 48-bit integer (as 'uint64_t', then cast to 'int64_t'). Once right-shifted by 16 bits, the result is guaranteed to be a 32-bit positive integer as 'int64_t'. It is then (implicitly) cast to 'long' to match the return type. When the 32th bit is 0 (i.e. the value fits in 31-bit), then everything is ok. However, when the 32nd bit is 1, then there are two cases (which are both incorrect): - if the 'long' type is 32-bit on the platform, then conversion from 'int64_t' to 'long' is undefined; - if the 'long' type is more than 32-bit, then the resulting value will be a positive integer in the interval [0, 2^32), whereas jrand48() must return a value in the interval [-2^31, 2^31).
-
- Nov 30, 2022
- Nov 26, 2022
-
-
This removes the filter initialization complexity from vout_display_opengl_New(). Note: this commit is more understandable with: git show --histogram
-
The renderer is not the only filter anymore if an upscaler and/or a downscaler is set.
-
- Nov 23, 2022
-
-
Since commit 85f85230, the fields vlc_gl_format.visible_* are never read. Remove them.
-
- Oct 11, 2022
-
-
This C++ listener is actually a wrapper over a media tree listener, not a media source listener. This allows to make NetworkMediaModel independent of media sources, so that it can be reused with only a media tree not linked to a media source. NetworkDeviceModel, which still requires a media source, stores it in its listener callbacks implementation (ListenerCb).
-
-
Only NetworkDeviceModel need to expose a mediaSource. The mediaSource was forwarded to all media item, but it is never used, so remove it. This paves the way to make NetworkMediaModel independent of media sources.
-
-
For each model (NetworkDeviceModel and NetworkMediaModel), every NetworkSourceListener instance were created with the same SourceListenercb instance: +------------------+ | SourceListenerCb |-----------------------------. +------------------+ | ^ | | implements | +--------------------+ | | NetworkDeviceModel | | +--------------------+ | | m_listeners | +---+ +-----------------------+ | | ---------------| NetworkSourceListener |-| +---+ +-----------------------+ | | ---------- +-----------------------+ | +---+ `----| NetworkSourceListener |-| | -------... +-----------------------+ . +---+ . | | . +---+ To prepare storing additional data for each registration, use one SourceListenerCb instance per listener: +------------------+ | SourceListenerCb | +------------------+ ^ implements | +--------------------+ | | NetworkDeviceModel | | +--------------------+ | | m_listeners | +---+ +-----------------------+ +--------------+ | | ------------| NetworkSourceListener |--| MyListenerCb |-| +---+ +-----------------------+ +--------------+ | | ---------- +-----------------------+ +--------------+ | +---+ `-| NetworkSourceListener |--| MyListenerCb |-| | -------... +-----------------------+ +--------------+ . +---+ . | | . +---+ In practice, this will allow the SourceListenerCb (to be renamed to MediaTreeListenerCb) to only use a media tree (not a media source), and let the caller store an additional associated media source usable from the callbacks implementation. As a drawback, the MyListenerCb instance must be owned by the listener (to avoid additional complexity on the client side), but then this forces the client to always create a separate class for the listener callbacks, even when not necessary (i.e. making NetworkMediaModel "implement" SourceListenerCb is not possible anymore). Alternatives considered: 1. keep SourceListenerCb as is, but make NetworkSourceListener virtual (inheritable), so that the additional media source could be stored there. As a drawback, the SourceListenerCb methods would need to get the NetworkSourceListener instance as parameter (so yet another indirection). And having both the listener and the callbacks virtual seems odd. 2. merge SourceListenerCb into NetworkSourceListener, so that the client can just inherit and store additional private data in the same class. But this requires more changes from the existing code base.
-
Callbacks to be called from C should be free functions rather than class members.
-
-
-
This will allow to create and handle a media tree separately from a media source (linked to a service discovery).
-
- Oct 04, 2022
-
-
Snapshots are performed via a call to: var_TriggerCallback("video-snapshot") causing its callback (SnapshotCallback) to be called synchronously, executing the following steps: - wait for the vout thread to actually capture the (next) frame; - encode the picture to PNG; - write the result to disk (I/O). Since var_TriggerCallback("video-snapshot") is called from the UI thread, all these blocking actions are also performed on the UI thread. Move the call to a separate thread.
-
Snapshots are performed via a call to: var_TriggerCallback("video-snapshot") causing its callback (SnapshotCallback) to be called synchronously, executing the following steps: - wait for the vout thread to actually capture the (next) frame; - encode the picture to PNG; - write the result to disk (I/O). Since var_TriggerCallback("video-snapshot") is called from the UI thread, all these blocking actions are also performed on the UI thread. Move the call to a separate thread.
-
- Oct 01, 2022
-
-
The main constructor, accepting a pointer, is explicit: my_ptr_type *p = ...; MySharedPtr ptr = p; /* invalid */ MySharedPtr ptr{ p }; /* ok */ This prevents to mistakenly assign a pointer to a shared pointer. However, assignment to nullptr should be acceptable: MySharedPtr ptr = nullptr; /* should be ok */
-
- Sep 29, 2022
-
-
Thanks to 0xMitsurugi [1] from Synacktiv [2] for the bug report and fix. [1] https://twitter.com/0xMitsurugi [2] https://www.synacktiv.com/ Fixes #27335
-
The field i_bytes_per_frame was updated, but not i_bitspersample, causing an inconsistency leading to a buffer overflow. Fixes #26930
-
- Aug 08, 2022
-
-
If vlc_clock_Wait() has been interrupted to release the display_lock quickly, then the next rendering must be performed ASAP, without waiting for any deadline.
-
On resize, the UI thread waits for the end of any current rendering at the old size before returning. To limit its waiting, interrupt the wait between prepare() and display() on the vout thread to complete the rendering as soon as possible. As a consequence, the display() call might be performed early (before its expected PTS). Refs !324
-
- May 04, 2022
-
-
The pointer pt->opaque was initialized only under some conditions in rtp_h264_open(), but its value was used unconditionnaly in rtp_h264_init(). Reported by ASAN.
-
- May 03, 2022
-
-
Changes of state indicating if "previous" and "next" actions are enabled must be signaled to D-Bus. Fixes #23603
-
Use the existing playlist API to detect if there is a previous or next item in the playlist.
-
- Apr 29, 2022
-
-
More Visiblity -> Visibility.
-