comparison loader/dshow/inputpin.c @ 3467:e3bbf44dbab2

avifile sync
author arpi
date Tue, 11 Dec 2001 23:29:24 +0000
parents 623cdb771e97
children 174e2a58b4cd
comparison
equal deleted inserted replaced
3466:b6caac381405 3467:e3bbf44dbab2
15 ***********/ 15 ***********/
16 16
17 typedef struct 17 typedef struct
18 { 18 {
19 IEnumPins_vt* vt; 19 IEnumPins_vt* vt;
20 DECLARE_IUNKNOWN();
20 IPin* pin1; 21 IPin* pin1;
21 IPin* pin2; 22 IPin* pin2;
22 int counter; 23 int counter;
23 GUID interfaces[2]; 24 GUID interfaces[2];
24 DECLARE_IUNKNOWN();
25 } CEnumPins; 25 } CEnumPins;
26 26
27 static long STDCALL CEnumPins_Next(IEnumPins* This, 27 static long STDCALL CEnumPins_Next(IEnumPins* This,
28 /* [in] */ unsigned long cMediaTypes, 28 /* [in] */ unsigned long cMediaTypes,
29 /* [size_is][out] */ IPin** ppMediaTypes, 29 /* [size_is][out] */ IPin** ppMediaTypes,
99 99
100 static CEnumPins* CEnumPinsCreate(IPin* p, IPin* pp) 100 static CEnumPins* CEnumPinsCreate(IPin* p, IPin* pp)
101 { 101 {
102 CEnumPins* This = (CEnumPins*) malloc(sizeof(CEnumPins)); 102 CEnumPins* This = (CEnumPins*) malloc(sizeof(CEnumPins));
103 103
104 if (!This)
105 return NULL;
106
107 This->refcount = 1;
104 This->pin1 = p; 108 This->pin1 = p;
105 This->pin2 = pp; 109 This->pin2 = pp;
106 This->counter = 0; 110 This->counter = 0;
107 This->refcount = 1;
108 111
109 This->vt = (IEnumPins_vt*) malloc(sizeof(IEnumPins_vt)); 112 This->vt = (IEnumPins_vt*) malloc(sizeof(IEnumPins_vt));
113 if (!This->vt)
114 {
115 free(This);
116 return NULL;
117 }
110 This->vt->QueryInterface = CEnumPins_QueryInterface; 118 This->vt->QueryInterface = CEnumPins_QueryInterface;
111 This->vt->AddRef = CEnumPins_AddRef; 119 This->vt->AddRef = CEnumPins_AddRef;
112 This->vt->Release = CEnumPins_Release; 120 This->vt->Release = CEnumPins_Release;
113 This->vt->Next = CEnumPins_Next; 121 This->vt->Next = CEnumPins_Next;
114 This->vt->Skip = CEnumPins_Skip; 122 This->vt->Skip = CEnumPins_Skip;
259 267
260 CInputPin* CInputPinCreate(CBaseFilter* p, const AM_MEDIA_TYPE* amt) 268 CInputPin* CInputPinCreate(CBaseFilter* p, const AM_MEDIA_TYPE* amt)
261 { 269 {
262 CInputPin* This = (CInputPin*) malloc(sizeof(CInputPin)); 270 CInputPin* This = (CInputPin*) malloc(sizeof(CInputPin));
263 271
272 if (!This)
273 return NULL;
274
275 This->refcount = 1;
264 This->parent = p; 276 This->parent = p;
265 This->refcount = 1;
266 This->type = *amt; 277 This->type = *amt;
267 278
268 This->vt= (IPin_vt*) malloc(sizeof(IPin_vt)); 279 This->vt= (IPin_vt*) malloc(sizeof(IPin_vt));
280
281 if (!This->vt)
282 {
283 free(This);
284 return NULL;
285 }
286
269 This->vt->QueryInterface = CInputPin_QueryInterface; 287 This->vt->QueryInterface = CInputPin_QueryInterface;
270 This->vt->AddRef = CInputPin_AddRef; 288 This->vt->AddRef = CInputPin_AddRef;
271 This->vt->Release = CInputPin_Release; 289 This->vt->Release = CInputPin_Release;
272 This->vt->Connect = CInputPin_Connect; 290 This->vt->Connect = CInputPin_Connect;
273 This->vt->ReceiveConnection = CInputPin_ReceiveConnection; 291 This->vt->ReceiveConnection = CInputPin_ReceiveConnection;
393 return This->unused_pin; 411 return This->unused_pin;
394 } 412 }
395 413
396 static void CBaseFilter_Destroy(CBaseFilter* This) 414 static void CBaseFilter_Destroy(CBaseFilter* This)
397 { 415 {
398 free(This->vt); 416 if (This->vt)
399 This->pin->vt->Release((IUnknown*)This->pin); 417 free(This->vt);
400 This->unused_pin->vt->Release((IUnknown*)This->unused_pin); 418 if (This->pin)
419 This->pin->vt->Release((IUnknown*)This->pin);
420 if (This->unused_pin)
421 This->unused_pin->vt->Release((IUnknown*)This->unused_pin);
401 free(This); 422 free(This);
402 } 423 }
403 424
404 IMPLEMENT_IUNKNOWN(CBaseFilter) 425 IMPLEMENT_IUNKNOWN(CBaseFilter)
405 426
406 CBaseFilter* CBaseFilterCreate(const AM_MEDIA_TYPE* type, CBaseFilter2* parent) 427 CBaseFilter* CBaseFilterCreate(const AM_MEDIA_TYPE* type, CBaseFilter2* parent)
407 { 428 {
408 CBaseFilter* This = (CBaseFilter*) malloc(sizeof(CBaseFilter)); 429 CBaseFilter* This = (CBaseFilter*) malloc(sizeof(CBaseFilter));
430 if (!This)
431 return NULL;
432
409 This->refcount = 1; 433 This->refcount = 1;
410 434
411 This->pin = (IPin*) CInputPinCreate(This, type); 435 This->pin = (IPin*) CInputPinCreate(This, type);
412 This->unused_pin = (IPin*) CRemotePinCreate(This, parent->GetPin(parent)); 436 This->unused_pin = (IPin*) CRemotePinCreate(This, parent->GetPin(parent));
413 437
414 This->vt = (IBaseFilter_vt*) malloc(sizeof(IBaseFilter_vt)); 438 This->vt = (IBaseFilter_vt*) malloc(sizeof(IBaseFilter_vt));
439 if (!This->vt || !This->pin || !This->unused_pin)
440 {
441 CBaseFilter_Destroy(This);
442 return NULL;
443 }
444
415 This->vt->QueryInterface = CBaseFilter_QueryInterface; 445 This->vt->QueryInterface = CBaseFilter_QueryInterface;
416 This->vt->AddRef = CBaseFilter_AddRef; 446 This->vt->AddRef = CBaseFilter_AddRef;
417 This->vt->Release = CBaseFilter_Release; 447 This->vt->Release = CBaseFilter_Release;
418 This->vt->GetClassID = CBaseFilter_GetClassID; 448 This->vt->GetClassID = CBaseFilter_GetClassID;
419 This->vt->Stop = CBaseFilter_Stop; 449 This->vt->Stop = CBaseFilter_Stop;
539 } 569 }
540 570
541 static void CBaseFilter2_Destroy(CBaseFilter2* This) 571 static void CBaseFilter2_Destroy(CBaseFilter2* This)
542 { 572 {
543 Debug printf("CBaseFilter2_Destroy(%p) called\n", This); 573 Debug printf("CBaseFilter2_Destroy(%p) called\n", This);
544 This->pin->vt->Release((IUnknown*) This->pin); 574 if (This->pin)
545 free(This->vt); 575 This->pin->vt->Release((IUnknown*) This->pin);
576 if (This->vt)
577 free(This->vt);
546 free(This); 578 free(This);
547 } 579 }
548 580
549 IMPLEMENT_IUNKNOWN(CBaseFilter2) 581 IMPLEMENT_IUNKNOWN(CBaseFilter2)
550 582
557 589
558 CBaseFilter2* CBaseFilter2Create() 590 CBaseFilter2* CBaseFilter2Create()
559 { 591 {
560 CBaseFilter2* This = (CBaseFilter2*) malloc(sizeof(CBaseFilter2)); 592 CBaseFilter2* This = (CBaseFilter2*) malloc(sizeof(CBaseFilter2));
561 593
594 if (!This)
595 return NULL;
596
562 This->refcount = 1; 597 This->refcount = 1;
563 This->pin = (IPin*) CRemotePin2Create(This); 598 This->pin = (IPin*) CRemotePin2Create(This);
564 599
565 This->vt = (IBaseFilter_vt*) malloc(sizeof(IBaseFilter_vt)); 600 This->vt = (IBaseFilter_vt*) malloc(sizeof(IBaseFilter_vt));
601
602 if (!This->pin || !This->vt)
603 {
604 CBaseFilter2_Destroy(This);
605 return NULL;
606 }
607
566 memset(This->vt, 0, sizeof(IBaseFilter_vt)); 608 memset(This->vt, 0, sizeof(IBaseFilter_vt));
567 This->vt->QueryInterface = CBaseFilter2_QueryInterface; 609 This->vt->QueryInterface = CBaseFilter2_QueryInterface;
568 This->vt->AddRef = CBaseFilter2_AddRef; 610 This->vt->AddRef = CBaseFilter2_AddRef;
569 This->vt->Release = CBaseFilter2_Release; 611 This->vt->Release = CBaseFilter2_Release;
570 This->vt->GetClassID = CBaseFilter2_GetClassID; 612 This->vt->GetClassID = CBaseFilter2_GetClassID;
644 IMPLEMENT_IUNKNOWN(CRemotePin) 686 IMPLEMENT_IUNKNOWN(CRemotePin)
645 687
646 CRemotePin* CRemotePinCreate(CBaseFilter* pt, IPin* rpin) 688 CRemotePin* CRemotePinCreate(CBaseFilter* pt, IPin* rpin)
647 { 689 {
648 CRemotePin* This = (CRemotePin*) malloc(sizeof(CRemotePin)); 690 CRemotePin* This = (CRemotePin*) malloc(sizeof(CRemotePin));
691
692 if (!This)
693 return NULL;
694
649 Debug printf("CRemotePinCreate() called -> %p\n", This); 695 Debug printf("CRemotePinCreate() called -> %p\n", This);
650 696
651 This->parent = pt; 697 This->parent = pt;
652 This->remote_pin = rpin; 698 This->remote_pin = rpin;
653 This->refcount = 1; 699 This->refcount = 1;
654 700
655 This->vt = (IPin_vt*) malloc(sizeof(IPin_vt)); 701 This->vt = (IPin_vt*) malloc(sizeof(IPin_vt));
702
703 if (!This->vt)
704 {
705 free(This);
706 return NULL;
707 }
708
656 memset(This->vt, 0, sizeof(IPin_vt)); 709 memset(This->vt, 0, sizeof(IPin_vt));
657 This->vt->QueryInterface = CRemotePin_QueryInterface; 710 This->vt->QueryInterface = CRemotePin_QueryInterface;
658 This->vt->AddRef = CRemotePin_AddRef; 711 This->vt->AddRef = CRemotePin_AddRef;
659 This->vt->Release = CRemotePin_Release; 712 This->vt->Release = CRemotePin_Release;
660 This->vt->QueryDirection = CRemotePin_QueryDirection; 713 This->vt->QueryDirection = CRemotePin_QueryDirection;
696 IMPLEMENT_IUNKNOWN(CRemotePin2) 749 IMPLEMENT_IUNKNOWN(CRemotePin2)
697 750
698 CRemotePin2* CRemotePin2Create(CBaseFilter2* p) 751 CRemotePin2* CRemotePin2Create(CBaseFilter2* p)
699 { 752 {
700 CRemotePin2* This = (CRemotePin2*) malloc(sizeof(CRemotePin2)); 753 CRemotePin2* This = (CRemotePin2*) malloc(sizeof(CRemotePin2));
754
755 if (!This)
756 return NULL;
757
701 Debug printf("CRemotePin2Create() called -> %p\n", This); 758 Debug printf("CRemotePin2Create() called -> %p\n", This);
702 759
703 This->parent = p; 760 This->parent = p;
704 This->refcount = 1; 761 This->refcount = 1;
705 762
706 This->vt = (IPin_vt*) malloc(sizeof(IPin_vt)); 763 This->vt = (IPin_vt*) malloc(sizeof(IPin_vt));
764
765 if (!This->vt)
766 {
767 free(This);
768 return NULL;
769 }
770
707 memset(This->vt, 0, sizeof(IPin_vt)); 771 memset(This->vt, 0, sizeof(IPin_vt));
708 This->vt->QueryInterface = CRemotePin2_QueryInterface; 772 This->vt->QueryInterface = CRemotePin2_QueryInterface;
709 This->vt->AddRef = CRemotePin2_AddRef; 773 This->vt->AddRef = CRemotePin2_AddRef;
710 This->vt->Release = CRemotePin2_Release; 774 This->vt->Release = CRemotePin2_Release;
711 This->vt->QueryPinInfo = CRemotePin2_QueryPinInfo; 775 This->vt->QueryPinInfo = CRemotePin2_QueryPinInfo;