diff --git a/dlls/winegstreamer/gst_private.h b/dlls/winegstreamer/gst_private.h
index caa449956bf95500771aab89173e89f44d9e52d3..86ddc3c85c86cb9b1f08169323bbc513a4510cfc 100644
--- a/dlls/winegstreamer/gst_private.h
+++ b/dlls/winegstreamer/gst_private.h
@@ -129,6 +129,8 @@ struct wm_reader
     bool read_thread_shutdown;
     struct wg_parser *wg_parser;
 
+    WORD stream_count;
+
     const struct wm_reader_ops *ops;
 };
 
diff --git a/dlls/winegstreamer/wm_reader.c b/dlls/winegstreamer/wm_reader.c
index 163eebf8c55d485c4bd301ca8c1ee3c20bcb4e19..689d2232b7302b4922c8dcd99d6abfbe9fc6c366 100644
--- a/dlls/winegstreamer/wm_reader.c
+++ b/dlls/winegstreamer/wm_reader.c
@@ -188,12 +188,16 @@ static HRESULT WINAPI profile_SetDescription(IWMProfile3 *iface, const WCHAR *de
 
 static HRESULT WINAPI profile_GetStreamCount(IWMProfile3 *iface, DWORD *count)
 {
-    FIXME("iface %p, count %p, stub!\n", iface, count);
+    struct wm_reader *reader = impl_from_IWMProfile3(iface);
+
+    TRACE("reader %p, count %p.\n", reader, count);
 
     if (!count)
         return E_INVALIDARG;
 
-    *count = 0;
+    EnterCriticalSection(&reader->cs);
+    *count = reader->stream_count;
+    LeaveCriticalSection(&reader->cs);
     return S_OK;
 }
 
@@ -853,6 +857,8 @@ HRESULT wm_reader_open_stream(struct wm_reader *reader, IStream *stream)
         goto out_shutdown_thread;
     }
 
+    reader->stream_count = wg_parser_get_stream_count(reader->wg_parser);
+
     LeaveCriticalSection(&reader->cs);
     return S_OK;
 
diff --git a/dlls/wmvcore/tests/wmvcore.c b/dlls/wmvcore/tests/wmvcore.c
index 61c3504e69c4f8f2a2177e82cdc5326b797301df..ad58f53d5523ab017735d97e43ac2ee43958a055 100644
--- a/dlls/wmvcore/tests/wmvcore.c
+++ b/dlls/wmvcore/tests/wmvcore.c
@@ -459,7 +459,7 @@ static void test_sync_reader_streaming(void)
     count = 0xdeadbeef;
     hr = IWMProfile_GetStreamCount(profile, &count);
     ok(hr == S_OK, "Got hr %#x.\n", hr);
-    todo_wine ok(count == 2, "Got count %u.\n", count);
+    ok(count == 2, "Got count %u.\n", count);
 
     count = 0xdeadbeef;
     hr = IWMSyncReader_GetOutputCount(reader, &count);