Mercurial > mplayer.hg
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; |