diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2018-04-03 12:35:27 +0200 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2018-04-11 11:37:05 +0200 |
commit | 3e9d676192fc6ef719a904f8a2d114efec03d7c1 (patch) | |
tree | 74ddeb6f680cb196bf4bf589fda32da4a42e1c3a /libavformat/spdifenc.c | |
parent | 9825f77ac7ab102783aad4d2e0c42584a0dde466 (diff) | |
download | ffmpeg-3e9d676192fc6ef719a904f8a2d114efec03d7c1.tar.gz |
spdifenc: support ac3 core+eac3 dependent streams
Such streams are found on Blu-ray, and identified as EAC3 type in
avformat, while the bitstream of the core stream is actually a pure AC3
frame.
Adjust the parsing accordingly, since AC3 frames always hold 6 blocks
and the numblkscod syntax element is not present.
Diffstat (limited to 'libavformat/spdifenc.c')
-rw-r--r-- | libavformat/spdifenc.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libavformat/spdifenc.c b/libavformat/spdifenc.c index 3a50aebbef..9514ff8e10 100644 --- a/libavformat/spdifenc.c +++ b/libavformat/spdifenc.c @@ -118,7 +118,8 @@ static int spdif_header_eac3(AVFormatContext *s, AVPacket *pkt) static const uint8_t eac3_repeat[4] = {6, 3, 2, 1}; int repeat = 1; - if ((pkt->data[4] & 0xc0) != 0xc0) /* fscod */ + int bsid = pkt->data[5] >> 3; + if (bsid > 10 && (pkt->data[4] & 0xc0) != 0xc0) /* fscod */ repeat = eac3_repeat[(pkt->data[4] & 0x30) >> 4]; /* numblkscod */ ctx->hd_buf = av_fast_realloc(ctx->hd_buf, &ctx->hd_buf_size, ctx->hd_buf_filled + pkt->size); |