summaryrefslogtreecommitdiffstats
path: root/thirdparties/win32/include/directshow/source.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparties/win32/include/directshow/source.h')
-rw-r--r--thirdparties/win32/include/directshow/source.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/thirdparties/win32/include/directshow/source.h b/thirdparties/win32/include/directshow/source.h
new file mode 100644
index 0000000..e6e451b
--- /dev/null
+++ b/thirdparties/win32/include/directshow/source.h
@@ -0,0 +1,172 @@
+//------------------------------------------------------------------------------
+// File: Source.h
+//
+// Desc: DirectShow base classes - defines classes to simplify creation of
+// ActiveX source filters that support continuous generation of data.
+// No support is provided for IMediaControl or IMediaPosition.
+//
+// Copyright (c) 1992-2001 Microsoft Corporation. All rights reserved.
+//------------------------------------------------------------------------------
+
+
+//
+// Derive your source filter from CSource.
+// During construction either:
+// Create some CSourceStream objects to manage your pins
+// Provide the user with a means of doing so eg, an IPersistFile interface.
+//
+// CSource provides:
+// IBaseFilter interface management
+// IMediaFilter interface management, via CBaseFilter
+// Pin counting for CBaseFilter
+//
+// Derive a class from CSourceStream to manage your output pin types
+// Implement GetMediaType/1 to return the type you support. If you support multiple
+// types then overide GetMediaType/3, CheckMediaType and GetMediaTypeCount.
+// Implement Fillbuffer() to put data into one buffer.
+//
+// CSourceStream provides:
+// IPin management via CBaseOutputPin
+// Worker thread management
+
+#ifndef __CSOURCE__
+#define __CSOURCE__
+
+class CSourceStream; // The class that will handle each pin
+
+
+//
+// CSource
+//
+// Override construction to provide a means of creating
+// CSourceStream derived objects - ie a way of creating pins.
+class CSource : public CBaseFilter {
+public:
+
+ CSource(__in_opt LPCTSTR pName, __inout_opt LPUNKNOWN lpunk, CLSID clsid, __inout HRESULT *phr);
+ CSource(__in_opt LPCTSTR pName, __inout_opt LPUNKNOWN lpunk, CLSID clsid);
+#ifdef UNICODE
+ CSource(__in_opt LPCSTR pName, __inout_opt LPUNKNOWN lpunk, CLSID clsid, __inout HRESULT *phr);
+ CSource(__in_opt LPCSTR pName, __inout_opt LPUNKNOWN lpunk, CLSID clsid);
+#endif
+ ~CSource();
+
+ int GetPinCount(void);
+ CBasePin *GetPin(int n);
+
+ // -- Utilities --
+
+ CCritSec* pStateLock(void) { return &m_cStateLock; } // provide our critical section
+
+ HRESULT AddPin(__in CSourceStream *);
+ HRESULT RemovePin(__in CSourceStream *);
+
+ STDMETHODIMP FindPin(
+ LPCWSTR Id,
+ __deref_out IPin ** ppPin
+ );
+
+ int FindPinNumber(__in IPin *iPin);
+
+protected:
+
+ int m_iPins; // The number of pins on this filter. Updated by CSourceStream
+ // constructors & destructors.
+ CSourceStream **m_paStreams; // the pins on this filter.
+
+ CCritSec m_cStateLock; // Lock this to serialize function accesses to the filter state
+
+};
+
+
+//
+// CSourceStream
+//
+// Use this class to manage a stream of data that comes from a
+// pin.
+// Uses a worker thread to put data on the pin.
+class CSourceStream : public CAMThread, public CBaseOutputPin {
+public:
+
+ CSourceStream(__in_opt LPCTSTR pObjectName,
+ __inout HRESULT *phr,
+ __inout CSource *pms,
+ __in_opt LPCWSTR pName);
+#ifdef UNICODE
+ CSourceStream(__in_opt LPCSTR pObjectName,
+ __inout HRESULT *phr,
+ __inout CSource *pms,
+ __in_opt LPCWSTR pName);
+#endif
+ virtual ~CSourceStream(void); // virtual destructor ensures derived class destructors are called too.
+
+protected:
+
+ CSource *m_pFilter; // The parent of this stream
+
+ // *
+ // * Data Source
+ // *
+ // * The following three functions: FillBuffer, OnThreadCreate/Destroy, are
+ // * called from within the ThreadProc. They are used in the creation of
+ // * the media samples this pin will provide
+ // *
+
+ // Override this to provide the worker thread a means
+ // of processing a buffer
+ virtual HRESULT FillBuffer(IMediaSample *pSamp) PURE;
+
+ // Called as the thread is created/destroyed - use to perform
+ // jobs such as start/stop streaming mode
+ // If OnThreadCreate returns an error the thread will exit.
+ virtual HRESULT OnThreadCreate(void) {return NOERROR;};
+ virtual HRESULT OnThreadDestroy(void) {return NOERROR;};
+ virtual HRESULT OnThreadStartPlay(void) {return NOERROR;};
+
+ // *
+ // * Worker Thread
+ // *
+
+ HRESULT Active(void); // Starts up the worker thread
+ HRESULT Inactive(void); // Exits the worker thread.
+
+public:
+ // thread commands
+ enum Command {CMD_INIT, CMD_PAUSE, CMD_RUN, CMD_STOP, CMD_EXIT};
+ HRESULT Init(void) { return CallWorker(CMD_INIT); }
+ HRESULT Exit(void) { return CallWorker(CMD_EXIT); }
+ HRESULT Run(void) { return CallWorker(CMD_RUN); }
+ HRESULT Pause(void) { return CallWorker(CMD_PAUSE); }
+ HRESULT Stop(void) { return CallWorker(CMD_STOP); }
+
+protected:
+ Command GetRequest(void) { return (Command) CAMThread::GetRequest(); }
+ BOOL CheckRequest(Command *pCom) { return CAMThread::CheckRequest( (DWORD *) pCom); }
+
+ // override these if you want to add thread commands
+ virtual DWORD ThreadProc(void); // the thread function
+
+ virtual HRESULT DoBufferProcessingLoop(void); // the loop executed whilst running
+
+
+ // *
+ // * AM_MEDIA_TYPE support
+ // *
+
+ // If you support more than one media type then override these 2 functions
+ virtual HRESULT CheckMediaType(const CMediaType *pMediaType);
+ virtual HRESULT GetMediaType(int iPosition, __inout CMediaType *pMediaType); // List pos. 0-n
+
+ // If you support only one type then override this fn.
+ // This will only be called by the default implementations
+ // of CheckMediaType and GetMediaType(int, CMediaType*)
+ // You must override this fn. or the above 2!
+ virtual HRESULT GetMediaType(__inout CMediaType *pMediaType) {return E_UNEXPECTED;}
+
+ STDMETHODIMP QueryId(
+ __deref_out LPWSTR * Id
+ );
+};
+
+#endif // __CSOURCE__
+
OpenPOWER on IntegriCloud