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 #pragma once 00033 #include <streams.h> 00034 #include <pullpin.h> 00035 #include <initguid.h> 00036 00037 //#ifdef DSFABSTRACTOGGVIDEODECODER_EXPORTS 00038 //#pragma message("----> Exporting from Abstract Video Library...") 00039 //#define ABS_VIDEO_DEC_API __declspec(dllexport) 00040 //#else 00041 //#pragma message("<---- Importing from Abstract Video Library...") 00042 //#define ABS_VIDEO_DEC_API __declspec(dllimport) 00043 //#endif 00044 00045 #ifdef LIBOOOGG_EXPORTS 00046 #define LIBOOOGG_API __declspec(dllexport) 00047 #else 00048 #define LIBOOOGG_API __declspec(dllimport) 00049 #endif 00050 00051 // {05187161-5C36-4324-A734-22BF37509F2D} 00052 DEFINE_GUID(CLSID_TheoraDecodeFilter, 00053 0x5187161, 0x5c36, 0x4324, 0xa7, 0x34, 0x22, 0xbf, 0x37, 0x50, 0x9f, 0x2d); 00054 00055 // {D124B2B1-8968-4ae8-B288-FE16EA34B0CE} 00056 DEFINE_GUID(MEDIASUBTYPE_Theora, 00057 0xd124b2b1, 0x8968, 0x4ae8, 0xb2, 0x88, 0xfe, 0x16, 0xea, 0x34, 0xb0, 0xce); 00058 00059 // {A99F116C-DFFA-412c-95DE-725F99874826} 00060 DEFINE_GUID(FORMAT_Theora, 00061 0xa99f116c, 0xdffa, 0x412c, 0x95, 0xde, 0x72, 0x5f, 0x99, 0x87, 0x48, 0x26); 00062 00063 const REGPINTYPES TheoraDecodeOutputTypes = { 00064 &MEDIATYPE_Video, 00065 &MEDIASUBTYPE_YV12 00066 }; 00067 00068 const REGPINTYPES TheoraDecodeInputTypes = { 00069 &MEDIATYPE_Video, 00070 &MEDIASUBTYPE_Theora 00071 }; 00072 const REGFILTERPINS TheoraDecodePinReg[] = { 00073 { 00074 L"Theora Input", //Name (obsoleted) 00075 FALSE, //Renders from this pin ?? Not sure about this. 00076 FALSE, //Not an output pin 00077 FALSE, //Cannot have zero instances of this pin 00078 FALSE, //Cannot have more than one instance of this pin 00079 NULL, //Connects to filter (obsoleted) 00080 NULL, //Connects to pin (obsoleted) 00081 1, //upport two media type 00082 &TheoraDecodeInputTypes //Pointer to media type (Video/Theora) 00083 } , 00084 00085 { 00086 L"YV12 Output", //Name (obsoleted) 00087 FALSE, //Renders from this pin ?? Not sure about this. 00088 TRUE, //Is an output pin 00089 FALSE, //Cannot have zero instances of this pin 00090 FALSE, //Cannot have more than one instance of this pin 00091 NULL, //Connects to filter (obsoleted) 00092 NULL, //Connects to pin (obsoleted) 00093 1, //Only support one media type 00094 &TheoraDecodeOutputTypes //Pointer to media type (YV12) 00095 00096 } 00097 }; 00098 00099 00100 00101 const REGFILTER2 TheoraDecodeFilterReg = { 00102 1, 00103 MERIT_NORMAL, 00104 2, 00105 TheoraDecodePinReg 00106 00107 }; 00108 00109 00110 struct sTheoraFormatBlock { 00111 unsigned long theoraVersion; 00112 unsigned long outerFrameWidth; 00113 unsigned long outerFrameHeight; 00114 unsigned long pictureWidth; 00115 unsigned long pictureHeight; 00116 unsigned long frameRateNumerator; 00117 unsigned long frameRateDenominator; 00118 unsigned long aspectNumerator; 00119 unsigned long aspectDenominator; 00120 unsigned long maxKeyframeInterval; 00121 unsigned long targetBitrate; 00122 unsigned char targetQuality; 00123 unsigned char xOffset; 00124 unsigned char yOffset; 00125 unsigned char colourSpace; 00126 };