[svn] / trunk / xvidcore / dshow / src / CXvidDecoder.cpp Repository:
ViewVC logotype

Diff of /trunk/xvidcore/dshow/src/CXvidDecoder.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1946, Thu Jan 27 13:18:13 2011 UTC revision 2022, Wed Jul 6 13:50:28 2011 UTC
# Line 3  Line 3 
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
# Line 20  Line 20 
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    
# Line 36  Line 36 
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    
# Line 89  Line 88 
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  };  };
# Line 160  Line 175 
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;
# Line 202  Line 216 
216    
217          return TRUE; /* ok */          return TRUE; /* ok */
218  }  }
 #endif  
219    
220  STDAPI DllRegisterServer()  STDAPI DllRegisterServer()
221  {  {
# Line 296  Line 309 
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    
# Line 341  Line 352 
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    
# Line 349  Line 360 
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    
# Line 358  Line 369 
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    
# Line 368  Line 379 
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    
# Line 378  Line 389 
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    
# Line 481  Line 492 
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));
# Line 493  Line 503 
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();
# Line 605  Line 614 
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    
# Line 781  Line 809 
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    
# Line 804  Line 832 
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");
# Line 877  Line 907 
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;
# Line 899  Line 929 
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    
# Line 912  Line 941 
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 */
# Line 930  Line 959 
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);
# Line 938  Line 967 
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  }  }
# Line 1014  Line 1042 
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)
# Line 1335  Line 1363 
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;
# Line 1579  Line 1623 
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                                  }                                  }
# Line 1595  Line 1639 
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    
# Line 1608  Line 1652 
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 */
# Line 1626  Line 1670 
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);
# Line 1634  Line 1678 
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;
# Line 1855  Line 1898 
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);
# Line 2109  Line 2152 
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    
# Line 2145  Line 2188 
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;
# Line 2160  Line 2207 
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          }          }

Legend:
Removed from v.1946  
changed lines
  Added in v.2022

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4