]> git.sesse.net Git - ffmpeg/commitdiff
spdifenc: support ac3 core+eac3 dependent streams
authorHendrik Leppkes <h.leppkes@gmail.com>
Tue, 3 Apr 2018 10:35:27 +0000 (12:35 +0200)
committerHendrik Leppkes <h.leppkes@gmail.com>
Wed, 11 Apr 2018 09:37:05 +0000 (11:37 +0200)
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.

libavformat/spdifenc.c

index 3a50aebbefd42e0f3254852827066f60e51c71e2..9514ff8e10e3518ef736a90ad675dde9fc9c0614 100644 (file)
@@ -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);