From de53155971395a25cf8c6a5af8be867256f18f81 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 22 Mar 2020 13:06:59 +0100 Subject: encode: restore audio muxer timebase use Seems to crash hard if an error happens somewhere at init. Who cares. Part of #7524. --- audio/out/ao_lavc.c | 3 +++ common/encode_lavc.c | 5 +++++ common/encode_lavc.h | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/audio/out/ao_lavc.c b/audio/out/ao_lavc.c index e2cf00cc93..bc4177ae03 100644 --- a/audio/out/ao_lavc.c +++ b/audio/out/ao_lavc.c @@ -87,6 +87,9 @@ static void select_format(struct ao *ao, const AVCodec *codec) static void on_ready(void *ptr) { struct ao *ao = ptr; + struct priv *ac = ao->priv; + + ac->worst_time_base = encoder_get_mux_timebase_unlocked(ac->enc); ao_add_events(ao, AO_EVENT_INITIAL_UNBLOCK); } diff --git a/common/encode_lavc.c b/common/encode_lavc.c index b106e45fa0..f798a7007a 100644 --- a/common/encode_lavc.c +++ b/common/encode_lavc.c @@ -491,6 +491,11 @@ done: av_packet_unref(pkt); } +AVRational encoder_get_mux_timebase_unlocked(struct encoder_context *p) +{ + return p->mux_stream->st->time_base; +} + void encode_lavc_discontinuity(struct encode_lavc_context *ctx) { if (!ctx) diff --git a/common/encode_lavc.h b/common/encode_lavc.h index 97c2cf01f1..390aabd1f8 100644 --- a/common/encode_lavc.h +++ b/common/encode_lavc.h @@ -111,6 +111,10 @@ bool encoder_init_codec_and_muxer(struct encoder_context *p, // Encode the frame and write the packet. frame is ref'ed as need. bool encoder_encode(struct encoder_context *p, AVFrame *frame); +// Return muxer timebase (only available after on_ready() has been called). +// Caller needs to acquire encode_lavc_context.lock (or call it from on_ready). +AVRational encoder_get_mux_timebase_unlocked(struct encoder_context *p); + double encoder_get_offset(struct encoder_context *p); #endif -- cgit v1.2.3