如何逐帧处理?

时间:2017-06-04 06:26:39

标签: c# multithreading video queue

我将帧推送到队列,然后使用另一个线程来处理它,但总是在" push frame thread"中运行。

VideoSource.NewFrame += VideoSource_NewFrame;
private void VideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
    var bitmap = (Bitmap)eventArgs.Frame;
    if (_fileWriter.IsOpen&&IsRecording)
    {
        _bitmaps.Enqueue(bitmap);
        //Thread.Sleep(10);
    }
}

但如果我处理Thread.Sleep(10),则另一个线程将起作用。

另一个线程代码:

new Task(() =>
{
    Bitmap bitmap = null;
    while (IsRecording==true)
    {
        if (_bitmaps.Count == 0)
            continue;
        _bitmaps.TryDequeue(out bitmap);
        if(bitmap!=null&& _fileWriter.IsOpen)
            _fileWriter.WriteVideoFrame(bitmap);
        if (_bitmaps.Count == 0 && IsRecording == false&&_fileWriter.IsOpen)
        {
            _fileWriter.Flush();
            _fileWriter.Close();
        }
    }
}).Start();

如何使用更优雅的方法处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

我只是将代码更改为此。 它工作......

var bitmap = (Bitmap)eventArgs.Frame.Clone();