filter: add/use a convenience function

I guess this is generally useful for filters which buffer data
internally.
This commit is contained in:
wm4 2018-02-01 07:00:37 +01:00 committed by Kevin Mitchell
parent afb167cfd2
commit debc17663d
No known key found for this signature in database
GPG Key ID: 559A34B46A917232
3 changed files with 12 additions and 2 deletions

View File

@ -251,8 +251,7 @@ static void fixed_aframe_size_process(struct mp_filter *f)
p->out = NULL;
p->out_written = 0;
} else {
if (mp_pin_out_request_data(f->ppins[0]))
mp_filter_internal_mark_progress(f);
mp_pin_out_request_data_next(f->ppins[0]);
}
}

View File

@ -256,6 +256,12 @@ bool mp_pin_out_request_data(struct mp_pin *p)
return mp_pin_out_has_data(p);
}
void mp_pin_out_request_data_next(struct mp_pin *p)
{
if (mp_pin_out_request_data(p))
update_filter(p->owner, p->conn->manual_connection);
}
struct mp_frame mp_pin_out_read(struct mp_pin *p)
{
if (!mp_pin_out_request_data(p))

View File

@ -47,6 +47,11 @@ bool mp_pin_in_write(struct mp_pin *p, struct mp_frame frame);
// buffered in mp_pins goes against this.
bool mp_pin_out_request_data(struct mp_pin *p);
// Same as mp_pin_out_request_data(), but call the filter's process() function
// next time even if there is new data. the intention is that the filter reads
// the data in the next iteration, without checking for the data now.
void mp_pin_out_request_data_next(struct mp_pin *p);
// Same as mp_pin_out_request_data(), but does not attempt to procure new frames
// if the return value is false.
bool mp_pin_out_has_data(struct mp_pin *p);