#include <mmreg.h>\r
\r
\r
-class DsSFEnumMediaTypes: public IEnumMediaTypes {
-public:
- DsSFEnumMediaTypes(DsSourcePin* papa,ULONG pos=0);
- virtual ~DsSFEnumMediaTypes();
+class DsSFEnumMediaTypes: public IEnumMediaTypes {\r
+public:\r
+ DsSFEnumMediaTypes(DsSourcePin* papa,ULONG pos=0);\r
+ virtual ~DsSFEnumMediaTypes();\r
virtual HRESULT STDMETHODCALLTYPE Next(ULONG nummedia, AM_MEDIA_TYPE **pins,ULONG *fetched);\r
virtual HRESULT STDMETHODCALLTYPE Skip(ULONG numpin);\r
virtual HRESULT STDMETHODCALLTYPE Reset();\r
virtual HRESULT STDMETHODCALLTYPE Clone(IEnumMediaTypes **enuma);\r
- virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id,void ** object);
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID id,void ** object);\r
virtual ULONG STDMETHODCALLTYPE AddRef();\r
virtual ULONG STDMETHODCALLTYPE Release();\r
protected:\r
DsSourcePin* parent;\r
- ULONG curpos;
+ ULONG curpos;\r
volatile long refs;\r
};\r
\r
refs=0;\r
}\r
\r
-DsSFEnumMediaTypes::~DsSFEnumMediaTypes(){
- parent->Release();
-}
-\r
-HRESULT STDMETHODCALLTYPE DsSFEnumMediaTypes::Next(ULONG numpin, AM_MEDIA_TYPE **pins,ULONG *fetched) {
- int i;
-
- if (pins==NULL) return E_POINTER;
- if (numpin!=1 && fetched==NULL) return E_INVALIDARG;
- *fetched=0;
-
- for (i=0;(i<numpin);i++) {
- pins[i]=(AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
- if (parent->GetMediaType(curpos+i,pins[i])!=S_OK) return S_FALSE;
- curpos++;
- if (fetched!=NULL) (*fetched)++;
- }
- return S_OK;
-}
+DsSFEnumMediaTypes::~DsSFEnumMediaTypes(){\r
+ parent->Release();\r
+}\r
+\r
+HRESULT STDMETHODCALLTYPE DsSFEnumMediaTypes::Next(ULONG numpin, AM_MEDIA_TYPE **pins,ULONG *fetched) {\r
+ int i;\r
+\r
+ if (pins==NULL) return E_POINTER;\r
+ if (numpin!=1 && fetched==NULL) return E_INVALIDARG;\r
+ *fetched=0;\r
+\r
+ for (i=0;(i<numpin);i++) {\r
+ pins[i]=(AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));\r
+ if (parent->GetMediaType(curpos+i,pins[i])!=S_OK) return S_FALSE;\r
+ curpos++;\r
+ if (fetched!=NULL) (*fetched)++;\r
+ }\r
+ return S_OK;\r
+}\r
\r
HRESULT STDMETHODCALLTYPE DsSFEnumMediaTypes::Skip(ULONG numpin){\r
curpos+=numpin;\r
return S_OK;\r
}\r
\r
-HRESULT STDMETHODCALLTYPE DsSFEnumMediaTypes::QueryInterface(REFIID id,void ** object){
- if (object==NULL) return E_POINTER;
- if (id==IID_IUnknown ||id == IID_IEnumMediaTypes) {
- *object=(IUnknown*)this;
- ((IUnknown*)object)->AddRef();
- return NOERROR;
- } else {
- *object=NULL;
- return E_NOINTERFACE;
- }
-}
-
-
+HRESULT STDMETHODCALLTYPE DsSFEnumMediaTypes::QueryInterface(REFIID id,void ** object){\r
+ if (object==NULL) return E_POINTER;\r
+ if (id==IID_IUnknown ||id == IID_IEnumMediaTypes) {\r
+ *object=(IUnknown*)this;\r
+ ((IUnknown*)object)->AddRef();\r
+ return NOERROR;\r
+ } else {\r
+ *object=NULL;\r
+ return E_NOINTERFACE;\r
+ }\r
+}\r
+\r
+\r
\r
ULONG STDMETHODCALLTYPE DsSFEnumMediaTypes::AddRef(){\r
InterlockedIncrement(&refs);\r
\r
}\r
\r
-HRESULT STDMETHODCALLTYPE DsSourcePin::QueryInterface(REFIID id,void ** object){
- if (object==NULL) return E_POINTER;
- if (id==IID_IUnknown) {
- *object=(IUnknown*)this;
- ((IUnknown*)object)->AddRef();
- return NOERROR;
- } else if (id==IID_IPin) {
- *object=(IPin*)this;
- ((IPin*)object)->AddRef();
- return NOERROR;
- } else {
- *object=NULL;
- return E_NOINTERFACE;
- }
-}
-
+HRESULT STDMETHODCALLTYPE DsSourcePin::QueryInterface(REFIID id,void ** object){\r
+ if (object==NULL) return E_POINTER;\r
+ if (id==IID_IUnknown) {\r
+ *object=(IUnknown*)this;\r
+ ((IUnknown*)object)->AddRef();\r
+ return NOERROR;\r
+ } else if (id==IID_IPin) {\r
+ *object=(IPin*)this;\r
+ ((IPin*)object)->AddRef();\r
+ return NOERROR;\r
+ } else {\r
+ *object=NULL;\r
+ return E_NOINTERFACE;\r
+ }\r
+}\r
+\r
ULONG STDMETHODCALLTYPE DsSourcePin::AddRef(){\r
return m_pFilter->AddRef();\r
\r
}else {\r
IEnumMediaTypes * emt;\r
EnumMediaTypes(&emt);\r
- AM_MEDIA_TYPE emtype_np;\r
AM_MEDIA_TYPE * emtype;\r
- emtype=&emtype_np;\r
ULONG fetched=0;\r
pinempf->AddRef();\r
while (emt->Next(1,&emtype,&fetched)==S_OK) {\r
connected=pinempf;\r
CopyMType(&medtype,emtype);\r
CoTaskMemFree(emtype->pbFormat);\r
+ CoTaskMemFree(emtype);\r
gotmt=true;\r
break;\r
}\r
\r
}\r
CoTaskMemFree(emtype->pbFormat);\r
+ CoTaskMemFree(emtype);\r
}\r
emt->Release();\r
if (gotmt==false) {\r
connected=pinempf;\r
CopyMType(&medtype,emtype);\r
CoTaskMemFree(emtype->pbFormat);\r
+ CoTaskMemFree(emtype);\r
gotmt=true;\r
break;\r
}\r
\r
}\r
CoTaskMemFree(emtype->pbFormat);\r
+ CoTaskMemFree(emtype);\r
}\r
emt->Release();\r
if (gotmt==false) {\r
else return S_FALSE;\r
}\r
HRESULT STDMETHODCALLTYPE DsSourcePin::EnumMediaTypes(IEnumMediaTypes **enuma){\r
-if (enuma==NULL) return E_POINTER;
- *enuma=new DsSFEnumMediaTypes( this);
- (*enuma)->AddRef();
- return S_OK;
+if (enuma==NULL) return E_POINTER;\r
+ *enuma=new DsSFEnumMediaTypes( this);\r
+ (*enuma)->AddRef();\r
+ return S_OK;\r
}\r
\r
HRESULT STDMETHODCALLTYPE DsSourcePin::QueryInternalConnections(IPin **pin,ULONG *numpin){\r
return VFW_E_NO_ALLOCATOR;\r
}\r
\r
-
+\r
HRESULT DsSourcePin::Run(REFERENCE_TIME reftime){\r
return NOERROR;\r
}\r
return S_OK;\r
}\r
\r
+\r