changeset 22307:68125c62b6eb

Fix loading of mpeg4ds direct show video codec under win32, broken in r22322
author voroshil
date Fri, 23 Feb 2007 16:30:10 +0000
parents e95af173a63b
children 9f5657a1dbf7
files loader/dshow/DS_VideoDecoder.c
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/loader/dshow/DS_VideoDecoder.c	Fri Feb 23 10:59:54 2007 +0000
+++ b/loader/dshow/DS_VideoDecoder.c	Fri Feb 23 16:30:10 2007 +0000
@@ -418,6 +418,7 @@
 int DS_VideoDecoder_SetDestFmt(DS_VideoDecoder *this, int bits, unsigned int csp)
 {
     HRESULT result;
+    ALLOCATOR_PROPERTIES props,props1;
     int should_test=1;
     int stoped = 0;   
     
@@ -609,6 +610,24 @@
 	printf("Error reconnecting input pin 0x%x\n", (int)result);
 	return -1;
     }
+
+    if(this->m_pDS_Filter->m_pAll)
+        this->m_pDS_Filter->m_pAll->vt->Release(this->m_pDS_Filter->m_pAll);
+    this->m_pDS_Filter->m_pAll=MemAllocatorCreate();
+    if (!this->m_pDS_Filter->m_pAll)
+    {
+        printf("Call to MemAllocatorCreate failed\n");
+        return -1;
+    }
+    //Seting allocator property according to our media type
+    props.cBuffers=1;
+    props.cbBuffer=this->m_sDestType.lSampleSize;
+    props.cbAlign=1;
+    props.cbPrefix=0;
+    this->m_pDS_Filter->m_pAll->vt->SetProperties(this->m_pDS_Filter->m_pAll, &props, &props1);
+    //Notify remote pin about choosed allocator
+    this->m_pDS_Filter->m_pImp->vt->NotifyAllocator(this->m_pDS_Filter->m_pImp, this->m_pDS_Filter->m_pAll, 0);
+
     result = this->m_pDS_Filter->m_pOutputPin->vt->ReceiveConnection(this->m_pDS_Filter->m_pOutputPin,
 							       (IPin *)this->m_pDS_Filter->m_pOurOutput,
 							       &this->m_sDestType);