Commit Graph

77 Commits

Author SHA1 Message Date
Zebediah Figura 2594822212 winegstreamer: Implement IWMStreamConfig::GetStreamType().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-28 19:27:31 +02:00
Zebediah Figura 250f86b023 winegstreamer: Implement IWMStreamConfig::GetStreamNumber().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-27 17:23:42 +02:00
Zebediah Figura 40ced5e054 winegstreamer: Implement IWMProfile::GetStream().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-27 17:23:42 +02:00
Zebediah Figura 87e4c289e4 winegstreamer: Implement IWMProfile::GetStreamCount().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-26 10:39:34 +02:00
Zebediah Figura 51b6d45503 winegstreamer: Create a winegstreamer parser object in wm_reader_open_stream().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-26 10:39:34 +02:00
Zebediah Figura c76418fbfd winegstreamer: Add a basic implementation of IWMSyncReader::OpenStream().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-26 10:39:34 +02:00
Zebediah Figura 37e9f0eada winegstreamer: Move the IWMReaderTimecode implementation to the wm_reader object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-21 11:20:52 +02:00
Zebediah Figura dd182a924f winegstreamer: Move the IWMReaderPlaylistBurn implementation to the wm_reader object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-21 11:20:51 +02:00
Zebediah Figura 4f10b95c83 winegstreamer: Move the IWMPacketSize2 implementation to the wm_reader object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-21 11:20:49 +02:00
Zebediah Figura 4239f2acf7 winegstreamer: Move the IWMLanguageList implementation to the wm_reader object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-20 20:10:26 +02:00
Zebediah Figura 3dd8eeeebd winegstreamer: Move the IWMHeaderInfo3 implementation to the wm_reader object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-20 20:10:24 +02:00
Zebediah Figura 2d0dc2d47c winegstreamer: Move the IWMProfile3 implementation to a separate object.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-20 20:10:15 +02:00
Zebediah Figura 59997c355f winegstreamer: Use array_reserve() to reallocate read buffers.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-06 20:29:46 +02:00
Zebediah Figura 4ba31162c3 winegstreamer: Convert the Unix library to the __wine_unix_call interface.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-05 11:31:47 +02:00
Zebediah Figura 84b870bb1f winegstreamer: Move Unix library definitions into a separate header.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-05 11:31:47 +02:00
Zebediah Figura a87abdbe85 winegstreamer: Remove the no longer used start_dispatch_thread() declaration.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-02 00:42:58 +02:00
Zebediah Figura 45690320f9 winegstreamer: Set unlimited buffering using a flag for wg_parser_create().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-02 00:42:55 +02:00
Zebediah Figura eab189810d winegstreamer: Use a single wg_parser_create() entry point.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-02 00:42:13 +02:00
Zebediah Figura 959bc42892 winegstreamer: Move the GstAutoplugSelectResult definition to wg_parser.c.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-10-02 00:41:55 +02:00
Derek Lesho 8b7390f80d winegstreamer: Allocate source media buffers in the PE components.
This necessitates an extra blit for the input data, but this is necessary for
both WoW64 support and an internal rework of the source path in wg_parser to use
GstAppSrc. Since source data is usually compressed and not a bottleneck, we
don't expect this to affect performance.

Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-16 22:22:44 +02:00
Derek Lesho 67734bfce3 winegstreamer: Duplicate source shutdown path into constructor with leak fixes.
Instead of having mixing together IMFMediaSource::Shutdown() and the
constructors' failure paths, creating confusion about what should be released
where, designate ::Shutdown/::Release to shutting down fully initialized objects
without checks, and keep the partially-created object cleanup code in the
constructor.

Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-09-16 22:22:44 +02:00
Zebediah Figura d90ab0805f winegstreamer: Always return S_FALSE from DllCanUnloadNow().
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-08-26 09:34:28 +02:00
Zebediah Figura 18b6115d53 winegstreamer: Remove some redundant includes.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-23 09:56:47 +01:00
Zebediah Figura 672272e95a winegstreamer: Use malloc() instead of HeapAlloc().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-23 09:56:31 +01:00
Zebediah Figura 8abcae5475 winegstreamer: Build with msvcrt.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-22 09:08:10 +01:00
Zebediah Figura 9638a5092e winegstreamer: Use ULONGLONG instead of uint64_t in Unix library interface structures.
The latter has inconsistent alignment between the Unix and Win32 sides.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-22 09:08:05 +01:00
Zebediah Figura f9c43fc9fa winegstreamer: Reimplement the media source on top of the wg_parser object.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-19 09:24:44 +01:00
Zebediah Figura 8697c6c0db winegstreamer: Explicitly translate the channel mask.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-19 09:24:36 +01:00
Zebediah Figura 51f1ab47a7 winegstreamer: Move the wg_parser and wg_parser_stream definitions to wg_parser.c.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-18 10:10:55 +01:00
Zebediah Figura 82d4fa9f96 winegstreamer: Access the stream duration through a Unix library function.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-18 10:10:51 +01:00
Zebediah Figura 9a6aa56cd8 winegstreamer: Map the read buffer in the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-18 10:10:49 +01:00
Zebediah Figura e9800b1cbc winegstreamer: Move GST_BUFFER_OFFSET_NONE handling to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-18 10:10:45 +01:00
Zebediah Figura 86333a20c8 winegstreamer: Retrieve and complete read requests through Unix library functions.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-17 11:11:09 +01:00
Zebediah Figura e848a00d26 winegstreamer: Map the output sample buffer in the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-17 11:11:06 +01:00
Zebediah Figura ccc6c98075 winegstreamer: Move seeking to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-17 11:10:52 +01:00
Zebediah Figura 8547ee3513 winegstreamer: Move QoS notification to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-16 08:52:34 +01:00
Zebediah Figura 7a5224beb6 winegstreamer: Move wg_parser flushing to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-16 08:52:32 +01:00
Zebediah Figura aa695e2125 winegstreamer: Move get_stream_event() to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-16 08:52:29 +01:00
Zebediah Figura 563ccc4df5 winegstreamer: Set the stream's current format and connected state through Unix library functions.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-16 08:52:26 +01:00
Zebediah Figura 442c9d43c8 winegstreamer: Retrieve the preferred format through a Unix library function.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-16 08:52:20 +01:00
Zebediah Figura f98722fe3b winegstreamer: Retrieve wg_parser streams through Unix library functions.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-15 10:55:12 +01:00
Zebediah Figura 507ba18d08 winegstreamer: Move wg_parser sink disconnection code to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-15 10:55:05 +01:00
Zebediah Figura 6c67a0a6be winegstreamer: Move GST_Connect() to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-15 10:54:58 +01:00
Zebediah Figura 9147fefbb2 winegstreamer: Move wg_parser_destroy() to the Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-12 14:51:59 +01:00
Zebediah Figura dbd927f4ad winegstreamer: Move wg_parser object creation to a new Unix library.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-12 14:51:55 +01:00
Zebediah Figura fb096d54a8 winegstreamer: Introduce an intermediate media format structure.
The fundamental idea here is to provide a type which can be used in the unixlib
interface. Obviously GstCaps can't be used from PE, and while AM_MEDIA_TYPE can
in theory be used from the Unix library, allocation of the format block makes
things a little tricky. Moreover, we'd ideally like to use the same backend for
DirectShow and Media Foundation, and while it wouldn't be a problem currently,
in general AM_MEDIA_TYPE is not quite expressive enough to translate from
GstCaps to IMFMediaType, and the latter can't be used from the Unix library.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-02-09 11:13:13 +01:00
Zebediah Figura 2546ad8115 winegstreamer: Store the segment parameters in the parser_event structure.
Instead of the segment event.

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-01-22 11:12:20 +01:00
Zebediah Figura 9c138562fe winegstreamer: Manage our own streaming thread.
This is a rather large and complex change. It comprises several parts:

