Path: blob/master/modules/videoio/src/cap_winrt/MediaStreamSink.hpp
16348 views
// Copyright (c) Microsoft. All rights reserved.1//2// The MIT License (MIT)3//4// Permission is hereby granted, free of charge, to any person obtaining a copy5// of this software and associated documentation files(the "Software"), to deal6// in the Software without restriction, including without limitation the rights7// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell8// copies of the Software, and to permit persons to whom the Software is9// furnished to do so, subject to the following conditions :10//11// The above copyright notice and this permission notice shall be included in12// all copies or substantial portions of the Software.13//14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE17// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER18// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,19// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN20// THE SOFTWARE.2122#pragma once2324#include "MFIncludes.hpp"2526namespace Media {2728class MediaStreamSink WrlSealed :29public Microsoft::WRL::RuntimeClass<30Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>,31IMFStreamSink,32IMFMediaEventGenerator,33IMFMediaTypeHandler34>35{36public:3738MediaStreamSink(39__in const MW::ComPtr<IMFMediaSink>& sink,40__in DWORD id,41__in const MW::ComPtr<IMFMediaType>& mt,42__in MediaSampleHandler^ sampleHandler43);4445//46// IMFStreamSink47//4849IFACEMETHODIMP GetMediaSink(__deref_out IMFMediaSink **sink);50IFACEMETHODIMP GetIdentifier(__out DWORD *identifier);51IFACEMETHODIMP GetMediaTypeHandler(__deref_out IMFMediaTypeHandler **handler);52IFACEMETHODIMP ProcessSample(__in_opt IMFSample *sample);53IFACEMETHODIMP PlaceMarker(__in MFSTREAMSINK_MARKER_TYPE markerType, __in const PROPVARIANT * markerValue, __in const PROPVARIANT * contextValue);54IFACEMETHODIMP Flush();5556//57// IMFMediaEventGenerator58//5960IFACEMETHODIMP GetEvent(__in DWORD flags, __deref_out IMFMediaEvent **event);61IFACEMETHODIMP BeginGetEvent(__in IMFAsyncCallback *callback, __in_opt IUnknown *state);62IFACEMETHODIMP EndGetEvent(__in IMFAsyncResult *result, __deref_out IMFMediaEvent **event);63IFACEMETHODIMP QueueEvent(__in MediaEventType met, __in REFGUID extendedType, __in HRESULT status, __in_opt const PROPVARIANT *value);6465//66// IMFMediaTypeHandler67//6869IFACEMETHODIMP IsMediaTypeSupported(__in IMFMediaType *mediaType, __deref_out_opt IMFMediaType **closestMediaType);70IFACEMETHODIMP GetMediaTypeCount(__out DWORD *typeCount);71IFACEMETHODIMP GetMediaTypeByIndex(__in DWORD index, __deref_out IMFMediaType **mediaType);72IFACEMETHODIMP SetCurrentMediaType(__in IMFMediaType *mediaType);73IFACEMETHODIMP GetCurrentMediaType(__deref_out_opt IMFMediaType **mediaType);74IFACEMETHODIMP GetMajorType(__out GUID *majorType);7576//77// Misc78//7980void InternalSetCurrentMediaType(__in const MW::ComPtr<IMFMediaType>& mediaType);81void RequestSample();82void Shutdown();8384private:8586bool _IsMediaTypeSupported(__in const MW::ComPtr<IMFMediaType>& mt) const;87void _UpdateMediaType(__in const MW::ComPtr<IMFMediaType>& mt);8889void _VerifyNotShutdown()90{91if (_shutdown)92{93CHK(MF_E_SHUTDOWN);94}95}9697MW::ComPtr<IMFMediaSink> _sink;98MW::ComPtr<IMFMediaEventQueue> _eventQueue;99MW::ComPtr<IMFMediaType> _curMT;100101MediaSampleHandler^ _sampleHandler;102103GUID _majorType;104GUID _subType;105unsigned int _width;106unsigned int _height;107DWORD _id;108bool _shutdown;109110MWW::SRWLock _lock;111};112113}114115