From d4da3d8a644156b9f24b560eba58a87b912c1fef Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Thu, 5 Dec 2024 13:15:30 -0500 Subject: Improve audio/video_buffer_push() logic Signed-off-by: Andrew Opalach --- src/render/queue_libplacebo.c | 11 ++++++----- src/render/queue_libplacebo.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src/render') diff --git a/src/render/queue_libplacebo.c b/src/render/queue_libplacebo.c index b830bb2..8ecf9ce 100644 --- a/src/render/queue_libplacebo.c +++ b/src/render/queue_libplacebo.c @@ -188,7 +188,7 @@ static bool map_av_frame(pl_gpu gpu, pl_tex *tex, const struct pl_source_frame * ((struct pl_source_frame *)src)->frame_data = NULL; - if (lq->has_subtitles) { + if (lq->have_subtitles) { s64 now = av_rescale_q(frame->best_effort_timestamp, stream->time_base, (AVRational){ 1, 1000 }); s32 change; ASS_Image *ass_frame = ass_render_frame(lq->ass_renderer, lq->ass_track, now, &change); @@ -257,10 +257,11 @@ static void discard_av_frame(const struct pl_source_frame *src) static void queue_lp_push_av_frame(struct camu_frame_queue *queue, AVFrame *frame, f64 pts) { struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)queue; + AVStream *stream = lq->q.buf->stream->av.stream; frame->opaque = lq; pl_queue_push(lq->queue, &(struct pl_source_frame){ .pts = pts, - .duration = lq->q.buf->avg_frame_duration, + .duration = frame->duration * av_q2d(stream->time_base), .map = map_av_frame, .unmap = unmap_av_frame, .discard = discard_av_frame, @@ -288,7 +289,7 @@ static bool queue_lp_configure_subtitiles(struct camu_frame_queue *queue, s32 wi ass_set_fonts(lq->ass_renderer, NULL, NULL, ASS_FONTPROVIDER_AUTODETECT, NULL, 0); ass_process_codec_private(lq->ass_track, (const char *)codecpar->extradata, codecpar->extradata_size); - lq->has_subtitles = true; + lq->have_subtitles = true; return true; } @@ -341,7 +342,7 @@ static void queue_lp_reset(struct camu_frame_queue *queue) static void queue_lp_free(struct camu_frame_queue **queue) { struct camu_frame_queue_lp *lq = (struct camu_frame_queue_lp *)*queue; - if (lq->has_subtitles) { + if (lq->have_subtitles) { ass_free_track(lq->ass_track); ass_renderer_done(lq->ass_renderer); } @@ -354,7 +355,7 @@ struct camu_frame_queue *camu_frame_queue_lp_create(void) { struct camu_frame_queue_lp *lq = al_alloc_object(struct camu_frame_queue_lp); al_array_init(lq->overlays); - lq->has_subtitles = false; + lq->have_subtitles = false; lq->q.push = queue_lp_push; #ifdef CAMU_HAVE_FFMPEG lq->q.push_av_frame = queue_lp_push_av_frame; diff --git a/src/render/queue_libplacebo.h b/src/render/queue_libplacebo.h index 4879cdd..4f5f644 100644 --- a/src/render/queue_libplacebo.h +++ b/src/render/queue_libplacebo.h @@ -22,7 +22,7 @@ struct camu_frame_queue_lp { ASS_Library *ass; ASS_Renderer *ass_renderer; ASS_Track *ass_track; - bool has_subtitles; + bool have_subtitles; }; struct camu_frame_queue *camu_frame_queue_lp_create(void); -- cgit v1.2.3-101-g0448