diff options
| author | 2024-12-05 13:15:30 -0500 | |
|---|---|---|
| committer | 2024-12-05 13:15:30 -0500 | |
| commit | d4da3d8a644156b9f24b560eba58a87b912c1fef (patch) | |
| tree | ea44234aadddbcf54203c5b6912ba95c2dd65591 /src/render | |
| parent | 61d2d6fd165ebfc3d3985e89000964e9b11c5157 (diff) | |
| download | camu-d4da3d8a644156b9f24b560eba58a87b912c1fef.tar.gz camu-d4da3d8a644156b9f24b560eba58a87b912c1fef.tar.bz2 camu-d4da3d8a644156b9f24b560eba58a87b912c1fef.zip | |
Improve audio/video_buffer_push() logic
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/queue_libplacebo.c | 11 | ||||
| -rw-r--r-- | src/render/queue_libplacebo.h | 2 |
2 files changed, 7 insertions, 6 deletions
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); |