Toybrick

关于mpp编码rgb格式的问题。

luxiaofei

高级会员

积分
654
发表于 2019-12-29 14:28:39    查看: 5790|回复: 2 | [复制链接]    打印 | 显示全部楼层
本帖最后由 luxiaofei 于 2019-12-29 14:29 编辑

是这样的,我用mpp编码opencv的mat
初始化的关键代码:
  1.     mpp_enc_data.fmt = MPP_FMT_YUV420P;
  2.     if (mpp_enc_data.fmt <= MPP_FMT_YUV420SP_VU)
  3.         mpp_enc_data.frame_size = mpp_enc_data.hor_stride * mpp_enc_data.ver_stride * 3 / 2;
  4.     else if (mpp_enc_data.fmt <= MPP_FMT_YUV422_UYVY) {
  5.         // NOTE: yuyv and uyvy need to double stride
  6.         mpp_enc_data.hor_stride *= 2;
  7.         mpp_enc_data.frame_size = mpp_enc_data.hor_stride * mpp_enc_data.ver_stride;
  8.     } else
  9.         mpp_enc_data.frame_size = mpp_enc_data.hor_stride * mpp_enc_data.ver_stride * 4;
复制代码
调用mpp的代码:(其中image2是mat格式的)

  1.         unsigned char *buf = mpp_buffer_get_ptr(mpp_enc_data.frm_buf);

  2.         cvtColor(image2, dstimage,CV_RGB2YUV_I420);
  3.         memcpy(buf, dstimage.data,Image_Width*Image_High*3/2*sizeof(unsigned char));

  4.         ret = mpp_frame_init(&frame);
  5.         mpp_frame_set_width(frame, mpp_enc_data.width);
  6.         mpp_frame_set_height(frame, mpp_enc_data.height);
  7.         mpp_frame_set_hor_stride(frame, mpp_enc_data.hor_stride);
  8.         mpp_frame_set_ver_stride(frame, mpp_enc_data.ver_stride);
  9.         mpp_frame_set_fmt(frame, mpp_enc_data.fmt);
  10.         mpp_frame_set_buffer(frame, mpp_enc_data.frm_buf);

  11.         ret = mpp_enc_data.mpi->encode_put_frame(mpp_enc_data.ctx, frame);
  12.         ret = mpp_enc_data.mpi->encode_get_packet(mpp_enc_data.ctx, &packet);
复制代码
相当于先把opencv的mat转成yuv格式的,再编码,是可以的。

但是在初始化时,我把流格式设置为MPP_FMT_RGB888,不使用cvtcolor函数,直接拷贝内存,
  1.         //cvtColor(image2, dstimage,CV_RGB2YUV_I420);
  2.         memcpy(buf, image2.data,Image_Width*Image_High*4*sizeof(unsigned char));
复制代码
编码出来的就是花屏,
问一下版主和大家有没有什么经验


回复

使用道具 举报

luxiaofei

高级会员

积分
654
 楼主| 发表于 2019-12-30 15:18:28 | 显示全部楼层
顶一下,大家有用过rgb格式的编码吗
回复

使用道具 举报

piccolo

中级会员

积分
316
发表于 2019-12-30 15:36:05 | 显示全部楼层

回帖奖励 +10 金钱

我也尝试过编码rgb888的数据,出来是花屏的。没办法只能用rga先转成yuv
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表