spdifenc: use special alignment for DTS-HD length_code
authorAnssi Hannula <anssi.hannula@iki.fi>
Fri, 30 Dec 2011 20:48:18 +0000 (22:48 +0200)
committerRonald S. Bultje <rsbultje@gmail.com>
Fri, 6 Jan 2012 00:27:07 +0000 (16:27 -0800)
Align IEC 61937 length_code for DTS-HD so that
(length_code & 0xf) == 0x8. This is reportedly needed with some
receivers.

Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
libavformat/spdifenc.c

index d541aba..5a1b8e4 100644 (file)
@@ -220,7 +220,10 @@ static int spdif_header_dts4(AVFormatContext *s, AVPacket *pkt, int core_size,
     }
 
     ctx->out_bytes   = sizeof(dtshd_start_code) + 2 + pkt_size;
     }
 
     ctx->out_bytes   = sizeof(dtshd_start_code) + 2 + pkt_size;
-    ctx->length_code = ctx->out_bytes;
+
+    /* Align so that (length_code & 0xf) == 0x8. This is reportedly needed
+     * with some receivers, but the exact requirement is unconfirmed. */
+    ctx->length_code = FFALIGN(ctx->out_bytes + 0x8, 0x10) - 0x8;
 
     av_fast_malloc(&ctx->hd_buf, &ctx->hd_buf_size, ctx->out_bytes);
     if (!ctx->hd_buf)
 
     av_fast_malloc(&ctx->hd_buf, &ctx->hd_buf_size, ctx->out_bytes);
     if (!ctx->hd_buf)