Forums

About Color Space

  • I used tvp5146 convert analog signal to digital. It does not support 4:2:0 sampled digital video outputs.

    But I need to use dm365_codecs_01_00_06 h264 encoder and it only support XDM_YUV_420SP input Color Space.

    How can I deal with it.

    Any help would be appreciate.

  • Is there any modules in dm365 can deal with it?

    If i programme a funtion to do the conversion in manual, is there any problem that may reduce the real-time performance?

    Can anyone give me some help or advise?

    Thanks in advance.

  • Hi,

    I can capture YUV420,  just using DVSDK  "encode"  sample, also using TVP5146.

    However you can also use DM36x HW resizer for color conversion.

    Regards,

    Marko.

  • Hi Marko,

    I have the EUCDK source code. How to build the DVSDK  "encode"  sample? It depends on DMAI.

    But when I build DMAI. It fell down on this:

    Linking linux/image_decode_io1_dm365.x470MV from appMain.dm365.o470MV linux/main.dm365.o470MV linux/image_decode_io1_dm365_config/linker.cmd /home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dmai_1_21_00_10/packages/ti/sdo/dmai/lib/dmai_linux_dm365.a470MV..

    /home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dm365_codecs_01_00_06/packages/ti/sdo/codecs/jpegdec/lib/libjpgdec.a(HWSET_iMX_JPEG_Dec_rotation.o): In function `JPEGDEC_TI_HWSET_iMX_rotation':

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x128): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x1bc): undefined reference to `imxenc_rotate'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x2dc): undefined reference to `imxenc_array_op'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x334): undefined reference to `imxenc_array_op'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x3e8): undefined reference to `imxenc_rotate'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x440): undefined reference to `imxenc_rotate'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x4f0): undefined reference to `imxenc_array_op_not4macs'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x588): undefined reference to `imxenc_array_scalar_op_not4macs'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x5ec): undefined reference to `imxenc_array_op_not4macs'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x65c): undefined reference to `imxenc_array_scalar_op_not4macs'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x880): undefined reference to `imxenc_rotate'

    HWSET_iMX_JPEG_Dec_rotation.c:(.text+0x8d0): undefined reference to `imxenc_rotate'

    /home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dm365_codecs_01_00_06/packages/ti/sdo/codecs/jpegdec/lib/libjpgdec.a(HWSET_iMX_Load_JPEG_Dec_pack.o): In function `JPEGDEC_TI_HWSET_iMX_Load_unPack':

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x70): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x13c): undefined reference to `imxenc_array_scalar_op_unpack'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1c8): undefined reference to `imxenc_array_scalar_op_unpack'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x240): undefined reference to `imxenc_array_scalar_op_unpack'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x284): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x2f4): undefined reference to `imxenc_array_scalar_op_unpack'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x334): undefined reference to `imxenc_downsample'

    /home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dm365_codecs_01_00_06/packages/ti/sdo/codecs/jpegdec/lib/libjpgdec.a(HWSET_iMX_Load_JPEG_Dec_pack.o): In function `JPEGDEC_TI_HWSET_iMX_Load_Pack_420SP':

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x3bc): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x450): undefined reference to `imxenc_YCbCrPack'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x500): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x51c): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x560): undefined reference to `imxenc_cmdwrite'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x57c): undefined reference to `imxenc_cmdwrite'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x5d8): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x644): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x66c): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x6c8): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x710): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x77c): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x7ac): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x804): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x830): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x898): undefined reference to `imxenc_tlu'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x928): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x944): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x960): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xac4): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xb38): undefined reference to `imxenc_set_parameters_sign'

    /home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dm365_codecs_01_00_06/packages/ti/sdo/codecs/jpegdec/lib/libjpgdec.a(HWSET_iMX_Load_JPEG_Dec_pack.o): In function `JPEGDEC_TI_HWSET_iMX_Load_Pack':

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xe10): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xecc): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xeec): undefined reference to `imxUpdate_OutPtr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xf14): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xf7c): undefined reference to `imxenc_array_scalar_op_not4macs'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0xfa8): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1068): undefined reference to `imxenc_YCbCrPack'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x10f8): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1114): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x115c): undefined reference to `imxenc_cmdwrite'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1178): undefined reference to `imxenc_cmdwrite'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x11d4): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1240): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1268): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x12c4): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x130c): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1378): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x13a8): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1400): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x142c): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1498): undefined reference to `imxenc_tlu'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x15c4): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x15e0): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x15fc): undefined reference to `Compute_InitEncodeAddr'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1730): undefined reference to `imxenc_array_scalar_op'

    HWSET_iMX_Load_JPEG_Dec_pack.c:(.text+0x1884): undefined reference to `imxenc_set_parameters_sign'

    /home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dm365_codecs_01_00_06/packages/ti/sdo/codecs/jpegdec/lib/libjpgdec.a(HWSET_iMX_Load_JPEG_Dec_scaling.o): In function `JPEGDEC_TI_HWSET_iMX_Load_Scaling_420SP':

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0xa4): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x160): undefined reference to `imxenc_scalingV'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x198): undefined reference to `imxenc_scalingH'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x20c): undefined reference to `imxenc_scalingV'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x24c): undefined reference to `imxenc_scalingH'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x28c): undefined reference to `imxenc_scalingV'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x2c8): undefined reference to `imxenc_scalingH'

    /home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dm365_codecs_01_00_06/packages/ti/sdo/codecs/jpegdec/lib/libjpgdec.a(HWSET_iMX_Load_JPEG_Dec_scaling.o): In function `JPEGDEC_TI_HWSET_iMX_Load_Scaling':

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x384): undefined reference to `imxenc_set_parameters_sign'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x444): undefined reference to `imxenc_scalingV'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x4a8): undefined reference to `imxenc_scalingV'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x4e8): undefined reference to `imxenc_scalingV'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x528): undefined reference to `imxenc_scalingH'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x568): undefined reference to `imxenc_scalingH'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x5a4): undefined reference to `imxenc_scalingH'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x5f8): undefined reference to `imxenc_scalingH'

    HWSET_iMX_Load_JPEG_Dec_scaling.c:(.text+0x6a4): undefined reference to `imxenc_array_op'

    collect2: ld returned 1 exit status

    make[2]: *** [linux/image_decode_io1_dm365.x470MV] Error 1

    make[2]: Leaving directory `/home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dmai_1_21_00_10/packages/ti/sdo/dmai/apps/image_decode_io1'

    make[1]: *** [image_decode_io1/.dm365_al] Error 2

    make[1]: Leaving directory `/home/weilei/share/eucdk_ap_15/dvsdk_2_10_01_18/dmai_1_21_00_10/packages/ti/sdo/dmai/apps'

    make: *** [dm365_al] Error 2

    How can I solve it?

    And as your suggest I have read through VPFE User's Guide.pdf, found DM36x HW resizer for color conversion.

    It's just what I want. But I don not know how to use it. Can you give me some indicate or some sample code.

    Appretiate your help very much.

    Regards,

    Lei

  • Hi Lei,

    I don't know how to build DVSDK examples with EUCDK kit, probably you should export dvsdk path.

    However you rather move to the latest TI DVSDK 4.01.00.09.

    software-dl.ti.com/.../dvsdk

    Install it and simply follow build instructions in dvsdk/docs/TMS320DM365_Software_developers_Guide.pdf (from page 19).

    You have resize demos in dvsdk4/dmai/packages/ti/sdo/dmai/apps/ video_loopback_resize,

    also look at dmai resize.c,

    and in dvsdk4/psp/linux-driver-examples-psp03.01.01.38/imp-prev-rsz/ (several demos)

    You have 2 resizer HW modes:

    1. one-the-fly (chained), where resizer is chained to capture engine; you can get  at most 2 different resolutions out 1 from RSZA and 1 from RSZB;  

     for only color conversion, just set the same input and output buffers, then only set appropriate output color format for output1.

    2. single-shot : first you get captured frame, then you can take as many resizes you want, this is when you need more the 2 output resolutions.

    Chained mode is faster.

    When you resize  from YUV422 you need only 1 resize operation (this is your case YUV422 to YUV420),

    but when you resize from YUV420, you need 2 cycles : first resize Y plane, and in the next cycle you resize UV plane.

    Also there is a lot of  of DM36x resize discussions at  e2e.ti.com forums.

    Regards,

    Marko.

  • Hi Marko,

    I succeeded in capturing V4L2_PIX_FMT_NV12 after use resizer HW mode on-the-fly. And encode also works well.

    I used V4L2_MEMORY_MMAP in my application whereas the imp-prev-rsz sample code used V4L2_MEMORY_USERPTR. I wonder whether the difference would cause any problem. Because I found that the sample allocated the buffers mutiple of  32 and 4096. I seems have saw the buffer constraint in this usage described somewhere but can not find it again.

    Thanks for being so helpful.

    Regards,

    Lei