diff options
author | wm4 <wm4@nowhere> | 2020-03-22 13:06:59 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2020-03-22 13:06:59 +0100 |
commit | de53155971395a25cf8c6a5af8be867256f18f81 (patch) | |
tree | bec46fa1be29a442fef25624f3f88c3d3822cb9d | |
parent | b572f116da56a6a4b2affef1a7cfff82fac54207 (diff) | |
download | mpv-de53155971395a25cf8c6a5af8be867256f18f81.tar.bz2 mpv-de53155971395a25cf8c6a5af8be867256f18f81.tar.xz |
encode: restore audio muxer timebase use
Seems to crash hard if an error happens somewhere at init. Who cares.
Part of #7524.
-rw-r--r-- | audio/out/ao_lavc.c | 3 | ||||
-rw-r--r-- | common/encode_lavc.c | 5 | ||||
-rw-r--r-- | common/encode_lavc.h | 4 |
3 files changed, 12 insertions, 0 deletions
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 |