[svn] / branches / release-1_3-branch / xvidcore / dshow / src / CXvidDecoder.cpp Repository:
ViewVC logotype

Diff of /branches/release-1_3-branch/xvidcore/dshow/src/CXvidDecoder.cpp

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

trunk/xvidcore/dshow/src/CXvidDecoder.cpp revision 1898, Sun Oct 17 18:31:52 2010 UTC branches/release-1_3-branch/xvidcore/dshow/src/CXvidDecoder.cpp revision 1962, Thu Mar 17 15:13:25 2011 UTC
# 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.20 2010-10-17 18:31:46 Isibaar Exp $   * $Id: CXvidDecoder.cpp,v 1.25.2.4 2011-03-17 15:13:25 Isibaar Exp $
  *  
  ****************************************************************************/  
   
 /****************************************************************************  
  *  
  * 2003/12/11 - added some additional options, mainly to make the deblocking  
  *              code from xvidcore available. Most of the new code is taken  
  *              from Nic's dshow filter, (C) Nic, http://nic.dnsalias.com  
24   *   *
25   ****************************************************************************/   ****************************************************************************/
26    
# Line 44  Line 36 
36          C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Debug          C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Debug
37  */  */
38    
39  //#define XVID_USE_MFT  /*
40  //#define XVID_USE_TRAYICON  #define XVID_USE_MFT
41    #define XVID_USE_TRAYICON
42    */
43    
44  #include <windows.h>  #include <windows.h>
45    
# Line 95  Line 89 
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  };  };
# Line 136  Line 146 
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  };  };
# Line 170  Line 180 
180  extern HINSTANCE g_xvid_hInst;  extern HINSTANCE g_xvid_hInst;
181    
182  static int GUI_Page = 0;  static int GUI_Page = 0;
183    static int Tray_Icon = 0;
184  extern "C" void CALLBACK Configure(HWND hWndParent, HINSTANCE hInstParent, LPSTR lpCmdLine, int nCmdShow );  extern "C" void CALLBACK Configure(HWND hWndParent, HINSTANCE hInstParent, LPSTR lpCmdLine, int nCmdShow );
185    
186  LRESULT CALLBACK msg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)  LRESULT CALLBACK msg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
# Line 191  Line 202 
202                  };                  };
203                  break;                  break;
204    
205            case WM_DESTROY:
206                    NOTIFYICONDATA nid;
207                    ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
208    
209                    nid.cbSize = NOTIFYICONDATA_V1_SIZE;
210                    nid.hWnd = hwnd;
211                    nid.uID = 1456;
212    
213                    Shell_NotifyIcon(NIM_DELETE, &nid);
214                    Tray_Icon = 0;
215          default:          default:
216                  return DefWindowProc(hwnd, uMsg, wParam, lParam);                  return DefWindowProc(hwnd, uMsg, wParam, lParam);
217          }          }
# Line 301  Line 322 
322      xvid_decore_func = NULL; // Hmm, some strange errors appearing if I try to initialize...      xvid_decore_func = NULL; // Hmm, some strange errors appearing if I try to initialize...
323      xvid_global_func = NULL; // ...this in constructor's init-list. So, they assigned here.      xvid_global_func = NULL; // ...this in constructor's init-list. So, they assigned here.
324    
 #ifdef XVID_USE_TRAYICON  
         MSG_hwnd = NULL;  
 #endif  
   
