enable eac3 pass-through mode

- For eac3 need using 192K sample rate
- and the sample count for alsa drvier need counted by 2byte per channel/sample

Signed-off-by: Lyon Wang <lyon.wang@nxp.com>
diff --git a/ext/alsa/gstalsasink.c b/ext/alsa/gstalsasink.c
index 79b4f4a..3e1f8ca 100644
--- a/ext/alsa/gstalsasink.c
+++ b/ext/alsa/gstalsasink.c
@@ -492,6 +492,8 @@
       no_channels);
   /* set the stream rate */
   rrate = alsa->rate;
+  if ((TRUE== alsa->passthrough) && alsa->iec958 && (alsa->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_EAC3))
+    rrate = 192000;
   CHECK (snd_pcm_hw_params_set_rate_near (alsa->handle, params, &rrate, NULL),
       no_rate);
 
@@ -852,6 +854,7 @@
   alsa->buffer_time = spec->buffer_time;
   alsa->period_time = spec->latency_time;
   alsa->access = SND_PCM_ACCESS_RW_INTERLEAVED;
+  alsa->type = spec->type;
 
   if (spec->type == GST_AUDIO_RING_BUFFER_FORMAT_TYPE_RAW && alsa->channels < 9)
     gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SINK
@@ -1062,8 +1065,12 @@
 
   GST_LOG_OBJECT (asink, "received audio samples buffer of %u bytes", length);
 
-  cptr = length / alsa->bpf;
-
+  if (alsa->iec958 && (TRUE == alsa->passthrough) ) {
+    cptr = length / 4;  // treated as 2ch with S16 in pass-through mode 
+  }
+  else {
+    cptr = length / alsa->bpf;
+  }
   GST_ALSA_SINK_LOCK (asink);
   while (cptr > 0) {
     /* start by doing a blocking wait for free space. Set the timeout
diff --git a/ext/alsa/gstalsasink.h b/ext/alsa/gstalsasink.h
index 64bd1f5..5aab88e 100644
--- a/ext/alsa/gstalsasink.h
+++ b/ext/alsa/gstalsasink.h
@@ -78,6 +78,7 @@
   GMutex delay_lock;
 
   gboolean passthrough;
+  GstAudioRingBufferFormatType  type;
 };
 
 struct _GstAlsaSinkClass {