0

我仍在尝试使用带有 libvlc 的 directx api 在 firemonkey 上播放视频!我已经用不同的方式播放了视频,但我想在 Directx 表面上播放视频。

请先看这个链接:http: //forum.videolan.org/viewtopic.php?f=32 &t=82618

有人写了一个关于如何在directx上使用libvlc的delphi代码,并且该代码运行良好,但该代码是纯directx代码。我想将此代码集成到firemonkey!我怎么能用firemonkey库来做到这一点(我知道windows firemonkey也使用directx库,但是firemonkey库(接口、类、对象)的命名和使用与directx完全不同!

我现在在哪里:

我几乎使用“Winapi.Direct3D9,Winapi.D3DX9,FMX.Context.DX9”库将这个纯directx代码集成到firemonkey

我可以在 firemonkey 上下文中访问 IDirect3DDevice9 对象!

var
   Device: IDirect3DDevice9;
begin
   Device := TCustomDirectXContext(TCustomForm3D(ParentForm).Context).Device;
   Device.CreateTexture(video_width, video_height, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, vlcVideoTexture, nil);
   Device.CreateTexture(video_width, video_height, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, vlcMemoryTexture, nil);
end;

此处的代码完全在 firemonkey 中工作,但您会看到此代码类型的结果对象是 IDirect3DTexture9 ,该对象包含视频的帧缓冲区,我只需要将这个对象渲染到 firemonkey 形式的某个控件上。

如何将此缓冲区绘制到 firemonkey 画布?

我正在等待好的德尔福开发者解决方案。

谢谢

4

1 回答 1

-2

我认为使用 LibVlc 尝试 direct3D 是不可能的,因为 libvlc 请求句柄到任何窗口来播放视频,在任何形式上播放都是可以的,因为它们具有有效的句柄。

于 2012-01-13T06:51:06.763 回答