summaryrefslogtreecommitdiffstats
path: root/player/lavfi.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-08-11 21:28:01 +0200
committerwm4 <wm4@nowhere>2017-08-11 21:29:35 +0200
commitc3916406451cddfb9daa42699dcd2163bff1a0eb (patch)
treebf2726829d142fdee6a62e3fb76549873a119e2e /player/lavfi.c
parent8b1d4b978de855d62efd9c3f54216196e095b5bc (diff)
downloadmpv-c3916406451cddfb9daa42699dcd2163bff1a0eb.tar.bz2
mpv-c3916406451cddfb9daa42699dcd2163bff1a0eb.tar.xz
player: fix --lavfi-complex freeze
Commit 0e0b87b6f3297 fixed that dropped packets did not trigger further work correctly. But it also made trivial --lavfi-complex freeze. The reason is that the meaning if DATA_AGAIN was overloaded: the decoders meant that they should be called again, while lavfi.c meant that other outputs needed to be checked again. Rename the latter meaning to DATA_STARVE, which means that the current input will deliver no more data, until "other" work has been done (like reading other outputs, or feeding input). The decoders never return DATA_STARVE, because they don't get input from the player core (instead, they get it from the demuxer directly, which is why they still can return DATA_WAIT). Also document the DATA_* semantics in the enum. Fixes #4746.
Diffstat (limited to 'player/lavfi.c')
-rw-r--r--player/lavfi.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/player/lavfi.c b/player/lavfi.c
index 5183b0e690..c597387937 100644
--- a/player/lavfi.c
+++ b/player/lavfi.c
@@ -716,12 +716,12 @@ static int lavfi_request_frame(struct lavfi_pad *pad)
} else if (pad->main->all_waiting) {
return DATA_WAIT;
}
- return DATA_AGAIN;
+ return DATA_STARVE;
}
// Try to read a new frame from an output pad. Returns one of the following:
// DATA_OK: a frame is returned
-// DATA_AGAIN: needs more input data
+// DATA_STARVE: needs more input data
// DATA_WAIT: needs more input data, and all inputs in LAVFI_WAIT state
// DATA_EOF: no more data
int lavfi_request_frame_a(struct lavfi_pad *pad, struct mp_audio **out_aframe)
@@ -750,7 +750,7 @@ bool lavfi_needs_input(struct lavfi_pad *pad)
// A filter user is supposed to call lavfi_needs_input(), and if that returns
// true, send either a new status or a frame. A status can be one of:
-// DATA_AGAIN: a new frame/status will come, caller will retry
+// DATA_STARVE: a new frame/status will come, caller will retry
// DATA_WAIT: a new frame/status will come, but caller goes to sleep
// DATA_EOF: no more input possible (in near time)
// If you have a new frame, use lavfi_send_frame_ instead.
@@ -764,7 +764,7 @@ void lavfi_send_status(struct lavfi_pad *pad, int status)
assert(!pad->pending_v && !pad->pending_a);
pad->input_waiting = status == DATA_WAIT || status == DATA_EOF;
- pad->input_again = status == DATA_AGAIN;
+ pad->input_again = status == DATA_STARVE;
pad->input_eof = status == DATA_EOF;
}