Store CRC context locally to reduce number of calls to av_crc_get_table().
authorJustin Ruggles <justin.ruggles@gmail.com>
Thu, 23 Dec 2010 18:01:23 +0000 (18:01 +0000)
committerJustin Ruggles <justin.ruggles@gmail.com>
Thu, 23 Dec 2010 18:01:23 +0000 (18:01 +0000)
Originally committed as revision 26082 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/ac3enc.c

index edd9167ef7b16bcf969b50d817f9096ae4bbc6e6..ed86e61955553c3b2bd92bcd897ea55fc5505f6d 100644 (file)
@@ -1571,6 +1571,7 @@ static unsigned int pow_poly(unsigned int a, unsigned int n, unsigned int poly)
  */
 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;
     uint8_t *frame;
 
@@ -1586,14 +1587,14 @@ static void output_frame_end(AC3EncodeContext *s)
 
     /* compute crc1 */
     /* this is not so easy because it is at the beginning of the data... */
-    crc1 = av_bswap16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
+    crc1 = av_bswap16(av_crc(crc_ctx, 0,
                              frame + 4, frame_size_58 - 4));
     crc_inv = s->crc_inv[s->frame_size > s->frame_size_min];
     crc1    = mul_poly(crc_inv, crc1, CRC16_POLY);
     AV_WB16(frame + 2, crc1);
 
     /* compute crc2 */
-    crc2 = av_bswap16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
+    crc2 = av_bswap16(av_crc(crc_ctx, 0,
                              frame + frame_size_58,
                              s->frame_size - frame_size_58 - 2));
     AV_WB16(frame + s->frame_size - 2, crc2);