]> git.vomp.tv Git - vompclient.git/blob - dssourcefilter.cc
Changes for demuxer. New mutex code
[vompclient.git] / dssourcefilter.cc
1 /*
2     Copyright 2004-2005 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20 #include "dssourcefilter.h"
21
22 DsSourceFilter::DsSourceFilter():CBaseFilter("Vomp Source Filter",NULL,&crit_sec,_uuidof(this))
23 {
24   //add audio pin
25   HRESULT res;
26   audiopin=new DsSourcePin(this,&crit_sec,&res,L"Vomp Audio Out",true);
27   videopin=new DsSourcePin(this,&crit_sec,&res,L"Vomp Video Out",false);
28
29 }
30
31 DsSourceFilter::~DsSourceFilter()
32 {
33   if (audiopin) delete audiopin;
34   if (videopin) delete videopin;
35 }
36
37 int DsSourceFilter::GetPinCount()
38 {
39   return 2; //audio and video
40 }
41
42 CBasePin *DsSourceFilter::GetPin(int n){
43   switch (n) {
44   case 0:
45     return audiopin;
46   case 1:
47     return videopin;
48   default:
49     return 0;
50   };
51 }
52
53 int DsSourceFilter::getCurrentAudioMediaSample(IMediaSample** ms)
54 {
55   if (!audiopin || !IsActive()) {
56     return 0;
57   }
58   if (audiopin->GetDeliveryBuffer(ms,NULL,NULL,0)!=S_OK) {
59     return 0;
60   }
61   return 1;
62 }
63
64 int DsSourceFilter::getCurrentVideoMediaSample(IMediaSample** ms)
65 {
66   if (!videopin || !IsActive()) {
67     return 0;
68   }
69   if (videopin->GetDeliveryBuffer(ms,NULL,NULL,0)!=S_OK) {
70     return 0;
71   }
72   return 1;
73 }
74
75 int DsSourceFilter::DeliverAudioMediaSample(IMediaSample* ms)
76 {
77   if (!audiopin || !IsActive()) {
78     ms->Release();
79     return 0;
80   }
81   if (audiopin->Deliver(ms)!=S_OK) {
82     ms->Release();
83     return 0;
84   }
85   ms->Release();
86   return 1;
87
88 }
89
90 int DsSourceFilter::DeliverVideoMediaSample(IMediaSample* ms)
91 {
92   if (!videopin || !IsActive()) {
93     ms->Release();
94     return 0;
95   }
96   if (videopin->Deliver(ms)!=S_OK) {
97     ms->Release();
98     return 0;
99   }
100   ms->Release();
101   return 1;
102
103 }