On 7/26/22 03:04, Rémi Bernon wrote:
+static DWORD WINAPI stream_thread(void *arg) +{ + struct async_reader *reader = arg; + IWMReaderCallback *callback = reader->callback; + IWMReaderCallbackAdvanced *callback_advanced; + HRESULT hr = S_OK; + + EnterCriticalSection(&reader->stream_cs); + + if (FAILED(hr = IWMReaderCallback_QueryInterface(callback, + &IID_IWMReaderCallbackAdvanced, (void **)&callback_advanced))) + callback_advanced = NULL; + TRACE("Querying for IWMReaderCallbackAdvanced returned %#lx.\n", hr); + + while (reader->state != STATE_CLOSED || reader->next_state) + { + execute_state_transition(reader); + + if (reader->state == STATE_RUNNING) + { + stream_thread_running(reader, callback_advanced); + if (!reader->next_state) + reader->state = STATE_STOPPED; + } + + while (reader->state != STATE_CLOSED && !reader->next_state) + SleepConditionVariableCS(&reader->stream_cv, &reader->stream_cs, INFINITE); + }
It's not a huge deal, since stream_thread_running() already does this, but do you think you could write this in a way that doesn't need a nested loop?