[PATCH 2/3] mfreadwrite: Track source state in reader.
Nikolay Sivov
nsivov at codeweavers.com
Tue Nov 5 05:09:43 CST 2019
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/mfreadwrite/main.c | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/dlls/mfreadwrite/main.c b/dlls/mfreadwrite/main.c
index 6fb00b4d37..9fa1445a8f 100644
--- a/dlls/mfreadwrite/main.c
+++ b/dlls/mfreadwrite/main.c
@@ -84,6 +84,12 @@ enum media_stream_state
STREAM_STATE_EOS,
};
+enum media_source_state
+{
+ SOURCE_STATE_STOPPED = 0,
+ SOURCE_STATE_STARTED,
+};
+
struct media_stream
{
IMFMediaStream *stream;
@@ -107,6 +113,7 @@ struct source_reader
DWORD first_video_stream_index;
IMFSourceReaderCallback *async_callback;
BOOL shutdown_on_release;
+ enum media_source_state source_state;
struct media_stream *streams;
DWORD stream_count;
CRITICAL_SECTION cs;
@@ -268,6 +275,30 @@ static HRESULT source_reader_new_stream_handler(struct source_reader *reader, IM
return hr;
}
+static HRESULT source_reader_source_state_handler(struct source_reader *reader, MediaEventType event_type)
+{
+ enum media_source_state state;
+
+ switch (event_type)
+ {
+ case MESourceStarted:
+ state = SOURCE_STATE_STARTED;
+ break;
+ case MESourceStopped:
+ state = SOURCE_STATE_STOPPED;
+ break;
+ default:
+ WARN("Unhandled state %d.\n", event_type);
+ return E_FAIL;
+ }
+
+ EnterCriticalSection(&reader->cs);
+ reader->source_state = state;
+ LeaveCriticalSection(&reader->cs);
+
+ return S_OK;
+}
+
static HRESULT WINAPI source_reader_source_events_callback_Invoke(IMFAsyncCallback *iface, IMFAsyncResult *result)
{
struct source_reader *reader = impl_from_source_callback_IMFAsyncCallback(iface);
@@ -292,6 +323,11 @@ static HRESULT WINAPI source_reader_source_events_callback_Invoke(IMFAsyncCallba
case MENewStream:
hr = source_reader_new_stream_handler(reader, event);
break;
+ case MESourceStarted:
+ case MESourcePaused:
+ case MESourceStopped:
+ hr = source_reader_source_state_handler(reader, event_type);
+ break;
default:
;
}
--
2.24.0.rc1
More information about the wine-devel
mailing list