summaryrefslogtreecommitdiff
path: root/general/SimpleMediaSource/MediaSource/SimpleMediaStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'general/SimpleMediaSource/MediaSource/SimpleMediaStream.h')
-rw-r--r--general/SimpleMediaSource/MediaSource/SimpleMediaStream.h54
1 files changed, 54 insertions, 0 deletions
diff --git a/general/SimpleMediaSource/MediaSource/SimpleMediaStream.h b/general/SimpleMediaSource/MediaSource/SimpleMediaStream.h
new file mode 100644
index 00000000..56351f47
--- /dev/null
+++ b/general/SimpleMediaSource/MediaSource/SimpleMediaStream.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include "stdafx.h"
+
+class SimpleMediaSource;
+
+class SimpleMediaStream : public RuntimeClass<
+ RuntimeClassFlags<ClassicCom>,
+ IMFMediaEventGenerator,
+ IMFMediaStream,
+ IMFMediaStream2>
+{
+ friend class SimpleMediaSource;
+
+public:
+ // IMFMediaEventGenerator
+ IFACEMETHOD(BeginGetEvent)(IMFAsyncCallback *pCallback, IUnknown *punkState);
+ IFACEMETHOD(EndGetEvent)(IMFAsyncResult *pResult, IMFMediaEvent **ppEvent);
+ IFACEMETHOD(GetEvent)(DWORD dwFlags, IMFMediaEvent **ppEvent);
+ IFACEMETHOD(QueueEvent)(MediaEventType met, REFGUID guidExtendedType, HRESULT hrStatus, const PROPVARIANT *pvValue);
+
+ // IMFMediaStream
+ IFACEMETHOD(GetMediaSource)(IMFMediaSource **ppMediaSource);
+ IFACEMETHOD(GetStreamDescriptor)(IMFStreamDescriptor **ppStreamDescriptor);
+ IFACEMETHOD(RequestSample)(IUnknown *pToken);
+
+ // IMFMediaStream2
+ IFACEMETHOD(SetStreamState)(MF_STREAM_STATE state);
+ IFACEMETHOD(GetStreamState)(_Out_ MF_STREAM_STATE *pState);
+
+ // Non-interface methods.
+ HRESULT RuntimeClassInitialize(_In_ SimpleMediaSource* pSource);
+ HRESULT Shutdown();
+
+
+protected:
+ HRESULT _CheckShutdownRequiresLock();
+ HRESULT _SetStreamAttributes(IMFAttributes* pAttributeStore);
+ HRESULT _SetStreamDescriptorAttributes(IMFAttributes* pAttributeStore);
+
+
+ CriticalSection _critSec;
+
+ ComPtr<IMFMediaSource> _parent;
+ ComPtr<IMFMediaEventQueue> _spEventQueue;
+ ComPtr<IMFAttributes> _spAttributes;
+ ComPtr<IMFMediaType> _spMediaType;
+ ComPtr<IMFStreamDescriptor> _spStreamDesc;
+ bool _isShutdown = false;
+ bool _isSelected = false;
+
+ const DWORD STREAMINDEX = 0; // since there is only one stream
+};
+