FourCC кодека
От: MishaB  
Дата: 29.08.04 09:47
Оценка:
Доброго всем дня!
Я вот недельку уже пытаюсь написать код что бы тот просматривал установленые в системе кодеки, а также проверял наличие кодека для АВИшки.
Как я понял FourCC кодека для AVI хранится прямо в нем же по смещению 0xBC.. Это без проблем. Список установленых кодеков я узнаю используя интерфейс IID_ICreateDevEnum компонента CLSID_SystemDeviceEnum,
потом вызываю метод CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnumCat, 0), а потом в цикле перебираю все
while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK)
{
IPropertyBag *pPropBag;
pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);

VARIANT varName;
varName.vt = VT_BSTR;
hrp = pPropBag->Read(L"FriendlyName", &varName, 0);
//........................................
Но это я получаю имя кодека.. В разделе реестра я могу прочитать только CLISD и FilterData... И тут начинаются вопросы с каким типом нужно считывать FilterData?
Как узнать path dll в которой этот компонент храниться...
И самое важное как узнать FourCC кодека??!!!
Буду благодарен даже за маленький намек..
Re: FourCC кодека
От: aGrey Литва  
Дата: 30.08.04 02:57
Оценка:
Здравствуйте, MishaB

IMoniker::BindToObject -> IBaseFilter -> IBaseFilter::EnumPins -> IPin ->IPin::EnumMediaTypes -> ...

Пример: http://cvs.sourceforge.net/viewcvs.py/virtualvcr/max/CFilterList.cpp.
Re: FourCC кодека
От: Денис Майдыковский Россия http://www.maydyk.com
Дата: 30.08.04 11:07
Оценка:
Здравствуйте, MishaB, Вы писали:

MB> VARIANT varName;

MB> varName.vt = VT_BSTR;
MB> hrp = pPropBag->Read(L"FriendlyName", &varName, 0);

Вместо "FriendlyName" поставить "FccHandler". Но при этом нужно учесть, что у DirectShow кодеков (например DV или Indeo) FOURCC отсутствует.
Re[2]: FourCC кодека
От: MishaB  
Дата: 01.09.04 10:08
Оценка:
ДМ>Вместо "FriendlyName" поставить "FccHandler". Но при этом нужно учесть, что у DirectShow кодеков (например DV или Indeo) FOURCC отсутствует.

Хочу поблагодарить ответивших... Как раз с помошью IBaseFilter я узнаю FCC кодеков DirectShow, а уже "FccHandler" остальных. Все классно работает!
А где кстати можно нормально почитать DirectShow. Так как книги которые я вижу в продаже по DirectX ориентированы на игрушки..
Кстати как было неприятно узнать.. У меня в цикле сначала захватываются кодеки DirectShow, поэтому когда я сразу попытался написать hrp = pPropBag->Read(L"FccHandler", &varName, 0), то получал ошибку... А ведь просто нужно было поставить условие проверки и тогда бы я пропустил их, а на остальных бы програма отработала!!!!!... Програмист сам себе враг!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.