FLACEncodeFilter.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 #include "stdafx.h"
00033 
00034 
00035 #include "FLACEncodeFilter.h"
00036 
00037 
00038 //COM Factory Template
00039 CFactoryTemplate g_Templates[] = 
00040 {
00041     { 
00042                 L"FLAC Encode Filter",                                  // Name
00043             &CLSID_FLACEncodeFilter,                            // CLSID
00044             FLACEncodeFilter::CreateInstance,           // Method to create an instance of MyComponent
00045         NULL,                                                                   // Initialization function
00046         NULL                                                                    // Set-up information (for filters)
00047     }
00048 
00049 };
00050 
00051 // Generic way of determining the number of items in the template
00052 int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]); 
00053 
00054 CUnknown* WINAPI FLACEncodeFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
00055 {
00056         //This routine is the COM implementation to create a new Filter
00057         FLACEncodeFilter *pNewObject = new FLACEncodeFilter();
00058     if (pNewObject == NULL) {
00059         *pHr = E_OUTOFMEMORY;
00060     }
00061         return pNewObject;
00062 } 
00063 
00064 FLACEncodeFilter::FLACEncodeFilter(void)
00065         :       AbstractTransformFilter(NAME("FLAC Encoder"), CLSID_FLACEncodeFilter)
00066 {
00067         bool locWasConstructed = ConstructPins();
00068 }
00069 
00070 FLACEncodeFilter::~FLACEncodeFilter(void)
00071 {
00072 }
00073 
00074 bool FLACEncodeFilter::ConstructPins() 
00075 {
00076         //Input         :       Audio / PCM / WaveFormatEx
00077         //Output        :       Audio / FLAC_1_0 / FLAC
00078 
00079         
00080         //Vector to hold our set of media types we want to accept.
00081         vector<CMediaType*> locAcceptableTypes;
00082 
00083         //Setup the media types for the output pin.
00084         CMediaType* locAcceptMediaType = new CMediaType(&MEDIATYPE_Audio);              //Deleted in pin destructor
00085         locAcceptMediaType->subtype = MEDIASUBTYPE_OggFLAC_1_0;
00086         locAcceptMediaType->formattype = FORMAT_FLAC;
00087         
00088         locAcceptableTypes.push_back(locAcceptMediaType);
00089 
00090         //Output pin must be done first because it's passed to the input pin.
00091         mOutputPin = new FLACEncodeOutputPin(this, m_pLock, locAcceptableTypes);                        //Deleted in base class destructor
00092 
00093         //Clear out the vector, now we've already passed it to the output pin.
00094         locAcceptableTypes.clear();
00095 
00096         //Setup the media Types for the input pin.
00097         locAcceptMediaType = NULL;
00098         locAcceptMediaType = new CMediaType(&MEDIATYPE_Audio);                  //Deleted by pin
00099 
00100         locAcceptMediaType->subtype = MEDIASUBTYPE_PCM;
00101         locAcceptMediaType->formattype = FORMAT_WaveFormatEx;
00102 
00103         locAcceptableTypes.push_back(locAcceptMediaType);
00104         
00105         mInputPin = new FLACEncodeInputPin(this, m_pLock, mOutputPin, locAcceptableTypes);      //Deleted in base class filter destructor.
00106         return true;
00107 
00108 }

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