diff libmpcodecs/ad_liba52.c @ 27588:9b767bba79fb

External liba52 support, part 2 of 2.
author rathann
date Mon, 15 Sep 2008 16:32:31 +0000
parents 18b87a2461da
children 606c3c97229c
line wrap: on
line diff
--- a/libmpcodecs/ad_liba52.c	Mon Sep 15 16:30:24 2008 +0000
+++ b/libmpcodecs/ad_liba52.c	Mon Sep 15 16:32:31 2008 +0000
@@ -16,8 +16,14 @@
 
 #include "libaf/af_format.h"
 
+#ifdef CONFIG_LIBA52_INTERNAL
 #include "liba52/a52.h"
 #include "liba52/mm_accel.h"
+#else
+#include <a52dec/a52.h>
+#include <a52dec/mm_accel.h>
+int (* a52_resample) (float * _f, int16_t * s16);
+#endif
 
 static a52_state_t *a52_state;
 static uint32_t a52_flags=0;
@@ -79,8 +85,10 @@
     if(sh_audio->format!=0x2000)
 	swab(sh_audio->a_in_buffer+8,sh_audio->a_in_buffer+8,length-8);
     
+#ifdef CONFIG_LIBA52_INTERNAL
     if(crc16_block(sh_audio->a_in_buffer+2,length-2)!=0)
 	mp_msg(MSGT_DECAUDIO,MSGL_STATUS,"a52: CRC check failed!  \n");
+#endif
     
     return length;
 }
@@ -121,7 +129,11 @@
 {
   /* Dolby AC3 audio: */
   /* however many channels, 2 bytes in a word, 256 samples in a block, 6 blocks in a frame */
+#ifdef CONFIG_LIBA52_INTERNAL
   if (sh->samplesize < 2) sh->samplesize = 2;
+#else
+  if (sh->samplesize < 4) sh->samplesize = 4;
+#endif
   sh->audio_out_minsize=audio_output_channels*sh->samplesize*256*6;
   sh->audio_in_minsize=3840;
   a52_level = 1.0;
@@ -175,6 +187,9 @@
 	mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 init failed\n");
 	return 0;
   }
+#ifndef CONFIG_LIBA52_INTERNAL
+  sh_audio->sample_format = AF_FORMAT_FLOAT_NE;
+#endif
   if(a52_fillbuff(sh_audio)<0){
 	mp_msg(MSGT_DECAUDIO,MSGL_ERR,"A52 sync failed\n");
 	return 0;
@@ -247,8 +262,12 @@
 	  break;
       }
   } else
+#ifdef CONFIG_LIBA52_INTERNAL
   if(a52_resample_init(a52_accel,flags,sh_audio->channels)) break;
   --sh_audio->channels; /* try to decrease no. of channels*/
+#else
+  break;
+#endif
 }
   if(sh_audio->channels<=0){
     mp_msg(MSGT_DECAUDIO,MSGL_ERR,"a52: no resampler. try different channel setup!\n");