/* akvirtualcamera, virtual camera for Mac and Windows. * Copyright (C) 2020 Gonzalo Exequiel Pedone * * akvirtualcamera is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * akvirtualcamera is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with akvirtualcamera. If not, see . * * Web-Site: http://webcamoid.github.io/ */ #ifndef MEDIASAMPLE_H #define MEDIASAMPLE_H #include #include "cunknown.h" namespace AkVCam { class MediaSamplePrivate; class MediaSample: public IMediaSample, public CUnknown { public: MediaSample(IMemAllocator *memAllocator, LONG bufferSize, LONG align, LONG prefix); virtual ~MediaSample(); DECLARE_IUNKNOWN_NR(IID_IMediaSample) // IUnknown ULONG STDMETHODCALLTYPE Release(); // IMediaSample HRESULT STDMETHODCALLTYPE GetPointer(BYTE **ppBuffer); LONG STDMETHODCALLTYPE GetSize(); HRESULT STDMETHODCALLTYPE GetTime(REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd); HRESULT STDMETHODCALLTYPE SetTime(REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd); HRESULT STDMETHODCALLTYPE IsSyncPoint(); HRESULT STDMETHODCALLTYPE SetSyncPoint(BOOL bIsSyncPoint); HRESULT STDMETHODCALLTYPE IsPreroll(); HRESULT STDMETHODCALLTYPE SetPreroll(BOOL bIsPreroll); LONG STDMETHODCALLTYPE GetActualDataLength(); HRESULT STDMETHODCALLTYPE SetActualDataLength(LONG lLen); HRESULT STDMETHODCALLTYPE GetMediaType(AM_MEDIA_TYPE **ppMediaType); HRESULT STDMETHODCALLTYPE SetMediaType(AM_MEDIA_TYPE *pMediaType); HRESULT STDMETHODCALLTYPE IsDiscontinuity(); HRESULT STDMETHODCALLTYPE SetDiscontinuity(BOOL bDiscontinuity); HRESULT STDMETHODCALLTYPE GetMediaTime(LONGLONG *pTimeStart, LONGLONG *pTimeEnd); HRESULT STDMETHODCALLTYPE SetMediaTime(LONGLONG *pTimeStart, LONGLONG *pTimeEnd); private: MediaSamplePrivate *d; }; } #define DECLARE_IMEDIASAMPLE(interfaceIid) \ DECLARE_IUNKNOWN_NR(interfaceIid) \ \ ULONG STDMETHODCALLTYPE Release() \ { \ return MediaSample::Release(); \ } \ \ HRESULT STDMETHODCALLTYPE GetPointer(BYTE **ppBuffer) \ { \ return MediaSample::GetPointer(ppBuffer); \ } \ \ LONG STDMETHODCALLTYPE GetSize() \ { \ return MediaSample::GetSize(); \ } \ \ HRESULT STDMETHODCALLTYPE GetTime(REFERENCE_TIME *pTimeStart, \ REFERENCE_TIME *pTimeEnd) \ { \ return MediaSample::GetTime(pTimeStart, pTimeEnd); \ } \ \ HRESULT STDMETHODCALLTYPE SetTime(REFERENCE_TIME *pTimeStart, \ REFERENCE_TIME *pTimeEnd) \ { \ return MediaSample::SetTime(pTimeStart, pTimeEnd); \ } \ \ HRESULT STDMETHODCALLTYPE IsSyncPoint() \ { \ return MediaSample::IsSyncPoint(); \ } \ \ HRESULT STDMETHODCALLTYPE SetSyncPoint(BOOL bIsSyncPoint) \ { \ return MediaSample::SetSyncPoint(bIsSyncPoint); \ } \ \ HRESULT STDMETHODCALLTYPE IsPreroll() \ { \ return MediaSample::IsPreroll(); \ } \ \ HRESULT STDMETHODCALLTYPE SetPreroll(BOOL bIsPreroll) \ { \ return MediaSample::SetPreroll(bIsPreroll); \ } \ \ LONG STDMETHODCALLTYPE GetActualDataLength() \ { \ return MediaSample::GetActualDataLength(); \ } \ \ HRESULT STDMETHODCALLTYPE SetActualDataLength(LONG lLen) \ { \ return MediaSample::SetActualDataLength(lLen); \ } \ \ HRESULT STDMETHODCALLTYPE GetMediaType(AM_MEDIA_TYPE **ppMediaType) \ { \ return MediaSample::GetMediaType(ppMediaType); \ } \ \ HRESULT STDMETHODCALLTYPE SetMediaType(AM_MEDIA_TYPE *pMediaType) \ { \ return MediaSample::SetMediaType(pMediaType); \ } \ \ HRESULT STDMETHODCALLTYPE IsDiscontinuity() \ { \ return MediaSample::IsDiscontinuity(); \ } \ \ HRESULT STDMETHODCALLTYPE SetDiscontinuity(BOOL bDiscontinuity) \ { \ return MediaSample::SetDiscontinuity(bDiscontinuity); \ } \ \ HRESULT STDMETHODCALLTYPE GetMediaTime(LONGLONG *pTimeStart, \ LONGLONG *pTimeEnd) \ { \ return MediaSample::GetMediaTime(pTimeStart, pTimeEnd); \ } \ \ HRESULT STDMETHODCALLTYPE SetMediaTime(LONGLONG *pTimeStart, \ LONGLONG *pTimeEnd) \ { \ return MediaSample::SetMediaTime(pTimeStart, pTimeEnd); \ } #endif // MEDIASAMPLE_H