[FFmpeg-cvslog] r26083 - trunk/libavcodec/ac3enc.c
jbr
subversion
Thu Dec 23 19:01:27 CET 2010
Author: jbr
Date: Thu Dec 23 19:01:26 2010
New Revision: 26083
Log:
Make sure that the 2nd CRC value does not match the AC-3 sync word.
This is optional for encoders, but it's a good idea and has minimal impact
on performance.
This will change the output for some files, but it happens not to affect the
regression tests.
Modified:
trunk/libavcodec/ac3enc.c
Modified: trunk/libavcodec/ac3enc.c
==============================================================================
--- trunk/libavcodec/ac3enc.c Thu Dec 23 19:01:23 2010 (r26082)
+++ trunk/libavcodec/ac3enc.c Thu Dec 23 19:01:26 2010 (r26083)
@@ -1572,7 +1572,7 @@ static unsigned int pow_poly(unsigned in
static void output_frame_end(AC3EncodeContext *s)
{
const AVCRC *crc_ctx = av_crc_get_table(AV_CRC_16_ANSI);
- int frame_size_58, pad_bytes, crc1, crc2, crc_inv;
+ int frame_size_58, pad_bytes, crc1, crc2_partial, crc2, crc_inv;
uint8_t *frame;
frame_size_58 = ((s->frame_size >> 2) + (s->frame_size >> 4)) << 1;
@@ -1594,9 +1594,15 @@ static void output_frame_end(AC3EncodeCo
AV_WB16(frame + 2, crc1);
/* compute crc2 */
- crc2 = av_bswap16(av_crc(crc_ctx, 0,
- frame + frame_size_58,
- s->frame_size - frame_size_58 - 2));
+ crc2_partial = av_crc(crc_ctx, 0, frame + frame_size_58,
+ s->frame_size - frame_size_58 - 3);
+ crc2 = av_crc(crc_ctx, crc2_partial, frame + s->frame_size - 3, 1);
+ /* ensure crc2 does not match sync word by flipping crcrsv bit if needed */
+ if (crc2 == 0x770B) {
+ frame[s->frame_size - 3] ^= 0x1;
+ crc2 = av_crc(crc_ctx, crc2_partial, frame + s->frame_size - 3, 1);
+ }
+ crc2 = av_bswap16(crc2);
AV_WB16(frame + s->frame_size - 2, crc2);
}
More information about the ffmpeg-cvslog
mailing list