修bug
This commit is contained in:
parent
36c5424718
commit
9ace1eb2f1
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user