vf: remove autoinserted filters on reconfig

When using rotation with hw decoding, and the VO does not support
rotation, vf_rotate is attempted to be inserted. This will go wrong, and
after that it can't recover because a vf_scale filter was autoinserted.
Just removing all autoinserted filters before reconfig fixes this.
This commit is contained in:
wm4 2014-04-21 01:26:56 +02:00
parent 2a6c084e4c
commit ba1380223a
2 changed files with 8 additions and 0 deletions

View File

@ -470,6 +470,7 @@ static void update_formats(struct vf_chain *c, struct vf_instance *vf,
MP_INFO(c, "Using conversion filter.\n");
struct vf_instance *conv = vf_open(c, "scale", NULL);
if (conv) {
conv->autoinserted = true;
conv->next = vf->next;
vf->next = conv;
update_formats(c, conv, vf->last_outfmts);
@ -523,6 +524,12 @@ int vf_reconfig(struct vf_chain *c, const struct mp_image_params *params)
{
struct mp_image_params cur = *params;
int r = 0;
for (struct vf_instance *vf = c->first; vf; ) {
struct vf_instance *next = vf->next;
if (vf->autoinserted)
vf_remove_filter(c, vf);
vf = next;
}
c->first->fmt_in = *params;
uint8_t unused[IMGFMT_END - IMGFMT_START];
update_formats(c, c->first, unused);

View File

@ -75,6 +75,7 @@ typedef struct vf_instance {
void (*uninit)(struct vf_instance *vf);
char *label;
bool autoinserted;
struct mp_image_params fmt_in, fmt_out;