Example #1
0
        void CreateMediaResources(FFmpegStreamDesc ffmpegStream)
        {
            Console.WriteLine($"Hardware Decoding : {ffmpegStream.IsHardwareDecoded}");
            Console.WriteLine($"FPS : {ffmpegStream.FramesPerSecond}");

            mediaFrameRect = new Vec4(0, 0, ffmpegStream.Width, ffmpegStream.Height);

            if (ffmpegStream.IsHardwareDecoded)
            {
                mediaFrameTexture = new D3DTexture2D(renderDevice,
                                                     ffmpegStream.Width,
                                                     ffmpegStream.Height,
                                                     DxgiFormat.NV12,
                                                     D3DBind.ShaderResource,
                                                     D3DUsage.Default,
                                                     D3DAccess.None,
                                                     D3DMisc.Shared);
            }
            else
            {
                mediaFrameTexture = new D3DTexture2D(renderDevice,
                                                     ffmpegStream.Width,
                                                     ffmpegStream.Height,
                                                     DxgiFormat.NV12,
                                                     D3DBind.ShaderResource,
                                                     D3DUsage.Dynamic,
                                                     D3DAccess.Write);
            }

            mediaFrameTextureYView  = new D3DShaderResourceView(renderDevice, mediaFrameTexture, DxgiFormat.R8_UNORM);
            mediaFrameTextureUVView = new D3DShaderResourceView(renderDevice, mediaFrameTexture, DxgiFormat.R8G8_UNORM);

            mediaTransform = Mat4x4.Ortho(0, mediaFrameRect.Right, mediaFrameRect.Bottom, 0);
            mediaVertices  = new MediaVertex[]
            {
                new MediaVertex(new Vec3(0, 0, 0), new Vec2(0, 0)),
                new MediaVertex(new Vec3(ffmpegStream.Width, 0, 0), new Vec2(1, 0)),
                new MediaVertex(new Vec3(0, ffmpegStream.Height, 0), new Vec2(0, 1)),

                new MediaVertex(new Vec3(ffmpegStream.Width, 0, 0), new Vec2(1, 0)),
                new MediaVertex(new Vec3(ffmpegStream.Width, ffmpegStream.Height, 0), new Vec2(1, 1)),
                new MediaVertex(new Vec3(0, ffmpegStream.Height, 0), new Vec2(0, 1)),
            };

            // update GPU resources
            var newMediaConstantBuffer = new MediaConstantBuffer(Mat4x4.Transpose(mediaTransform));

            renderDeviceContext.UpdateGPUResource(mediaConstantBuffer, newMediaConstantBuffer);
            renderDeviceContext.UpdateGPUResource(mediaVertexBuffer, mediaVertices, D3DMap.WriteDiscard);
        }
Example #2
0
 protected void UpdateTexture(string szImage="")
 {
     if (szImage.Length < 3 || D3DTextureManager.Instance[szImage] == null)
     {
         if (D3DTextureManager.Instance[m_szTexture] == null)
             return;
         szImage = m_szTexture;
     }
     m_szTexture = szImage;
     m_pTexture = D3DTextureManager.Instance[szImage];
     m_pTexture.SetFrames(4);
     m_rectBounds = new Rectangle(m_rectBounds.X, m_rectBounds.Y, m_pTexture.Size.Width / 4, m_pTexture.Size.Height);
 }
Example #3
0
        private void UpdateImage(string szImage = "")
        {
            if (m_bgLayoutType == BGLAYOUT_TYPE.Tile)
            {
                if (szImage.Length < 6)
                    szImage = m_szTilebase;
                else
                    m_szTilebase = szImage;
                string szPart1 = szImage.Substring(0, szImage.Length - 6);
                string szPart2 = szImage.Substring(szImage.Length - 4);

                for (int i = 0; i < 12; i++)
                {
                    string sztexture = szPart1 + String.Format("{0:00}", i) + szPart2;
                    if (D3DTextureManager.Instance[sztexture] == null)
                        return;
                    m_tileTextures[i] = D3DTextureManager.Instance[sztexture];
                }
            }
            else
            {
                if (szImage.Length < 3 || D3DTextureManager.Instance[szImage] == null)
                    return;
                m_pTexture = D3DTextureManager.Instance[szImage];
                if (m_rectBounds.Width < m_pTexture.Size.Width)
                    m_rectBounds.Width = m_pTexture.Size.Width;
                if (m_rectBounds.Height < m_pTexture.Size.Height)
                    m_rectBounds.Height = m_pTexture.Size.Height;
            }
        }