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.

8168 h264 编码问题



hi, all!

            capture捕获1952*1472的数据进行h264编码,发现图像被一层绿色覆盖(如图)。

            如果捕获的是1952*2048大小的数据就不会有问题。

           做了下实验高度1472~2048,越靠近2048绿色的范围就越小。

           问下怎么能去掉那个绿色?谢谢!

  • 补充下, A8直接读出capture捕获的yuv,使用elecard看,yuv是正常的,没有绿色的。

  • 你好,

    你能获得一下编码前的YUV420sp数据么?

    据我了解elecard的yuv工具是不能看yuv420sp的图像的。

  • en elecard 不能看yuv420sp 但可以看yuv420p, 从captrue得到yuv420sp转换成yuv420, 使用elecard发现yuv是对的

  • 你好,

    请问你的编码器使用的是哪个版本的?

    你能否配置maxWidth=2560,再编码看看,是否有同样的问题?

  • DVRRDK04.00.00.01 DM8168-EVM REL.500.V.H264AVC.E.IVAHD.02.00.04.01 在什么地方设置maxWidth?

  • 你好,

    encLink_h264.c

    static Int enclink_h264_set_static_params(IH264ENC_Params * staticParams,
                                              EncLink_AlgCreateParams *
                                              algCreateParams)
    {
        /* Initialize default values for static params */
        *staticParams = H264ENC_TI_PARAMS;

        /* Both width & height needs to be align with 2 bytes */
        staticParams->videnc2Params.maxHeight =
                      VpsUtils_align(algCreateParams->maxHeight, 2);

        staticParams->videnc2Params.maxWidth =
                      VpsUtils_align(algCreateParams->maxWidth, 16);  --》修改为2560

  • case1: capture -> ipcFrameOut -> ipcFrameIn(A8),  A8保存yuv420数据

    case2: capture ->ipcOutM3 ->ipcInM3 -> enc -> ipcBitsOut -> ipcBitsIn       a8保存h264数据

    capture 捕获的是1952*1920的数据,  在captureLink_drv.c中输出uv值:

    1248             {
    1249                 pFrame = frameList.frames[frameId];
    1250 #if 1
    1251               int mm = 0;
    1252               for (mm =0; mm < 1952 * 8; mm+=16)
    1253               {
    1254                   Vps_printf("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
    1255                           *((unsigned char*)pFrame->addr[0][1] + mm),
    1256                           *((unsigned char*)pFrame->addr[0][1] + mm+1),
    1257                           *((unsigned char*)pFrame->addr[0][1] + mm+2),
    1258                           *((unsigned char*)pFrame->addr[0][1] + mm+3),
    1259                           *((unsigned char*)pFrame->addr[0][1] + mm+4),
    1260                           *((unsigned char*)pFrame->addr[0][1] + mm+5),
    1261                           *((unsigned char*)pFrame->addr[0][1] + mm+6),
    1262                           *((unsigned char*)pFrame->addr[0][1] + mm+7),
    1263                           *((unsigned char*)pFrame->addr[0][1] + mm+8),
    1264                           *((unsigned char*)pFrame->addr[0][1] + mm+9),
    1265                           *((unsigned char*)pFrame->addr[0][1] + mm+10),
    1266                           *((unsigned char*)pFrame->addr[0][1] + mm+12),
    1267                           *((unsigned char*)pFrame->addr[0][1] + mm+13),
    1268                           *((unsigned char*)pFrame->addr[0][1] + mm+14),
    1269                           *((unsigned char*)pFrame->addr[0][1] + mm+14));
    1270               }
    1271               Vps_printf("----------------------------end \n");
    1272               Vps_printf("----------------------------end \n");
    1273 #endif
    发现case1 和case2输出的数值不一样

  • 你好! maxWidth 改2560也不行,还是老样子

  • 你好,

    你之前说YUV是对的是基于case1获得的yuv是么?

    你说case2输出uv和case1不一样,这是可能的,你摄像头的数据总会有点变化的。你是发现case2的有特别不一样么?

    IPNC上有使用IVAHD编码10MP的数据,使用的是4kx4k的编码选项,我之前让你把maxWidth加大就是想看看4kx4k的编码选项是否有问题,应该可以可以的。所以我还是怀疑是输入数据的问题。