コード例 #1
0
        void Events_Tick(object sender, TickEventArgs e)
        {
            //There should be an easier way to get the video data to SDL

            timeElapsed += (e.SecondsElapsed);
            while (timeElapsed > 1.0 / file.Header.Fps && frameQueue.Count > 0)
            {
                timeElapsed -= (float)(1.0f / file.Header.Fps);
                byte[] rgbData = frameQueue.Dequeue();

                if (surf == null)
                {
                    surf = GuiUtil.CreateSurface(rgbData, (ushort)file.Header.Width, (ushort)file.Header.Height,
                                                 32, (int)file.Header.Width * 4,
                                                 (int)0x00ff0000,
                                                 (int)0x0000ff00,
                                                 (int)0x000000ff,
                                                 unchecked ((int)0xff000000));
                }
                else
                {
                    surf.Lock();
                    Marshal.Copy(rgbData, 0, surf.Pixels, rgbData.Length);
                    surf.Unlock();
                    surf.Update();
                }

                EmitFrameReady();

                if (frameQueue.Count < (buffered_frames / 2) + 1)
                {
                    waitEvent.Set();
                }
            }
        }