+ /* Check frame sync and drop it. */
+ if( p_header[5] != 0x80 )
+ return -1;
+ return 0;
+}
+static int BdHeader( unsigned *pi_rate,
+ unsigned *pi_channels, unsigned *pi_original_channels,
+ unsigned *pi_bits,
+ const uint8_t *p_header )
+{
+ const uint32_t h = GetDWBE( p_header );
+ switch( ( h & 0xf000) >> 12 )
+ {
+ case 1:
+ *pi_channels = 1;
+ *pi_original_channels = AOUT_CHAN_CENTER;
+ break;
+ case 3:
+ *pi_channels = 2;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
+ break;
+ case 4:
+ *pi_channels = 3;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER;
+ break;
+ case 5:
+ *pi_channels = 3;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_REARCENTER;
+ break;
+ case 6:
+ *pi_channels = 4;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER |
+ AOUT_CHAN_REARCENTER;
+ break;
+ case 7:
+ *pi_channels = 4;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT |
+ AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
+ break;
+ case 8:
+ *pi_channels = 5;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER |
+ AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
+ break;
+ case 9:
+ *pi_channels = 6;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER |
+ AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT |
+ AOUT_CHAN_LFE;
+ break;
+ case 10:
+ *pi_channels = 7;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER |
+ AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT |
+ AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT;
+ break;
+ case 11:
+ *pi_channels = 8;
+ *pi_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER |
+ AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT |
+ AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT |
+ AOUT_CHAN_LFE;
+ break;