- 论坛徽章:
- 0
|
应用场景:480*277的显示屏,在屏幕(0,0)到(320,240)的区域显示摄像头获取的实时视频显示。在(340,80)到(480,277)显示拍下的照片显示,(340,0)到(480,60)显示时间年月日,时分秒。
程序代码大致如下:
while(1)
{
ret = camera_getframe(&pbuf, &size, &ts); ///从摄像头获取每一帧的YUV数据保存在buffer
showtimeonvideo(global); //在屏幕上显示时间。此处做 处理,不处理的话,时间会出现重叠的现象
pY = pbuf;
pU = pY + g_width * g_height;
pV = pU + g_width * g_height /4;
DpLib_InvalidateYuvPart(akuio_vaddr2paddr(pY), akuio_vaddr2paddr(pU), akuio_vaddr2paddr(pV), g_width, g_height,\
0,0,320,240,DPLIB_YUV420); //在屏幕上(320,240)显示视频
if(key_down==1) //按键1按下,拍照
{
... //把拍下的照片保存在TF卡下的一个目录中
pthread_create(...) //创建线程,在屏幕上显示拍照的图片,图片显示3秒,视频区域不暂停,3秒后,图片区域还原成背景。
pthread_mutex_lock(&mutex);
key_down=0;
pthread_mutex_unlock(&mutex);
}
else if(key_down==2)
{
... //此处省略,keydown=2则回去播放MP3
pthread_mutex_lock(&mutex);
key_down=0;
pthread_mutex_unlock(&mutex);
}
}
大致逻辑如上:出现的问题是:
触摸按键不稳定,比如我按下拍照健,会显示按键被按下多次,比如按下3次,那么就意味着创建3个拍照线程,而每个线程使用相同的线程ID,而且会都sleep 3秒,那么这样就会出错。如果我在while(1)循环中不使用线程,直接显示图片,图片显示3秒,那么视频也会停止3秒,而要求视频不暂停。
知道这样写存在问题,求解决思路。。。 |
|