Столкнулся с проблемой при автоматическом заполнении структуры AVI_COMPRESS_OPTIONS (которая нужна для создания сжатых видео-потоков средствами avifil32.dll) при создании AVI из отдельных кадров. В стандартных инструментах к сожалению не предусмотрена возможность программно выбирать кодек для сжатия и подразумевается вызов пользовательского диалога макросом AVISaveOptions, который заполняет нужную структуру. Причем почти все показатели у кодеков (которые нам нужно выбирать автоматически) статические, за исключением lpParms который меняется при каждом запуске и представляет из себя "codec specific data".
В этой теме в самом низу страницы сошлись на мнении что это какие-то дополнительные параметры сжатия, и вроде как предложили код на C++ чтобы эти параметры программно извлекать:
Ok I hope this could be usefull for someone.
the key instruction is ICGetState(hic, (PVOID)pBuff, cb); this instrction got the codec compression params in a buffer.
you will need get a codec handle hic first. here you can see how obtain the code
Aditional to this, if you need invoke codec propietary settings dialog you can do calling ICConfigure(hic)
You will be interested in look about ICM codec messages and ICM macros ( the same thing but with macros)
Enjoy.
- Код: Выделить всё
HIC hic;
ICINFO icinfo;
for(DWORD i = 0; ICInfo(ICTYPE_VIDEO, i, &icinfo);i++)
{
hic = ICOpen(icinfo.fccType, icinfo.fccHandler, ICMODE_QUERY);
if (hic != NULL)
{
ICGetInfo(hic, &icinfo, sizeof(icinfo));
if (icinfo.fccHandler != yourCodecfccHandler)
{
ICClose(hic);
continue;
}
DWORD cb = ICGetStateSize(hic);
// Alloc buffer with cb bytes with your favourite allocation function
....
ICGetState(hic, (PVOID)pBuff, cb);
}
}
Помогите пожалуйста транслировать это на VB, чтобы и на нашей улице был праздник.
Пример на VB BMP2AVI где все эти функции и структуры задействованы прилагаю.
Заранее спасибо!