qn1582079057

qn1582079057

0个粉丝

1

问答

0

专栏

0

资料

qn1582079057  发布于  2020-03-07 16:16:03
采纳率 0%
1个问答
4676

HI_MPI_VDEC_GetImage获取YUV数据有问题

 
这边在HI_MPI_VDEC_SendStream之后用HI_MPI_VDEC_GetImage获取解码后的图像
但是在保存yuv数据之后用yuv查看工具查看都是花屏的,enPixelFormat打印出来是23,不知道哪里出了问题,请各位大佬指教。


void SAVE_YUVData(FILE *pfile, VIDEO_FRAME_S *pVBuf)
{
    unsigned int w, h;
    HI_U8 * pVBufVirt_Y = NULL;
    HI_U8 * pVBufVirt_C = NULL;
    HI_U8 * pMemContent = NULL;
    unsigned char *TmpBuff;
    HI_U32 size;
    PIXEL_FORMAT_E  enPixelFormat = pVBuf->enPixelFormat;
    HI_U32 u32UvHeight =0;/* the width for saved UV*/
    HI_U32 u32YHeight =0;

    if (PIXEL_FORMAT_YUV_SEMIPLANAR_420 == enPixelFormat)
    {
        size = (pVBuf->u32Stride[0])*(pVBuf->u32Height)*3/2;
        u32UvHeight = pVBuf->u32Height/2;
        u32YHeight = pVBuf->u32Height;
    }
    else
    {
        size = (pVBuf->u32Stride[0])*(pVBuf->u32Height)*2;
        u32UvHeight = pVBuf->u32Height;
        //printf("enPixelFormat %d\n",enPixelFormat);
    }
    //size = (pVBuf->u32Stride[0])*(pVBuf->u32Height)*3/2;
    pVBufVirt_Y = (HI_U8*)HI_MPI_SYS_Mmap(pVBuf->u32PhyAddr[0], pVBuf->u32Stride[0] * u32YHeight);
    pVBufVirt_C = (HI_U8*)HI_MPI_SYS_Mmap(pVBuf->u32PhyAddr[1], pVBuf->u32Stride[1] * u32UvHeight);

    TmpBuff = (unsigned char *)malloc(size);
    if(NULL == TmpBuff)
    {
        printf("Func:%s line:%d -- unable alloc %dB memory for tmp buffer\n",
            __FUNCTION__, __LINE__, size);
        return;
    }

    /* save Y ----------------------------------------------------------------*/

    for(h=0; hu32Height; h++)
    {
        pMemContent = pVBufVirt_Y + h*pVBuf->u32Stride[0];
        fwrite(pMemContent,pVBuf->u32Stride[0], 1,pfile);
    }
    fflush(pfile);
    printf("save Y\n");
    /* save U ----------------------------------------------------------------*/
    for(h=0; h     {
        pMemContent = pVBufVirt_C + h*pVBuf->u32Stride[1];

        pMemContent += 1;

        for(w=0; wu32Stride[1]/2; w++)
        {
            TmpBuff[w] = *pMemContent;
            pMemContent += 2;
        }
        fwrite(TmpBuff,pVBuf->u32Stride[1]/2, 1,pfile);
    }
    fflush(pfile);
    printf("save U\n");
    /* save V ----------------------------------------------------------------*/
    for(h=0; h     {
        pMemContent = pVBufVirt_C + h*pVBuf->u32Stride[1];

        for(w=0; wu32Stride[1]/2; w++)
        {
            TmpBuff[w] = *pMemContent;
            pMemContent += 2;
        }
        fwrite(TmpBuff,pVBuf->u32Stride[1]/2,1,pfile);
    }
    fflush(pfile);
    printf("save V\n");
    HI_MPI_SYS_Munmap(pVBufVirt_Y, pVBuf->u32Stride[0] * u32YHeight);
    HI_MPI_SYS_Munmap(pVBufVirt_C, pVBuf->u32Stride[1] * u32UvHeight);
    free(TmpBuff);

    return;
}
我来回答
回答10个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2020-03-09 08:56:55
认可0
楼主的代码在下面条件下才是对的
(enPixelFormat == PIXEL_FORMAT_YUV_SEMIPLANAR_420) && \
(enVideoFormat == VIDEO_FORMAT_LINEAR) && \
(enCompressMode == COMPRESS_MODE_NONE)

否则, 数据源都没解释对

qn1582079057

0个粉丝

1

问答

0

专栏

0

资料

qn1582079057 2020-03-09 10:19:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155192&ptid=79368]zhuangweiye 发表于 2020-3-9 08:56[/url]
楼主的代码在下面条件下才是对的
(enPixelFormat == PIXEL_FORMAT_YUV_SEMIPLANAR_420) && \
(enVideoFor ...[/quote]

我看了enVideoFormat== VIDEO_FORMAT_TILE,这样子的话是应该怎么改呢?能指教下吗

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2020-03-09 10:39:44
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155197&ptid=79368]qn1582079057 发表于 2020-3-9 10:19[/url]
我看了enVideoFormat== VIDEO_FORMAT_TILE,这样子的话是应该怎么改呢?能指教下吗[/quote]

先可以考虑HI_MPI_VDEC_SetChnParam
看芯片是否支持设置? 如果可以设置,那直接设就可以了

如果不能, 可以考虑vdec后面绑个vpss, 设置vpss的输出格式来实现格式转换

qn1582079057

0个粉丝

1

问答

0

专栏

0

资料

qn1582079057 2020-03-09 10:49:09
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155199&ptid=79368]zhuangweiye 发表于 2020-3-9 10:39[/url]
先可以考虑HI_MPI_VDEC_SetChnParam
看芯片是否支持设置? 如果可以设置,那直接设就可以了

