annotate loader/dshow/DS_Filter.c @ 28820:0581bb91e78e

get rid of full_buffers variable, if the check it is used for is triggered something is seriously wrong and the ao will not work right anyway.
author reimar
date Fri, 06 Mar 2009 19:07:50 +0000
parents 0b21ffa03b9c
children eda346733b8c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9967
diff changeset
1 /*
18783
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15166
diff changeset
2 * Modified for use with MPlayer, detailed changelog at
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15166
diff changeset
3 * http://svn.mplayerhq.hu/mplayer/trunk/
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9967
diff changeset
4 */
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9967
diff changeset
5
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
6 #include "config.h"
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
7 #include "DS_Filter.h"
26999
0b21ffa03b9c Rename loader/driver.[ch] to loader/drv.[ch], otherwise loader/driver.h can
diego
parents: 25849
diff changeset
8 #include "drv.h"
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
9 #include "com.h"
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
10 #include <stdio.h>
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
11 #include <string.h>
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
12 #include <stdlib.h>
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
13 #include "win32.h" // printf macro
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
14
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
15 typedef long STDCALL (*GETCLASS) (const GUID*, const GUID*, void**);
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
16
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
17 #ifndef WIN32_LOADER
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
18 const GUID IID_IUnknown =
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
19 {
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
20 0x00000000, 0x0000, 0x0000,
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
21 {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
22 };
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
23 const GUID IID_IClassFactory =
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
24 {
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
25 0x00000001, 0x0000, 0x0000,
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
26 {0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
27 };
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
28
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
29 HRESULT STDCALL CoInitialize(LPVOID pvReserved);
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
30 void STDCALL CoUninitialize(void);
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
31 #endif
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
32
8292
9533c26c0806 avifile sync (mostly cosmetics)
arpi
parents: 7472
diff changeset
33 //void trapbug();
244
1c3029be6713 Setup_FS fix for directshow
arpi_esp
parents: 168
diff changeset
34
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
35 static void DS_Filter_Start(DS_Filter* This)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
36 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
37 HRESULT hr;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
38
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
39 //Debug printf("DS_Filter_Start(%p)\n", This);
8292
9533c26c0806 avifile sync (mostly cosmetics)
arpi
parents: 7472
diff changeset
40 hr = This->m_pFilter->vt->Run(This->m_pFilter, (REFERENCE_TIME)0);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
41 if (hr != 0)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
42 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
43 Debug printf("WARNING: m_Filter->Run() failed, error code %x\n", (int)hr);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
44 }
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
45 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
46
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
47 static void DS_Filter_Stop(DS_Filter* This)
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
48 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
49 if (This->m_pAll)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
50 {
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
51 //Debug printf("DS_Filter_Stop(%p)\n", This);
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
52 This->m_pFilter->vt->Stop(This->m_pFilter); // causes weird crash ??? FIXME
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
53 This->m_pAll->vt->Release((IUnknown*)This->m_pAll);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
54 This->m_pAll = 0;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
55 }
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
56 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
57
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
58 void DS_Filter_Destroy(DS_Filter* This)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
59 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
60 This->Stop(This);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
61
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
62 if (This->m_pOurInput)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
63 This->m_pOurInput->vt->Release((IUnknown*)This->m_pOurInput);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
64 if (This->m_pInputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
65 This->m_pInputPin->vt->Disconnect(This->m_pInputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
66 if (This->m_pOutputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
67 This->m_pOutputPin->vt->Disconnect(This->m_pOutputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
68 if (This->m_pFilter)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
69 This->m_pFilter->vt->Release((IUnknown*)This->m_pFilter);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
70 if (This->m_pOutputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
71 This->m_pOutputPin->vt->Release((IUnknown*)This->m_pOutputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
72 if (This->m_pInputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
73 This->m_pInputPin->vt->Release((IUnknown*)This->m_pInputPin);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
74 if (This->m_pImp)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
75 This->m_pImp->vt->Release((IUnknown*)This->m_pImp);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
76
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
77 if (This->m_pOurOutput)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
78 This->m_pOurOutput->vt->Release((IUnknown*)This->m_pOurOutput);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
79 if (This->m_pParentFilter)
3130
623cdb771e97 avifile sync. seems to some bugs fixed...
arpi
parents: 3056
diff changeset
80 This->m_pParentFilter->vt->Release((IUnknown*)This->m_pParentFilter);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
81 if (This->m_pSrcFilter)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
82 This->m_pSrcFilter->vt->Release((IUnknown*)This->m_pSrcFilter);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
83
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
84 // FIXME - we are still leaving few things allocated!
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
85 if (This->m_iHandle)
8292
9533c26c0806 avifile sync (mostly cosmetics)
arpi
parents: 7472
diff changeset
86 FreeLibrary((unsigned)This->m_iHandle);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
87
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
88 free(This);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
89
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
90 #ifdef WIN32_LOADER
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
91 CodecRelease();
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
92 #else
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
93 CoUninitialize();
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
94 #endif
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
95 }
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
96
22398
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
97 static HRESULT STDCALL DS_Filter_CopySample(void* pUserData,IMediaSample* pSample){
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
98 BYTE* pointer;
22398
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
99 int len;
25682
09f31d37d717 Remove another 2 useless casts
reimar
parents: 25680
diff changeset
100 SampleProcUserData* pData=pUserData;
22398
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
101 Debug printf("CopySample called(%p,%p)\n",pSample,pUserData);
25682
09f31d37d717 Remove another 2 useless casts
reimar
parents: 25680
diff changeset
102 if (pSample->vt->GetPointer(pSample, &pointer))
22398
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
103 return 1;
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
104 len = pSample->vt->GetActualDataLength(pSample);
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
105 if (len == 0)
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
106 len = pSample->vt->GetSize(pSample);//for iv50
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
107
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
108 pData->frame_pointer = pointer;
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
109 pData->frame_size = len;
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
110 /*
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
111 FILE* file=fopen("./uncompr.bmp", "wb");
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
112 char head[14]={0x42, 0x4D, 0x36, 0x10, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00};
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
113 *(int*)(&head[2])=len+0x36;
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
114 fwrite(head, 14, 1, file);
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
115 fwrite(&((VIDEOINFOHEADER*)me.type.pbFormat)->bmiHeader, sizeof(BITMAPINFOHEADER), 1, file);
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
116 fwrite(pointer, len, 1, file);
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
117 fclose(file);
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
118 */
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
119 return 0;
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
120 }
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
121
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
122 DS_Filter* DS_FilterCreate(const char* dllname, const GUID* id,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
123 AM_MEDIA_TYPE* in_fmt,
22398
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
124 AM_MEDIA_TYPE* out_fmt,SampleProcUserData* pUserData)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
125 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
126 int init = 0;
7472
c4434bdf6e51 tons of warning fixes, also some 10l bugfixes, including Dominik's PVA bug
arpi
parents: 7386
diff changeset
127 // char eb[250];
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
128 const char* em = NULL;
22304
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
129 MemAllocator* tempAll;
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
130 ALLOCATOR_PROPERTIES props,props1;
25677
b3f780273cb1 Remove a useless cast
reimar
parents: 24405
diff changeset
131 DS_Filter* This = malloc(sizeof(DS_Filter));
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
132 if (!This)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
133 return NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
134
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
135 #ifdef WIN32_LOADER
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
136 CodecAlloc();
9967
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
137 #else
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
138 CoInitialize(0L);
b0d1b415320c cygwin support patch by Sascha Sommer and some fixes by me
alex
parents: 8292
diff changeset
139 #endif
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
140
22304
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
141 /*
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
142 tempAll is not used anywhere.
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
143 MemAllocatorCreate() is called to ensure that RegisterComObject for IMemoryAllocator
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
144 will be called before possible call
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
145 to CoCreateInstance(...,&IID_IMemoryAllocator,...) from binary codec.
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
146 */
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
147 tempAll=MemAllocatorCreate();
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
148 This->m_pFilter = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
149 This->m_pInputPin = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
150 This->m_pOutputPin = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
151 This->m_pSrcFilter = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
152 This->m_pParentFilter = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
153 This->m_pOurInput = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
154 This->m_pOurOutput = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
155 This->m_pAll = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
156 This->m_pImp = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
157
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
158 This->Start = DS_Filter_Start;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
159 This->Stop = DS_Filter_Stop;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
160
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
161 for (;;)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
162 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
163 GETCLASS func;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
164 struct IClassFactory* factory = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
165 struct IUnknown* object = NULL;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
166 IEnumPins* enum_pins = 0;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
167 IPin* array[256];
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
168 ULONG fetched;
25679
12fcf17e83e0 Move variable declaration into block where it is used.
reimar
parents: 25678
diff changeset
169 HRESULT result;
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
170 unsigned int i;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
171
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
172 This->m_iHandle = LoadLibraryA(dllname);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
173 if (!This->m_iHandle)
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
174 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
175 em = "could not open DirectShow DLL";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
176 break;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
177 }
8292
9533c26c0806 avifile sync (mostly cosmetics)
arpi
parents: 7472
diff changeset
178 func = (GETCLASS)GetProcAddress((unsigned)This->m_iHandle, "DllGetClassObject");
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
179 if (!func)
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
180 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
181 em = "illegal or corrupt DirectShow DLL";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
182 break;
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
183 }
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
184 result = func(id, &IID_IClassFactory, (void*)&factory);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
185 if (result || !factory)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
186 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
187 em = "no such class object";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
188 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
189 }
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
190 result = factory->vt->CreateInstance(factory, 0, &IID_IUnknown, (void*)&object);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
191 factory->vt->Release((IUnknown*)factory);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
192 if (result || !object)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
193 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
194 em = "class factory failure";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
195 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
196 }
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
197 result = object->vt->QueryInterface(object, &IID_IBaseFilter, (void*)&This->m_pFilter);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
198 object->vt->Release((IUnknown*)object);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
199 if (result || !This->m_pFilter)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
200 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 6768
diff changeset
201 em = "object does not provide IBaseFilter interface";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
202 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
203 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
204 // enumerate pins
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
205 result = This->m_pFilter->vt->EnumPins(This->m_pFilter, &enum_pins);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
206 if (result || !enum_pins)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
207 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
208 em = "could not enumerate pins";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
209 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
210 }
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
211
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
212 enum_pins->vt->Reset(enum_pins);
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
213 result = enum_pins->vt->Next(enum_pins, (ULONG)256, (IPin**)array, &fetched);
8292
9533c26c0806 avifile sync (mostly cosmetics)
arpi
parents: 7472
diff changeset
214 Debug printf("Pins enumeration returned %ld pins, error is %x\n", fetched, (int)result);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
215
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
216 for (i = 0; i < fetched; i++)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
217 {
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
218 PIN_DIRECTION direction = -1;
25680
866022c27d67 Remove a cast useless since r24425.
reimar
parents: 25679
diff changeset
219 array[i]->vt->QueryDirection(array[i], &direction);
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
220 if (!This->m_pInputPin && direction == PINDIR_INPUT)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
221 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
222 This->m_pInputPin = array[i];
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
223 This->m_pInputPin->vt->AddRef((IUnknown*)This->m_pInputPin);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
224 }
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
225 if (!This->m_pOutputPin && direction == PINDIR_OUTPUT)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
226 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
227 This->m_pOutputPin = array[i];
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
228 This->m_pOutputPin->vt->AddRef((IUnknown*)This->m_pOutputPin);
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
229 }
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
230 array[i]->vt->Release((IUnknown*)(array[i]));
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
231 }
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
232 if (!This->m_pInputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
233 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
234 em = "could not find input pin";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
235 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
236 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
237 if (!This->m_pOutputPin)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
238 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
239 em = "could not find output pin";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
240 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
241 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
242 result = This->m_pInputPin->vt->QueryInterface((IUnknown*)This->m_pInputPin,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
243 &IID_IMemInputPin,
24405
3758413ca0c6 Fix for:
voroshil
parents: 22398
diff changeset
244 (void*)&This->m_pImp);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
245 if (result)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
246 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
247 em = "could not get IMemInputPin interface";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
248 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
249 }
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
250
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
251 This->m_pOurType = in_fmt;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
252 This->m_pDestType = out_fmt;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
253 result = This->m_pInputPin->vt->QueryAccept(This->m_pInputPin, This->m_pOurType);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
254 if (result)
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
255 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
256 em = "source format is not accepted";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
257 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
258 }
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
259 This->m_pParentFilter = CBaseFilter2Create();
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
260 This->m_pSrcFilter = CBaseFilterCreate(This->m_pOurType, This->m_pParentFilter);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
261 This->m_pOurInput = This->m_pSrcFilter->GetPin(This->m_pSrcFilter);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
262 This->m_pOurInput->vt->AddRef((IUnknown*)This->m_pOurInput);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
263
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
264 result = This->m_pInputPin->vt->ReceiveConnection(This->m_pInputPin,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
265 This->m_pOurInput,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
266 This->m_pOurType);
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
267 if (result)
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
268 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
269 em = "could not connect to input pin";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
270 break;
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
271 }
22304
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
272 result = This->m_pImp->vt->GetAllocator(This->m_pImp, &This->m_pAll);
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
273 if (result || !This->m_pAll)
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
274 {
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
275 em="error getting IMemAllocator interface";
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
276 break;
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
277 }
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
278
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
279 //Seting allocator property according to our media type
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
280 props.cBuffers=1;
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
281 props.cbBuffer=This->m_pOurType->lSampleSize;
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
282 props.cbAlign=1;
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
283 props.cbPrefix=0;
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
284 This->m_pAll->vt->SetProperties(This->m_pAll, &props, &props1);
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
285
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
286 //Notify remote pin about choosed allocator
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
287 This->m_pImp->vt->NotifyAllocator(This->m_pImp, This->m_pAll, 0);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
288
22398
49f01f8fbd60 Rework of copying samples from directshow codecs.
voroshil
parents: 22304
diff changeset
289 This->m_pOurOutput = COutputPinCreate(This->m_pDestType,DS_Filter_CopySample,pUserData);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
290
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
291 result = This->m_pOutputPin->vt->ReceiveConnection(This->m_pOutputPin,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
292 (IPin*) This->m_pOurOutput,
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
293 This->m_pDestType);
713
9355b2ae634e avifile-0.6-CVS merge
arpi_esp
parents: 342
diff changeset
294 if (result)
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
295 {
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
296 em = "could not connect to output pin";
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
297 break;
1545
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
298 }
da26060c81ef big avifile sync - from now we have common code
arpi
parents: 1525
diff changeset
299
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
300 init++;
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
301 break;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
302 }
22304
254733f57707 Fixed loading of VoxWare and wma9sp binary audio codecs using dshow engine.
voroshil
parents: 18783
diff changeset
303 tempAll->vt->Release(tempAll);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
304
3467
e3bbf44dbab2 avifile sync
arpi
parents: 3130
diff changeset
305 if (!init)
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
306 {
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
307 DS_Filter_Destroy(This);
25678
ebf1c7d24ca2 Remove result from warning string, it has no useful meaning here.
reimar
parents: 25677
diff changeset
308 printf("Warning: DS_Filter() %s. (DLL=%.200s)\n", em, dllname);
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
309 This = 0;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
310 }
3056
213b35f84cf3 C++ -> C (import from avifile cvs)
arpi
parents: 2580
diff changeset
311 return This;
168
bdc4a8fc04d8 Initial revision
arpi_esp
parents:
diff changeset
312 }