summaryrefslogtreecommitdiff
path: root/general/SimpleMediaSource/MediaSource/SimpleMediaSourceActivate.h
diff options
context:
space:
mode:
authorj-leungyy <[email protected]>2021-05-25 09:06:09 -0700
committerGitHub <[email protected]>2021-05-25 09:06:09 -0700
commit4fe5787f122fdfc45253b45f9fad3983f53d86df (patch)
treea11e06f8951d4b7b847f6f5a708f86df87d637db /general/SimpleMediaSource/MediaSource/SimpleMediaSourceActivate.h
parent53afd12aadb8aff15097f1546d4f80c6074e0bdc (diff)
update simplemediasource sample (#614)
* update simplemediasource wrl to winrtcpp COM, add mediatype NV12 (SimpleFrameGenerator), fix Mediatype missing attribute (bitrate), add IMFActivate, IMFSampleAllocator interface and implementation, update hardcode arg with named variables, cleanup sample for StreamIndex and StreamId, add sample KSControl * address PR-it1 comments * address comment from PR-it2, replace manual define of IKSControl by ksproxy.h * remove unuse header * address comment from PR * fix sdk to latest, add driversign algorithm * remove nudget, use submodule
Diffstat (limited to 'general/SimpleMediaSource/MediaSource/SimpleMediaSourceActivate.h')
-rw-r--r--general/SimpleMediaSource/MediaSource/SimpleMediaSourceActivate.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/general/SimpleMediaSource/MediaSource/SimpleMediaSourceActivate.h b/general/SimpleMediaSource/MediaSource/SimpleMediaSourceActivate.h
new file mode 100644
index 00000000..f206e6d9
--- /dev/null
+++ b/general/SimpleMediaSource/MediaSource/SimpleMediaSourceActivate.h
@@ -0,0 +1,82 @@
+//
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//
+#pragma once
+#ifndef SIMPLEMEDIASOURCEACTIVATE_H
+#define SIMPLEMEDIASOURCEACTIVATE_H
+
+namespace winrt::WindowsSample::implementation
+{
+ struct __declspec(uuid("9812588D-5CE9-4E4C-ABC1-049138D10DCE"))
+ SimpleMediaSourceActivate : winrt::implements<SimpleMediaSourceActivate, IMFActivate>
+ {
+ SimpleMediaSourceActivate() = default;
+
+ public:
+ // IMFActivate
+ IFACEMETHODIMP ActivateObject(REFIID riid, void** ppv) override;
+ IFACEMETHODIMP ShutdownObject() override;
+ IFACEMETHODIMP DetachObject() override;
+
+ // IMFAttributes (inherits by IMFActivate)
+ IFACEMETHODIMP GetItem(_In_ REFGUID guidKey, _Inout_opt_ PROPVARIANT* pValue) override;
+ IFACEMETHODIMP GetItemType(_In_ REFGUID guidKey, _Out_ MF_ATTRIBUTE_TYPE* pType) override;
+ IFACEMETHODIMP CompareItem(_In_ REFGUID guidKey, _In_ REFPROPVARIANT Value, _Out_ BOOL* pbResult) override;
+ IFACEMETHODIMP Compare(_In_ IMFAttributes* pTheirs, _In_ MF_ATTRIBUTES_MATCH_TYPE MatchType, _Out_ BOOL* pbResult) override;
+ IFACEMETHODIMP GetUINT32(_In_ REFGUID guidKey, _Out_ UINT32* punValue) override;
+ IFACEMETHODIMP GetUINT64(_In_ REFGUID guidKey, _Out_ UINT64* punValue) override;
+ IFACEMETHODIMP GetDouble(_In_ REFGUID guidKey, _Out_ double* pfValue) override;
+ IFACEMETHODIMP GetGUID(_In_ REFGUID guidKey, _Out_ GUID* pguidValue) override;
+ IFACEMETHODIMP GetStringLength(_In_ REFGUID guidKey, _Out_ UINT32* pcchLength) override;
+ IFACEMETHODIMP GetString(_In_ REFGUID guidKey, _Out_writes_(cchBufSize) LPWSTR pwszValue, _In_ UINT32 cchBufSize, _Inout_opt_ UINT32* pcchLength) override;
+ IFACEMETHODIMP GetAllocatedString(_In_ REFGUID guidKey, _Out_writes_(*pcchLength + 1) LPWSTR* ppwszValue, _Inout_ UINT32* pcchLength) override;
+ IFACEMETHODIMP GetBlobSize(_In_ REFGUID guidKey, _Out_ UINT32* pcbBlobSize) override;
+ IFACEMETHODIMP GetBlob(_In_ REFGUID guidKey, _Out_writes_(cbBufSize) UINT8* pBuf, UINT32 cbBufSize, _Inout_ UINT32* pcbBlobSize) override;
+ IFACEMETHODIMP GetAllocatedBlob(__RPC__in REFGUID guidKey, __RPC__deref_out_ecount_full_opt(*pcbSize) UINT8** ppBuf, __RPC__out UINT32* pcbSize) override;
+ IFACEMETHODIMP GetUnknown(__RPC__in REFGUID guidKey, __RPC__in REFIID riid, __RPC__deref_out_opt LPVOID* ppv) override;
+ IFACEMETHODIMP SetItem(_In_ REFGUID guidKey, _In_ REFPROPVARIANT Value) override;
+ IFACEMETHODIMP DeleteItem(_In_ REFGUID guidKey) override;
+ IFACEMETHODIMP DeleteAllItems() override;
+ IFACEMETHODIMP SetUINT32(_In_ REFGUID guidKey, _In_ UINT32 unValue) override;
+ IFACEMETHODIMP SetUINT64(_In_ REFGUID guidKey, _In_ UINT64 unValue) override;
+ IFACEMETHODIMP SetDouble(_In_ REFGUID guidKey, _In_ double fValue) override;
+ IFACEMETHODIMP SetGUID(_In_ REFGUID guidKey, _In_ REFGUID guidValue) override;
+ IFACEMETHODIMP SetString(_In_ REFGUID guidKey, _In_ LPCWSTR wszValue) override;
+ IFACEMETHODIMP SetBlob(_In_ REFGUID guidKey, _In_reads_(cbBufSize) const UINT8* pBuf, UINT32 cbBufSize) override;
+ IFACEMETHODIMP SetUnknown(_In_ REFGUID guidKey, _In_ IUnknown* pUnknown) override;
+ IFACEMETHODIMP LockStore() override;
+ IFACEMETHODIMP UnlockStore() override;
+ IFACEMETHODIMP GetCount(_Out_ UINT32* pcItems) override;
+ IFACEMETHODIMP GetItemByIndex(UINT32 unIndex, _Out_ GUID* pguidKey, _Inout_ PROPVARIANT* pValue) override;
+ IFACEMETHODIMP CopyAllItems(_In_ IMFAttributes* pDest) override;
+
+ private:
+ wil::com_ptr_nothrow <IMFAttributes> m_spActivateAttributes;
+ winrt::com_ptr<winrt::WindowsSample::implementation::SimpleMediaSource> m_spSimpleMediaSrc;
+ };
+}
+
+//
+// cocreatable class
+//
+struct SimpleMediaSourceActivateFactory : public winrt::implements<SimpleMediaSourceActivateFactory, IClassFactory>
+{
+public:
+ STDMETHODIMP CreateInstance(_In_ IUnknown*, _In_ REFIID riid, _COM_Outptr_ void** result) noexcept final try
+ {
+ RETURN_HR_IF_NULL(E_POINTER, result);
+ *result = nullptr;
+
+ winrt::com_ptr<winrt::WindowsSample::implementation::SimpleMediaSourceActivate> ptr = winrt::make_self<winrt::WindowsSample::implementation::SimpleMediaSourceActivate>();
+ return ptr->QueryInterface(riid, result);
+ } CATCH_RETURN()
+
+
+ STDMETHODIMP LockServer(BOOL) noexcept final
+ {
+ return S_OK;
+ }
+};
+
+
+#endif