我需要一些方法来获取屏幕数据并将其传递到我的应用程序中的DX9表面/纹理,并以1600*900分辨率以至少25fps渲染它,30会更好.
我尝试了BitBliting,但即使在那之后,我的速度为20fps,在将数据加载到纹理并渲染后,我的速度为11fps,远远落后于我的需要.
GetFrontBufferData是不可能的.
以下是使用Windows Media API的内容,但我不熟悉它.示例将数据保存到文件中,也许它可以设置为给你单独的帧,但我没有找到足够好的文档来自己尝试.
我的代码:
m_memDC.BitBlt(0, 0, m_Rect.Width(),m_Rect.Height(), //m_Rect is area to be captured
               &m_dc, m_Rect.left, m_Rect.top, SRCCOPY); 
      //at 20-25fps after this if I comment out the rest
//DC,HBITMAP setup and memory alloc is done once at the begining
GetDIBits( m_hDc, (HBITMAP)m_hBmp.GetSafeHandle(),
    0L,             // Start scan line
    (DWORD)m_Rect.Height(),     // # of scan lines
    m_lpData,                   // LPBYTE
    (LPBITMAPINFO)m_bi,     // address of bitmapinfo
    (DWORD)DIB_RGB_COLORS);     // Use RGB for color table
     //at 17-20fps
IDirect3DSurface9 …我正在使用DDA来捕获桌面图像帧并将它们发送到服务器,这些帧应该用于创建带有MMF 的视频。我想了解,需要与做的事情MMF,如果我将使用源读取器和接收器作家,以从捕捉到的帧渲染视频。
有两个问题:
1) 嗯,首先,我不能完全理解,如果我已经从DDA接收到视频帧,实际上是否需要带有Media Source的Source Reader?我可以将它们发送到Sink Writer并渲染视频吗?
2)据我所知,首先要做的是,如果仍然需要Source Reader和Media Source,那就编写我自己的Media Source,它将理解用DDA捕获的DXGI_FORMAT_B8G8R8A8_UNORM帧。然后我应该使用带有合适的Decoders \Encoders 的Souce Reader和Sink Writer并将媒体数据发送到Media Sinks。您能否更详细地解释一下在这种情况下需要做什么?