(1) Instead of directly sending EOS, segment, and sample events to the
    downstream DirectShow sink, first queue them in a local buffer (i.e.
    "pin->event").

(2) Spawn a separate thread per source pin (i.e. "stream_thread") which consumes
    said events and sends them downstream.

(3) When flushing or stopping, explicitly wait for this thread to pause or stop
    (respectively).

There are a few reasons for this:

(1) It reduces the number of Unix -> PE callbacks we need to make, easing PE
    conversion. This is not a great advantage *a priori*, and may not be worth a
    similar dedicated "handler" thread for most modules, but winegstreamer is
    different—we were already marshalling these calls onto another thread, and
    now that marshalling can go away (almost).

(2) Because GStreamer can only do pad negotiation (and hence autoplugging) while
    running (in contrast to DirectShow, which can do it while stopped), we
    currently have to renegotiate every time the pipeline is started. Most
    applications don't start the graph more than once, but even that requires
    two negotiations, and startup time is demonstrably too high. It would be
    nice to keep the graph in PAUSED state all of the time, but this is
    difficult to do without more fine-grained control over the streaming thread.
    [In particular, we cannot reliably wait for all samples to be delivered
    except by stopping the GStreamer pipeline.]

Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-01-20 11:20:57 +01:00
Zebediah Figura b554086282 winegstreamer: Unify the decodebin parser definitions under the name "decodebin_parser".
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-01-18 22:46:36 +01:00
Derek Lesho 508b124f80 winegstreamer: Register the audio conversion transform.
Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-12-03 20:18:39 +01:00