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 00034 00035 00036 #include <streams.h> 00037 #include <pullpin.h> 00038 #include <initguid.h> 00039 00040 #ifdef DSFDIRACENCODEFILTER_EXPORTS 00041 #define DSFDIRACENCODEFILTER_API __declspec(dllexport) 00042 #else 00043 #define DSFDIRACENCODEFILTER_API __declspec(dllimport) 00044 #endif 00045 00046 00047 00048 00049 struct sDiracFormatBlock { 00050 int chromaFormat; 00051 int width; 00052 int height; 00053 int frameRate; 00054 bool isInterlaced; 00055 bool isTopFieldFirst; 00056 00057 }; 00058 00059 // {855236D7-01D6-432e-9563-4D0A322B2FFB} 00060 DEFINE_GUID(CLSID_DiracEncodeFilter, 00061 0x855236d7, 0x1d6, 0x432e, 0x95, 0x63, 0x4d, 0xa, 0x32, 0x2b, 0x2f, 0xfb); 00062 00063 // {15B9B7CA-A7C0-448c-A68D-4D45A4137E38} 00064 DEFINE_GUID(MEDIASUBTYPE_Dirac, 00065 0x15b9b7ca, 0xa7c0, 0x448c, 0xa6, 0x8d, 0x4d, 0x45, 0xa4, 0x13, 0x7e, 0x38); 00066 00067 // {4D8CEB62-0F52-44d0-B1EB-4AD6B24EA62C} 00068 DEFINE_GUID(FORMAT_Dirac, 00069 0x4d8ceb62, 0xf52, 0x44d0, 0xb1, 0xeb, 0x4a, 0xd6, 0xb2, 0x4e, 0xa6, 0x2c); 00070 00071 00072 const REGPINTYPES DiracEncodeInputTypes = { 00073 &MEDIATYPE_Video, 00074 &MEDIASUBTYPE_YV12 00075 }; 00076 00077 const REGPINTYPES DiracEncodeOutputTypes = { 00078 &MEDIATYPE_Video, 00079 &MEDIASUBTYPE_Dirac 00080 }; 00081 00082 const REGFILTERPINS DiracEncodePinReg[] = { 00083 { 00084 L"YV12 Input", //Name (obsoleted) 00085 FALSE, //Renders from this pin ?? Not sure about this. 00086 FALSE, //Not an output pin 00087 FALSE, //Cannot have zero instances of this pin 00088 FALSE, //Cannot have more than one instance of this pin 00089 NULL, //Connects to filter (obsoleted) 00090 NULL, //Connects to pin (obsoleted) 00091 1, //upport two media type 00092 &DiracEncodeInputTypes //Pointer to media type (Video/VY12) 00093 } , 00094 00095 { 00096 L"Dirac Output", //Name (obsoleted) 00097 FALSE, //Renders from this pin ?? Not sure about this. 00098 TRUE, //Is an output pin 00099 FALSE, //Cannot have zero instances of this pin 00100 FALSE, //Cannot have more than one instance of this pin 00101 NULL, //Connects to filter (obsoleted) 00102 NULL, //Connects to pin (obsoleted) 00103 1, //Only support one media type 00104 &DiracEncodeOutputTypes //Pointer to media type (Audio/PCM) 00105 00106 } 00107 }; 00108 00109 00110 00111 const REGFILTER2 DiracEncodeFilterReg = { 00112 1, 00113 MERIT_NORMAL, 00114 2, 00115 DiracEncodePinReg 00116 00117 }; 00118 00119 00120 00121 00122 00123 // 00124 //#ifdef LIBOOOGG_EXPORTS 00125 //#define LIBOOOGG_API __declspec(dllexport) 00126 //#else 00127 //#define LIBOOOGG_API __declspec(dllimport) 00128 //#endif 00129 // 00131 //DEFINE_GUID(CLSID_PropsTheoraEncoder, 00132 //0x121ea765, 0x6d3f, 0x4519, 0x96, 0x86, 0xa0, 0xba, 0x6e, 0x52, 0x81, 0xa2); 00133 // 00135 //DEFINE_GUID(IID_ITheoraEncodeSettings, 00136 //0x4f063b3a, 0xb397, 0x4c22, 0xaf, 0xf4, 0x2f, 0x8d, 0xb9, 0x6d, 0x29, 0x2a); 00137 // 00139 //DEFINE_GUID(CLSID_TheoraEncodeFilter, 00140 //0x5c769985, 0xc3e1, 0x4f95, 0xbe, 0xe7, 0x11, 0x1, 0xc4, 0x65, 0xf5, 0xfc); 00141 // 00143 //DEFINE_GUID(MEDIASUBTYPE_Theora, 00144 //0xd124b2b1, 0x8968, 0x4ae8, 0xb2, 0x88, 0xfe, 0x16, 0xea, 0x34, 0xb0, 0xce); 00145 // 00147 //DEFINE_GUID(FORMAT_Theora, 00148 //0xa99f116c, 0xdffa, 0x412c, 0x95, 0xde, 0x72, 0x5f, 0x99, 0x87, 0x48, 0x26); 00149 // 00150 //const REGPINTYPES TheoraEncodeInputTypes = { 00151 // &MEDIATYPE_Video, 00152 // &MEDIASUBTYPE_YV12 00153 //}; 00154 // 00155 //const REGPINTYPES TheoraEncodeOutputTypes = { 00156 // &MEDIATYPE_Video, 00157 // &MEDIASUBTYPE_Theora 00158 //}; 00159 // 00160 //const REGFILTERPINS TheoraEncodePinReg[] = { 00161 // { 00162 // L"YV12 Input", //Name (obsoleted) 00163 // FALSE, //Renders from this pin ?? Not sure about this. 00164 // FALSE, //Not an output pin 00165 // FALSE, //Cannot have zero instances of this pin 00166 // FALSE, //Cannot have more than one instance of this pin 00167 // NULL, //Connects to filter (obsoleted) 00168 // NULL, //Connects to pin (obsoleted) 00169 // 1, //upport two media type 00170 // &TheoraEncodeInputTypes //Pointer to media type (Video/VY12) 00171 // } , 00172 // 00173 // { 00174 // L"Theora Output", //Name (obsoleted) 00175 // FALSE, //Renders from this pin ?? Not sure about this. 00176 // TRUE, //Is an output pin 00177 // FALSE, //Cannot have zero instances of this pin 00178 // FALSE, //Cannot have more than one instance of this pin 00179 // NULL, //Connects to filter (obsoleted) 00180 // NULL, //Connects to pin (obsoleted) 00181 // 1, //Only support one media type 00182 // &TheoraEncodeOutputTypes //Pointer to media type (Audio/PCM) 00183 // 00184 // } 00185 //}; 00186 // 00187 // 00188 // 00189 //const REGFILTER2 TheoraEncodeFilterReg = { 00190 // 1, 00191 // MERIT_NORMAL, 00192 // 2, 00193 // TheoraEncodePinReg 00194 // 00195 //}; 00196 // 00197 //struct sTheoraFormatBlock { 00198 // unsigned long theoraVersion; 00199 // unsigned long width; 00200 // unsigned long height; 00201 // unsigned long frameWidth; 00202 // unsigned long frameHeight; 00203 // unsigned long frameRateNumerator; 00204 // unsigned long frameRateDenominator; 00205 // unsigned long aspectNumerator; 00206 // unsigned long aspectDenominator; 00207 // unsigned long maxKeyframeInterval; 00208 // unsigned long targetBitrate; 00209 // unsigned char targetQuality; 00210 // unsigned char xOffset; 00211 // unsigned char yOffset; 00212 // unsigned char colourSpace; 00213 //}; 00214 //