mirror of https://github.com/mpv-player/mpv
vf_vavpp: always limit forward/backward surfaces to requested number
Don't give the driver more forward/backward refernces than it requested in num_forward_references/num_backward_references. This shouldn't matter, I'm just trying to play it safe.
This commit is contained in:
parent
e9cda168c0
commit
9714e04e94
|
@ -39,6 +39,7 @@ static bool check_error(struct vf_instance *vf, VAStatus status, const char *msg
|
||||||
struct surface_refs {
|
struct surface_refs {
|
||||||
VASurfaceID *surfaces;
|
VASurfaceID *surfaces;
|
||||||
int num_surfaces;
|
int num_surfaces;
|
||||||
|
int max_surfaces;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pipeline {
|
struct pipeline {
|
||||||
|
@ -77,12 +78,13 @@ static const struct vf_priv_s vf_priv_default = {
|
||||||
|
|
||||||
static void add_surfaces(struct vf_priv_s *p, struct surface_refs *refs, int dir)
|
static void add_surfaces(struct vf_priv_s *p, struct surface_refs *refs, int dir)
|
||||||
{
|
{
|
||||||
for (int n = 0; ; n++) {
|
for (int n = 0; n < refs->max_surfaces; n++) {
|
||||||
struct mp_image *s = mp_refqueue_get(p->queue, (1 + n) * dir);
|
struct mp_image *s = mp_refqueue_get(p->queue, (1 + n) * dir);
|
||||||
if (!s)
|
if (!s)
|
||||||
break;
|
break;
|
||||||
VASurfaceID id = va_surface_id(s);
|
VASurfaceID id = va_surface_id(s);
|
||||||
if (id != VA_INVALID_ID)
|
if (id == VA_INVALID_ID)
|
||||||
|
break;
|
||||||
MP_TARRAY_APPEND(p, refs->surfaces, refs->num_surfaces, id);
|
MP_TARRAY_APPEND(p, refs->surfaces, refs->num_surfaces, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -132,6 +134,8 @@ static void update_pipeline(struct vf_instance *vf)
|
||||||
p->pipe.num_filters = num_filters;
|
p->pipe.num_filters = num_filters;
|
||||||
p->pipe.num_input_colors = caps.num_input_color_standards;
|
p->pipe.num_input_colors = caps.num_input_color_standards;
|
||||||
p->pipe.num_output_colors = caps.num_output_color_standards;
|
p->pipe.num_output_colors = caps.num_output_color_standards;
|
||||||
|
p->pipe.forward.max_surfaces = caps.num_forward_references;
|
||||||
|
p->pipe.backward.max_surfaces = caps.num_backward_references;
|
||||||
mp_refqueue_set_refs(p->queue, caps.num_backward_references,
|
mp_refqueue_set_refs(p->queue, caps.num_backward_references,
|
||||||
caps.num_forward_references);
|
caps.num_forward_references);
|
||||||
mp_refqueue_set_mode(p->queue,
|
mp_refqueue_set_mode(p->queue,
|
||||||
|
|
Loading…
Reference in New Issue