Firefly开源社区

12
发表新贴
打印 上一主题 下一主题

USB的720P摄像头花屏的问题

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2014-12-20 11:35:19        只看该作者  11#
yaolunlun 发表于 2014-12-19 14:58
支持的其他分辨率(640x480等)都试过了,都是花屏(图像横向交错,能大概看到视频轮廓)。
另外发现, ...

看来跟分辨率没关系,我觉得应该跟数据的frame format 像素格式有关。楼主可以试一下这里:
hardware/rk29/camera/CameraHal/CameraUSBAdapter.cpp

  1. //define  the frame info ,such as w, h ,fmt
  2. int CameraUSBAdapter::reprocessFrame(FramInfo_s* frame)
  3. {
  4.     int ret = 0;
  5.     //  usb camera may do something
  6.            #if (IOMMU_ENABLED == 1)
  7.     int phy_addr = mPreviewBufProvider->getBufShareFd(frame->frame_index);
  8.     #else
  9.     int phy_addr = mPreviewBufProvider->getBufPhyAddr(frame->frame_index);
  10.     #endif
  11.     if( frame->frame_fmt == V4L2_PIX_FMT_MJPEG){
  12.                char *srcbuf = frame->vir_addr;
  13.                if((srcbuf[0] == 0xff) && (srcbuf[1] == 0xd8) && (srcbuf[2] == 0xff)){
  14.         //decoder to NV12
  15.         VPU_FRAME outbuf;
  16.         unsigned int output_len;
  17.         unsigned int input_len;
  18.         output_len = 0;
  19.         input_len = frame->frame_size;

  20.         ret = mMjpegDecoder.decode(mMjpegDecoder.decoder,
  21.                                     (unsigned char*)&outbuf, &output_len,
  22.                                               (unsigned char*)frame->vir_addr, &input_len,
  23.                                               phy_addr);
  24.         if (ret < 0){
  25.             LOGE("%s(%d): mjpeg stream is error!",__FUNCTION__,__LINE__);
  26.                 }
  27.             }else{
  28.                             LOGE("mjpeg data error!!");
  29.                             return -1;
  30.         }
  31.     }else if(frame->frame_fmt == V4L2_PIX_FMT_YUYV){

  32.         ret = cameraFormatConvert(V4L2_PIX_FMT_YUYV, V4L2_PIX_FMT_NV12, NULL,
  33.                                                          (char*)frame->vir_addr, (char*)mPreviewBufProvider->getBufVirAddr(frame->frame_index),
  34.                                                          0,0,frame->frame_size,
  35.                                                          frame->frame_width, frame->frame_height, frame->frame_width,
  36.                                                          frame->frame_width, frame->frame_height, frame->frame_width,
  37.                                                          false);
  38.         if (ret < 0){
  39.             LOGE("%s(%d): yuyv convert to nv12 error!",__FUNCTION__,__LINE__);
  40.         }

  41.     }else{
  42.         LOGE("camerahal not support this format %d",frame->frame_fmt);
  43.         ret =  -1;
  44.     }

  45.     frame->frame_fmt = V4L2_PIX_FMT_NV12;
  46.     frame->phy_addr = phy_addr;
  47.     frame->vir_addr = mPreviewBufProvider->getBufVirAddr(frame->frame_index);
  48.     frame->zoom_value = mZoomVal;
  49.        
  50.         int w,h;
  51.         w = frame->frame_width;
  52.         h = frame->frame_height;
  53.         if((w&0x0f) || (h&0x0f)){
  54.                 char *buf = malloc(w*h*3/2);
  55.                 if(buf != NULL){
  56.                         memcpy(buf,frame->vir_addr,w*h);
  57.                         memcpy(buf+w*h,frame->vir_addr+((w+15)&0xfff0)*((h+15)&0xfff0), w*h/2);
  58.                         memcpy(frame->vir_addr,buf,w*h*3/2);
  59.                         free(buf);
  60.                 }
  61.         }

  62.     //do zoom here?
  63.     return ret;
  64.    
  65. }
复制代码


这个函数里面好像要处理不同的像素格式的。
回复

使用道具 举报

54

积分

0

威望

0

贡献

技术小白

积分
54
发表于 2014-12-22 14:43:55        只看该作者  12#
本帖最后由 yaolunlun 于 2014-12-22 14:46 编辑
bunchen 发表于 2014-12-20 11:35
看来跟分辨率没关系,我觉得应该跟数据的frame format 像素格式有关。楼主可以试一下这里:
hardware/rk ...

谢谢你的帮忙。这些都仔细看过了,也做了一些测试。
现在深度怀疑是VPU库硬解jpeg的兼容问题,麻烦版主能确认一下!
回复

使用道具 举报

54

积分

0

威望

0

贡献

技术小白

积分
54
发表于 2014-12-23 09:25:27        只看该作者  13#
zhansb 发表于 2014-12-17 16:49
试过罗技的C170和C930,没有楼主说的问题哦
USB摄像头的型号用的是什么?

请问,你们能提供VPU库的源码吗?或者你们是否能支持我这种摄像头jpeg编码格式?
回复

使用道具 举报

63

积分

0

威望

0

贡献

技术小白

积分
63
发表于 2014-12-24 09:43:06        只看该作者  14#
yaolunlun 发表于 2014-12-23 09:25
请问,你们能提供VPU库的源码吗?或者你们是否能支持我这种摄像头jpeg编码格式?

VPU库是系统中很重要的库,rk平台并不希望我们擅自修改而产生其他问题,所以rk平台并未对VPU库开源。建议楼主在传数据给VPU硬解前先适当处理一下数据。
回复

使用道具 举报

54

积分

0

威望

0

贡献

技术小白

积分
54
发表于 2014-12-29 10:58:03        只看该作者  15#
我最后通过libjpeg把摄像头输出的格式转换成JFIF格式后,能正常显示视频了。但是效率不好。这不是解决问题的根本办法。
还是希望能改进VPU库!:Q
回复

使用道具 举报

返回列表
12
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表