325  #if defined(XVID_USE_MFT)  #if defined(XVID_USE_MFT)
326          InitializeCriticalSection(&m_mft_lock);          InitializeCriticalSection(&m_mft_lock);
327          m_pInputType = NULL;          m_pInputType = NULL;
# Line 331  Line 348 
348          xvid_gbl_init_t init;          xvid_gbl_init_t init;
349          memset(&init, 0, sizeof(init));          memset(&init, 0, sizeof(init));
350          init.version = XVID_VERSION;          init.version = XVID_VERSION;
351            init.cpu_flags = g_config.cpu;
352    
353            xvid_gbl_info_t info;
354            memset(&info, 0, sizeof(info));
355            info.version = XVID_VERSION;
356    
357          m_hdll = LoadLibrary(XVID_DLL_NAME);          m_hdll = LoadLibrary(XVID_DLL_NAME);
358          if (m_hdll == NULL) {          if (m_hdll == NULL) {
# Line 366  Line 388 
388                  return E_FAIL;                  return E_FAIL;
389          }          }
390    
391            if (xvid_global_func(0, XVID_GBL_INFO, &info, NULL) < 0)
392            {
393            xvid_global_func = NULL;
394            xvid_decore_func = NULL;
395            FreeLibrary(m_hdll);
396            m_hdll = NULL;
397                    MessageBox(0, "xvid_global() failed", "Error", MB_TOPMOST);
398                    return E_FAIL;
399            }
400    
401          memset(&m_create, 0, sizeof(m_create));          memset(&m_create, 0, sizeof(m_create));
402          m_create.version = XVID_VERSION;          m_create.version = XVID_VERSION;
403          m_create.handle = NULL;          m_create.handle = NULL;
404        /* Decoder threads */
405        if (g_config.cpu & XVID_CPU_FORCE) {
406                    m_create.num_threads = g_config.num_threads;
407            }
408            else {
409            m_create.num_threads = info.num_threads; /* Autodetect */
410                    g_config.num_threads = info.num_threads;
411            }
412    
413          memset(&m_frame, 0, sizeof(m_frame));          memset(&m_frame, 0, sizeof(m_frame));
414          m_frame.version = XVID_VERSION;          m_frame.version = XVID_VERSION;
# Line 456  Line 496 
496  CXvidDecoder::~CXvidDecoder()  CXvidDecoder::~CXvidDecoder()
497  {  {
498      DPRINTF("Destructor");      DPRINTF("Destructor");
         CloseLib();  
499    
500  #ifdef XVID_USE_TRAYICON  #ifdef XVID_USE_TRAYICON
501          if (MSG_hwnd != NULL) {          if (Tray_Icon) { /* Destroy tray icon */
502                  NOTIFYICONDATA nid;                  NOTIFYICONDATA nid;
503                  nid.cbSize = sizeof(NOTIFYICONDATA);                  ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
504    
505                    nid.cbSize = NOTIFYICONDATA_V1_SIZE;
506                  nid.hWnd = MSG_hwnd;                  nid.hWnd = MSG_hwnd;
507                  nid.uID = 100;                  nid.uID = 1456;
508    
509                  Shell_NotifyIcon(NIM_DELETE, &nid);                  Shell_NotifyIcon(NIM_DELETE, &nid);
510                    Tray_Icon = 0;
                 DestroyWindow(MSG_hwnd);  
                 MSG_hwnd = NULL;  
511          }          }
512  #endif  #endif
513    
514            /* Close xvidcore library */
515            CloseLib();
516    
517  #if defined(XVID_USE_MFT)  #if defined(XVID_USE_MFT)
518          DeleteCriticalSection(&m_mft_lock);          DeleteCriticalSection(&m_mft_lock);
519  #endif  #endif
# Line 579  Line 621 
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    
# Line 755  Line 816 
816  /* (internal function) change colorspace */  /* (internal function) change colorspace */
817  #define CALC_BI_STRIDE(width,bitcount)  ((((width * bitcount) + 31) & ~31) >> 3)  #define CALC_BI_STRIDE(width,bitcount)  ((((width * bitcount) + 31) & ~31) >> 3)
818    
819  HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format)  HRESULT CXvidDecoder::ChangeColorspace(GUID subtype, GUID formattype, void * format, int noflip)
820  {  {
821          DWORD biWidth;          DWORD biWidth;
822    
# Line 778  Line 839 
839                  return S_FALSE;                  return S_FALSE;
840          }          }
841    
842            if (noflip) rgb_flip = 0;
843    
844          if (subtype == CLSID_MEDIASUBTYPE_IYUV)          if (subtype == CLSID_MEDIASUBTYPE_IYUV)
845          {          {
846                  DPRINTF("IYUV");                  DPRINTF("IYUV");
# Line 851  Line 914 
914    
915          if (direction == PINDIR_OUTPUT)          if (direction == PINDIR_OUTPUT)
916          {          {
917                  return ChangeColorspace(*pmt->Subtype(), *pmt->FormatType(), pmt->Format());                  return ChangeColorspace(*pmt->Subtype(), *pmt->FormatType(), pmt->Format(), 0);
918          }          }
919    
920          return S_OK;          return S_OK;
# Line 874  Line 937 
937          DPRINTF("CompleteConnect");          DPRINTF("CompleteConnect");
938    
939  #ifdef XVID_USE_TRAYICON  #ifdef XVID_USE_TRAYICON
940          if ((direction == PINDIR_OUTPUT) && (MSG_hwnd == NULL))          if ((direction == PINDIR_OUTPUT) && (Tray_Icon == 0))
941          {          {
942                  WNDCLASSEX wc;                  WNDCLASSEX wc;
943    
# Line 897  Line 960 
960    
961                  /* display the tray icon */                  /* display the tray icon */
962                  NOTIFYICONDATA nid;                  NOTIFYICONDATA nid;
963                    ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
964    
965                  nid.cbSize = sizeof(NOTIFYICONDATA);                  nid.cbSize = NOTIFYICONDATA_V1_SIZE;
966                  nid.hWnd = MSG_hwnd;                  nid.hWnd = MSG_hwnd;
967                  nid.uID = 100;                  nid.uID = 1456;
                 nid.uVersion = NOTIFYICON_VERSION;  
968                  nid.uCallbackMessage = WM_ICONMESSAGE;                  nid.uCallbackMessage = WM_ICONMESSAGE;
969                  nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON));                  nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON));
970                  strcpy_s(nid.szTip, 19, "Xvid Video Decoder");                  strcpy_s(nid.szTip, 19, "Xvid Video Decoder");
971                  nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;                  nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
972    
973                  Shell_NotifyIcon(NIM_ADD, &nid);                  Shell_NotifyIcon(NIM_ADD, &nid);
974    
975                    DestroyIcon(nid.hIcon);
976                    Tray_Icon = 1;
977          }          }
978  #endif  #endif
979    
# Line 919  Line 985 
985  {  {
986          DPRINTF("BreakConnect");          DPRINTF("BreakConnect");
987    
 #ifdef XVID_USE_TRAYICON  
         if ((direction == PINDIR_OUTPUT) && (MSG_hwnd != NULL)) {  
                 NOTIFYICONDATA nid;  
   
                 nid.cbSize = sizeof(NOTIFYICONDATA);  
                 nid.hWnd = MSG_hwnd;  
                 nid.uID = 100;  
                 nid.uVersion = NOTIFYICON_VERSION;  
   
                 if(Shell_NotifyIcon(NIM_DELETE, &nid) == TRUE) {  
                         DestroyWindow(MSG_hwnd);  
                         MSG_hwnd = NULL;  
                 }  
         }  
 #endif  
   
988          return S_OK;          return S_OK;
989  }  }
990    
# Line 1001  Line 1051 
1051          {          {
1052                  HRESULT result;                  HRESULT result;
1053    
1054                  result = ChangeColorspace(mtOut->subtype, mtOut->formattype, mtOut->pbFormat);                  result = ChangeColorspace(mtOut->subtype, mtOut->formattype, mtOut->pbFormat, 0);
1055                  DeleteMediaType(mtOut);                  DeleteMediaType(mtOut);
1056    
1057                  if (result != S_OK)                  if (result != S_OK)
# Line 1322  Line 1372 
1372          bs_guid_table[i++] = (GUID *)&CLSID_XVID;          bs_guid_table[i++] = (GUID *)&CLSID_XVID;
1373          bs_guid_table[i++] = (GUID *)&CLSID_XVID_UC;          bs_guid_table[i++] = (GUID *)&CLSID_XVID_UC;
1374    
1375          if (g_config.supported_4cc & SUPPORT_DX50) {          if (g_config.supported_4cc & SUPPORT_3IVX) {
1376                  bs_guid_table[i++] = (GUID *)&CLSID_DX50;                  bs_guid_table[i++] = (GUID *)&CLSID_3IVX;
1377                  bs_guid_table[i++] = (GUID *)&CLSID_DX50_UC;                  bs_guid_table[i++] = (GUID *)&CLSID_3IVX_UC;
1378                    bs_guid_table[i++] = (GUID *)&CLSID_3IV0;
1379                    bs_guid_table[i++] = (GUID *)&CLSID_3IV0_UC;
1380                    bs_guid_table[i++] = (GUID *)&CLSID_3IV1;
1381                    bs_guid_table[i++] = (GUID *)&CLSID_3IV1_UC;
1382                    bs_guid_table[i++] = (GUID *)&CLSID_3IV2;
1383                    bs_guid_table[i++] = (GUID *)&CLSID_3IV2_UC;
1384          }          }
1385          if (g_config.supported_4cc & SUPPORT_DIVX) {          if (g_config.supported_4cc & SUPPORT_DIVX) {
1386                  bs_guid_table[i++] = (GUID *)&CLSID_DIVX;                  bs_guid_table[i++] = (GUID *)&CLSID_DIVX;
1387                  bs_guid_table[i++] = (GUID *)&CLSID_DIVX_UC;                  bs_guid_table[i++] = (GUID *)&CLSID_DIVX_UC;
1388                    bs_guid_table[i++] = (GUID *)&CLSID_DX50;
1389                    bs_guid_table[i++] = (GUID *)&CLSID_DX50_UC;
1390          }          }
1391          if (g_config.supported_4cc & SUPPORT_MP4V) {          if (g_config.supported_4cc & SUPPORT_MP4V) {
1392                  bs_guid_table[i++] = (GUID *)&CLSID_MP4V;                  bs_guid_table[i++] = (GUID *)&CLSID_MP4V;
1393                  bs_guid_table[i++] = (GUID *)&CLSID_MP4V_UC;                  bs_guid_table[i++] = (GUID *)&CLSID_MP4V_UC;
1394                    bs_guid_table[i++] = (GUID *)&CLSID_LMP4;
1395                    bs_guid_table[i++] = (GUID *)&CLSID_LMP4_UC;
1396                    bs_guid_table[i++] = (GUID *)&CLSID_RMP4;
1397                    bs_guid_table[i++] = (GUID *)&CLSID_RMP4_UC;
1398                    bs_guid_table[i++] = (GUID *)&CLSID_SMP4;
1399                    bs_guid_table[i++] = (GUID *)&CLSID_SMP4_UC;
1400                    bs_guid_table[i++] = (GUID *)&CLSID_HDX4;
1401                    bs_guid_table[i++] = (GUID *)&CLSID_HDX4_UC;
1402          }          }
1403    
1404          const GUID *subtype;          const GUID *subtype;
# Line 1553  Line 1619 
1619    
1620          EnterCriticalSection(&m_mft_lock);          EnterCriticalSection(&m_mft_lock);
1621    
1622          /* Actually set the type or just test it?          /* Actually set the type or just test it? */
1623          BOOL bReallySet = ((dwFlags & MFT_SET_TYPE_TEST_ONLY) == 0);          BOOL bReallySet = ((dwFlags & MFT_SET_TYPE_TEST_ONLY) == 0);
1624    
1625          /* If we have samples pending the type can't be changed right now */          /* If we have samples pending the type can't be changed right now */
# Line 1566  Line 1632 
1632                          hr = MFCreateAMMediaTypeFromMFMediaType(pType, GUID_NULL, &am);                          hr = MFCreateAMMediaTypeFromMFMediaType(pType, GUID_NULL, &am);
1633    
1634                          if (SUCCEEDED(hr)) {                          if (SUCCEEDED(hr)) {
1635                                  if (FAILED(ChangeColorspace(am->subtype, am->formattype, am->pbFormat))) {                                  if (FAILED(ChangeColorspace(am->subtype, am->formattype, am->pbFormat, 1))) {
1636                                          DPRINTF("(MFT)InternalCheckOutputType (MF_E_INVALIDTYPE)");                                          DPRINTF("(MFT)InternalCheckOutputType (MF_E_INVALIDTYPE)");
1637                                          return MF_E_INVALIDTYPE;                                          return MF_E_INVALIDTYPE;
1638                                  }                                  }
# Line 1582  Line 1648 
1648                          hr = OnSetOutputType(pType);                          hr = OnSetOutputType(pType);
1649                  }                  }
1650          }          }
   
