Zebediah Figura : winegstreamer: Use WG_MAJOR_TYPE_UNKNOWN to mark a stream that should not be forced into a certain format.

Alexandre Julliard julliard at winehq.org
Mon Apr 11 15:54:58 CDT 2022


Module: wine
Branch: master
Commit: 90dc7f5b944192da4b7e2f4a3d5e687fe0c9cdd2
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=90dc7f5b944192da4b7e2f4a3d5e687fe0c9cdd2

Author: Zebediah Figura <zfigura at codeweavers.com>
Date:   Fri Apr  8 12:11:06 2022 -0500

winegstreamer: Use WG_MAJOR_TYPE_UNKNOWN to mark a stream that should not be forced into a certain format.

Instead of checking the enabled state.

The reasoning here is that we would like to keep the stream enabled—that is,
buffer samples instead of discarding them—even when the client is not yet
reading samples from it, so that we can avoid wasting CPU power in decoding.

Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winegstreamer/wg_format.c |  2 +-
 dlls/winegstreamer/wg_parser.c | 11 ++++-------
 2 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/dlls/winegstreamer/wg_format.c b/dlls/winegstreamer/wg_format.c
index b4455a6e6d0..84163f1e5d7 100644
--- a/dlls/winegstreamer/wg_format.c
+++ b/dlls/winegstreamer/wg_format.c
@@ -495,7 +495,7 @@ GstCaps *wg_format_to_caps(const struct wg_format *format)
     switch (format->major_type)
     {
         case WG_MAJOR_TYPE_UNKNOWN:
-            return NULL;
+            return gst_caps_new_any();
         case WG_MAJOR_TYPE_WMA:
             return wg_format_to_caps_wma(format);
         case WG_MAJOR_TYPE_H264:
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index e7a60ec158a..9b3a5ca796d 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -254,6 +254,7 @@ static NTSTATUS wg_parser_stream_disable(void *args)
 
     pthread_mutex_lock(&parser->mutex);
     stream->enabled = false;
+    stream->current_format.major_type = WG_MAJOR_TYPE_UNKNOWN;
     pthread_mutex_unlock(&parser->mutex);
     pthread_cond_signal(&stream->event_empty_cond);
     return S_OK;
@@ -601,12 +602,7 @@ static gboolean sink_query_cb(GstPad *pad, GstObject *parent, GstQuery *query)
             gst_query_parse_caps(query, &filter);
 
             pthread_mutex_lock(&parser->mutex);
-
-            if (stream->enabled)
-                caps = wg_format_to_caps(&stream->current_format);
-            else
-                caps = gst_caps_new_any();
-
+            caps = wg_format_to_caps(&stream->current_format);
             pthread_mutex_unlock(&parser->mutex);
 
             if (!caps)
@@ -636,7 +632,7 @@ static gboolean sink_query_cb(GstPad *pad, GstObject *parent, GstQuery *query)
 
             pthread_mutex_lock(&parser->mutex);
 
-            if (!stream->enabled)
+            if (stream->current_format.major_type == WG_MAJOR_TYPE_UNKNOWN)
             {
                 pthread_mutex_unlock(&parser->mutex);
                 gst_query_set_accept_caps_result(query, TRUE);
@@ -689,6 +685,7 @@ static struct wg_parser_stream *create_stream(struct wg_parser *parser)
     gst_segment_init(&stream->segment, GST_FORMAT_UNDEFINED);
 
     stream->parser = parser;
+    stream->current_format.major_type = WG_MAJOR_TYPE_UNKNOWN;
     pthread_cond_init(&stream->event_cond, NULL);
     pthread_cond_init(&stream->event_empty_cond, NULL);
 




More information about the wine-cvs mailing list