Надо показать настройки видео-кодека, запомнить выбор юзера и потом применить его; для vfw кодеков целый геморой, пока получилось сохранять настройки, а теперь они не применяются и я не знаю, на что собственно грешить — может быть на смешивание vfw и DS подхода?
в общем у меня уже есть буфер с "сырыми" данными — настройками некоего кодека; на синепаке проще тренироваться, у него настройка одна (цветная картинка или ЧБ) и этих сырых данных всего 4 байта, в которых видно gray или colr слова... так что получаю я то, что узер навыбирал, правильно
но вот теперь применяю:
// кодек я уже нашел, добавил в фильтр, получил входной пин,
// соединил с предыдущим фильтром и получил выходной пин кодека
if Succeeded ( pVideoOutPin.QueryInterface (IID_IAMVideoCompression, pVfwConfig) ) then
begin
pVfwConfig.put_KeyFrameRate (AParams.VideoKeyrate);
pVfwConfig.put_PFramesPerKeyFrame (AParams.VideoPKeyrate);
pVfwConfig.put_Quality (AParams.VideoQuality);
// ^^^ эти настройки работают
// а вот тут DS-сным способом настраивать кодек не получается, пробую VFW-шным
if fcc_code > 0 then // это я где-то уже fcc кодека получил
begin
h := ICOpen (mmioStringToFOURCC ('vidc', MMIO_TOUPPER), fccHandler, ICMODE_COMPRESS);
if h > 0 then
try
if (AParams.VideoConfigData <> nil) then
begin
ICSendMessage (h, ICM_SETSTATE, DWORD (AParams.VideoConfigData), AParams.VideoConfigDataLen);
end;
finally
ICClose (h);
end;
end;
end; // Succeeded ( pOutPin.QueryInterface (IID_IAMVideoCompression, pVfwConfig) )
нифига — с синепаком картинка всегда цветная, а должна бы быть местами ч/б
так вот не оттого ли это, что к примеру этим способом я настраиваю некий глобальный кодек, а конкретный экземпляр, который уже использую, так настроить не получится (бред какой то пишу, а шо делать)
или может есть разница, в каком порядке что делать? типа сначала создать фильтр, потом добавить в граф, потом настроить а только потом соединять? надо от безнадеги попробовать
Здравствуйте, D. Mon, Вы писали:
DM>Вы просто "настраиваете" два разных экземпляра кодека.
я тоже так начал уже думать...
но как же быть? по идее надо
if Succeeded ( pVideoCompressor.QueryInterface (IID_IAMVfwCompressDialogs, pVfwCompressDialog) ) then
pVfwCompressDialog.SetState (AParams.VideoConfigData, AParams.VideoConfigDataLen);
делать; все вроде ок кроме результата
FH>FH> if Succeeded ( pVideoCompressor.QueryInterface (IID_IAMVfwCompressDialogs, pVfwCompressDialog) ) then
FH> pVfwCompressDialog.SetState (AParams.VideoConfigData, AParams.VideoConfigDataLen);
FH>
FH>делать; все вроде ок кроме результата
ну затупил так затупил:
pVfwCompressDialog.SetState (AParams.VideoConfigData^,
конечно же; так настройка принимается и имеем ч/б картинку
но методами IAMVfwCompressDialogs все равно нельзя получить свойства кодека, уж столько бился...