3 |
* XVID MPEG-4 VIDEO CODEC |
* XVID MPEG-4 VIDEO CODEC |
4 |
* - Xvid Decoder part of the DShow Filter - |
* - Xvid Decoder part of the DShow Filter - |
5 |
* |
* |
6 |
* Copyright(C) 2002-2010 Peter Ross <pross@xvid.org> |
* Copyright(C) 2002-2011 Peter Ross <pross@xvid.org> |
7 |
* 2003-2010 Michael Militzer <michael@xvid.org> |
* 2003-2011 Michael Militzer <michael@xvid.org> |
8 |
* |
* |
9 |
* This program is free software ; you can redistribute it and/or modify |
* This program is free software ; you can redistribute it and/or modify |
10 |
* it under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
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.27 2011-01-27 13:18:01 Isibaar Exp $ |
* $Id$ |
24 |
* |
* |
25 |
****************************************************************************/ |
****************************************************************************/ |
26 |
|
|
36 |
C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Debug |
C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Debug |
37 |
*/ |
*/ |
38 |
|
|
39 |
/* |
#ifdef ENABLE_MFT |
40 |
#define XVID_USE_MFT |
#define XVID_USE_MFT |
41 |
#define XVID_USE_TRAYICON |
#endif |
|
*/ |
|
42 |
|
|
43 |
#include <windows.h> |
#include <windows.h> |
44 |
|
|
88 |
{ &MEDIATYPE_Video, &CLSID_DIVX_UC }, |
{ &MEDIATYPE_Video, &CLSID_DIVX_UC }, |
89 |
{ &MEDIATYPE_Video, &CLSID_DX50 }, |
{ &MEDIATYPE_Video, &CLSID_DX50 }, |
90 |
{ &MEDIATYPE_Video, &CLSID_DX50_UC }, |
{ &MEDIATYPE_Video, &CLSID_DX50_UC }, |
91 |
|
{ &MEDIATYPE_Video, &CLSID_3IVX }, |
92 |
|
{ &MEDIATYPE_Video, &CLSID_3IVX_UC }, |
93 |
|
{ &MEDIATYPE_Video, &CLSID_3IV0 }, |
94 |
|
{ &MEDIATYPE_Video, &CLSID_3IV0_UC }, |
95 |
|
{ &MEDIATYPE_Video, &CLSID_3IV1 }, |
96 |
|
{ &MEDIATYPE_Video, &CLSID_3IV1_UC }, |
97 |
|
{ &MEDIATYPE_Video, &CLSID_3IV2 }, |
98 |
|
{ &MEDIATYPE_Video, &CLSID_3IV2_UC }, |
99 |
|
{ &MEDIATYPE_Video, &CLSID_LMP4 }, |
100 |
|
{ &MEDIATYPE_Video, &CLSID_LMP4_UC }, |
101 |
|
{ &MEDIATYPE_Video, &CLSID_RMP4 }, |
102 |
|
{ &MEDIATYPE_Video, &CLSID_RMP4_UC }, |
103 |
|
{ &MEDIATYPE_Video, &CLSID_SMP4 }, |
104 |
|
{ &MEDIATYPE_Video, &CLSID_SMP4_UC }, |
105 |
|
{ &MEDIATYPE_Video, &CLSID_HDX4 }, |
106 |
|
{ &MEDIATYPE_Video, &CLSID_HDX4_UC }, |
107 |
{ &MEDIATYPE_Video, &CLSID_MP4V }, |
{ &MEDIATYPE_Video, &CLSID_MP4V }, |
108 |
{ &MEDIATYPE_Video, &CLSID_MP4V_UC }, |
{ &MEDIATYPE_Video, &CLSID_MP4V_UC }, |
109 |
}; |
}; |
175 |
/* note: g_cTemplates must be global; used by strmbase.lib(dllentry.cpp,dllsetup.cpp) */ |
/* note: g_cTemplates must be global; used by strmbase.lib(dllentry.cpp,dllsetup.cpp) */ |
176 |
int g_cTemplates = sizeof(g_Templates) / sizeof(CFactoryTemplate); |
int g_cTemplates = sizeof(g_Templates) / sizeof(CFactoryTemplate); |
177 |
|
|
|
#ifdef XVID_USE_TRAYICON |
|
178 |
extern HINSTANCE g_xvid_hInst; |
extern HINSTANCE g_xvid_hInst; |
179 |
|
|
180 |
static int GUI_Page = 0; |
static int GUI_Page = 0; |
216 |
|
|
217 |
return TRUE; /* ok */ |
return TRUE; /* ok */ |
218 |
} |
} |
|
#endif |
|
219 |
|
|
220 |
STDAPI DllRegisterServer() |
STDAPI DllRegisterServer() |
221 |
{ |
{ |
309 |
|
|
310 |
/* constructor */ |
/* constructor */ |
311 |
|
|
|
#define XVID_DLL_NAME "xvidcore.dll" |
|
|
|
|
312 |
CXvidDecoder::CXvidDecoder(LPUNKNOWN punk, HRESULT *phr) : |
CXvidDecoder::CXvidDecoder(LPUNKNOWN punk, HRESULT *phr) : |
313 |
CVideoTransformFilter(NAME("CXvidDecoder"), punk, CLSID_XVID), m_hdll (NULL) |
CVideoTransformFilter(TEXT("CXvidDecoder"), punk, CLSID_XVID), m_hdll (NULL) |
314 |
{ |
{ |
315 |
DPRINTF("Constructor"); |
DPRINTF("Constructor"); |
316 |
|
|
352 |
m_hdll = LoadLibrary(XVID_DLL_NAME); |
m_hdll = LoadLibrary(XVID_DLL_NAME); |
353 |
if (m_hdll == NULL) { |
if (m_hdll == NULL) { |
354 |
DPRINTF("dll load failed"); |
DPRINTF("dll load failed"); |
355 |
MessageBox(0, XVID_DLL_NAME " not found","Error", MB_TOPMOST); |
MessageBox(0, XVID_DLL_NAME TEXT(" not found"), TEXT("Error"), MB_TOPMOST); |
356 |
return E_FAIL; |
return E_FAIL; |
357 |
} |
} |
358 |
|
|
360 |
if (xvid_global_func == NULL) { |
if (xvid_global_func == NULL) { |
361 |
FreeLibrary(m_hdll); |
FreeLibrary(m_hdll); |
362 |
m_hdll = NULL; |
m_hdll = NULL; |
363 |
MessageBox(0, "xvid_global() not found", "Error", MB_TOPMOST); |
MessageBox(0, TEXT("xvid_global() not found"), TEXT("Error"), MB_TOPMOST); |
364 |
return E_FAIL; |
return E_FAIL; |
365 |
} |
} |
366 |
|
|
369 |
xvid_global_func = NULL; |
xvid_global_func = NULL; |
370 |
FreeLibrary(m_hdll); |
FreeLibrary(m_hdll); |
371 |
m_hdll = NULL; |
m_hdll = NULL; |
372 |
MessageBox(0, "xvid_decore() not found", "Error", MB_TOPMOST); |
MessageBox(0, TEXT("xvid_decore() not found"), TEXT("Error"), MB_TOPMOST); |
373 |
return E_FAIL; |
return E_FAIL; |
374 |
} |
} |
375 |
|
|
379 |
xvid_decore_func = NULL; |
xvid_decore_func = NULL; |
380 |
FreeLibrary(m_hdll); |
FreeLibrary(m_hdll); |
381 |
m_hdll = NULL; |
m_hdll = NULL; |
382 |
MessageBox(0, "xvid_global() failed", "Error", MB_TOPMOST); |
MessageBox(0, TEXT("xvid_global() failed"), TEXT("Error"), MB_TOPMOST); |
383 |
return E_FAIL; |
return E_FAIL; |
384 |
} |
} |
385 |
|
|
389 |
xvid_decore_func = NULL; |
xvid_decore_func = NULL; |
390 |
FreeLibrary(m_hdll); |
FreeLibrary(m_hdll); |
391 |
m_hdll = NULL; |
m_hdll = NULL; |
392 |
MessageBox(0, "xvid_global() failed", "Error", MB_TOPMOST); |
MessageBox(0, TEXT("xvid_global() failed"), TEXT("Error"), MB_TOPMOST); |
393 |
return E_FAIL; |
return E_FAIL; |
394 |
} |
} |
395 |
|
|
492 |
{ |
{ |
493 |
DPRINTF("Destructor"); |
DPRINTF("Destructor"); |
494 |
|
|
|
#ifdef XVID_USE_TRAYICON |
|
495 |
if (Tray_Icon) { /* Destroy tray icon */ |
if (Tray_Icon) { /* Destroy tray icon */ |
496 |
NOTIFYICONDATA nid; |
NOTIFYICONDATA nid; |
497 |
ZeroMemory(&nid,sizeof(NOTIFYICONDATA)); |
ZeroMemory(&nid,sizeof(NOTIFYICONDATA)); |
503 |
Shell_NotifyIcon(NIM_DELETE, &nid); |
Shell_NotifyIcon(NIM_DELETE, &nid); |
504 |
Tray_Icon = 0; |
Tray_Icon = 0; |
505 |
} |
} |
|
#endif |
|
506 |
|
|
507 |
/* Close xvidcore library */ |
/* Close xvidcore library */ |
508 |
CloseLib(); |
CloseLib(); |
614 |
{ |
{ |
615 |
case FOURCC_mp4v: |
case FOURCC_mp4v: |
616 |
case FOURCC_MP4V: |
case FOURCC_MP4V: |
617 |
|
case FOURCC_lmp4 : |
618 |
|
case FOURCC_LMP4 : |
619 |
|
case FOURCC_rmp4 : |
620 |
|
case FOURCC_RMP4 : |
621 |
|
case FOURCC_smp4 : |
622 |
|
case FOURCC_SMP4 : |
623 |
|
case FOURCC_hdx4 : |
624 |
|
case FOURCC_HDX4 : |
625 |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
626 |
CloseLib(); |
CloseLib(); |
627 |
return VFW_E_TYPE_NOT_ACCEPTED; |
return VFW_E_TYPE_NOT_ACCEPTED; |
628 |
} |
} |
629 |
break; |
break; |
630 |
|
case FOURCC_divx : |
631 |
case FOURCC_DIVX : |
case FOURCC_DIVX : |
632 |
|
case FOURCC_dx50 : |
633 |
|
case FOURCC_DX50 : |
634 |
if (!(g_config.supported_4cc & SUPPORT_DIVX)) { |
if (!(g_config.supported_4cc & SUPPORT_DIVX)) { |
635 |
CloseLib(); |
CloseLib(); |
636 |
return VFW_E_TYPE_NOT_ACCEPTED; |
return VFW_E_TYPE_NOT_ACCEPTED; |
637 |
} |
} |
638 |
break; |
break; |
639 |
case FOURCC_DX50 : |
case FOURCC_3ivx : |
640 |
if (!(g_config.supported_4cc & SUPPORT_DX50)) { |
case FOURCC_3IVX : |
641 |
|
case FOURCC_3iv0 : |
642 |
|
case FOURCC_3IV0 : |
643 |
|
case FOURCC_3iv1 : |
644 |
|
case FOURCC_3IV1 : |
645 |
|
case FOURCC_3iv2 : |
646 |
|
case FOURCC_3IV2 : |
647 |
|
if (!(g_config.supported_4cc & SUPPORT_3IVX)) { |
648 |
CloseLib(); |
CloseLib(); |
649 |
return VFW_E_TYPE_NOT_ACCEPTED; |
return VFW_E_TYPE_NOT_ACCEPTED; |
650 |
} |
} |
651 |
|
case FOURCC_xvid : |
652 |
case FOURCC_XVID : |
case FOURCC_XVID : |
653 |
break; |
break; |
654 |
|
|
809 |
/* (internal function) change colorspace */ |
/* (internal function) change colorspace */ |
810 |
#define CALC_BI_STRIDE(width,bitcount) ((((width * bitcount) + 31) & ~31) >> 3) |
#define CALC_BI_STRIDE(width,bitcount) ((((width * bitcount) + 31) & ~31) >> 3) |
811 |
|
|
812 |
HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format) |
HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format, int noflip) |
813 |
{ |
{ |
814 |
DWORD biWidth; |
DWORD biWidth; |
815 |
|
|
832 |
return S_FALSE; |
return S_FALSE; |
833 |
} |
} |
834 |
|
|
835 |
|
if (noflip) rgb_flip = 0; |
836 |
|
|
837 |
if (subtype == CLSID_MEDIASUBTYPE_IYUV) |
if (subtype == CLSID_MEDIASUBTYPE_IYUV) |
838 |
{ |
{ |
839 |
DPRINTF("IYUV"); |
DPRINTF("IYUV"); |
907 |
|
|
908 |
if (direction == PINDIR_OUTPUT) |
if (direction == PINDIR_OUTPUT) |
909 |
{ |
{ |
910 |
return ChangeColorspace(*pmt->Subtype(), *pmt->FormatType(), pmt->Format()); |
return ChangeColorspace(*pmt->Subtype(), *pmt->FormatType(), pmt->Format(), 0); |
911 |
} |
} |
912 |
|
|
913 |
return S_OK; |
return S_OK; |
929 |
{ |
{ |
930 |
DPRINTF("CompleteConnect"); |
DPRINTF("CompleteConnect"); |
931 |
|
|
932 |
#ifdef XVID_USE_TRAYICON |
if ((direction == PINDIR_OUTPUT) && (Tray_Icon == 0) && (g_config.bTrayIcon != 0)) |
|
if ((direction == PINDIR_OUTPUT) && (Tray_Icon == 0)) |
|
933 |
{ |
{ |
934 |
WNDCLASSEX wc; |
WNDCLASSEX wc; |
935 |
|
|
941 |
wc.hInstance = (HINSTANCE) g_xvid_hInst; |
wc.hInstance = (HINSTANCE) g_xvid_hInst; |
942 |
wc.hbrBackground = (HBRUSH) GetStockObject(NULL_BRUSH); |
wc.hbrBackground = (HBRUSH) GetStockObject(NULL_BRUSH); |
943 |
wc.lpszMenuName = NULL; |
wc.lpszMenuName = NULL; |
944 |
wc.lpszClassName = "XVID_MSG_WINDOW"; |
wc.lpszClassName = TEXT("XVID_MSG_WINDOW"); |
945 |
wc.hIcon = NULL; |
wc.hIcon = NULL; |
946 |
wc.hIconSm = NULL; |
wc.hIconSm = NULL; |
947 |
wc.hCursor = NULL; |
wc.hCursor = NULL; |
948 |
RegisterClassEx(&wc); |
RegisterClassEx(&wc); |
949 |
|
|
950 |
MSG_hwnd = CreateWindowEx(0, "XVID_MSG_WINDOW", NULL, 0, CW_USEDEFAULT, |
MSG_hwnd = CreateWindowEx(0, TEXT("XVID_MSG_WINDOW"), NULL, 0, CW_USEDEFAULT, |
951 |
CW_USEDEFAULT, 0, 0, HWND_MESSAGE, NULL, (HINSTANCE) g_xvid_hInst, NULL); |
CW_USEDEFAULT, 0, 0, HWND_MESSAGE, NULL, (HINSTANCE) g_xvid_hInst, NULL); |
952 |
|
|
953 |
/* display the tray icon */ |
/* display the tray icon */ |
959 |
nid.uID = 1456; |
nid.uID = 1456; |
960 |
nid.uCallbackMessage = WM_ICONMESSAGE; |
nid.uCallbackMessage = WM_ICONMESSAGE; |
961 |
nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON)); |
nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON)); |
962 |
strcpy_s(nid.szTip, 19, "Xvid Video Decoder"); |
lstrcpy(nid.szTip, TEXT("Xvid Video Decoder")); |
963 |
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; |
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; |
964 |
|
|
965 |
Shell_NotifyIcon(NIM_ADD, &nid); |
Shell_NotifyIcon(NIM_ADD, &nid); |
967 |
DestroyIcon(nid.hIcon); |
DestroyIcon(nid.hIcon); |
968 |
Tray_Icon = 1; |
Tray_Icon = 1; |
969 |
} |
} |
|
#endif |
|
970 |
|
|
971 |
return S_OK; |
return S_OK; |
972 |
} |
} |
1042 |
{ |
{ |
1043 |
HRESULT result; |
HRESULT result; |
1044 |
|
|
1045 |
result = ChangeColorspace(mtOut->subtype, mtOut->formattype, mtOut->pbFormat); |
result = ChangeColorspace(mtOut->subtype, mtOut->formattype, mtOut->pbFormat, 0); |
1046 |
DeleteMediaType(mtOut); |
DeleteMediaType(mtOut); |
1047 |
|
|
1048 |
if (result != S_OK) |
if (result != S_OK) |
1363 |
bs_guid_table[i++] = (GUID *)&CLSID_XVID; |
bs_guid_table[i++] = (GUID *)&CLSID_XVID; |
1364 |
bs_guid_table[i++] = (GUID *)&CLSID_XVID_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_XVID_UC; |
1365 |
|
|
1366 |
if (g_config.supported_4cc & SUPPORT_DX50) { |
if (g_config.supported_4cc & SUPPORT_3IVX) { |
1367 |
bs_guid_table[i++] = (GUID *)&CLSID_DX50; |
bs_guid_table[i++] = (GUID *)&CLSID_3IVX; |
1368 |
bs_guid_table[i++] = (GUID *)&CLSID_DX50_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_3IVX_UC; |
1369 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV0; |
1370 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV0_UC; |
1371 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV1; |
1372 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV1_UC; |
1373 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV2; |
1374 |
|
bs_guid_table[i++] = (GUID *)&CLSID_3IV2_UC; |
1375 |
} |
} |
1376 |
if (g_config.supported_4cc & SUPPORT_DIVX) { |
if (g_config.supported_4cc & SUPPORT_DIVX) { |
1377 |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX; |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX; |
1378 |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_DIVX_UC; |
1379 |
|
bs_guid_table[i++] = (GUID *)&CLSID_DX50; |
1380 |
|
bs_guid_table[i++] = (GUID *)&CLSID_DX50_UC; |
1381 |
} |
} |
1382 |
if (g_config.supported_4cc & SUPPORT_MP4V) { |
if (g_config.supported_4cc & SUPPORT_MP4V) { |
1383 |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V; |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V; |
1384 |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V_UC; |
bs_guid_table[i++] = (GUID *)&CLSID_MP4V_UC; |
1385 |
|
bs_guid_table[i++] = (GUID *)&CLSID_LMP4; |
1386 |
|
bs_guid_table[i++] = (GUID *)&CLSID_LMP4_UC; |
1387 |
|
bs_guid_table[i++] = (GUID *)&CLSID_RMP4; |
1388 |
|
bs_guid_table[i++] = (GUID *)&CLSID_RMP4_UC; |
1389 |
|
bs_guid_table[i++] = (GUID *)&CLSID_SMP4; |
1390 |
|
bs_guid_table[i++] = (GUID *)&CLSID_SMP4_UC; |
1391 |
|
bs_guid_table[i++] = (GUID *)&CLSID_HDX4; |
1392 |
|
bs_guid_table[i++] = (GUID *)&CLSID_HDX4_UC; |
1393 |
} |
} |
1394 |
|
|
1395 |
const GUID *subtype; |
const GUID *subtype; |
1623 |
hr = MFCreateAMMediaTypeFromMFMediaType(pType, GUID_NULL, &am); |
hr = MFCreateAMMediaTypeFromMFMediaType(pType, GUID_NULL, &am); |
1624 |
|
|
1625 |
if (SUCCEEDED(hr)) { |
if (SUCCEEDED(hr)) { |
1626 |
if (FAILED(ChangeColorspace(am->subtype, am->formattype, am->pbFormat))) { |
if (FAILED(ChangeColorspace(am->subtype, am->formattype, am->pbFormat, 1))) { |
1627 |
DPRINTF("(MFT)InternalCheckOutputType (MF_E_INVALIDTYPE)"); |
DPRINTF("(MFT)InternalCheckOutputType (MF_E_INVALIDTYPE)"); |
1628 |
return MF_E_INVALIDTYPE; |
return MF_E_INVALIDTYPE; |
1629 |
} |
} |
1639 |
hr = OnSetOutputType(pType); |
hr = OnSetOutputType(pType); |
1640 |
} |
} |
1641 |
} |
} |
1642 |
#ifdef XVID_USE_TRAYICON |
|
1643 |
if (SUCCEEDED(hr) && Tray_Icon == 0) /* Create message passing window */ |
if (SUCCEEDED(hr) && (Tray_Icon == 0) && (g_config.bTrayIcon != 0)) /* Create message passing window */ |
1644 |
{ |
{ |
1645 |
WNDCLASSEX wc; |
WNDCLASSEX wc; |
1646 |
|
|
1652 |
wc.hInstance = (HINSTANCE) g_xvid_hInst; |
wc.hInstance = (HINSTANCE) g_xvid_hInst; |
1653 |
wc.hbrBackground = (HBRUSH) GetStockObject(NULL_BRUSH); |
wc.hbrBackground = (HBRUSH) GetStockObject(NULL_BRUSH); |
1654 |
wc.lpszMenuName = NULL; |
wc.lpszMenuName = NULL; |
1655 |
wc.lpszClassName = "XVID_MSG_WINDOW"; |
wc.lpszClassName = TEXT("XVID_MSG_WINDOW"); |
1656 |
wc.hIcon = NULL; |
wc.hIcon = NULL; |
1657 |
wc.hIconSm = NULL; |
wc.hIconSm = NULL; |
1658 |
wc.hCursor = NULL; |
wc.hCursor = NULL; |
1659 |
RegisterClassEx(&wc); |
RegisterClassEx(&wc); |
1660 |
|
|
1661 |
MSG_hwnd = CreateWindowEx(0, "XVID_MSG_WINDOW", NULL, 0, CW_USEDEFAULT, |
MSG_hwnd = CreateWindowEx(0, TEXT("XVID_MSG_WINDOW"), NULL, 0, CW_USEDEFAULT, |
1662 |
CW_USEDEFAULT, 0, 0, HWND_MESSAGE, NULL, (HINSTANCE) g_xvid_hInst, NULL); |
CW_USEDEFAULT, 0, 0, HWND_MESSAGE, NULL, (HINSTANCE) g_xvid_hInst, NULL); |
1663 |
|
|
1664 |
/* display the tray icon */ |
/* display the tray icon */ |
1670 |
nid.uID = 1456; |
nid.uID = 1456; |
1671 |
nid.uCallbackMessage = WM_ICONMESSAGE; |
nid.uCallbackMessage = WM_ICONMESSAGE; |
1672 |
nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON)); |
nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON)); |
1673 |
strcpy_s(nid.szTip, 19, "Xvid Video Decoder"); |
lstrcpy(nid.szTip, TEXT("Xvid Video Decoder")); |
1674 |
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; |
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; |
1675 |
|
|
1676 |
Shell_NotifyIcon(NIM_ADD, &nid); |
Shell_NotifyIcon(NIM_ADD, &nid); |
1678 |
DestroyIcon(nid.hIcon); |
DestroyIcon(nid.hIcon); |
1679 |
Tray_Icon = 1; |
Tray_Icon = 1; |
1680 |
} |
} |
|
#endif |
|
1681 |
|
|
1682 |
LeaveCriticalSection(&m_mft_lock); |
LeaveCriticalSection(&m_mft_lock); |
1683 |
return hr; |
return hr; |
1898 |
EnterCriticalSection(&m_mft_lock); |
EnterCriticalSection(&m_mft_lock); |
1899 |
|
|
1900 |
HRESULT hr = S_OK; |
HRESULT hr = S_OK; |
1901 |
IMFMediaBuffer *pBuffer; |
IMFMediaBuffer *pBuffer = NULL; |
1902 |
|
|
1903 |
if (SUCCEEDED(hr)) { |
if (SUCCEEDED(hr)) { |
1904 |
hr = pSample->ConvertToContiguousBuffer(&pBuffer); |
hr = pSample->ConvertToContiguousBuffer(&pBuffer); |
2152 |
} |
} |
2153 |
|
|
2154 |
if (m_hdll == NULL) { |
if (m_hdll == NULL) { |
2155 |
HRESULT hr = OpenLib(); |
HRESULT hr2 = OpenLib(); |
2156 |
|
|
2157 |
if (FAILED(hr) || (m_hdll == NULL)) // Paranoid checks. |
if (FAILED(hr2) || (m_hdll == NULL)) // Paranoid checks. |
2158 |
hr = MF_E_INVALIDTYPE; |
hr = MF_E_INVALIDTYPE; |
2159 |
} |
} |
2160 |
|
|
2188 |
hr = pmt->GetGUID(MF_MT_SUBTYPE, &subtype); |
hr = pmt->GetGUID(MF_MT_SUBTYPE, &subtype); |
2189 |
} |
} |
2190 |
|
|
2191 |
if (subtype == CLSID_MP4V || subtype == CLSID_MP4V_UC) { |
if (subtype == CLSID_MP4V || subtype == CLSID_MP4V_UC || |
2192 |
|
subtype == CLSID_LMP4 || subtype == CLSID_LMP4_UC || |
2193 |
|
subtype == CLSID_RMP4 || subtype == CLSID_RMP4_UC || |
2194 |
|
subtype == CLSID_SMP4 || subtype == CLSID_SMP4_UC || |
2195 |
|
subtype == CLSID_HDX4 || subtype == CLSID_HDX4_UC) { |
2196 |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
if (!(g_config.supported_4cc & SUPPORT_MP4V)) { |
2197 |
CloseLib(); |
CloseLib(); |
2198 |
hr = MF_E_INVALIDTYPE; |
hr = MF_E_INVALIDTYPE; |
2207 |
else m_create.fourcc = FOURCC_DIVX; |
else m_create.fourcc = FOURCC_DIVX; |
2208 |
} |
} |
2209 |
else if (subtype == CLSID_DX50 || subtype == CLSID_DX50_UC) { |
else if (subtype == CLSID_DX50 || subtype == CLSID_DX50_UC) { |
2210 |
if (!(g_config.supported_4cc & SUPPORT_DX50)) { |
if (!(g_config.supported_4cc & SUPPORT_DIVX)) { |
2211 |
CloseLib(); |
CloseLib(); |
2212 |
hr = MF_E_INVALIDTYPE; |
hr = MF_E_INVALIDTYPE; |
2213 |
} |
} |
2214 |
else m_create.fourcc = FOURCC_DX50; |
else m_create.fourcc = FOURCC_DX50; |
2215 |
} |
} |
2216 |
|
else if (subtype == CLSID_3IVX || subtype == CLSID_3IVX_UC || |
2217 |
|
subtype == CLSID_3IV0 || subtype == CLSID_3IV0_UC || |
2218 |
|
subtype == CLSID_3IV1 || subtype == CLSID_3IV1_UC || |
2219 |
|
subtype == CLSID_3IV2 || subtype == CLSID_3IV2_UC) { |
2220 |
|
if (!(g_config.supported_4cc & SUPPORT_3IVX)) { |
2221 |
|
CloseLib(); |
2222 |
|
hr = MF_E_INVALIDTYPE; |
2223 |
|
} |
2224 |
|
else m_create.fourcc = FOURCC_3IVX; |
2225 |
|
} |
2226 |
else if (subtype == CLSID_XVID || subtype == CLSID_XVID_UC) { |
else if (subtype == CLSID_XVID || subtype == CLSID_XVID_UC) { |
2227 |
m_create.fourcc = FOURCC_XVID; |
m_create.fourcc = FOURCC_XVID; |
2228 |
} |
} |