AbstractAudioDecodeFilter.cpp

Go to the documentation of this file.
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 

Generated on Tue Feb 15 14:54:17 2005 for oggdsf by  doxygen 1.3.9