f_enhancement_pair: keep retained frames within the hw surface budget

Reduce the queue to 8 frames and reserve that many extra surfaces on
both the BL and EL decoders.
This commit is contained in:
Kacper Michajłow committed 2026-08-22 21:00:11 +02:00
1 parent 228f3109fd
commit b955aa28f3
3 files changed
+10 -1

No files matched your search

+3 -1
View File
@@ -29,7 +29,7 @@
#define PTS_MATCH_TOLERANCE 1e-6
// Number of frames hold for matching.
#define QUEUE_MAX 16
#define QUEUE_MAX MP_ENHANCEMENT_PAIR_QUEUE_MAX
struct priv {
struct mp_decoder_wrapper *el_dec;
@@ -226,6 +226,8 @@ struct mp_filter *mp_enhancement_pair_create(struct mp_filter *parent,
struct priv *p = f->priv;
p->el_dec = mp_decoder_wrapper_create(f, el_sh);
if (p->el_dec)
mp_decoder_wrapper_set_extra_hw_frames(p->el_dec, QUEUE_MAX);
if (!p->el_dec || !mp_decoder_wrapper_reinit(p->el_dec)) {
MP_WARN(f, "Failed to set up enhancement-layer decoder; "
"rendering base layer only.\n");
+3
View File
@@ -21,6 +21,9 @@
struct sh_stream;
// Maximum number of decoded frames the pairing filter retains while matching.
#define MP_ENHANCEMENT_PAIR_QUEUE_MAX 8
// Enhancement-layer pairing filter.
//
// Reads base-layer (BL) mp_image frames from its input pin, decodes the
+4
View File
@@ -39,6 +39,7 @@
#include "sub/osd.h"
#include "video/hwdec.h"
#include "filters/f_decoder_wrapper.h"
#include "filters/f_enhancement_pair.h"
#include "video/out/vo.h"
#include "core.h"
@@ -192,6 +193,9 @@ int init_video_decoder(struct MPContext *mpctx, struct track *track)
if (!track->dec)
goto err_out;
if (sh_stream_dependent_sibling(track->stream))
mp_decoder_wrapper_set_extra_hw_frames(track->dec, MP_ENHANCEMENT_PAIR_QUEUE_MAX);
if (!mp_decoder_wrapper_reinit(track->dec))
goto err_out;