winapi — как получить имя MEDIASUBTYPE из AM_MEDIA_TYPE, переполнение стека

Я использую DirectShow для захвата кадров с моей веб-камеры. Во время настройки веб-камеры (когда я устанавливаю разрешение, fps и т. Д.) У меня есть несколько альтернатив, доступных с камеры. (47 из них).

В настоящее время я использую цикл for, который перебирает все доступные настройки камеры, и я просто печатаю значения в консоли. Но у меня нет хорошего способа напечатать значение подтипа Media.

Есть ли хороший способ напечатать фактическое название медиа подтипа?

Теперь я проверяю это так:

if(mT->subtype == MEDIASUBTYPE_MJPG){
printf(" MEDIASUBTYPE_MJPG ");
} else {
printf(" ----- ");
}

(mT = AM_MEDIA_TYPE)
Что не очень хорошо. Я хотел бы использовать то, что печатает фактическое имя подтипа.

Спасибо!

1

Решение

Медиа подтип просто GUID идентификатор, безымянный. Невозможно преобразовать ее в удобную для пользователя строку без прямого сравнения со значениями, о которых вы знаете.

Здесь есть только одно исключение, и это идентификаторы, сопоставленные с четырьмя символьными кодами (FourCC). Смотрите подробности об этом на MSDN в FOURCCMap учебный класс и вы можете захотеть сделать что-то вроде:

if(memcmp(&mT->subtype.Data2, &MEDIASUBTYPE_MJPG.Data2, sizeof (GUID) - offsetof(GUID, Data2)) == 0)
{
// NOTE: This is FourCC!
CHAR pszValue[5];
*((UINT32*) pszValue) = mT->subtype.Data1;
pszValue[4] = 0;
_tprintf(_T("Media Subtype is FourCC %hs\n"), pszValue);
} else
// ...
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]