mpv icon indicating copy to clipboard operation
mpv copied to clipboard

demux: reclaim demux_packets to reduce memory allocator pressure

Open kasper93 opened this issue 1 year ago • 1 comments

This update introduces a demux_packet_pool, allowing for the reuse of previously allocated packets when needed.

sizeof(AVPacket) is not a part of the lavc public ABI, which prevents us to allocate memory in larger blocks. However, we can substantially decrease the amount of alloc/free operations during playback by reusing both mpv's demux_packet and AVPacket.

This adjustment addresses the root cause of issue #12076, which, although resolved upstream, did not fully tackle the persistent problem of allocating small blocks of aligned memory. This issue largely stems from the FFmpeg design of the AVPacket API. After this change memory will no longer be allocated once cache limits is reached.

The demux_packet_pool is shared as a global pool of packets for a given MPContext.

This change significantly speeds up the demuxer deinitialization, benefiting file switching scenarios, especially when a large demuxer cache is used.

See: #12294 See: #12563

I decided to open a PR without the "memory leak" part, which was the main discussion point in #12566. After refining the patches, it is no longer the main objective of this change. Therefore, #12566 remains focused on the "fast quit" option, and here we introduce the demux pool. Hopefully, we will be able to iterate on these patches in this way.

kasper93 avatar Sep 30 '24 13:09 kasper93

Hopefully it will be fine, we can always revert.

kasper93 avatar Feb 05 '25 04:02 kasper93