作者Qhilda (what???)
看板AndroidDev
标题[问题]关於camera先抓frame再处理
时间Mon Jul 9 18:48:00 2012
大家好:
最近想将 camera 抓到的 frame 经过处理再显示於手机萤幕上, 但遇到奇怪的问题.
实做了SurfaceHolder.Callback, Runnable, 并在 startPreview 後开始让 thread
跑 run( ), 这里我把缩减过的 code 列在下面,其中
Long_time_find_circles(frame)
会处理很久 [约 0.5 秒], 这function主要是算出画面的特徵点并圈起来!
可是我发现当画面晃动很快时, 就
算不出也画不出特徵点, 而且画面也不是每个画面
都能显示, 好像有 frame 遗失了?
我不是很了解 android 里的 camera preview, 当收到 camera 资讯时, 他会不会自动把
frame 存在一个 buffer(queue) 里面, 然後等前面的 frame 处理完再换下一个 frame?
还是其实没有 buffer? 所以那些後来的 frame 因为前一个frame还没处理完又没 buffer
所以就直接被丢弃? 所以以我的写法只有在速度慢或是画面不动时才显示得出来?
另外想在请问版上高手, 为什麽再 run 里面需要 synchronized??
--------- 缩减版 code -------------------
public void run() {
mThreadRun = true;
while (mThreadRun) {
synchronized (this) {
bmp =
Long_time_process(frame);
// 找出特徵点并回传 bmp 图
}
if (bmp != null) {
//显示到萤幕上
Canvas canvas = mHolder.lockCanvas();
if (canvas != null) {
canvas.drawBitmap(bmp, (canvas.getWidth()-getFrameWidth()) / 2,
(canvas.getHeight() - getFrameHeight()) / 2, null);
mHolder.unlockCanvasAndPost(canvas);
}
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.169