00001 //=========================================================================== 00002 //Copyright (C) 2003, 2004 Zentaro Kavanagh 00003 // 00004 //Copyright (C) 2003, 2004 Commonwealth Scientific and Industrial Research 00005 // Organisation (CSIRO) Australia 00006 // 00007 //Redistribution and use in source and binary forms, with or without 00008 //modification, are permitted provided that the following conditions 00009 //are met: 00010 // 00011 //- Redistributions of source code must retain the above copyright 00012 // notice, this list of conditions and the following disclaimer. 00013 // 00014 //- Redistributions in binary form must reproduce the above copyright 00015 // notice, this list of conditions and the following disclaimer in the 00016 // documentation and/or other materials provided with the distribution. 00017 // 00018 //- Neither the name of Zentaro Kavanagh nor the names of contributors 00019 // may be used to endorse or promote products derived from this software 00020 // without specific prior written permission. 00021 // 00022 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00023 //``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00024 //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00025 //PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ORGANISATION OR 00026 //CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00027 //EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00028 //PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00029 //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00030 //LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00031 //NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00032 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 //=========================================================================== 00034 00035 #include "stdafx.h" 00036 #include "AnxDemuxSourceFilter.h" 00037 00038 #include <libOOOggSeek/AutoAnxSeekTable.h> 00039 00040 00041 //------------------- 00042 // This template lets the Object factory create us properly and work with COM infrastructure. 00043 CFactoryTemplate g_Templates[] = 00044 { 00045 { 00046 L"AnxDemuxFilter", // Name 00047 &CLSID_AnxDemuxSourceFilter, // CLSID 00048 AnxDemuxSourceFilter::CreateInstance, // Method to create an instance of MyComponent 00049 NULL, // Initialization function 00050 NULL // Set-up information (for filters) 00051 } 00052 00053 }; 00054 00055 // Generic way of determining the number of items in the template 00056 int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]); 00057 00058 00059 00060 CUnknown* WINAPI AnxDemuxSourceFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 00061 { 00062 AnxDemuxSourceFilter *pNewObject = new AnxDemuxSourceFilter(); 00063 if (pNewObject == NULL) { 00064 *pHr = E_OUTOFMEMORY; 00065 } 00066 return pNewObject; 00067 } 00068 AnxDemuxSourceFilter::AnxDemuxSourceFilter(void) 00069 : OggDemuxSourceFilter(CLSID_AnxDemuxSourceFilter) 00070 { 00071 mStreamMapper = new AnxStreamMapper(this); 00072 //anxDebug.open("G:\\logs\\anxdemux.log", ios_base::out); 00073 } 00074 00075 AnxDemuxSourceFilter::~AnxDemuxSourceFilter(void) 00076 { 00077 //anxDebug<<"Deconstructing anx filter"<<endl; 00078 } 00079 00080 00081 //ANX::: Seek table will need modifying to handle this. 00082 STDMETHODIMP AnxDemuxSourceFilter::Load(LPCOLESTR inFileName, const AM_MEDIA_TYPE* inMediaType) { 00083 //Initialise the file here and setup all the streams 00084 CAutoLock locLock(m_pLock); 00085 00086 00087 mFileName = inFileName; 00088 00089 //WARNING::: This nasty hack is to account for the fact that directshow doesn't know how to 00090 // properly parse url's given to it... because it does a dumb string match for extension at the end of the file, 00091 // urls with fragments or queries, won't match the extension... so this hack is for the ff plug-in so 00092 // that it appends another .anx after the fragment/query, which is stripped off here, before sending to the 00093 // server. 00094 if (mFileName.find(L"?") != string::npos){ 00095 mFileName = mFileName.substr(0, mFileName.size() - 4); 00096 00097 } 00098 00099 00100 00101 //ANX::: Needs to override ??? Or just modify the seeker. 00102 mSeekTable = new AutoAnxSeekTable(StringHelper::toNarrowStr(mFileName)); 00103 00104 //anxDebug<<"After seek table instantiation"<<endl; 00105 mSeekTable->buildTable(); 00106 //anxDebug<<"After build table..."<<endl; 00107 //debugLog<<"After build table"<<endl; 00108 return SetUpPins(); 00109 }