20 |
* along with this program ; if not, write to the Free Software |
* along with this program ; if not, write to the Free Software |
21 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 |
* |
* |
23 |
* $Id: CXvidDecoder.cpp,v 1.25 2010-12-22 15:21:13 Isibaar Exp $ |
* $Id: CXvidDecoder.cpp,v 1.28 2011-02-14 16:59:16 Isibaar Exp $ |
24 |
* |
* |
25 |
****************************************************************************/ |
****************************************************************************/ |
26 |
|
|
36 |
C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Debug |
C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Debug |
37 |
*/ |
*/ |
38 |
|
|
39 |
|
/* |
40 |
#define XVID_USE_MFT |
#define XVID_USE_MFT |
41 |
#define XVID_USE_TRAYICON |
#define XVID_USE_TRAYICON |
42 |
|
*/ |
43 |
|
|
44 |
#include <windows.h> |
#include <windows.h> |
45 |
|
|
89 |
{ &MEDIATYPE_Video, &CLSID_DIVX_UC }, |
{ &MEDIATYPE_Video, &CLSID_DIVX_UC }, |
90 |
{ &MEDIATYPE_Video, &CLSID_DX50 }, |
{ &MEDIATYPE_Video, &CLSID_DX50 }, |
91 |
{ &MEDIATYPE_Video, &CLSID_DX50_UC }, |
{ &MEDIATYPE_Video, &CLSID_DX50_UC }, |
92 |
|
{ &MEDIATYPE_Video, &CLSID_3IVX }, |
93 |
|
{ &MEDIATYPE_Video, &CLSID_3IVX_UC }, |
94 |
|
{ &MEDIATYPE_Video, &CLSID_3IV0 }, |
95 |
|
{ &MEDIATYPE_Video, &CLSID_3IV0_UC }, |
96 |
|
{ &MEDIATYPE_Video, &CLSID_3IV1 }, |
97 |
|
{ &MEDIATYPE_Video, &CLSID_3IV1_UC }, |
98 |
|
{ &MEDIATYPE_Video, &CLSID_3IV2 }, |
99 |
|
{ &MEDIATYPE_Video, &CLSID_3IV2_UC }, |
100 |
|
{ &MEDIATYPE_Video, &CLSID_LMP4 }, |
101 |
|
{ &MEDIATYPE_Video, &CLSID_LMP4_UC }, |
102 |
|
{ &MEDIATYPE_Video, &CLSID_RMP4 }, |
103 |
|
{ &MEDIATYPE_Video, &CLSID_RMP4_UC }, |
104 |
|
{ &MEDIATYPE_Video, &CLSID_SMP4 }, |
105 |
|
{ &MEDIATYPE_Video, &CLSID_SMP4_UC }, |
106 |
|
{ &MEDIATYPE_Video, &CLSID_HDX4 }, |
107 |
|
{ &MEDIATYPE_Video, &CLSID_HDX4_UC }, |
108 |
{ &MEDIATYPE_Video, &CLSID_MP4V }, |
{ &MEDIATYPE_Video, &CLSID_MP4V }, |
109 |
{ &MEDIATYPE_Video, &CLSID_MP4V_UC }, |
{ &MEDIATYPE_Video, &CLSID_MP4V_UC }, |
110 |
}; |
}; |
146 |
{ |
{ |
147 |
&CLSID_XVID, // Filter CLSID |
&CLSID_XVID, // Filter CLSID |
148 |
XVID_NAME_L, // Filter name |
XVID_NAME_L, // Filter name |
149 |
MERIT_PREFERRED, // Its merit |
MERIT_PREFERRED+2, // Its merit |
150 |
sizeof(psudPins) / sizeof(AMOVIESETUP_PIN), // Number of pins |
sizeof(psudPins) / sizeof(AMOVIESETUP_PIN), // Number of pins |
151 |
psudPins // Pin details |
psudPins // Pin details |
152 |
}; |
}; |
621 |
{ |
{ |
622 |
case FOURCC_mp4v: |
case FOURCC_mp4v: |
623 |
case FOURCC_MP4V: |
case FOURCC_MP4V: |
624 |
|
case FOURCC_lmp4 : |
625 |
|
case FOURCC_LMP4 : |
626 |
|
case FOURCC_rmp4 : |
627 |
|
case FOURCC_RMP4 : |
628 |
|
case FOURCC_smp4 : |
629 |
|
case FOURCC_SMP4 : |
630 |
|
case FOURCC_hdx4 : |
631 |
|
case FOURCC_HDX4 : |
632 |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
633 |
CloseLib(); |
CloseLib(); |
634 |
return VFW_E_TYPE_NOT_ACCEPTED; |
return VFW_E_TYPE_NOT_ACCEPTED; |
635 |
} |
} |
636 |
break; |
break; |
637 |
|
case FOURCC_divx : |
638 |
case FOURCC_DIVX : |
case FOURCC_DIVX : |
639 |
|
case FOURCC_dx50 : |
640 |
|
case FOURCC_DX50 : |
641 |
if (!(g_config.supported_4cc & SUPPORT_DIVX)) { |
if (!(g_config.supported_4cc & SUPPORT_DIVX)) { |
642 |
CloseLib(); |
CloseLib(); |
643 |
return VFW_E_TYPE_NOT_ACCEPTED; |
return VFW_E_TYPE_NOT_ACCEPTED; |
644 |
} |
} |
645 |
break; |
break; |
646 |
case FOURCC_DX50 : |
case FOURCC_3ivx : |
647 |
if (!(g_config.supported_4cc & SUPPORT_DX50)) { |
case FOURCC_3IVX : |
648 |
|
case FOURCC_3iv0 : |
649 |
|
case FOURCC_3IV0 : |
650 |
|
case FOURCC_3iv1 : |
651 |
|
case FOURCC_3IV1 : |
652 |
|
case FOURCC_3iv2 : |
653 |
|
case FOURCC_3IV2 : |
654 |
|
if (!(g_config.supported_4cc & SUPPORT_3IVX)) { |
655 |
CloseLib(); |
CloseLib(); |
656 |
return VFW_E_TYPE_NOT_ACCEPTED; |
return VFW_E_TYPE_NOT_ACCEPTED; |
657 |
} |
} |
658 |
|
case FOURCC_xvid : |
659 |
case FOURCC_XVID : |
case FOURCC_XVID : |
660 |
break; |
break; |
661 |
|
|
1370 |
bs_guid_table[i++] = (GUID *)&CLSID_XVID; |
bs_guid_table[i++] = (GUID *)&CLSID_XVID; |
1371 |
bs_guid_table[i++] = (GUID *)&CLSID_XVID_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_XVID_UC; |
1372 |
|
|
1373 |
if (g_config.supported_4cc & SUPPORT_DX50) { |
if (g_config.supported_4cc & SUPPORT_3IVX) { |
1374 |
bs_guid_table[i++] = (GUID *)&CLSID_DX50; |
bs_guid_table[i++] = (GUID *)&CLSID_3IVX; |
1375 |
bs_guid_table[i++] = (GUID *)&CLSID_DX50_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_3IVX_UC; |
1376 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV0; |
1377 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV0_UC; |
1378 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV1; |
1379 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV1_UC; |
1380 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV2; |
1381 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV2_UC; |
1382 |
} |
} |
1383 |
if (g_config.supported_4cc & SUPPORT_DIVX) { |
if (g_config.supported_4cc & SUPPORT_DIVX) { |
1384 |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX; |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX; |
1385 |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX_UC; |
1386 |
|
bs_guid_table[i++] = (GUID *)&CLSID_DX50; |
1387 |
|
bs_guid_table[i++] = (GUID *)&CLSID_DX50_UC; |
1388 |
} |
} |
1389 |
if (g_config.supported_4cc & SUPPORT_MP4V) { |
if (g_config.supported_4cc & SUPPORT_MP4V) { |
1390 |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V; |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V; |
1391 |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V_UC; |
1392 |
|
bs_guid_table[i++] = (GUID *)&CLSID_LMP4; |
1393 |
|
bs_guid_table[i++] = (GUID *)&CLSID_LMP4_UC; |
1394 |
|
bs_guid_table[i++] = (GUID *)&CLSID_RMP4; |
1395 |
|
bs_guid_table[i++] = (GUID *)&CLSID_RMP4_UC; |
1396 |
|
bs_guid_table[i++] = (GUID *)&CLSID_SMP4; |
1397 |
|
bs_guid_table[i++] = (GUID *)&CLSID_SMP4_UC; |
1398 |
|
bs_guid_table[i++] = (GUID *)&CLSID_HDX4; |
1399 |
|
bs_guid_table[i++] = (GUID *)&CLSID_HDX4_UC; |
1400 |
} |
} |
1401 |
|
|
1402 |
const GUID *subtype; |
const GUID *subtype; |
2196 |
hr = pmt->GetGUID(MF_MT_SUBTYPE, &subtype); |
hr = pmt->GetGUID(MF_MT_SUBTYPE, &subtype); |
2197 |
} |
} |
2198 |
|
|
2199 |
if (subtype == CLSID_MP4V || subtype == CLSID_MP4V_UC) { |
if (subtype == CLSID_MP4V || subtype == CLSID_MP4V_UC || |
2200 |
|
subtype == CLSID_LMP4 || subtype == CLSID_LMP4_UC || |
2201 |
|
subtype == CLSID_RMP4 || subtype == CLSID_RMP4_UC || |
2202 |
|
subtype == CLSID_SMP4 || subtype == CLSID_SMP4_UC || |
2203 |
|
subtype == CLSID_HDX4 || subtype == CLSID_HDX4_UC) { |
2204 |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
2205 |
CloseLib(); |
CloseLib(); |
2206 |
hr = MF_E_INVALIDTYPE; |
hr = MF_E_INVALIDTYPE; |
2215 |
else m_create.fourcc = FOURCC_DIVX; |
else m_create.fourcc = FOURCC_DIVX; |
2216 |
} |
} |
2217 |
else if (subtype == CLSID_DX50 || subtype == CLSID_DX50_UC) { |
else if (subtype == CLSID_DX50 || subtype == CLSID_DX50_UC) { |
2218 |
if (!(g_config.supported_4cc & SUPPORT_DX50)) { |
if (!(g_config.supported_4cc & SUPPORT_DIVX)) { |
2219 |
CloseLib(); |
CloseLib(); |
2220 |
hr = MF_E_INVALIDTYPE; |
hr = MF_E_INVALIDTYPE; |
2221 |
} |
} |
2222 |
else m_create.fourcc = FOURCC_DX50; |
else m_create.fourcc = FOURCC_DX50; |
2223 |
} |
} |
2224 |
|
else if (subtype == CLSID_3IVX || subtype == CLSID_3IVX_UC || |
2225 |
|
subtype == CLSID_3IV0 || subtype == CLSID_3IV0_UC || |
2226 |
|
subtype == CLSID_3IV1 || subtype == CLSID_3IV1_UC || |
2227 |
|
subtype == CLSID_3IV2 || subtype == CLSID_3IV2_UC) { |
2228 |
|
if (!(g_config.supported_4cc & SUPPORT_3IVX)) { |
2229 |
|
CloseLib(); |
2230 |
|
hr = MF_E_INVALIDTYPE; |
2231 |
|
} |
2232 |
|
else m_create.fourcc = FOURCC_3IVX; |
2233 |
|
} |
2234 |
else if (subtype == CLSID_XVID || subtype == CLSID_XVID_UC) { |
else if (subtype == CLSID_XVID || subtype == CLSID_XVID_UC) { |
2235 |
m_create.fourcc = FOURCC_XVID; |
m_create.fourcc = FOURCC_XVID; |
2236 |
} |
} |