Nikolay Sivov : mf: Make sure to request another sample for sample grabber after current timed sample.

Alexandre Julliard julliard at winehq.org
Fri Apr 24 15:11:39 CDT 2020


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Apr 24 17:47:04 2020 +0300

mf: Make sure to request another sample for sample grabber after current timed sample.

Based on patch by Derek Lesho.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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);




More information about the wine-cvs mailing list