--- trunk/xvidcore/dshow/src/CXvidDecoder.cpp 2010/10/29 16:39:07 1902 +++ trunk/xvidcore/dshow/src/CXvidDecoder.cpp 2010/12/22 15:21:13 1916 @@ -20,15 +20,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.23 2010-10-29 16:39:07 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 + * $Id: CXvidDecoder.cpp,v 1.25 2010-12-22 15:21:13 Isibaar Exp $ * ****************************************************************************/ @@ -44,8 +36,8 @@ C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\Debug */ -// #define XVID_USE_MFT -// #define XVID_USE_TRAYICON +#define XVID_USE_MFT +#define XVID_USE_TRAYICON #include @@ -338,6 +330,11 @@ xvid_gbl_init_t init; memset(&init, 0, sizeof(init)); init.version = XVID_VERSION; + init.cpu_flags = g_config.cpu; + + xvid_gbl_info_t info; + memset(&info, 0, sizeof(info)); + info.version = XVID_VERSION; m_hdll = LoadLibrary(XVID_DLL_NAME); if (m_hdll == NULL) { @@ -373,9 +370,27 @@ return E_FAIL; } + if (xvid_global_func(0, XVID_GBL_INFO, &info, NULL) < 0) + { + xvid_global_func = NULL; + xvid_decore_func = NULL; + FreeLibrary(m_hdll); + m_hdll = NULL; + MessageBox(0, "xvid_global() failed", "Error", MB_TOPMOST); + return E_FAIL; + } + memset(&m_create, 0, sizeof(m_create)); m_create.version = XVID_VERSION; m_create.handle = NULL; + /* Decoder threads */ + if (g_config.cpu & XVID_CPU_FORCE) { + m_create.num_threads = g_config.num_threads; + } + else { + m_create.num_threads = info.num_threads; /* Autodetect */ + g_config.num_threads = info.num_threads; + } memset(&m_frame, 0, sizeof(m_frame)); m_frame.version = XVID_VERSION; @@ -1578,7 +1593,6 @@ hr = OnSetOutputType(pType); } } - #ifdef XVID_USE_TRAYICON if (SUCCEEDED(hr) && Tray_Icon == 0) /* Create message passing window */ { @@ -1612,7 +1626,7 @@ nid.hIcon = LoadIcon(g_xvid_hInst, MAKEINTRESOURCE(IDI_ICON)); strcpy_s(nid.szTip, 19, "Xvid Video Decoder"); nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; - + Shell_NotifyIcon(NIM_ADD, &nid); DestroyIcon(nid.hIcon); @@ -1949,6 +1963,9 @@ if (FAILED(pSample->GetSampleDuration(&m_timelength))) { m_timelength = INVALID_TIME; } + if (m_timestamp != INVALID_TIME && stats.type == XVID_TYPE_IVOP) { + m_rtFrame = m_timestamp; + } } LeaveCriticalSection(&m_mft_lock);