1651  #ifdef XVID_USE_TRAYICON  #ifdef XVID_USE_TRAYICON
1652          if (SUCCEEDED(hr) && MSG_hwnd == NULL) /* Create message passing window */          if (SUCCEEDED(hr) && Tray_Icon == 0) /* Create message passing window */
1653          {          {
1654                  WNDCLASSEX wc;                  WNDCLASSEX wc;
1655    
# Line 1607  Line 1672 
1672    
1673                  /* display the tray icon */                  /* display the tray icon */
1674                  NOTIFYICONDATA nid;                  NOTIFYICONDATA nid;
1675                    ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
1676    
1677                  nid.cbSize = sizeof(NOTIFYICONDATA);                  nid.cbSize = NOTIFYICONDATA_V1_SIZE;
1678                  nid.hWnd = MSG_hwnd;                  nid.hWnd = MSG_hwnd;
1679                  nid.uID = 100;                  nid.uID = 1456;
                 nid.uVersion = NOTIFYICON_VERSION;  
1680                  nid.uCallbackMessage = WM_ICONMESSAGE;                  nid.uCallbackMessage = WM_ICONMESSAGE;
1681                  nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON));                  nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON));
1682                  strcpy_s(nid.szTip, 19, "Xvid Video Decoder");                  strcpy_s(nid.szTip, 19, "Xvid Video Decoder");
1683                  nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;                  nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
1684    
1685                  Shell_NotifyIcon(NIM_ADD, &nid);                  Shell_NotifyIcon(NIM_ADD, &nid);
1686    
1687                    DestroyIcon(nid.hIcon);
1688                    Tray_Icon = 1;
1689          }          }
1690  #endif  #endif
1691    
# Line 1950  Line 2018 
2018                  if (FAILED(pSample->GetSampleDuration(&m_timelength))) {                  if (FAILED(pSample->GetSampleDuration(&m_timelength))) {
2019                          m_timelength = INVALID_TIME;                          m_timelength = INVALID_TIME;
2020                  }                  }
2021                    if (m_timestamp != INVALID_TIME && stats.type == XVID_TYPE_IVOP) {
2022                            m_rtFrame = m_timestamp;
2023                    }
2024          }          }
2025    
2026          LeaveCriticalSection(&m_mft_lock);          LeaveCriticalSection(&m_mft_lock);
# Line 2127  Line 2198 
2198                  hr = pmt->GetGUID(MF_MT_SUBTYPE, &subtype);                  hr = pmt->GetGUID(MF_MT_SUBTYPE, &subtype);
2199          }          }
2200    
2201          if (subtype == CLSID_MP4V || subtype == CLSID_MP4V_UC) {          if (subtype == CLSID_MP4V || subtype == CLSID_MP4V_UC ||
2202                subtype == CLSID_LMP4 || subtype == CLSID_LMP4_UC ||
2203                subtype == CLSID_RMP4 || subtype == CLSID_RMP4_UC ||
2204                subtype == CLSID_SMP4 || subtype == CLSID_SMP4_UC ||
2205                subtype == CLSID_HDX4 || subtype == CLSID_HDX4_UC) {
2206                  if (!(g_config.supported_4cc & SUPPORT_MP4V)) {                  if (!(g_config.supported_4cc & SUPPORT_MP4V)) {
2207                          CloseLib();                          CloseLib();
2208                          hr = MF_E_INVALIDTYPE;                          hr = MF_E_INVALIDTYPE;
# Line 2142  Line 2217 
2217                  else m_create.fourcc = FOURCC_DIVX;                  else m_create.fourcc = FOURCC_DIVX;
2218          }          }
2219          else if (subtype == CLSID_DX50 || subtype == CLSID_DX50_UC) {          else if (subtype == CLSID_DX50 || subtype == CLSID_DX50_UC) {
2220                  if (!(g_config.supported_4cc & SUPPORT_DX50)) {                  if (!(g_config.supported_4cc & SUPPORT_DIVX)) {
2221                          CloseLib();                          CloseLib();
2222                          hr = MF_E_INVALIDTYPE;                          hr = MF_E_INVALIDTYPE;
2223                  }                  }
2224                  else m_create.fourcc = FOURCC_DX50;                  else m_create.fourcc = FOURCC_DX50;
2225          }          }
2226            else if (subtype == CLSID_3IVX || subtype == CLSID_3IVX_UC ||
2227                     subtype == CLSID_3IV0 || subtype == CLSID_3IV0_UC ||
2228                     subtype == CLSID_3IV1 || subtype == CLSID_3IV1_UC ||
2229                     subtype == CLSID_3IV2 || subtype == CLSID_3IV2_UC) {
2230                    if (!(g_config.supported_4cc & SUPPORT_3IVX)) {
2231                            CloseLib();
2232                            hr = MF_E_INVALIDTYPE;
2233                    }
2234                    else m_create.fourcc = FOURCC_3IVX;
2235            }
2236          else if (subtype == CLSID_XVID || subtype == CLSID_XVID_UC) {          else if (subtype == CLSID_XVID || subtype == CLSID_XVID_UC) {
2237                  m_create.fourcc = FOURCC_XVID;                  m_create.fourcc = FOURCC_XVID;
2238          }          }

Legend:
Removed from v.1898  
changed lines
  Added in v.1962

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