必威体育Betway必威体育官网
当前位置:首页 > IT技术

delphi2007:"Invalid floating point operation" 错误的解决方法

时间:2019-06-18 04:42:08来源:IT技术作者:seo实验室小编阅读:51次「手机版」
 

invalid floating point operation

这两天用使用海思的库hi_h264dec_w.dll(版本v2.2.2.0.2)解码时,在直接拷贝时出现"invalid floating point operation.”的错误;

目前根据网络资料,屏蔽FPU错误,由于功能正常,因此具体原因还没有去分析,代码如下:

function TVideoDecoder.DecodeVideoFrame(var frame: H264_frame): boolean;

var

fOutFrame: H264_DEC_FRAME_S; //解码帧

iy, iuv: integer; //yuv长度,u的长度

Saved8087CW: word;//Default 8087 control word. FPU control register is set to this value.

begin

Saved8087CW := Get8087CW; //保存当前

try

   Set8087CW($133F); { disable all fpu exceptions. }

   result := DecodeVideoFrame(fOutFrame);

   if not result then exit;

   frame.FrameNo := fDecFrameCount;

   frame.Width := foutframe.uWidth;

   frame.Height := foutframe.uHeight;

   frame.FrameRate := 25; //默认

   frame.PicType := fDecAttr.uPictureFormat;

   //拷贝 I420的yuv数据

   iy := foutframe.uHeight * foutframe.uYStride;

   iuv := foutframe.uHeight * foutframe.uUVStride p 2;

   frame.datalen := iy + 2 * iuv;

   getmem(frame.data, frame.datalen + 10);

   copymemory(frame.data, foutframe.pY, iy);//不设置FPU,那么这句会报错

   copymemory(frame.data + iy, foutframe.pu, iuv);

   copymemory(frame.data + iy + iuv, foutframe.pv, iuv);

{$IFDEF __SaveH264}

   if result then

fYuvStream.Write(frame.data[0], frame.datalen);

{$ENDIF}

finally

   Set8087CW(Saved8087CW); //恢复

end;

end;

关于FPU的设置,有几个建议:

1)It is  recommend that you disable all floating-point exceptions when using OpenGL to render 3D graphics;

2)如果在程序中使用了SceneControl.LoadSxFile载入了3D文档,那么必须在程序退出时,在Set8087CW之前调用IScene的Clearlayers方法清除图层,否则程序在退出时会出现异常。参考代码为:SceneControl1.Scene.ClearLayers;

参考文档(非常感谢以下文章):

1) http://www.langjisky.com/netdown/?type=detail&id=99

2) http://www.cnblogs.com/neugls/archive/2011/04/21/2023097.html

相关阅读

notifyDataSetChanged和notifyDataSetInvalidated区别

notifyDataSetChanged和notifyDataSetInvalidated区别以及观察者模式的使用 看Observer和Observable的时候,爬了下Listview的

无废话SharePoint入门教程一[SharePoint概述]

一、前言 听说SharePoint也有一段时间了,可一直处在门外。最近被调到SharePoint实施项目小组,就随着工作一起学习了一下实施与开发

用mac自带terminal ssh连虚拟机centos提示port 22: Op

2018.8.14 17:45更新 找到了另外一条路。终于可以用mac自带terminal ssh连虚拟机centos了。 各版本还是不变,在centos的初始状态下

web3.eth.account[0] error:invalid address的解决方

问题描述: 最近在前端想获取到当前用户eth账户的时候,老是报错显示 invalid address。网上查找了几种方法之后终于解决了。 1.问题

session.invalidate()

当浏览器第一次请求时,服务器创建一个session对象,同时生成一个sessionId,并在此次响应中将sessionId 以响应报文的方式传回客户端浏

分享到:

栏目导航

推荐阅读

热门阅读