[/quote]

好的,我试下,谢谢大神

qn1582079057

0个粉丝

1

问答

0

专栏

0

资料

qn1582079057 2020-03-09 11:30:28
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155199&ptid=79368]zhuangweiye 发表于 2020-3-9 10:39[/url]
先可以考虑HI_MPI_VDEC_SetChnParam
看芯片是否支持设置? 如果可以设置,那直接设就可以了

[/quote]

3536好像只支持VDH解码,设置不了VIDEO_FORMAT_LINEAR,VPSS设置结构体里面也没有相关设置
typedef struct hiVPSS_CHN_MODE_S
{
    VPSS_CHN_MODE_E  enChnMode;   /*Vpss channel's work mode*/
    HI_U32 u32Width;              /*Width of target image*/
    HI_U32 u32Height;             /*Height of target image*/
    HI_BOOL bDouble;              /*Field-frame transfer, only valid for VPSS_CHN2*/
    VPSS_FRAME_RATE_S stFrameRate;
    ASPECT_RATIO_S stAspectRatio;
    PIXEL_FORMAT_E  enPixelFormat;/*Pixel format of target image*/
    COMPRESS_MODE_E enCompressMode;   /*Compression mode of the output*/
}VPSS_CHN_MODE_S;

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2020-03-09 11:43:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155202&ptid=79368]qn1582079057 发表于 2020-3-9 11:30[/url]
3536好像只支持VDH解码,设置不了VIDEO_FORMAT_LINEAR,VPSS设置结构体里面也没有相关设置
typedef stru ...[/quote]

没有就不设, get frame后打出来看看是什么

qn1582079057

0个粉丝

1

问答

0

专栏

0

资料

qn1582079057 2020-03-09 12:38:58
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155203&ptid=79368]zhuangweiye 发表于 2020-3-9 11:43[/url]
没有就不设, get frame后打出来看看是什么[/quote]

vdec绑了VPSS,然后getchnframe出来格式是envideoformat是Linear格式的,用上面代码保存起来看画面正常,谢谢了

qn1582079057

0个粉丝

1

问答

0

专栏

0

资料

qn1582079057 2020-03-09 18:15:20
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155203&ptid=79368]zhuangweiye 发表于 2020-3-9 11:43[/url]
没有就不设, get frame后打出来看看是什么[/quote]

还有一个问题,VPSS设置成usermode之后,绑定VO,VO不显示,看了logmpp提示VDEC don't support bind to vpss bypass chn,请问知道是什么问题吗

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2020-03-10 08:16:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155227&ptid=79368]qn1582079057 发表于 2020-3-9 18:15[/url]
还有一个问题,VPSS设置成usermode之后,绑定VO,VO不显示,看了logmpp提示VDEC don't support bind to v ...[/quote]

楼主的问题信息给少了, 只能猜一下

一般来说, vpss 设置为user mode后绑vo, 要么把vo 设置成VO_PART_MODE_SINGLE模式, 要么vpss输出大小要和vo channel的大小一致

qn1582079057

0个粉丝

1

问答

0

专栏

0

资料

qn1582079057 2020-03-10 09:18:18
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=155239&ptid=79368]zhuangweiye 发表于 2020-3-10 08:16[/url]
楼主的问题信息给少了, 只能猜一下

一般来说, vpss 设置为user mode后绑vo, 要么把vo 设置成VO_PART_M ...[/quote]

昨天后来解决了,谢谢
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区