On 8/10/22 07:28, RĂ©mi Bernon wrote:
+static HRESULT asf_reader_wait_state(struct strmbase_filter *iface, DWORD timeout) +{
- struct asf_reader *filter = impl_from_strmbase_filter(iface);
- DWORD time = GetTickCount(), end_time = time + timeout;
- while (filter->status == -1 && end_time - time <= timeout)
- {
if (!SleepConditionVariableCS(&filter->status_cv, &filter->filter.filter_cs, end_time - time))
break;
time = GetTickCount();
- }
- return filter->status == -1 ? VFW_S_STATE_INTERMEDIATE : S_OK;
+}
- static const struct strmbase_filter_ops filter_ops = { .filter_get_pin = asf_reader_get_pin, .filter_destroy = asf_reader_destroy, .filter_query_interface = asf_reader_query_interface,
- .filter_wait_state = asf_reader_wait_state, };
filter_wait_state() should not return VFW_S_STATE_INTERMEDIATE unless we are transitioning to another state asynchronously. IFileSourceFilter::Load() isn't a state transition, and it completes synchronously anyway.
(Note that in general we probably shouldn't be doing asynchronous state transitions from anything but a renderer, unless the tests say otherwise.)