Zebediah Figura : winegstreamer: Move GST_BUFFER_OFFSET_NONE handling to the Unix library.

Alexandre Julliard julliard at winehq.org
Thu Feb 18 16:06:05 CST 2021


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

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Wed Feb 17 17:30:32 2021 -0600

winegstreamer: Move GST_BUFFER_OFFSET_NONE handling to the Unix library.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winegstreamer/gst_private.h | 1 +
 dlls/winegstreamer/gstdemux.c    | 6 ------
 dlls/winegstreamer/wg_parser.c   | 5 +++++
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index 33c87f2c1ec..2ac10ee37d3 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -145,6 +145,7 @@ struct wg_parser
     GstPad *my_src, *their_sink;
 
     guint64 file_size, start_offset, next_offset, stop_offset;
+    guint64 next_pull_offset;
 
     pthread_t push_thread;
 
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 4e476c78e9e..a4164ab643b 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -66,8 +66,6 @@ struct parser
      * separate lock. */
     bool streaming, sink_connected;
 
-    uint64_t next_pull_offset;
-
     HANDLE read_thread;
 
     BOOL (*init_gst)(struct parser *filter);
@@ -796,8 +794,6 @@ static GstFlowReturn read_buffer(struct parser *This, guint64 ofs, guint len, Gs
 
     TRACE("filter %p, offset %s, length %u, buffer %p.\n", This, wine_dbgstr_longlong(ofs), len, buffer);
 
-    if (ofs == GST_BUFFER_OFFSET_NONE)
-        ofs = This->next_pull_offset;
     if (ofs >= This->file_size)
     {
         WARN("Reading past eof: %s, %u\n", wine_dbgstr_longlong(ofs), len);
@@ -805,7 +801,6 @@ static GstFlowReturn read_buffer(struct parser *This, guint64 ofs, guint len, Gs
     }
     if (len + ofs > This->file_size)
         len = This->file_size - ofs;
-    This->next_pull_offset = ofs + len;
 
     gst_buffer_map(buffer, &info, GST_MAP_WRITE);
     hr = IAsyncReader_SyncRead(This->reader, ofs, len, info.data);
@@ -998,7 +993,6 @@ static HRESULT parser_sink_connect(struct strmbase_sink *iface, IPin *peer, cons
 
     filter->sink_connected = true;
     filter->read_thread = CreateThread(NULL, 0, read_thread, filter, 0, NULL);
-    filter->next_pull_offset = 0;
 
     if (FAILED(hr = unix_funcs->wg_parser_connect(filter->wg_parser, filter->file_size)))
         goto err;
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 96c6fc1e715..f2f878ffabc 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -989,6 +989,10 @@ static GstFlowReturn request_buffer_src(GstPad *pad, GstObject *parent, guint64
 
     GST_LOG("pad %p, offset %" G_GINT64_MODIFIER "u, length %u, buffer %p.", pad, offset, size, *buffer);
 
+    if (offset == GST_BUFFER_OFFSET_NONE)
+        offset = parser->next_pull_offset;
+    parser->next_pull_offset = offset + size;
+
     if (!*buffer)
         *buffer = new_buffer = gst_buffer_new_and_alloc(size);
 
@@ -1325,6 +1329,7 @@ static HRESULT CDECL wg_parser_connect(struct wg_parser *parser, uint64_t file_s
     gst_pad_set_element_private(parser->my_src, parser);
 
     parser->start_offset = parser->next_offset = parser->stop_offset = 0;
+    parser->next_pull_offset = 0;
 
     if (!parser->init_gst(parser))
         return E_FAIL;




More information about the wine-cvs mailing list