ac3enc: use function pointer to choose between AC-3 and E-AC-3 header output
authorJustin Ruggles <justin.ruggles@gmail.com>
Fri, 10 Jun 2011 15:45:03 +0000 (11:45 -0400)
committerJustin Ruggles <justin.ruggles@gmail.com>
Mon, 13 Jun 2011 20:49:35 +0000 (16:49 -0400)
functions.

libavcodec/ac3enc.c
libavcodec/ac3enc.h

index e8ccde5..9403bf6 100644 (file)
@@ -1987,10 +1987,7 @@ static void output_frame(AC3EncodeContext *s, unsigned char *frame)
 
     init_put_bits(&s->pb, frame, AC3_MAX_CODED_FRAME_SIZE);
 
-    if (CONFIG_EAC3_ENCODER && s->eac3)
-        ff_eac3_output_frame_header(s);
-    else
-        ac3_output_frame_header(s);
+    s->output_frame_header(s);
 
     for (blk = 0; blk < AC3_MAX_BLOCKS; blk++)
         output_audio_block(s, blk);
@@ -2732,6 +2729,12 @@ static av_cold int ac3_encode_init(AVCodecContext *avctx)
         s->crc_inv[1] = pow_poly((CRC16_POLY >> 1), (8 * frame_size_58) - 16, CRC16_POLY);
     }
 
+    /* set function pointers */
+    if (CONFIG_EAC3_ENCODER && s->eac3)
+        s->output_frame_header = ff_eac3_output_frame_header;
+    else
+        s->output_frame_header = ac3_output_frame_header;
+
     set_bandwidth(s);
 
     exponent_init(s);
index 0541683..34ca2e4 100644 (file)
@@ -209,6 +209,8 @@ typedef struct AC3EncodeContext {
     int ref_bap_set;                                         ///< indicates if ref_bap pointers have been set
 
     DECLARE_ALIGNED(32, SampleType, windowed_samples)[AC3_WINDOW_SIZE];
+
+    void (*output_frame_header)(struct AC3EncodeContext *s);
 } AC3EncodeContext;
 
 #endif /* AVCODEC_AC3ENC_H */