Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DelphiOpenH264解码_Delphi_Openh264 - Fatal编程技术网

DelphiOpenH264解码

DelphiOpenH264解码,delphi,openh264,Delphi,Openh264,我在编码和解码过程中使用cisco OpenH264编解码器,编码阶段工作得很好,我可以正确读取编码的H.264文件,问题在于我的解码过程,主要是从I420到ARGB的转换,请任何人帮助解决这个问题 这是我的解码函数(来自OpenH264包装DLL): 下面是我的Delphi实现: Image.Picture.Bitmap.PixelFormat := pf24bit; Image.Picture.Bitmap.Width := 320; Image.Picture.Bitmap.Height

我在编码和解码过程中使用cisco OpenH264编解码器,编码阶段工作得很好,我可以正确读取编码的H.264文件,问题在于我的解码过程,主要是从I420到ARGB的转换,请任何人帮助解决这个问题

这是我的解码函数(来自OpenH264包装DLL):

下面是我的Delphi实现:

Image.Picture.Bitmap.PixelFormat := pf24bit;
Image.Picture.Bitmap.Width  := 320;
Image.Picture.Bitmap.Height := 240;
    ...
Result:=H264Decoder_decode(FEncodedBuffer,
                            Image.Picture.Bitmap.ScanLine[Image.Picture.Bitmap.Height-1],
                            EncodedBufferSize,LWidth,LHeight);

 if result=0 then Image.Repaint;
非常感谢。

您给
h264解码器解码()
的步幅大小(
int-dst\u-stride\u-frame
)必须是
width*3

也就是说,因为您希望转换为24位RGB图像,其中一个像素需要3个字节(24位/8)


使用
width*2
转换后的图像将仅包含2/3的数据,从而生成图像<如果您想转换为32位RGB,代码>宽度*4将生效。

非常感谢,我解决了这个问题;问题在于我设置了:

Image.Picture.Bitmap.PixelFormat := pf24bit;

但是正确的
像素格式是PF32位

非常感谢,如果我将
宽度*2
更改为
宽度*3
我也会得到AV。您可以提供完整的Delphi版本的OpenH264吗?是否可以在某些存储库(例如GitHub)或其他下载位置上载?我非常需要这些:-)我在一个项目示例Delphi+Android(Java)中工作,我想接收设备屏幕的实时流,但我想在Delphi上以
TImage
的形式接收,就像您在上面的问题中所展示的那样。
Image.Picture.Bitmap.PixelFormat := pf24bit;