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.

DM8127 YUV420sp Nv12 Y分量大小问题



TI工程师,

 你好,在开发过程中的 处理数据的时候YUV格式的Y分量为什么是大小为 1280*2048,而设置的分辨率为1920*1080,为什么不是1920*1080呢

  • 您好,你用的是哪套RDK里的哪个usecase,什么代码里面指定了这个分辨率,方便指一下吗?

  • 您好,我使用的是RDK3.2的代码 里面multich_tristream_fullfeature.c文件的MultiCh_createTriStreamFullFtr函数中

    pCameraOutPrm->scOutWidth = 1920;
    pCameraOutPrm->scOutHeight = 1080; 设置了sensor的分辨率,烦请分析一下万分感谢

  • 我没有找到你说的2048在哪里啊。请帮忙指一下。

    而且,这句“而设置的分辨率为1920*1080,为什么不是1920*1080呢”  是笔误么》

  • 我是在SwosdLink_processFrames函数中处理YUV数据,Y分量放在pFullFrame->addr[0][0]里面的紧接着后面跟着的是UV分量pFullFrame->addr[0][1],发现Y分量的大小不是1920*1080个字节,而是2048*1280个字节,我是这样样计算出来的用UV分量的地址减去Y分量的地址得到的差值就是2018*1280的大小,然后我在向前面追查一个LINK就是那个nsf Link,发现在这个Link初始化的时候NsfLink_drvInitCh在该函数中处理的 

    nsfDataFmt->outPitch[0] =
    VpsUtils_align (pInChInfo->width, VPS_BUFFER_ALIGNMENT*2);
    nsfDataFmt->outPitch[0]=
    VpsUtils_align (pInChInfo->width, VPS_BUFFER_ALIGNMENT*2);

    这两个变量穿出来的只就是outPitch[0] = 2048 outPitch[0] = 2048,

    在下面的函数中进行申请空间

    status = Utils_memFrameAlloc(&format, nsfChObj->frames,
    numFrmsPerCh);在跟进该函数中的Utils_memFrameGetSize函数获取的存储空间大小就是Y分量2048*1280+UV(2048*1280/2)的大小

  • 请问您能帮我看一下吗

  • 归根揭底我觉得问题就出在对数据格式不理解上、

    我目前同样遇到这个问题 440*360的H264视频。解码后进入dsp得到 pitch=896  WIDTH=440  HEIGHT=360  ADDR[0][1]-ADDR[0][0]=602112;

    请问我要处理这帧数据长宽该如何确定和解决

  • YUV420SP的数据格式究竟是如何存储的。得到frame之后该如何去数据。我知道数据起始指针是FRAME->addr[0][0]该如何使用呢。

    例如width height

  • 关于YUV420SP_UV的疑问

    基于ipncrdk3.5版本三码流全功能做的修改

    chain:cam->isp->dup->frameout(vpss)->framein(dsp)->dsp算法

    isp出的YUV420SP_UV格式,进到dsp内做运算

    按照以下的存放方式(软件自带的部分代码)
                /* for Y plane */
                *size = pFormat->pitch[0] * bufferHeight;
                /* cOffset is at end of Y plane */
                *cOffset = *size;
                if (pFormat->dataFormat == FVID2_DF_YUV420SP_UV)
                {
                    /* C plane height is 1/2 of Y plane */
                    bufferHeight = bufferHeight / 2;
                }
                /* for C plane */
                *size += pFormat->pitch[1] * bufferHeight;
    即是 y层以 pFrame->addr[0][0]开始的pFormat->pitch[0] * bufferHeight
           c层是以pFrame->addr[0][1]开始的pFormat->pitch[1] * bufferHeight/2
    720*480的图像 打印出的信息为
    w=720,h=480,pitch[0]=864,pitch[1]=864, addr[0][0]=b9d89660,addr[0][1]=b9e150a0
    两个地址间相差578016
    按照代码中的算法地址应该相差864*480=414720,为什么是这样?
    另外,在里面做彩转黑时采用
    memset(pFrame->addr[0][1], 0x80, pInFrameInfo->rtChInfo.pitch[1]*pInFrameInfo->rtChInfo.height/2)
    只有上面少部分图像变灰色,而按照pInFrameInfo->rtChInfo.pitch[1]*pInFrameInfo->rtChInfo.height这个长度计算,图像可全变灰。
    问下:这个YUV420SP_UV的存储格式是怎样,Y和C的长度是多少,各层的数据是怎么存储的