Do not allow messing with the include path and end up using other
includes.
Any C compiler should respect the "" meaning including local files
before looking in other pathes.
When PCR discontinuities happens, the whole pipeline is reset and it
safely (though after a glitch) reset back to playback on what's visible
after the PCR discontinuities, and restart buffering.
However, this PCR discontinuity currently happens only when **not** in
buffering. When it happens during buffering, then:
- either the PCR value is much bigger than expected, and buffering will
stop sooner than expected.
| Buffer start Buffer end New PCR
| v v v
| |------.-------------------| |
| ^
| Old PCR |----------------------|
| Missing buffering
+-- Resulting buffer after PCR jump to the future.
- or the PCR value is much smaller than expected, and the buffering is
completely borked, the computed stream buffer duration is negative
and it would buffer for the time of the
| New PCR Buffer start Buffer end
| v v v
| |---------------|------.-------------------|
| ^
| Old PCR
|
| Total buffering:
|
| Buffering after the PCR jump
| |------------------------------------------|
| +
| |------|
| Previous additional buffering
|
+-- Resulting buffer after PCR jump to the past.
The second behaviour can be visible when disabling the __MAX for the
caching progress value, leading to logs like:
[000055df326370e0] main input debug: Buffering 0%
[000055df326370e0] main input debug: Buffering 1%
[000055df326370e0] main input debug: Buffering 2%
[000055df326370e0] main input debug: Buffering 3%
[000055df326370e0] main input debug: Buffering 4%
[000055df326370e0] main input debug: Buffering 5%
[000055df326370e0] main input debug: Buffering 6%
[000055df326370e0] main input debug: Buffering 7%
[000055df326370e0] main input debug: Buffering -99%
[000055df326370e0] main input debug: Buffering -98%
...
Such scenario can be created by streaming a .ts file with the option
--ts-trust-pcr on udp://127.0.0.1:1234 for instance, while running
ffmpeg with:
ffmpeg -re -i input_file.ts -f mpegts udp://127.0.0.1:1234
During buffering, interrupt and restart the ffmpeg streaming command.
The value in --network-caching can also be increase to ensure easier
reproduction of the scenario.
Instead, if PCR is going back to the past, flush the pipeline and reset
the buffering back to zero to avoid waiting for the stream to catch-up
with the old reference, and avoid buffering more than what we requested,
which would shift the playback more from the live.
| - Step 1:
| New PCR Buffer start Buffer end
| v v v
| |---------------|------.-------------------|
| ^
| Old PCR
|
| - Step 2:
| Previous buffering is dropped.
| |------|
| |--------------------------|
| ^ ^
| New PCR New buffer end
|
|
+-- New buffering behaviour when PCR jumps to the past.
Before 9168091a46 htonl() was used to convert
the values to/from enum to the string. But that commit broke the conversion on
little endian machines.
Now we don't use an intermediate string anymore. We just use GetDWBE() to do
the endianness conversion of the char buffer if needed.
Favor the DXVA_xxx variants which are the most common ones. Redirect
missing DXVA_xxx variants to existing alternatives in mingw-w64.
Some GUIDs do not exist in any SDK so we need to define them ourselves.
The we share the redirections with dxva_blocklist.
Since flush is not working.
There are 2 main issues:
- AAudioStream_getTimestamp() could fail from Flush(), resulting in the
impossibility to report a correct timing. As the doc says:
"TODO review Frame counters are not reset by a flush", and we need a point
of comparison after a flush.
- Some devices (seen on The Galaxy S22 Ultra API Level 31) can't report
a timestamp once the stream is flushed, resulting in the
impossibility to report a correct timing.
Now, the whole Flush() function take between 10ms and 25ms (depending on the
device).
Fixes#27917
This commit introduce a typed virtual table for operations on stream,
aiming at replacing the legacy pf_control() callback which is using
va_list. As a counterpart to the typed virtual table, typed methods
are also introduce.
The operations can be implemented by the modules directly right now
and will be used when possible. This is done to provide type safety
at every level.
When no operation is provided (ie, stream_t.ops is NULL) by a module
implementation, the legacy pf_control will be used instead as a
fallback.
The commit doesn't migrate any of access/stream_filter/… modules yet.
The commit also doesn't introduce the demux specific callbacks yet.
Threading changed, it is now possible.
This fixes the video or audio output that can render the first frames in
the initial state, leading to audio/video glitches (if a delay is
applied after).
For example, audio with clock-master=input:
[00007fc4a4311760] main decoder: vlc_input_decoder_ChangeDelay():
000055ad16120e60] main audio output error: Play in 133193
[000055ad16120e60] main audio output error: Play in 156331
[000055ad16120e60] main audio output error: Play in 179508
[000055ad16120e60] main audio output error: Play in 202699
[000055ad16120e60] main audio output error: Play in 225891
[00007fc4a4311760] main decoder: changing delay(2): -2000000
[000055ad16120e60] main audio output error: Play in -1750921
Refs #27918
When count is 0 the list is still allocated. Either we should not allocate
one, we free it locally, or we pass it on as it.
The latter is similar to the code from 40c14fbee4
in libvlc_media_tracklist_from_es_array().
Introduced in 057f3ef9e8.
Just use --verbose=-1 which is strictly equivalent.
This module should not depend on another module's option. And we don't
really need that option anyway.
"meson builddir" has been deprecated since 0.64.0.
Please see 3c7ab542c0c4770241eae149b0d4cd8de329aee0 [1] upstream for the
complete explanation.
[1] 3c7ab542c0
We just release the inherited value and overwrite a new value.
This also fixes a crash if the software deinterlacer module is not found.
var_CreateGetString is just:
```
var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT );
return var_GetString( p_obj, psz_name );
```
Bump to a newer version of the fxc2 repo, that support aarch64.
The fxc2 tool in contribs isn't meant to be built for the cross
target, but to run on the build host; therefore, pick an
aarch64 mingw cross compiler if running on aarch64 linux.
The method is basically the same as commit
41926e08d73ea6c4bbfc87a1dd52d2cdbc435c27 from QtDeclarative but applied to our
composition architecture
in a nutshell
- the offscreen QQuickWindow must not report the child interfaces
- the render QWindow must report the child interfaces
- The child interfaces must report the render window as the parent
We implement QAccessibleObject for both window implementing theses policies.
Focus events are forwarded to the right window (from qml to the render
window and vice-versa).
We also need to fake the visibility of the offscreen window to make it behave as
visible without creating an actual window
CompositorOffscreenWindow allows to fake making the window visible without
instantiating it
DummyRenderWindow is a simple window that doesn't draw anything, as using a bare
QWindow on Linux makes the window freeze while resizing
This allows quick items to report accessibility events to the right window when
doing off-screen rendering
see QTBUG-67290 and https://codereview.qt-project.org/c/qt/qtdeclarative/+/348284
Qt5 version of the patch is cherry-picked from kde patchset from
https://invent.kde.org/qt/qt/qtdeclarative/
(6d1dd8925f160d6ad02ea646eac638675bdf9f1c)
first patch is mainly here in order to be able to apply second patch correctly
as we don't use the actual QQuickWidget in our code
This fixes the input not being able to catch up with the delay when
setting it from start (via --audio-desync or --sub-delay). This was
noticeable with --clock-master=input.