]> git.sesse.net Git - vlc/blobdiff - src/ac3_decoder/ac3_decoder.c
Created a small&clean public interface for the ac3 decoder (see ac3_decoder.h)
[vlc] / src / ac3_decoder / ac3_decoder.c
index edf9f9c5c5669fdb88496be2de2e05ee69013c67..00001726bd2352995e5523d9c7604d736105110e 100644 (file)
@@ -1,23 +1,36 @@
 #include "int_types.h"
 #include "ac3_decoder.h"
-#include "ac3_parse.h"
-#include "ac3_exponent.h"
-#include "ac3_bit_allocate.h"
-#include "ac3_mantissa.h"
-#include "ac3_rematrix.h"
-#include "ac3_imdct.h"
-#include "ac3_downmix.h"
-
-int ac3_audio_block (ac3dec_t * p_ac3dec, s16 * buffer)
-    {
-    parse_audblk( p_ac3dec );
-    if (exponent_unpack( p_ac3dec ))
-        return 1;
-    bit_allocate( p_ac3dec );
-    mantissa_unpack( p_ac3dec );
-    if ( p_ac3dec->bsi.acmod == 0x2 )
-        rematrix( p_ac3dec );
-    imdct( p_ac3dec );
-    downmix( p_ac3dec, buffer );
+#include "ac3_internal.h"
+
+int ac3_init (ac3dec_t * p_ac3dec)
+{
+    //p_ac3dec->bit_stream.buffer = 0;
+    p_ac3dec->bit_stream.i_available = 0;
+
     return 0;
+}
+
+int ac3_decode_frame (ac3dec_t * p_ac3dec, s16 * buffer)
+{
+    int i;
+
+    parse_bsi (p_ac3dec);
+
+    for (i = 0; i < 6; i++) {
+       parse_audblk (p_ac3dec);
+       if (exponent_unpack (p_ac3dec))
+           return 1;
+       bit_allocate (p_ac3dec);
+       mantissa_unpack (p_ac3dec);
+       if  (p_ac3dec->bsi.acmod == 0x2)
+           rematrix (p_ac3dec);
+       imdct (p_ac3dec);
+       downmix (p_ac3dec, buffer);
+
+       buffer += 2*256;
     }
+
+    parse_auxdata (p_ac3dec);
+
+    return 0;
+}