This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:视频分析失败

Guru**** 2939760 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/671218/linux-am5728-video-analytics-fails

器件型号:AM5728

工具/软件:Linux

您好!

TI、我在  ti-processor-sdk-linux-am57xx-evm-03_02_00_05中构建视频分析演示、但我发现它无法正常工作。我运行/usr/bin/qt-opencv-opencl-opengl-multithreaded、没问题!但当我运行 我构建的 qt-OpenCV-OpenCL-OpenGL-多线程时、它会显示"/dev/video1不支持在 CameraGrab.cpp 中读取 i print/f 行。"

我输入 ti-processor-sdk-linux-am57xx-evm-03_02_00_05路径、然后运行"make qt-OpenCV-OpenCL-OpenGL-multithreading"以进行编译。

我使用 USB-OV5640摄像头、查看 UVC_v4l2.c (内核)、发现 UVC 驱动程序不支持 V4L2_CAP_READWRITE、因此我怀疑系统中的 qt-OpenCV-OpenCL-OpenGL-multithreaded 的源代码与 ti-processor_sdk-5702-am02-Linux 的源代码不同  。

如何获取原始来源?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请按照本指南进行构建:
    processors.wiki.ti.com/index.php

    本指南适用于 PSDK 3.02、以下是最新 PSDK 的指南:
    processors.wiki.ti.com/.../Processor_SDK_Building_The_SDK

    希望这对您有所帮助。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    qt-OpenCV-OpenCL-OpenGL-多线程的源 代码使用不受支持的 V4L2_CAP_READWRITE。 但是 、/usr/bin 中的 qt-OpenCV-OpenCL-OpenGL-多线程可通过 USB 摄像头工作。

    静态 int init_device (char * dev_name)
    {
    struct v4l2_capability;
    struct v4l2_cropcap cropcap;
    struct v4l2_cROP cROP;
    struct v4l2_format fmt;
    unsigned int min;
    
    PR_DEBUG ("%s:被调用!\n"、__func__);
    
    if (-1 = xioctl (fd、VIDIOC_QUERYCAP、∩)){
    if (EINVAL =errno){
    fprintf (stderr、"%s"不是 V4L2器件\n"、dev_name);
    返回0;
    } 否则{
    fprintf (stderr、"VIDIOC_QUERYCAP");
    返回0;
    }
    }
    
    PR_DEBUG ("\t 驱动程序:%s\n"
    "\t 卡:%s \n"
    "\TBUTS_INFO:%s\n"、
    cap.driver、cap.card、cap.bus_info);
    PR_DEBUG ("\tVERSION:%U.%u%u\n"、
    (cap.version >> 16)& 0xFF、
    (CAP.VERSION >> 8)& 0xFF、
    CAP.VERSION & 0xFF);
    PR_DEBUG ("\tCapabilities:0x%08x\n"、cap.capabilities);
    
    if (!(cap.capabilities & V4L2_CAP_VIDEO 捕捉)){
    fprintf (stderr、"%s"不是视频捕捉设备\n"、dev_name);
    返回0;
    }
    
    if (!(cap.capabilities & V4L2_CAP_READWRITE)){
    fprintf (stderr、"%s"不支持读取 I/o\n"、dev_name);
    返回0;
    }
    
    /*在此处选择视频输入、视频标准和调优。 *
    透明(croppcap);
    cropcap.type = V4L2_BUF_TYPE_VIDEO 捕捉;
    if (0 = xioctl (FD、VIDIOC_CROPCAP、&cropcap)){
    PR_DEBUG ("\tcropcap.type:%d\n"、cropcap.type);
    PR_DEBUG ("\tcropcap.bounds.left:%d\n"、cropcap.bounds.left);
    PR_DEBUG ("\tcropcap.bounds.top:%d\n"、cropcap.bounds.top);
    PR_DEBUG ("\tcropcap.bounds.width:%d\n"、cropcap.bounds.width);
    PR_DEBUG ("\tcropcap.bounds.height:%d\n"、cropcap.bounds.height);
    
    PR_DEBUG ("\tcropcap.defrect.left:%d\n"、cropcap.defrect.left);
    PR_DEBUG ("\tcropcap.defrect.top:%d\n"、cropcap.defrect.top);
    PR_DEBUG ("\tcropcap.defrect.width:%d\n"、cropcap.defrect.width);
    PR_DEBUG ("\tcropcap.defrect.height:%d\n"、cropcap.defrect.height);
    
    PR_DEBUG ("\tcropcap.pixelAspect.numer:%d\n"、cropcap.pixelAspect.numerator);
    PR_DEBUG ("\tcropcap.pixelaspect.denominator:%d\n"、cropcap.pixelaspect.denominator);
    PR_DEBUG ("\n");
    
    清除(裁剪);
    CROP.TYPE = V4L2_BUF_TYPE_VIDEO 捕捉;
    CROP.c = cropcap.defrect;/*重置为默认值*/
    
    if (-1 = xioctl (FD、VIDIOC_S_CROP、&CROP)){
    开关(errno){
    案例 EINVAL:
    不支持剪切。 *
    中断;
    默认值:
    /*忽略错误。 *
    PR_DEBUG ("\t 不支持裁剪\n");
    中断;
    }
    }
    否则{
    /*忽略错误。 */
    }
    清除(fmt);
    FMT.TYPE = V4L2_BUF_TYPE_VIDEO 捕捉;
    fmt.fmt.pix.width =强制宽度;
    fmt.fmt.pix.height =强制高度;
    fmt.fmt.pix.pixelformat =强制格式;
    fmt.fmt.pix.field =强制字段;
    
    PR_DEBUG ("\tfmt.fmt.pix.pixelformat:%c、%c、%c、%c\n"、
    FMT.fmt.pix.pixelformat 和0xFF、
    (FMT.fmt.pix.pixelformat >> 8)和0xFF、
    (FMT.fmt.pix.pixelformat >> 16)和0xFF、
    (FMT.fmt.pix.pixelformat >> 24)和0xFF
    );
    PR_DEBUG ("\n");
    
    如果(-1 = xioctl (FD、VIDIOC_S_FMT、&fmt))返回0;
    
    frame_pix_width = fmt.fmt.pix.width;
    frame_pix_height = fmt.fmt.pix.height;
    //越野车司机偏执。 *
    min = fmt.fmt.pix.width * 2;
    if (fmt.fmt.pix.bytesperline < min)
    fmt.fmt.pix.bytesperline =最小值;
    min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height;
    if (fmt.fmt.pix.sizeimage < min)
    fmt.fmt.pix.sizeimage =最小值;
    PR_DEBUG ("\Tbytes per line %d frame height %d frame size %d\n"、
    fmt.fmt.pix.bytesperline、fmt.fmt.pix.height、fmt.fmt.pix.sizeimage);
    Buffer_capture_length = fmt.fmt.pix.sizeimage;
    Buffer_CAPTURE_PTR =(unsigned char *) malloc (buffer_capto_length);
    返回1;
    }
    
    

    它表明这两个程序是不同的。  

    如何获取原始来源?

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请检查我之前的帖子并执行以下步骤。
    最后一个命令必须是:
    MACHINE=am57xx-EVM bitbake qt-OpenCV-OpenCL-OpenGL-多线程
    这将下载、编译、安装 qt-OpenCV-OpenCL-OpenGL-多线程和依赖项。
    在本指南中、如果在代码中进行修改、您还可以找到用于重新编译的命令。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请回答您的问题,您可以单击“此已解决我的问题”按钮。
    您可以为新问题打开一个新主题。

    BR
    玛格丽塔