--- branches/dev-api-4/xvidcore/dshow/src/CXvidDecoder.cpp 2004/01/29 07:06:04 1340 +++ branches/dev-api-4/xvidcore/dshow/src/CXvidDecoder.cpp 2004/01/31 13:44:56 1345 @@ -3,7 +3,7 @@ * XVID MPEG-4 VIDEO CODEC * - XviD Decoder part of the DShow Filter - * - * Copyright(C) 2002-2003 Peter Ross + * Copyright(C) 2002-2004 Peter Ross * * This program is free software ; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,7 +19,7 @@ * along with this program ; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - * $Id: CXvidDecoder.cpp,v 1.1.2.13 2004-01-29 07:06:04 syskin Exp $ + * $Id: CXvidDecoder.cpp,v 1.1.2.16 2004-01-31 13:44:33 suxen_drol Exp $ * ****************************************************************************/ @@ -60,21 +60,20 @@ #include "IXvidDecoder.h" #include "CXvidDecoder.h" #include "CAbout.h" +#include "config.h" +#include "debug.h" -// Externs defined here -PostProcessing_Settings PPSettings; -int rgb_flip; - -bool USE_IYUV; -bool USE_YV12; -bool USE_YUY2; -bool USE_YVYU; -bool USE_UYVY; -bool USE_RGB32; -bool USE_RGB24; -bool USE_RG555; -bool USE_RG565; +static int rgb_flip; +static bool USE_IYUV; +static bool USE_YV12; +static bool USE_YUY2; +static bool USE_YVYU; +static bool USE_UYVY; +static bool USE_RGB32; +static bool USE_RGB24; +static bool USE_RG555; +static bool USE_RG565; const AMOVIESETUP_MEDIATYPE sudInputPinTypes[] = { @@ -84,6 +83,7 @@ { &MEDIATYPE_Video, &CLSID_DIVX_UC }, { &MEDIATYPE_Video, &CLSID_DX50 }, { &MEDIATYPE_Video, &CLSID_DX50_UC }, + { &MEDIATYPE_Video, &CLSID_MP4V }, }; const AMOVIESETUP_MEDIATYPE sudOutputPinTypes[] = @@ -150,6 +150,8 @@ }; + +/* note: g_cTemplates must be global; used by strmbase.lib(dllentry.cpp,dllsetup.cpp) */ int g_cTemplates = sizeof(g_Templates) / sizeof(CFactoryTemplate); @@ -246,20 +248,7 @@ memset(&m_frame, 0, sizeof(m_frame)); m_frame.version = XVID_VERSION; - HKEY hKey; - DWORD size; - RegOpenKeyEx(XVID_REG_KEY, XVID_REG_SUBKEY, 0, KEY_READ, &hKey); - - // Set the default post-processing settings - REG_GET_N("Brightness", PPSettings.nBrightness, 25) - REG_GET_N("Deblock_Y", PPSettings.nDeblock_Y, 0) - REG_GET_N("Deblock_UV", PPSettings.nDeblock_UV, 0) - REG_GET_N("Dering", PPSettings.nDering, 0) - REG_GET_N("FilmEffect", PPSettings.nFilmEffect, 0) - REG_GET_N("ForceColorspace", PPSettings.nForceColorspace, 0) - REG_GET_N("FlipVideo", PPSettings.nFlipVideo, 0) - - RegCloseKey(hKey); + LoadRegistryInfo(); USE_IYUV = false; USE_YV12 = false; @@ -271,7 +260,7 @@ USE_RG555 = false; USE_RG565 = false; - switch ( PPSettings.nForceColorspace ) + switch ( g_config.nForceColorspace ) { case FORCE_NONE: USE_IYUV = true; @@ -368,10 +357,18 @@ switch(hdr->biCompression) { + + case FOURCC_MP4V: + if (!(g_config.supported_4cc & SUPPORT_MP4V)) return VFW_E_TYPE_NOT_ACCEPTED; + break; + case FOURCC_DIVX : + if (!(g_config.supported_4cc & SUPPORT_DIVX)) return VFW_E_TYPE_NOT_ACCEPTED; + break; + case FOURCC_DX50 : + if (!(g_config.supported_4cc & SUPPORT_DX50)) return VFW_E_TYPE_NOT_ACCEPTED; case FOURCC_XVID : -// case FOURCC_DIVX : -// case FOURCC_DX50 : break; + default : DPRINTF("Unknown fourcc: 0x%08x (%c%c%c%c)", @@ -382,7 +379,6 @@ (hdr->biCompression>>24)&0xff); return VFW_E_TYPE_NOT_ACCEPTED; } - return S_OK; } @@ -710,20 +706,20 @@ if (pIn->IsDiscontinuity() == S_OK) m_frame.general = XVID_DISCONTINUITY; - if (PPSettings.nDeblock_Y) + if (g_config.nDeblock_Y) m_frame.general |= XVID_DEBLOCKY; - if (PPSettings.nDeblock_UV) + if (g_config.nDeblock_UV) m_frame.general |= XVID_DEBLOCKUV; /* - if (PPSettings.nDering) + if (g_config.nDering) m_frame.general |= XVID_DERING; */ - if (PPSettings.nFilmEffect) + if (g_config.nFilmEffect) m_frame.general |= XVID_FILMEFFECT; m_frame.output.csp &= ~XVID_CSP_VFLIP; - m_frame.output.csp |= rgb_flip^(PPSettings.nFlipVideo ? XVID_CSP_VFLIP : 0); + m_frame.output.csp |= rgb_flip^(g_config.nFlipVideo ? XVID_CSP_VFLIP : 0); repeat : @@ -761,7 +757,7 @@ m_frame.general = tmp_gen; } - if (stats.type == XVID_TYPE_NOTHING) { + if (stats.type == XVID_TYPE_NOTHING && length > 0) { DPRINTF("B-Frame decoder lag"); return S_FALSE; }