Zebediah Figura
5144b27661
winegstreamer: Remove support for flushing the wg_parser object.
...
Aside from EOS logic, which is now handled entirely on the client side,
wg_parser_stream_get_event() now only waits for data processing—that is,
demuxing, decoding, and format conversion. While unblocking waits in
wg_parser_stream_get_event() does allow that function to return immediately, a
subsequent seek request in GStreamer will still have to wait for that data
processing to complete and for the stream thread to return to the demuxer's main
loop. In essence, wg_parser_begin_flush() is only moving costs around.
In theory we could force the GStreamer pipeline to complete faster by actually
flushing it. In practice this isn't really true. Individual elements do check
whether they are flushing before processing, but even elements which take a
relatively long time (i.e. multiple milliseconds) to process data don't
periodically check whether they are flushing while doing so. Although there is
arguably a benefit to skipping some elements by flushing the GStreamer pipeline,
it does not seem worth the added code complexity in Wine.
The real point of flushing in DirectShow or GStreamer is to unblock long or
unbounded waits in sink elements (i.e. waits for PTS, or waits for running state
while rendering preroll frames). None of these waits apply here. Waits for
actual sample processing complete in bounded time, and should ideally take less
than the sample DTS to complete (or we are already in trouble).
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-24 08:49:38 +01:00
Zebediah Figura
7da1828c49
winegstreamer: Explicitly sleep in the DirectShow streaming thread after receiving EOS.
...
Instead of waiting for another event from the wg_parser object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-24 08:49:33 +01:00
Giovanni Mascellani
4853f65c84
winegstreamer: Do not block forever if EOS races with command queue.
...
Currently, the winegstreamer media source checks for EOS when
RequestSample() is called, but doesn't handle the cases when EOS
is detected between the RequestSample() call and the moment when
the request is popped from the command queue and serviced. This
can result in the media source waiting forever for a sample and
get stuck.
This commit fixes the bug by adding a check for EOS in
wait_for_event().
This commit fixes Medieval Dynasty hanging on developer logos on
the Steam Deck.
Signed-off-by: Giovanni Mascellani <gmascellani@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 22:42:12 +01:00
Rémi Bernon
4dd187b222
winegstreamer: Lookup and instantiate a WMA decoder element.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 20:04:45 +01:00
Rémi Bernon
0052ffbfa0
winegstreamer: Append audioconvert and audioresample elements.
...
So that we can decode WMA to something else than the default avdec_wmav2
F32LE / non-interleaved format.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 20:04:42 +01:00
Rémi Bernon
d84d9054f5
winegstreamer: Add a bin container element to wg_transform.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 20:04:38 +01:00
Rémi Bernon
34a55c7b96
winegstreamer: Move the conditional cleanup to the create error path.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 20:04:35 +01:00
Rémi Bernon
4d929972c3
winegstreamer: Remove \n at the end of GST log messages.
...
GStreamer already adds one.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 20:04:31 +01:00
Zebediah Figura
f51b2ca8f7
winegstreamer: No longer queue WG_PARSER_EVENT_SEGMENT.
...
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 18:20:23 +01:00
Zebediah Figura
f7a5bf7be1
winegstreamer: Manually send new segment events.
...
Instead of translating them from GST_EVENT_SEGMENT.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-22 18:20:23 +01:00
Rémi Bernon
71bf5b24d7
winegstreamer: Create static pads on wg_transform struct.
...
With caps created from the input / output formats.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-17 09:07:07 +01:00
Rémi Bernon
51a262d368
winegstreamer: Introduce new wg_transform struct.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-17 09:07:07 +01:00
Rémi Bernon
76e2883c4a
winegstreamer: Introduce new WG_MAJOR_TYPE_WMA major type.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-17 09:07:07 +01:00
Rémi Bernon
a288b94831
winegstreamer: Move format helpers to a dedicated source.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-17 09:07:07 +01:00
Rémi Bernon
664621d328
winegstreamer: Remove unnecessary DECLSPEC_HIDDEN qualifier.
...
On PE internal functions.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-17 08:55:32 +01:00
Nikolay Sivov
decfb2b2ab
winegstreamer: Maintain playback rate value for the media source.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-16 22:05:33 +01:00
Nikolay Sivov
a1e125e4fb
winegstreamer: Raise MESourceRateChanged on SetRate().
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-15 22:59:53 +01:00
Andrey Gusev
766617d6f0
winegstreamer: Handle EnableDiscreteOutput and SpeakerConfig settings in WMSyncReader_SetOutputSetting().
...
Resident Evil 5 cutscenes have audio and don't hang.
Signed-off-by: Andrey Gusev <andrey.goosev@gmail.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-08 20:24:14 +01:00
Zebediah Figura
fc5719e4c5
winegstreamer: Release stream_cs on error in stream_thread().
...
This fixes a deadlock when trying to skip video in Persona 4 Golden.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-08 10:47:03 +01:00
Zebediah Figura
8c7ad5fc39
winegstreamer: Use IMemAllocator::GetBuffer() directly.
...
BaseOutputPinImpl_GetDeliveryBuffer() is doing nothing helpful here. Note that
we cannot be unconnected at this point, or stream_thread() would not even be
running.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-07 10:57:54 +01:00
Zebediah Figura
83023a9f2b
winegstreamer: Constify some static variables.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-04 09:48:34 +01:00
Zebediah Figura
91c993bb78
winegstreamer: Build without -DWINE_NO_LONG_TYPES.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-04 09:48:31 +01:00
Rémi Bernon
940110d387
winegstreamer: Implement WMA decoder GetInputStreamInfo.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-03 10:22:49 +01:00
Rémi Bernon
177c232936
winegstreamer: Implement WMA decoder GetOutputStreamInfo.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-03 10:22:45 +01:00
Rémi Bernon
1541d6b6d8
winegstreamer: Implement WMA decoder SetOutputType.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-03 10:22:41 +01:00
Rémi Bernon
22472a3feb
winegstreamer: Implement WMA decoder GetOutputAvailableType.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-03 10:22:37 +01:00
Rémi Bernon
b1fc2a49ff
winegstreamer: Implement WMA decoder IMFTransform_SetInputType.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-03 10:22:32 +01:00
Rémi Bernon
a7508d54db
winegstreamer: Stub implement WMA decoder DMO / MF transform.
...
Final Fantasy XIV intro videos require media_object_GetStreamCount and
property_bag_Write to return S_OK in order to not get stuck. This could
be done in a separate commit but would cause a temporary regression.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51931
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52391
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-02-03 10:22:27 +01:00
Alexandre Julliard
f0cd33c69e
include: Add support for defining Win32 types as 'long' where possible.
...
Add -DWINE_NO_LONG_TYPES to modules that still have compilation
warnings with long types.
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2022-01-27 20:38:22 +01:00
Zebediah Figura
03d92af78a
winegstreamer: Always set the initial video type for the WMF reader to WG_VIDEO_FORMAT_BGR.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52273
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-30 23:09:45 +01:00
Zebediah Figura
4d2a628dfe
winegstreamer: Use the size of the data read when allocating the read buffer.
...
Instead of the size of the data requested, which may be e.g. UINT_MAX.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52277
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-30 23:09:45 +01:00
Zebediah Figura
c5a9373dbe
winegstreamer: Allow specifying flipped video via negative height.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50668
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-23 09:58:38 +01:00
Zebediah Figura
78f916f598
winegstreamer: Return E_UNEXPECTED when calling IWMReader::Stop() if no stream is open.
...
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52038
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-15 18:57:16 +01:00
Zebediah Figura
fa3fa0e3d5
winegstreamer: Acquire all of the flushing locks in GST_Seeking_SetPositions().
...
The current code unintentionally repeatedly acquires the lock for the stream
currently being seeked.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50906
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-14 10:52:38 +01:00
Nikolay Sivov
bd28c369d0
winegstreamer: Set MF_MT_AUDIO_BLOCK_ALIGNMENT attribute for raw types.
...
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-10 14:41:41 +01:00
Zebediah Figura
747905c674
winegstreamer: Call IWMReaderCallbackAdvanced::OnTime() when using a user clock.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-12 08:46:26 +01:00
Zebediah Figura
f3624e2d64
winegstreamer: Implement IWMMediaProps::GetMediaType() for the stream config object.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-12 08:46:24 +01:00
Zebediah Figura
769057b9b2
winegstreamer: Add IWMMediaProps to the stream config object.
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-12 08:46:22 +01:00
Zebediah Figura
639c04a5b4
winegstreamer: Implement IWMReaderAdvanced::GetMaxStreamSampleSize().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-12 08:46:19 +01:00
Zebediah Figura
54f825d237
winegstreamer: Implement IWMSyncReader::SetReadStreamSamples().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-11 09:52:27 +01:00
Zebediah Figura
cad38401bf
winegstreamer: Implement IWMReaderAdvanced::SetAllocateForStream().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-11 09:52:25 +01:00
Zebediah Figura
894e071245
winegstreamer: Implement IWMReaderAdvanced::SetReceiveStreamSamples().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-11 09:52:23 +01:00
Zebediah Figura
2f7e7d284b
winegstreamer: Implement IWMReaderAdvanced::SetAllocateForOutput().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-11 09:52:18 +01:00
Zebediah Figura
72b3cb68a7
winegstreamer: Implement IWMReaderAdvanced::GetStreamSelected().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 18:58:45 +01:00
Zebediah Figura
a1a51f54dc
winegstreamer: Implement IWMSyncReader::GetStreamSelected().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 18:58:43 +01:00
Zebediah Figura
3e0a9877ea
winegstreamer: Implement IWMReaderAdvanced::SetStreamsSelected().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 18:58:39 +01:00
Zebediah Figura
5d0858ee98
winegstreamer: Implement IWMSyncReader::SetStreamsSelected().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-10 18:58:35 +01:00
Zebediah Figura
3864d23554
winegstreamer: Implement IWMOutputMediaProps::GetType().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-09 11:16:30 +01:00
Zebediah Figura
fca2f6c12b
winegstreamer: Implement IWMReader::Open().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-09 11:16:28 +01:00
Zebediah Figura
63fb4d8270
winegstreamer: Implement INSSBuffer::SetLength().
...
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-09 11:16:24 +01:00