summaryrefslogtreecommitdiff
path: root/src/render/queue_libplacebo.c
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-07-02 17:58:38 -0400
committerAndrew Opalach <andrew@akon.city> 2026-07-02 18:00:10 -0400
commit38cce5e94a10e5420e4685bbe5ebb1aade6d522f (patch)
treee2e49e69c225a9f9a224d02ae1f7a5c27af91f19 /src/render/queue_libplacebo.c
parent34933b7e1d682e67702999270cd3ceec0e167316 (diff)
downloadcamu-38cce5e94a10e5420e4685bbe5ebb1aade6d522f.tar.gz
camu-38cce5e94a10e5420e4685bbe5ebb1aade6d522f.tar.bz2
camu-38cce5e94a10e5420e4685bbe5ebb1aade6d522f.zip
Allow count to be more correct in frame_queue API
queue_libplacebo's behavior is currently unchanged, though. Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/render/queue_libplacebo.c')
-rw-r--r--src/render/queue_libplacebo.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/src/render/queue_libplacebo.c b/src/render/queue_libplacebo.c
index 408af51..f2a2898 100644
--- a/src/render/queue_libplacebo.c
+++ b/src/render/queue_libplacebo.c
@@ -157,7 +157,7 @@ static void discard_frame(const struct pl_source_frame *src)
camu_codec_frame_discard(frame);
}
-static void queue_lp_push(struct camu_frame_queue *queue, struct camu_codec_frame *frame, f64 pts)
+static void queue_lp_push(struct camu_frame_queue *queue, struct camu_codec_frame *frame, f64 pts, u32 *count)
{
struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue;
pl_queue_push(lq->queue, &(struct pl_source_frame){
@@ -168,6 +168,7 @@ static void queue_lp_push(struct camu_frame_queue *queue, struct camu_codec_fram
.discard = discard_frame,
.frame_data = frame
});
+ *count = (u32)pl_queue_num_frames(lq->queue);
}
#ifdef CAMU_HAVE_FFMPEG
@@ -391,7 +392,7 @@ static void discard_av_frame(const struct pl_source_frame *src)
log_warn("Dropped frame with PTS %.3f.", src->pts);
}
-static void queue_lp_push_av_frame(struct camu_frame_queue *queue, AVFrame *frame, f64 pts)
+static void queue_lp_push_av_frame(struct camu_frame_queue *queue, AVFrame *frame, f64 pts, u32 *count)
{
struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue;
AVStream *stream = lq->q.buf->stream->av.stream;
@@ -405,6 +406,7 @@ static void queue_lp_push_av_frame(struct camu_frame_queue *queue, AVFrame *fram
.frame_data = frame,
.first_field = pl_field_from_avframe(frame)
});
+ *count = (u32)pl_queue_num_frames(lq->queue);
}
#endif
@@ -448,9 +450,10 @@ static void queue_lp_push_subtitle(struct camu_frame_queue *queue, struct camu_c
#endif
}
-static void queue_lp_flush(struct camu_frame_queue *queue)
+static void queue_lp_flush(struct camu_frame_queue *queue, u32 *count)
{
struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue;
+ *count = (u32)pl_queue_num_frames(lq->queue);
pl_queue_push(lq->queue, NULL);
#ifdef CAMU_HAVE_SUBTITLES
if (lq->subs.are_present) {
@@ -464,18 +467,14 @@ static void queue_lp_flush(struct camu_frame_queue *queue)
#endif
}
-static s32 queue_lp_count(struct camu_frame_queue *queue)
-{
- struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue;
- return pl_queue_num_frames(lq->queue);
-}
-
-static u8 queue_lp_read(struct camu_frame_queue *queue, f64 pts, void *out)
+static u8 queue_lp_read(struct camu_frame_queue *queue, f64 pts, void *out, u32 *count)
{
struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue;
struct pl_frame_mix *mix = (struct pl_frame_mix *)out;
lq->params.pts = pts;
- switch (pl_queue_update(lq->queue, mix, &lq->params)) {
+ enum pl_queue_status ret = pl_queue_update(lq->queue, mix, &lq->params);
+ *count = (u32)pl_queue_num_frames(lq->queue);
+ switch (ret) {
case PL_QUEUE_OK:
break;
case PL_QUEUE_MORE:
@@ -492,7 +491,8 @@ static u8 queue_lp_read(struct camu_frame_queue *queue, f64 pts, void *out)
static void queue_lp_reset(struct camu_frame_queue *queue)
{
struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue;
- queue_lp_flush(&lq->q);
+ u32 count;
+ queue_lp_flush(&lq->q, &count);
pl_queue_reset(lq->queue);
}
@@ -543,7 +543,6 @@ struct camu_frame_queue *camu_frame_queue_lp_create(void)
#endif
lq->q.push_subtitle = queue_lp_push_subtitle;
lq->q.flush = queue_lp_flush;
- lq->q.count = queue_lp_count;
lq->q.read = queue_lp_read;
lq->q.reset = queue_lp_reset;
lq->q.free = queue_lp_free;