请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:AM5728 工具/软件:Linux
您好!
我尝试使用 VPE 的 CMEM 存储映像缓冲区,而不是显示它。
我参考双摄像头演示并在 capturevpedisplay 演示中采用 alloc_cmem_pbuffer ()。
下面是我在 Pro captuprepedisplay 中的 VPE_common.c 中更改的内容。
int vpe_output_init (struct vpe * vpe)
{
int ret、i;
struct v4l2_format fmt;
struct v4l2_requestbuffers rqbuf;
bool saved_multiplanar;
memset (&fmt、0、sizeof fmt);
fmt.type = V4L2_BUF_TYPE_ VIDEO_CAPTURE_MPLANE;
fmt.fmt.pix_mp.width = VPE->dst.width;
fmt.fmt.pix_mp.height = vpE->dst.height;
fmt.fmt.pix_mp.pixelformat = vpE->dst.fccc;
fmt.fpix_mp.field = V4L2_field_any;
fmt.fmt.flat平面 x_mp.space = vpix->dst.pix.pix.field
= vpix.dst_pix.pix.pix.ad.pix.pix.field = vpix.ad.ad.pose.pix_pix. 2:1;
ret = ioctl (VPE->FD、VIDIOC_S_FMT、&fmt);
if (ret <0)
pexit ("VPE o/p:s_FMT 失败:%s\n"、strerror (errno));
ret = ioctl (VPE->MT、VIDIOC_G_FFD);&ft
如果(ret < 0)
pexit ("VPE o/p:G_FMT_2失败:%s\n"、strerror (errno)));
printf ("VPE o/p:g_FMT:width =%u、height =%u、4cc =%.mt\n"、
fmt.fmt.pix_mp.width、fmt.fmt.fmp.sx、height
(char*)&fmt.fmt.pix_mp.pixelformat);
memset (&rqbufs、0、sizeof (rqbufs));
rqbufs.count = NUMBUF;
rqbufs.type = V4L2_BUF_TYPLE_VIDEO_CAPTURE_MPLANE;
rqbufs.memory = V4L2_MEMORY_DMABUF;
ret = ioctl (VPE->FD、VIDIOC_REQBUFS、&rqbufs);
如果(ret < 0)
pexit("VPE o/p:REQBUFS 失败:%s\n"、strerror (errno));
VPE->dst.numbuf = rqbufs.count;
dprintf ("VPE o/p:分配的缓冲区=%d\n"、rqbufs.count);
*
在分配多
平面缓冲区时*禁用多平面缓冲区。
* VPE 确实正确处理多平面 NV12缓冲
器*但 VIP 只能处理单平面缓冲器
*所以默认情况下、我们设置为使用单平面、并且在
严格分配 VPE 缓冲器时仅覆盖*它。
*在这里、我们保存到当前值、并在完成后将其恢复
*分配 VPE 将用于输出的缓冲区。
//
saved_multilar = vp->disp->multilar;
vp->disp->multilar = false;
//vp->disp_bufs = disp_get_vid_buffers (vp->disp、nUMBUF、vpE->dst.fourcc、
//VPE->dst.width、VPE->dst.height);
VPE->disp_bufs = get_cmem_buffers (VPE->disp、NUMBUF、VPE->dst.fourcc、
vpe->dst.width、vpE->dst.height);
vp->disp->multiplar = saved_multimanar;
if (!vp->disp_Bufs)
pexit ("分配显示缓冲区失败\n");
// SetCrbo with an
vpar bubuffer first *// disp_get_fb (vp_bufp)(i = dvp_dfp = dfb);[vp_aboutput<>mp_mfp = dsp>vp_dfp = df_dfp <>mp_aboutput<>mp_mf>vp>mp_df</df</df>vp>mp_dsp</df<vp>mp_df</df</dvp>mp_df</df>vp>mp_df</df_aboutput<vp>vp>mp_df</df</df<vp>vp_df</df>v
/*按比例返回显示分辨率*/VPE->disp_bufs[i]->noScale
= false;
dprintf ("VPE->disp_bufs_fd[%d]=%d\n"、i、VPE->output_buf_dmafd[i]);
}
dprintf ("allocating succeeds"
;返回0)
如果我在 (带有 memcpy) cmem_buf 中使用另一个图像封面,它将在 顶部图片上显示一些条纹。
我尝试保存并显示图片。然后我检查我保存的图片是否正常。
我认为这个问题发生在 display_buffer (VPE、index)中;
