mirror of https://github.com/mpv-player/mpv
sd_lavc: always set decoder timebase
Like it's done for audio and video. Just to be uniform. I'm sorry for deleting the anti-ffmpeg vitriol. It's still all true, but since we decided to always set the timebase, the crappiness is isolated to FFmpeg internals.
This commit is contained in:
parent
edbb8f6286
commit
251ecf6e4b
|
@ -123,25 +123,9 @@ static int init(struct sd *sd)
|
|||
if (!ctx)
|
||||
goto error;
|
||||
mp_lavc_set_extradata(ctx, sd->codec->extradata, sd->codec->extradata_size);
|
||||
priv->pkt_timebase = mp_get_codec_timebase(sd->codec);
|
||||
#if LIBAVCODEC_VERSION_MICRO >= 100
|
||||
if (cid == AV_CODEC_ID_HDMV_PGS_SUBTITLE) {
|
||||
// We don't always want to set this, because the ridiculously shitty
|
||||
// libavcodec API will mess with certain fields (end_display_time)
|
||||
// when setting it. On the other hand, PGS in particular needs PTS
|
||||
// mangling. While the PGS decoder doesn't modify the timestamps (just
|
||||
// reorder it), the ridiculously shitty libavcodec wants a timebase
|
||||
// anyway and for no good reason. It always sets end_display_time to
|
||||
// UINT32_MAX (which is a broken and undocumented way to say "unknown"),
|
||||
// which coincidentally won't be overridden by the ridiculously shitty
|
||||
// pkt_timebase code. also, Libav doesn't have the pkt_timebase field,
|
||||
// because Libav tends to avoid _adding_ ridiculously shitty APIs.
|
||||
priv->pkt_timebase = (AVRational){1, AV_TIME_BASE};
|
||||
ctx->pkt_timebase = priv->pkt_timebase;
|
||||
} else {
|
||||
// But old ffmpeg releases have a buggy pkt_timebase check, because the
|
||||
// shit above wasn't bad enough!
|
||||
ctx->pkt_timebase = (AVRational){0, 0};
|
||||
}
|
||||
ctx->pkt_timebase = priv->pkt_timebase;
|
||||
#endif
|
||||
if (avcodec_open2(ctx, sub_codec, NULL) < 0)
|
||||
goto error;
|
||||
|
|
Loading…
Reference in New Issue