Delphi XE5 Firemonkey视频帧抓取和显示



有一个Stackoverflow线程指出Firemonkey必须通过主线程显示视频。我正在尝试使用DirectX相机捕捉一系列图像(目前在Win8.1中-其他操作系统可以等待)。所以我在Embarcadero示例代码中使用SampleBufferReady和SampleBufferSync方法(只是在表单上有一个图像),但是有足够的变化,我从来没有看到任何东西。我需要在TImageViewer中显示;将SampleBufferSync中的tbitmap指向该tbitmap很容易。但什么也看不出来。从过程的角度来看,我想要的伪代码是

setup whatever
camera.startcapture 
repeat
 repeat until framecaptured {what SampleBufferReady should do -- only fire when ready}
 Imageviewer.repaint {inside SampleBufferReady?}
 inc(mycounter) {inside SampleBufferReady?}
until (mycounter>mylimit) or (user interrupts video input)
camera

可以添加计时器来减慢速度。我不明白的是

  • 我必须定义我自己的TEvent来发现相机捕获的图像,或者这甚至已经存在?我本以为SampleBufferReady会响应图像的到来,我可以处理该事件中的任何内容。
  • 显示图像在其他东西而不是TImage,我需要关闭相机,画位图,然后打开相机吗?如果是这样,我是否需要让SampleBufferReady包含一个命令来关闭相机?天哪,这听起来很笨拙!

建议吗?

这里是一个完整的代码源,我测试的c++版本是相同的PASCAL在函数调用和机制方面,只有语法不同:从这里下载PASCAL版本。

的代码工作良好的android和桌面(我测试的c++版本)。所以下载,测试和确认我的PASCAL代码。

最新更新