和尚VS秃头 发表于 2014-05-13 10:01

求在板子上显示视频,图片和日期的思路?

应用场景: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);
         }
       elseif(key_down==2)
          {
         ...//此处省略,keydown=2则回去播放MP3
             pthread_mutex_lock(&mutex);
             key_down=0;
             pthread_mutex_unlock(&mutex);
          }


大致逻辑如上:出现的问题是:
   触摸按键不稳定,比如我按下拍照健,会显示按键被按下多次,比如按下3次,那么就意味着创建3个拍照线程,而每个线程使用相同的线程ID,而且会都sleep3秒,那么这样就会出错。如果我在while(1)循环中不使用线程,直接显示图片,图片显示3秒,那么视频也会停止3秒,而要求视频不暂停。
   知道这样写存在问题,求解决思路。。。
页: [1]
查看完整版本: 求在板子上显示视频,图片和日期的思路?