Программная установка параметров сжатия при создании AVI

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Mihail_
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 31.03.2008 (Пн) 20:57

Программная установка параметров сжатия при создании AVI

Сообщение Mihail_ » 29.09.2010 (Ср) 20:52

Привет всем!
Столкнулся с проблемой при автоматическом заполнении структуры 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 где все эти функции и структуры задействованы прилагаю.
Заранее спасибо!
Вложения
compress.jpg
compress.jpg (32.86 Кб) Просмотров: 1079
BMP2AVI.zip
(19.89 Кб) Скачиваний: 162

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Bing-бот, Google-бот и гости: 94

    TopList  
cron