Files
Client/Library/dxx8/samples/Multimedia/DirectShow/Common/mfcdmoutil.cpp
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

113 lines
3.1 KiB
C++

//------------------------------------------------------------------------------
// File: MFCDMOUtil.cpp
//
// Desc: DirectShow sample code - DMO utility functions used by MFC applications.
//
// Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
#include "stdafx.h"
#include <dshow.h>
#include <dmo.h>
#include "namedguid.h"
#include "mfcdmoutil.h"
#include "mfcutil.h"
HRESULT AddDMOsToList(const GUID *clsid, CListBox& ListFilters, BOOL bIncludeKeyed)
{
HRESULT hr;
IEnumDMO *pEnum = NULL;
int nFilters=0;
DWORD dwFlags = bIncludeKeyed ? DMO_ENUMF_INCLUDE_KEYED : 0;
// Enumerate all DMOs of the selected category
hr = DMOEnum(*clsid, dwFlags, 0, NULL, 0, NULL, &pEnum);
if (FAILED(hr))
return hr;
// Enumerate all filters using the category enumerator
hr = EnumDMOsToList(pEnum, ListFilters, nFilters);
// Now that the DMOs (if any) are enumerated and added
// to the list, go ahead and select the first one.
ListFilters.SetCurSel(0);
pEnum->Release();
return hr;
}
HRESULT EnumDMOsToList(IEnumDMO *pEnumCat, CListBox& ListFilters, int& nFilters)
{
HRESULT hr=S_OK;
ULONG cFetched;
WCHAR *wszName;
CLSID clsid;
// Clear the current filter list
ClearFilterListWithCLSID(ListFilters);
nFilters = 0;
// If there are no filters of a requested type, show default string
if (!pEnumCat)
{
ListFilters.AddString(TEXT("<< No entries >>"));
return S_FALSE;
}
// Enumerate all items associated with the moniker
while(pEnumCat->Next(1, &clsid, &wszName, &cFetched) == S_OK)
{
nFilters++;
CString str(wszName);
// Add filter's name and CLSID to the list box
AddFilterToListWithCLSID(str, &clsid, ListFilters);
CoTaskMemFree(wszName);
}
// If no DMOs matched the query, show a default item
if (nFilters == 0)
ListFilters.AddString(TEXT("<< No entries >>"));
return hr;
}
void DisplayDMOTypeInfo(const GUID *pCLSID,
ULONG& ulNumInputsSupplied, CListBox& ListInputTypes,
ULONG& ulNumOutputsSupplied, CListBox& ListOutputTypes)
{
const int NUM_PAIRS=20;
HRESULT hr;
DMO_PARTIAL_MEDIATYPE aInputTypes[NUM_PAIRS]={0},
aOutputTypes[NUM_PAIRS]={0};
ULONG ulNumInputTypes=NUM_PAIRS, ulNumOutputTypes=NUM_PAIRS, i;
TCHAR szCLSID[128];
// Read type/subtype information
hr = DMOGetTypes(
*pCLSID,
ulNumInputTypes, &ulNumInputsSupplied, aInputTypes,
ulNumOutputTypes, &ulNumOutputsSupplied, aOutputTypes);
if (FAILED(hr))
return;
// Show input type/subtype pairs
for (i=0; i<ulNumInputsSupplied; i++)
{
GetTypeSubtypeString(szCLSID, aInputTypes[i]);
ListInputTypes.AddString(szCLSID);
}
// Show output type/subtype pairs
for (i=0; i<ulNumOutputsSupplied; i++)
{
GetTypeSubtypeString(szCLSID, aOutputTypes[i]);
ListOutputTypes.AddString(szCLSID);
}
}