Skip to content

Commit

Permalink
sd_lavc: work around bug in older ffmpeg releases
Browse files Browse the repository at this point in the history
Older ffmpeg releases don't have ffmpeg git commit
50401f5fb7d778583b03a13bc4440f71063d319d, which fixes ffmpeg's
pkt_timebase check to reject its default "unset" timebase as invalid.
The consequence was that all non-PGS bitmap subtitle timestamps were
forced to 0.

Of course this hit _only_ shitty distros using outdated/badly maintained
ffmpeg releases, so this is not worth working around. I've already
wasted a lot of time on analyzing this dumb issue, and it could be
useful for bisecting, so don't drop pre-3.0 ffmpeg just yet.

Fixes #3109.
  • Loading branch information
wm4 committed May 10, 2016
1 parent 013d63b commit 7e6e47b
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions sub/sd_lavc.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ static int init(struct sd *sd)
if (!ctx)
goto error;
mp_lavc_set_extradata(ctx, sd->codec->extradata, sd->codec->extradata_size);
#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)
Expand All @@ -129,11 +130,14 @@ static int init(struct sd *sd)
// 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.
#if LIBAVCODEC_VERSION_MICRO >= 100
priv->pkt_timebase = (AVRational){1, AV_TIME_BASE};
ctx->pkt_timebase = priv->pkt_timebase;
#endif
} 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};
}
#endif
if (avcodec_open2(ctx, sub_codec, NULL) < 0)
goto error;
priv->avctx = ctx;
Expand Down

0 comments on commit 7e6e47b

Please sign in to comment.