diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-03-22 12:03:16 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2023-04-09 15:47:45 +0200 |
commit | 9a85245adfdb259da27a50e7822a7c842e5a3247 (patch) | |
tree | 6894e7d7f7dfea6ceadfd36c1fa562b420087842 | |
parent | 98b41d0bd22258618fd8885368e8493e56208ccb (diff) | |
download | ffmpeg-9a85245adfdb259da27a50e7822a7c842e5a3247.tar.gz |
fftools/sync_queue: support operation with no limiting streams
ffmpeg CLI will not create such queues currently, but this will become
useful in following commits.
-rw-r--r-- | fftools/sync_queue.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fftools/sync_queue.c b/fftools/sync_queue.c index 0aee4ef5ff..4204a821c1 100644 --- a/fftools/sync_queue.c +++ b/fftools/sync_queue.c @@ -96,6 +96,8 @@ struct SyncQueue { // pool of preallocated frames to avoid constant allocations ObjPool *pool; + + int have_limiting; }; static void frame_move(const SyncQueue *sq, SyncQueueFrame dst, @@ -354,8 +356,9 @@ static int receive_for_stream(SyncQueue *sq, unsigned int stream_idx, /* We can release frames that do not end after the queue head. * Frames with no timestamps are just passed through with no conditions. + * Frames are also passed through when there are no limiting streams. */ - if (cmp <= 0 || ts == AV_NOPTS_VALUE) { + if (cmp <= 0 || ts == AV_NOPTS_VALUE || !sq->have_limiting) { frame_move(sq, frame, peek); objpool_release(sq->pool, (void**)&peek); av_fifo_drain2(st->fifo, 1); @@ -427,6 +430,8 @@ int sq_add_stream(SyncQueue *sq, int limiting) st->frames_max = UINT64_MAX; st->limiting = limiting; + sq->have_limiting |= limiting; + return sq->nb_streams++; } |