[PATCH 2/2] mf: Make sure to request another sample for sample grabber after current timed sample.

Nikolay Sivov nsivov at codeweavers.com
Fri Apr 24 09:47:04 CDT 2020


Based on patch by Derek Lesho.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
 dlls/mf/samplegrabber.c | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/dlls/mf/samplegrabber.c b/dlls/mf/samplegrabber.c
index 2167b5001e..7d9fa78732 100644
--- a/dlls/mf/samplegrabber.c
+++ b/dlls/mf/samplegrabber.c
@@ -739,14 +739,22 @@ static HRESULT WINAPI sample_grabber_stream_timer_callback_Invoke(IMFAsyncCallba
                     if (FAILED(hr = sample_grabber_report_sample(grabber, item->u.sample, &sample_delivered)))
                         WARN("Failed to report a sample, hr %#x.\n", hr);
                     stream_release_pending_item(item);
-                    item = stream_get_next_item(grabber);
-                    if (item && item->type == ITEM_TYPE_SAMPLE)
+
+                    /* Schedule next sample, skipping markers. */
+                    LIST_FOR_EACH_ENTRY(item, &grabber->items, struct scheduled_item, entry)
                     {
-                        if (FAILED(hr = stream_schedule_sample(grabber, item)))
-                            WARN("Failed to schedule a sample, hr %#x.\n", hr);
-                        sample_grabber_stream_request_sample(grabber);
-                        item = NULL;
+                        if (item->type == ITEM_TYPE_SAMPLE)
+                        {
+                            if (FAILED(hr = stream_schedule_sample(grabber, item)))
+                                WARN("Failed to schedule a sample, hr %#x.\n", hr);
+                            break;
+                        }
                     }
+
+                    if (sample_delivered)
+                        sample_grabber_stream_request_sample(grabber);
+
+                    item = NULL;
                     break;
                 case ITEM_TYPE_MARKER:
                     sample_grabber_stream_report_marker(grabber, &item->u.marker.context, S_OK);
-- 
2.26.2




More information about the wine-devel mailing list