Доброго времени суток! Стоит задача получения картинки с веб-камеры, для этого использую DirectShow. Для того чтобы получить устройство для захвата видео используется функция BindToObject, которая собственно и вываливается с исключением: Floating point division by zero.
ПРИЧЕМ, это происходит только на планшетах Microsoft Surface. Все остальные веб-камеры (usb и в других планшетах) работают прекрасно, без каких-либо Exception.
Привожу этот кусок кода:
FVideoCaptureFilter: IBaseFilter;
try
MArray1[Listbox1.ItemIndex].BindToObject(NIL, NIL, IID_IBaseFilter, FVideoCaptureFilter);
except
on E:Exception do myEH.Log_('Exception in CreateGraph. MArray1[Listbox1.ItemIndex].BindToObject(NIL, NIL, IID_IMediaFilter, FVideoCaptureFilter). '+E.Message);
end;
Может что-то с параметрами не так... В сети находил примеры, там реализация такая же.
Здравствуйте, lastik160, Вы писали:
L>Может что-то с параметрами не так... В сети находил примеры, там реализация такая же.
Может, попробовать на время вызова отключить FPU исключения?
Set8087CW($133f);
Здравствуйте, Alexander G, Вы писали:
AG>Здравствуйте, lastik160, Вы писали:
L>>Может что-то с параметрами не так... В сети находил примеры, там реализация такая же.
AG>Может, попробовать на время вызова отключить FPU исключения?
AG>Set8087CW($133f);
Спасибо за отклик.
procedure Set8087CW(NewCW: Word);
Sets the FPU control word.
On 32-bit Windows: This control word controls the precision of floating-point calculations, the rounding mode, and whether certain floating-point operations trigger exceptions.
On 64-bit Windows: This control word does not control floating-point operations, because the SSE register is used for floating point in 64-bit mode, instead of the FPU (floating-point unit).
У меня приложение 64-разрядное.
Воспользовался функцией function SetExceptionMask(const Mask: TArithmeticExceptionMask): TArithmeticExceptionMask
Все заработало.