修bug
Some checks are pending
CI / host-build (push) Waiting to run
CI / rk3588-cross-build (push) Waiting to run

This commit is contained in:
sladro 2026-01-05 16:33:55 +08:00
parent 36c5424718
commit 9ace1eb2f1

View File

@ -331,12 +331,19 @@ private:
// Packet buffer group (bitstream input). MPP will pick the best allocator available.
if (!pkt_group) {
if (mpp_buffer_group_get_internal(&pkt_group, MPP_BUFFER_TYPE_ION | MPP_BUFFER_FLAGS_CACHABLE) != MPP_OK) {
// Try without flags.
if (mpp_buffer_group_get_internal(&pkt_group, MPP_BUFFER_TYPE_ION) != MPP_OK) {
pkt_group = nullptr;
return false;
}
auto try_group = [&](MppBufferType t) -> bool {
return mpp_buffer_group_get(&pkt_group, t, MPP_BUFFER_INTERNAL, MODULE_TAG, __FUNCTION__) == MPP_OK;
};
// Prefer dma_heap when available (newer kernels), then ion/drm as fallback.
if (!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DMA_HEAP | MPP_BUFFER_FLAGS_CACHABLE)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DMA_HEAP)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_ION | MPP_BUFFER_FLAGS_CACHABLE)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_ION)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DRM | MPP_BUFFER_FLAGS_CACHABLE)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DRM))) {
pkt_group = nullptr;
return false;
}
mpp_buffer_group_limit_config(pkt_group, 0, 8);
}
@ -392,6 +399,8 @@ private:
}
mpp_buffer_put(pkt_buf); // packet holds reference
mpp_packet_set_data(packet, dst);
mpp_packet_set_size(packet, size);
mpp_packet_set_pos(packet, dst);
mpp_packet_set_length(packet, size);
mpp_packet_set_pts(packet, pts_us);
@ -445,7 +454,18 @@ private:
MppBufferGroup group = frame_group;
size_t buf_size = mpp_frame_get_buf_size(frame);
if (!group) {
if (mpp_buffer_group_get_internal(&group, MPP_BUFFER_TYPE_DRM, NULL) != MPP_OK) return;
auto try_group = [&](MppBufferType t) -> bool {
return mpp_buffer_group_get(&group, t, MPP_BUFFER_INTERNAL, MODULE_TAG, __FUNCTION__) == MPP_OK;
};
if (!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DMA_HEAP | MPP_BUFFER_FLAGS_CACHABLE)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DMA_HEAP)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DRM | MPP_BUFFER_FLAGS_CACHABLE)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_DRM)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_ION | MPP_BUFFER_FLAGS_CACHABLE)) &&
!try_group(static_cast<MppBufferType>(MPP_BUFFER_TYPE_ION))) {
std::cerr << "[input_rtsp] mpp info_change: failed to alloc frame buffer group\n";
return;
}
frame_group = group;
} else {
mpp_buffer_group_clear(group);