[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 const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x46}};
13 const GUID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
14 const GUID IID_IKsDataTypeHandler = {0x5FFBAA02, 0x49A3, 0x11D0, {0x9F, 0x36, 0x00, 0xAA, 0x00, 0xA2, 0x16, 0xA1}};
15 const GUID MEDIATYPE_Audio = {0x73647561, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
16
17
18 class CKsDataTypeHandler : public IKsDataTypeHandler
19 {
20 public:
21 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
22
23 STDMETHODIMP_(ULONG) AddRef()
24 {
25 InterlockedIncrement(&m_Ref);
26 return m_Ref;
27 }
28 STDMETHODIMP_(ULONG) Release()
29 {
30 InterlockedDecrement(&m_Ref);
31
32 if (!m_Ref)
33 {
34 delete this;
35 return 0;
36 }
37 return m_Ref;
38 }
39
40 HRESULT STDMETHODCALLTYPE KsCompleteIoOperation(IN OUT IMediaSample *Sample, IN OUT PVOID StreamHeader, IN KSIOOPERATION IoOperation, IN BOOL Cancelled);
41 HRESULT STDMETHODCALLTYPE KsIsMediaTypeInRanges(IN PVOID DataRanges);
42 HRESULT STDMETHODCALLTYPE KsPrepareIoOperation(IN OUT IMediaSample *Sample, IN OUT PVOID StreamHeader, IN KSIOOPERATION IoOperation);
43 HRESULT STDMETHODCALLTYPE KsQueryExtendedSize(OUT ULONG* ExtendedSize);
44 HRESULT STDMETHODCALLTYPE KsSetMediaType(IN const AM_MEDIA_TYPE* AmMediaType);
45
46 CKsDataTypeHandler() : m_Ref(0){};
47 virtual ~CKsDataTypeHandler(){};
48
49 protected:
50 //CMediaType * m_Type;
51 LONG m_Ref;
52 };
53
54
55 HRESULT
56 STDMETHODCALLTYPE
57 CKsDataTypeHandler::QueryInterface(
58 IN REFIID refiid,
59 OUT PVOID* Output)
60 {
61 if (IsEqualGUID(refiid, IID_IUnknown) ||
62 IsEqualGUID(refiid, IID_IKsDataTypeHandler))
63 {
64 *Output = PVOID(this);
65 reinterpret_cast<IUnknown*>(*Output)->AddRef();
66 return NOERROR;
67 }
68 return E_NOINTERFACE;
69 }
70
71
72 HRESULT
73 STDMETHODCALLTYPE
74 CKsDataTypeHandler::KsCompleteIoOperation(
75 IN OUT IMediaSample *Sample,
76 IN OUT PVOID StreamHeader,
77 IN KSIOOPERATION IoOperation,
78 IN BOOL Cancelled)
79 {
80 return NOERROR;
81 }
82
83
84 HRESULT
85 STDMETHODCALLTYPE
86 CKsDataTypeHandler::KsIsMediaTypeInRanges(
87 IN PVOID DataRanges)
88 {
89 OutputDebugString("UNIMPLEMENTED\n");
90 return E_NOTIMPL;
91 }
92
93 HRESULT
94 STDMETHODCALLTYPE
95 CKsDataTypeHandler::KsPrepareIoOperation(
96 IN OUT IMediaSample *Sample,
97 IN OUT PVOID StreamHeader,
98 IN KSIOOPERATION IoOperation)
99 {
100 return NOERROR;
101 }
102
103 HRESULT
104 STDMETHODCALLTYPE
105 CKsDataTypeHandler::KsQueryExtendedSize(
106 OUT ULONG* ExtendedSize)
107 {
108 /* no header extension required */
109 *ExtendedSize = 0;
110
111 return NOERROR;
112 }
113
114 HRESULT
115 STDMETHODCALLTYPE
116 CKsDataTypeHandler::KsSetMediaType(
117 IN const AM_MEDIA_TYPE* AmMediaType)
118 {
119 #if 0
120 if (m_Type)
121 {
122 /* media type can only be set once */
123 return E_FAIL;
124 }
125 #endif
126
127 /*
128 * TODO: allocate CMediaType and copy parameters
129 */
130 OutputDebugString("UNIMPLEMENTED\n");
131 return E_NOTIMPL;
132 }
133
134 HRESULT
135 WINAPI
136 CKsDataTypeHandler_Constructor (
137 IUnknown * pUnkOuter,
138 REFIID riid,
139 LPVOID * ppv)
140 {
141 CKsDataTypeHandler * handler = new CKsDataTypeHandler();
142
143 if (!handler)
144 return E_OUTOFMEMORY;
145
146 if (FAILED(handler->QueryInterface(riid, ppv)))
147 {
148 /* not supported */
149 delete handler;
150 return E_NOINTERFACE;
151 }
152
153 return NOERROR;
154 }