[KSPROXY]
[reactos.git] / reactos / dll / directx / ksproxy / datatype.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
4 * FILE: dll/directx/ksproxy/datatype.cpp
5 * PURPOSE: IKsDataTypeHandler interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
8 */
9 #include "precomp.h"
10
11 /* FIXME guid mess */
12 #ifndef _MSC_VER
13 const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
14 #endif
15 const GUID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
16
17 class CKsDataTypeHandler : public IKsDataTypeHandler
18 {
19 public:
20 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
21
22 STDMETHODIMP_(ULONG) AddRef()
23 {
24 InterlockedIncrement(&m_Ref);
25 return m_Ref;
26 }
27 STDMETHODIMP_(ULONG) Release()
28 {
29 InterlockedDecrement(&m_Ref);
30
31 if (!m_Ref)
32 {
33 delete this;
34 return 0;
35 }
36 return m_Ref;
37 }
38
39 HRESULT STDMETHODCALLTYPE KsCompleteIoOperation(IN OUT IMediaSample *Sample, IN OUT PVOID StreamHeader, IN KSIOOPERATION IoOperation, IN BOOL Cancelled);
40 HRESULT STDMETHODCALLTYPE KsIsMediaTypeInRanges(IN PVOID DataRanges);
41 HRESULT STDMETHODCALLTYPE KsPrepareIoOperation(IN OUT IMediaSample *Sample, IN OUT PVOID StreamHeader, IN KSIOOPERATION IoOperation);
42 HRESULT STDMETHODCALLTYPE KsQueryExtendedSize(OUT ULONG* ExtendedSize);
43 HRESULT STDMETHODCALLTYPE KsSetMediaType(IN const AM_MEDIA_TYPE* AmMediaType);
44
45 CKsDataTypeHandler() : m_Ref(0){};
46 virtual ~CKsDataTypeHandler(){};
47
48 protected:
49 //CMediaType * m_Type;
50 LONG m_Ref;
51 };
52
53
54 HRESULT
55 STDMETHODCALLTYPE
56 CKsDataTypeHandler::QueryInterface(
57 IN REFIID refiid,
58 OUT PVOID* Output)
59 {
60 if (IsEqualGUID(refiid, IID_IUnknown) ||
61 IsEqualGUID(refiid, IID_IKsDataTypeHandler))
62 {
63 *Output = PVOID(this);
64 reinterpret_cast<IUnknown*>(*Output)->AddRef();
65 return NOERROR;
66 }
67 return E_NOINTERFACE;
68 }
69
70
71 HRESULT
72 STDMETHODCALLTYPE
73 CKsDataTypeHandler::KsCompleteIoOperation(
74 IN OUT IMediaSample *Sample,
75 IN OUT PVOID StreamHeader,
76 IN KSIOOPERATION IoOperation,
77 IN BOOL Cancelled)
78 {
79 return NOERROR;
80 }
81
82
83 HRESULT
84 STDMETHODCALLTYPE
85 CKsDataTypeHandler::KsIsMediaTypeInRanges(
86 IN PVOID DataRanges)
87 {
88 OutputDebugString("UNIMPLEMENTED\n");
89 return E_NOTIMPL;
90 }
91
92 HRESULT
93 STDMETHODCALLTYPE
94 CKsDataTypeHandler::KsPrepareIoOperation(
95 IN OUT IMediaSample *Sample,
96 IN OUT PVOID StreamHeader,
97 IN KSIOOPERATION IoOperation)
98 {
99 return NOERROR;
100 }
101
102 HRESULT
103 STDMETHODCALLTYPE
104 CKsDataTypeHandler::KsQueryExtendedSize(
105 OUT ULONG* ExtendedSize)
106 {
107 /* no header extension required */
108 *ExtendedSize = 0;
109
110 return NOERROR;
111 }
112
113 HRESULT
114 STDMETHODCALLTYPE
115 CKsDataTypeHandler::KsSetMediaType(
116 IN const AM_MEDIA_TYPE* AmMediaType)
117 {
118 #if 0
119 if (m_Type)
120 {
121 /* media type can only be set once */
122 return E_FAIL;
123 }
124 #endif
125
126 /*
127 * TODO: allocate CMediaType and copy parameters
128 */
129 OutputDebugString("UNIMPLEMENTED\n");
130 return E_NOTIMPL;
131 }
132
133 HRESULT
134 WINAPI
135 CKsDataTypeHandler_Constructor (
136 IUnknown * pUnkOuter,
137 REFIID riid,
138 LPVOID * ppv)
139 {
140 OutputDebugStringW(L"CKsDataTypeHandler_Constructor\n");
141
142 CKsDataTypeHandler * handler = new CKsDataTypeHandler();
143
144 if (!handler)
145 return E_OUTOFMEMORY;
146
147 if (FAILED(handler->QueryInterface(riid, ppv)))
148 {
149 /* not supported */
150 delete handler;
151 return E_NOINTERFACE;
152 }
153
154 return NOERROR;
155 }