Как получить имя MEDIASUBTYPE от AM_MEDIA_TYPE, C++

Я использую 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
// ...
Другие вопросы по тегам