嵌入式农民工

嵌入式农民工

0个粉丝

1

问答

0

专栏

0

资料

嵌入式农民工  发布于  2021-01-13 13:40:57
采纳率 0%
1个问答
2549

【已解决】从vpss通道获取yuv数据出现颜色异常

     

从vpss通道获取yuv数据输出要vpss进行crop后且高度小于1080,得到的yuv数据就会有部分花屏,但是裁剪成1844*1080或者1600 1080,yuv图像显示正常。高度小于1080时,图像会出现紫色区域,随高度减少,紫色区域逐渐增大,在高度为720左右,紫色区域覆盖整张yuv图像,此时y分量显示正常,即只显示y分量,图像呈正确的黑白色。

void sample_yuv_8bit_dump(VIDEO_FRAME_S* pVBuf, FILE* pfd)
{
unsigned int w, h;
char* pVBufVirt_Y;
char* pVBufVirt_C;
char* pMemContent;
unsigned char TmpBuff[MAX_FRM_WIDTH]; //If this value is too small and the image is big, this memory may not be enough

HI_U64 phy_addr;
PIXEL_FORMAT_E  enPixelFormat = pVBuf->enPixelFormat;
HI_U32 u32UvHeight = 0;/*When the storage format is a planar format, this variable is used to keep the height of the UV component */
HI_BOOL bUvInvert;

    u32Size = (pVBuf->u32Stride[0]) * (pVBuf->u32Height) * 3 / 2;
    u32UvHeight = pVBuf->u32Height / 2;

phy_addr = pVBuf->u64PhyAddr[0];

pUserPageAddr[0] = (HI_CHAR*) HI_MPI_SYS_Mmap(phy_addr, u32Size);

if (HI_NULL == pUserPageAddr[0])
{
    return;
}

pVBufVirt_Y = pUserPageAddr[0];
pVBufVirt_C = pVBufVirt_Y + (pVBuf->u32Stride[0]) * (pVBuf->u32Height);

/* save Y ----------------------------------------------------------------*/
fprintf(stderr, "saving......Y......");
fflush(stderr);

for (h = 0; h < pVBuf->u32Height; h++)
{
    pMemContent = pVBufVirt_Y + h * pVBuf->u32Stride[0];
    fwrite(pMemContent, pVBuf->u32Width, 1, pfd);
}


    fflush(pfd);
    /* save U ----------------------------------------------------------------*/
    fprintf(stderr, "U......");
    fflush(stderr);

    for (h = 0; h < u32UvHeight; h++)
    {
        pMemContent = pVBufVirt_C + h * pVBuf->u32Stride[1];

         pMemContent += 1;

        for (w = 0; w < pVBuf->u32Width / 2; w++)
        {
            TmpBuff[w] = *pMemContent;
            pMemContent += 2;
        }

        fwrite(TmpBuff, pVBuf->u32Width / 2, 1, pfd);
    }

    fflush(pfd);

    /* save V ----------------------------------------------------------------*/
    fprintf(stderr, "V......");
    fflush(stderr);

    for (h = 0; h < u32UvHeight; h++)
    {
        pMemContent = pVBufVirt_C + h * pVBuf->u32Stride[1];

        for (w = 0; w < pVBuf->u32Width / 2; w++)
        {
            TmpBuff[w] = *pMemContent;
            pMemContent += 2;
        }

        fwrite(TmpBuff, pVBuf->u32Width / 2, 1, pfd);
    }

fflush(pfd);

fprintf(stderr, "done %d!\n", pVBuf->u32TimeRef);
fflush(stderr);

HI_MPI_SYS_Munmap(pUserPageAddr[0], u32Size);
pUserPageAddr[0] = HI_NULL;

}
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区