Closed Meonardo closed 4 months ago
直接使用解码后的 DMA buffer 在进行编码是正常的,
解码是纯外部模式分配buffer, 通过 mpp_buffer_get_fd(mpp_frame_get_buffer(frame))
获取解码后的 DMA fd.
我的操作系统是: Android 13, MPP 版本为mpp version: bebc9961 author: Herman Chen 2024-04-19 docs: Update 1.0.5 CHANGELOG.md
.
使用 DMA_HEAP 的方式导入呢? 正常应该是可以引入的,pagefault 一般是 buffer 不够大导致的,加大下 buffer 看看
@HermanChen 感谢回复.
使用 DMA_HEAP 的方式导入呢?
尝试过使用 MPP_BUFFER_TYPE_DMA_HEAP
, 还是出现主楼描述的问题,
正常应该是可以引入的,pagefault 一般是 buffer 不够大导致的,加大下 buffer 看看
这里指在导入MppBuffer
构建 MppBufferInfo
时候传入 size
大小吗? 我在这里有设置 size 为 1920*1088*3/2
, 我的图像格式为 NV12
.
// 输入
enc_params.width = 1920;
enc_params.height = 1080;
...
MppBufferInfo info;
memset(&info, 0, sizeof(MppBufferInfo));
info.type = MPP_BUFFER_TYPE_EXT_DMA;
info.fd = rga_buffer->fd;
info.size = 1920*1088*3/2;
info.index = rga_buffer->fd;
ret = mpp_buffer_import(&buffer, &info);
if (ret) {
LOGE(TAG, "mpp_buffer_import failed ret %d", ret);
return ret;
}
ret = mpp_frame_init(&frame);
if (ret) {
LOGE(TAG, "mpp_frame_init failed ret %d", ret);
return ret;
}
mpp_frame_set_width(frame, enc_params.width);
mpp_frame_set_height(frame, enc_params.height);
mpp_frame_set_hor_stride(frame, enc_params.hor_stride);
mpp_frame_set_ver_stride(frame, enc_params.ver_stride);
mpp_frame_set_fmt(frame, enc_params.fmt);
mpp_frame_set_eos(frame, frm_eos);
mpp_frame_set_buffer(frame, buffer);
...
MPP 日志:
MPP_ENC_SET_RC_CFG bps 6480000 [6075000 : 6885000] fps [25:25] gop 25
MPP_ENC_SET_PREP_CFG w:h [1920:1080] stride [1920:1088]
mode cbr bps [6075000:6480000:6885000] fps fix [25/1] -> fix [25/1] gop i [25] v [0]
直接 w h 2 看看
buffer size 问题.
背景:
/dev/dma_heap/system-uncached-dma32
分配 DMA buffer 导入到 RGA;mpp_buffer_import()
导入MppBuffer
;问题:
注: