diff options
Diffstat (limited to 'src/render/queue_libplacebo.c')
| -rw-r--r-- | src/render/queue_libplacebo.c | 25 |
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; |