summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2020-03-22 13:06:59 +0100
committerwm4 <wm4@nowhere>2020-03-22 13:06:59 +0100
commitde53155971395a25cf8c6a5af8be867256f18f81 (patch)
treebec46fa1be29a442fef25624f3f88c3d3822cb9d
parentb572f116da56a6a4b2affef1a7cfff82fac54207 (diff)
downloadmpv-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.c3
-rw-r--r--common/encode_lavc.c5
-rw-r--r--common/encode_lavc.h4
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