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:VIP 中的颜色空间转换

Guru**** 2964790 points

Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/675823/linux-am5728-color-space-conversion-in-vip

器件型号:AM5728

工具/软件:Linux


你好。 我在 AM5728上使用的是 ti-processor-sdk-linux-am57xx-evm-03.03.00.04。

我有具有离散同步的并行 RGB24 1024x768视频源。 我有了我的驱动程序、可以使用 ti-VIP 驱动程序捕获图像。 但我希望获得 UYVY 像素格式的图像。

我发现、TI VIP 模块可以执行此转换、但我找不到如何启用它。

当我呼叫时:
yavta -s1024x768 -C4 -n4 -Fres#.data -fRGB24 /dev/video2

我得到了 RGB24格式的正确帧。

当我呼叫时:

yavta -s1024x768 -C4 -n4 -Fres#.data -fuyvy /dev/video2

我在 RGB24和 dmesg 输出中得到了帧、我得到:

[453.468591] vip2-s1:vIP_open
[453.468610] my_cam:获取 fmt
[453.470722] vip2-s1:vip_init_port:g_MBUS_fmt subdev MBUS_code:100A fourcc:RGB3大小:1024x768
[453.47073] vip2-s1:Calc_format_size:FourCC:RGB3 size:1024x768 BPL:3072 img_size:2359296
[453.470746] vip2-s1:init_stream fourcc:RGB3大小:1024x768 BPL:3072 img_size:2359296
[453.47074] vip2-s1:init_stream vpdma 数据类型:0x16
[453.470763] vip2-s1:vip_init_stream:流实例0x00000001ecb99000
[453.470892] vip2-s1:s_fmt 输入 fourcc:UYVY 大小:1024x768
[453.470902] vip2-s1:try _fmt fourcc:UYVY 大小:1024x768
[453.470910] vip2-s1:找不到 FourCC 格式(0x59565955)。
[453.470917] VIP_CSC_DIRECTION VIP_CSC_NA
[453.474855] my_cam:枚举帧大小索引0
[453.487372] vip2-s1:try fmt loop:0 fourcc:RGB3大小:1024x768
[453.487383] vip2-s1:try fmt loop:0发现新的更大:1024x768
[453.487392] vip2-s1:try_fmt loop:0找到的最小值为1024x768
[453.487400] vip2-s1:try fmt loop:0发现了新的最佳结果:1024x768
[453.487408] vip2-s1:try fmt loop:0找到直接匹配:1024x768
[453.487417] vip2-s1:Calc_format_size:FourCC:RGB3 size:1024x768 BPL:3072 img_size:2359296
[453.487425] vip2-s1:s_fmt try_fmt fccc:RGB3大小:1024x768
[453.487430] VIP_CSC_DIRECTION VIP_CSC_NA
[453.491404] vip2-s1:s_fmt fourcc:RGB3大小:1024x768 BPL:3072 img_size:2359296
[453.491422] vip2-s1:s_fmt pix_TO_MBUS MBUS_code:100A 大小:1024x768
[453.491431] 设置格式1024x768
[453.494584] vip2-s1:s_fmt subdev fmt MBUS_code:100A 大小:1024x768
[453.494591] vip2-s1:s_fmt vpdma 数据类型:0x16
[453.494597] my_cam:get_selection
[453.498246] vip2-s1:g_fmt fourcc:RGB3代码:100A 大小:1024x768 BPL:3072 img_size:2359296
[453.498254] vip2-s1:g_fmt vpdma 数据类型:0x16
[453.498285] vip2-s1:获取4个大小均为2359296的缓冲器。
[453.505282] vip2-s1:vIP_set_slice_path:
[453.505296] vip2-s1:vip_set_slice_path:data_path_select (00000110):800080
[453.505304] vip2-s1:vIP_set_slice_path:
[453.505313] vip2-s1:vip_set_slice_path:data_path_select (00000110):40008080
[453.505594] SET_CROP_PARSER:左侧0、顶部0
[453.510007] my_cam:s_stream 启用1
[453.512998] vip2-s1:vip_load_vpdma_list_fifo:start_DMA VB2 buf idx:0
[453.514127] vip2-s1:vip_load_vpdma_list_fifo:start_DMA VB2 buf idx:1.
[453.916727] vip2-s1:vip_stop_streaming:
[453.916742] vip2-s1:vIP_DISABLE_SC_PATH:
[453.916752] my_cam:s_stream 启用0
[453.919773] vip2-s1:无通道编号:177
[453.921522] vip2-s1:vIP_release
[453.921537] vip2-s1:vip_release_stream:流实例0xee8adef0ecb99000
[453.921546] vip2-s1:vip_release_port:端口实例0xece3e780ecb67410

即 UYVY 被驱动器丢弃


在 my_cam 驱动程序 enum_MBUS_code 调用中,我设置了 code=media_bus_FMT_RGB888_1X24,或者 如果代码->index>=1,则返回-EINVAL

在 get_fmt 和 set_fmt 中:

       fmt->format.width = 1024;
       FMT->FORMAT.HEIGHT = 768;
       fmt->format.colorspace = V4L2_colorspace_sRGB;
       fmt->format.code  = media_BUS_FMT_RGB888_1X24;
       FMT->format.field = V4L2_field_none;



如何配置 VIP 流水线或更改驱动程序以从输入读取 RGB24并将 UYVY 写入内存? 我无法更改视频源像素的格式

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

    有关 VIP 的详细信息,请查看本指南。
    processors.wiki.ti.com/.../Linux_Core_VIP_User's_Guide
    我还建议您查看此主题:
    e2e.ti.com/.../642369

    希望这对您有所帮助。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已阅读 Linux_Core_VIP_User_Guide、但未找到有关如何配置 VIP 流水线的说明。
    我使用 vin4a (vin4b 未使用和禁用)、CSC 模块应可用。

    在建议的线程中、使用了从 YUV 到 RGB 和从 mem 到 mem 的反向转换、这可以在 VPE 中完成。
    我不想将 RGB 存储器、然后将其转换为 yuv。 我想在内部 VIP CSC 的帮助下直接从 rgb24源获取 yuv 帧。

    我认为 v4l2子设备驱动程序中存在问题。 在哪里可以找到一些能够使用 VIP CSC 的驱动程序示例?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在对其他视频源进行实验和日志分析之后、我找到了解决方案。
    要在不同格式之间启用转换、需要在 VIP 驱动程序中向静态结构添加新的记录 vpi_fmt vpi_format[vp_max_active_fmt]。
    我已添加

    {
    fourcc= V4L2_PI_FMT_YUV、//您的目标捕获为 fourcc
    .code= media_BUS_FMT_RGB888_1X24、//返回 enum_MBUS_code
    .colorspace= V4L2_colorspace_SMPTE170M、
    .coplanar= 0、
    .vpdma_fmt={_vpdma_yuV_fmts[VPDma_data_FMT_YCB422]、
    }、
    }、

    在列表末尾并递增 VIP_MAX_ACTIVE_FMT。 重建后、驱动程序可以在 RGB 或 YUYV 色域中捕获视频。