00001 //=========================================================================== 00002 //Copyright (C) 2003, 2004 Zentaro Kavanagh 00003 // 00004 //Redistribution and use in source and binary forms, with or without 00005 //modification, are permitted provided that the following conditions 00006 //are met: 00007 // 00008 //- Redistributions of source code must retain the above copyright 00009 // notice, this list of conditions and the following disclaimer. 00010 // 00011 //- Redistributions in binary form must reproduce the above copyright 00012 // notice, this list of conditions and the following disclaimer in the 00013 // documentation and/or other materials provided with the distribution. 00014 // 00015 //- Neither the name of Zentaro Kavanagh nor the names of contributors 00016 // may be used to endorse or promote products derived from this software 00017 // without specific prior written permission. 00018 // 00019 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00020 //``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00021 //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00022 //PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ORGANISATION OR 00023 //CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00024 //EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00025 //PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00026 //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00027 //LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00028 //NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00029 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00030 //=========================================================================== 00031 00032 // 00033 // AbstractAudioDecodeFilter.cpp : Abstract Audio Decoder Filter Class 00034 // 00035 00036 00037 #include "stdafx.h" 00038 #include "abstractaudiodecodefilter.h" 00039 00040 //Constructors 00041 AbstractAudioDecodeFilter::AbstractAudioDecodeFilter(TCHAR* inFilterName, REFCLSID inFilterGUID, unsigned short inAudioFormat ) 00042 //Base Classes 00043 : CBaseFilter(inFilterName, NULL, m_pLock, inFilterGUID) 00044 00045 //Member initialisations 00046 , mAudioFormat(inAudioFormat) 00047 00048 { 00049 //Create the filter lock. 00050 m_pLock = new CCritSec; //Deleted in destructor... check what is happening in the base class. 00051 } 00052 00053 AbstractAudioDecodeFilter::~AbstractAudioDecodeFilter(void) 00054 { 00055 DestroyPins(); 00056 delete m_pLock; //Deleting filter lock 00057 } 00058 00059 void AbstractAudioDecodeFilter::DestroyPins() 00060 { 00061 delete mOutputPin; 00062 delete mInputPin; 00063 } 00064 00065 //If you want to handle an interface, do it here. 00066 STDMETHODIMP AbstractAudioDecodeFilter::NonDelegatingQueryInterface(REFIID riid, void **ppv) 00067 { 00068 return CBaseFilter::NonDelegatingQueryInterface(riid, ppv); 00069 } 00070 00071 CBasePin* AbstractAudioDecodeFilter::GetPin(int inPinNo) 00072 { 00073 //Pin Constants 00074 const int INPUT_PIN = 0; 00075 const int OUTPUT_PIN = 1; 00076 00077 //Return the pin. 00078 switch (inPinNo) { 00079 case INPUT_PIN: 00080 return mInputPin; 00081 case OUTPUT_PIN: 00082 return mOutputPin; 00083 default: 00084 return NULL; 00085 }; 00086 } 00087 00088 STDMETHODIMP AbstractAudioDecodeFilter::Stop() 00089 { 00090 //Hold the filter lock 00091 CAutoLock locLock(m_pLock); 00092 00093 //Reset the 00094 mInputPin->ResetFrameCount(); 00095 mInputPin->ResetTimeBases(); 00096 00097 return CBaseFilter::Stop(); 00098 } 00099 int AbstractAudioDecodeFilter::GetPinCount(void) 00100 { 00101 const long NUM_PINS = 2; 00102 return NUM_PINS; 00103 } 00104