summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
Diffstat (limited to 'src/render')
-rw-r--r--src/render/queue_libplacebo.c25
-rw-r--r--src/render/queue_momo.c20
2 files changed, 20 insertions, 25 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;
diff --git a/src/render/queue_momo.c b/src/render/queue_momo.c
index bc7caf8..2f7d535 100644
--- a/src/render/queue_momo.c
+++ b/src/render/queue_momo.c
@@ -11,20 +11,22 @@ static bool queue_momo_configure_subtitles(struct camu_frame_queue *queue, u32 w
return false;
}
-static void queue_momo_push(struct camu_frame_queue *queue, struct camu_codec_frame *frame, f64 pts)
+static void queue_momo_push(struct camu_frame_queue *queue, struct camu_codec_frame *frame, f64 pts, u32 *count)
{
struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
(void)mq;
(void)pts;
+ (void)count;
camu_codec_frame_discard(frame);
}
#ifdef CAMU_HAVE_FFMPEG
-static void queue_momo_push_av_frame(struct camu_frame_queue *queue, AVFrame *frame, f64 pts)
+static void queue_momo_push_av_frame(struct camu_frame_queue *queue, AVFrame *frame, f64 pts, u32 *count)
{
struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
(void)mq;
(void)pts;
+ (void)count;
av_frame_free(&frame);
}
#endif
@@ -36,24 +38,19 @@ static void queue_momo_push_subtitle(struct camu_frame_queue *queue, struct camu
(void)packet;
}
-static void queue_momo_flush(struct camu_frame_queue *queue)
+static void queue_momo_flush(struct camu_frame_queue *queue, u32 *count)
{
(void)queue;
+ (void)count;
}
-static s32 queue_momo_count(struct camu_frame_queue *queue)
-{
- struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
- (void)mq;
- return 1;
-}
-
-static u8 queue_momo_read(struct camu_frame_queue *queue, f64 pts, void *out)
+static u8 queue_momo_read(struct camu_frame_queue *queue, f64 pts, void *out, u32 *count)
{
struct camu_frame_queue_momo *mq = (struct camu_frame_queue_momo *)queue;
(void)mq;
(void)pts;
(void)out;
+ (void)count;
return CAMU_QUEUE_OK;
}
@@ -80,7 +77,6 @@ struct camu_frame_queue *camu_frame_queue_momo_create(void)
#endif
mq->q.push_subtitle = queue_momo_push_subtitle;
mq->q.flush = queue_momo_flush;
- mq->q.count = queue_momo_count;
mq->q.read = queue_momo_read;
mq->q.reset = queue_momo_reset;
mq->q.free = queue_momo_free;