2013-05-16 6 views
1

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

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

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

Теперь я проверить это следующим образом:

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

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

Спасибо!

ответ

1

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

Здесь есть только одно исключение, и это идентификаторы, сопоставленные с четырьмя символьными кодами (FourCCs). Подробнее об этом см. В MSDN в FOURCCMap class, и вы можете сделать что-то вроде:

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 
// ...