我有一个i / p相机和一个重复和接收每一帧的功能。
android:textAllCaps="true"
这是我缓冲最后100位图的缓冲区:
public Bitmap ProcessFrame(Bitmap frame)
{
}
当我按录制录制视频时,我需要保存每个缓冲的位图,然后我必须保存按下录制后收到的传入位图。因此,当我按下Record并使用下面的代码将缓冲的位图保存到视频文件时,我会丢失一些传入的帧。处理此部分时传入的帧将被删除,我不想删除它们。
lock (writer)
{
BM[now] = new Bitmap(frame);
now = (now == 99) ? 0 : now + 1;
}
以下是要在视频文件中保存传入帧的部分
lock (writer)
{
for (int i = now; i < 150; i++)
{
if (BM[i] == null)
break;
writer.WriteVideoFrame(BM[i]);//adding frame to an existing open file
}
if (now != 0)
{
for (int i = 0; i < now - 1; i++)
{
writer.WriteVideoFrame(BM[i]);//adding frame to an existing open file
}
}
}
我搜索过,发现锁会帮助我。保存缓冲的位图时,锁会锁定编写器,因此另一个位图将停止在编写器上并等待解锁,但它没有帮助。
我该怎么办?我该怎么做一个安全的线程?我正在使用opensource ispy,我认为它将为每个帧创建线程并调用此线程。帮我保存传入的帧。
答案 0 :(得分:2)
为什么不使用ConcurrentQueue而不是使用愚蠢的固定数组类型解决方案?那么你将不必处理线程,因为那是一个线程安全的类。让一个线程从队列的头部拉出帧并编写它们并添加另一个线程。