]> git.sesse.net Git - vlc/commitdiff
* modules/codec/lpcm.c: Attempt at supporting all channel configurations,
authorChristophe Massiot <massiot@videolan.org>
Tue, 11 Feb 2003 11:16:04 +0000 (11:16 +0000)
committerChristophe Massiot <massiot@videolan.org>
Tue, 11 Feb 2003 11:16:04 +0000 (11:16 +0000)
* Support for 7 and 7.1 channel configurations.

include/audio_output.h
modules/audio_filter/channel_mixer/headphone.c
modules/codec/lpcm.c
src/audio_output/common.c

index 95534c702d73de299696ce96e985eca91728c81a..88b3f787c5446e8a9f283f376f0ead4c5403a60b 100644 (file)
@@ -2,7 +2,7 @@
  * audio_output.h : audio output interface
  *****************************************************************************
  * Copyright (C) 2002 VideoLAN
- * $Id: audio_output.h,v 1.78 2003/02/09 01:13:43 massiot Exp $
+ * $Id: audio_output.h,v 1.79 2003/02/11 11:16:04 massiot Exp $
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -111,7 +111,9 @@ typedef int32_t vlc_fixed_t;
 #define AOUT_CHAN_REARCENTER        0x10
 #define AOUT_CHAN_REARLEFT          0x20
 #define AOUT_CHAN_REARRIGHT         0x40
-#define AOUT_CHAN_LFE               0x100
+#define AOUT_CHAN_MIDDLELEFT        0x100
+#define AOUT_CHAN_MIDDLERIGHT       0x200
+#define AOUT_CHAN_LFE               0x1000
 
 /* Values available for original channels only */
 #define AOUT_CHAN_DOLBYSTEREO       0x10000
index ee7c3a40721ba4ff531803f5b2fe5b895e3114e4..5ae9dae9832d374fcc1dd2fcb0a2b22137df5572 100644 (file)
@@ -3,7 +3,7 @@
  *               -> gives the feeling of a real room with a simple headphone
  *****************************************************************************
  * Copyright (C) 2002 VideoLAN
- * $Id: headphone.c,v 1.1 2002/12/09 00:52:42 babal Exp $
+ * $Id: headphone.c,v 1.2 2003/02/11 11:16:04 massiot Exp $
  *
  * Authors: Boris Dorès <babal@via.ecp.fr>
  *
@@ -260,6 +260,8 @@ static int Create( vlc_object_t *p_this )
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
     if ( p_filter->output.i_physical_channels != ( AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT )
+          || (p_filter->input.i_physical_channels & AOUT_CHAN_MIDDLELEFT)
+          || (p_filter->input.i_physical_channels & AOUT_CHAN_MIDDLERIGHT)
           || p_filter->input.i_format != p_filter->output.i_format
           || p_filter->input.i_rate != p_filter->output.i_rate
           || (p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
index 747eb1d083db3e4be5133d53574be89f5892b963..6017b37ce90143266d2eaca4deae162fc31206e8 100644 (file)
@@ -2,7 +2,7 @@
  * lpcm.c: lpcm decoder module
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: lpcm.c,v 1.10 2003/01/02 20:48:28 gbazin Exp $
+ * $Id: lpcm.c,v 1.11 2003/02/11 11:16:04 massiot Exp $
  *
  * Authors: Samuel Hocevar <sam@zoy.org>
  *          Henri Fallon <henri@videolan.org>
@@ -176,7 +176,7 @@ static void DecodeFrame( dec_thread_t * p_dec )
     aout_buffer_t *    p_buffer;
     mtime_t            i_pts;
     uint8_t            i_header;
-    unsigned int       i_rate, i_original_channels, i_nb_channels;
+    unsigned int       i_rate, i_original_channels;
 
     /* Look for sync word - should be 0xXX80 */
     RealignBits( &p_dec->bit_stream );
@@ -214,32 +214,41 @@ static void DecodeFrame( dec_thread_t * p_dec )
     {
     case 0:
         i_original_channels = AOUT_CHAN_CENTER;
-        i_nb_channels = 1;
         break;
     case 1:
         i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
-        i_nb_channels = 2;
+        break;
+    case 2:
+        /* This is unsure. */
+        i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_LFE;
         break;
     case 3:
         i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT
                                | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT;
-        i_nb_channels = 4;
+        break;
+    case 4:
+        /* This is unsure. */
+        i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT
+                               | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT
+                               | AOUT_CHAN_LFE;
         break;
     case 5:
         i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT
                                | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT
                                | AOUT_CHAN_CENTER | AOUT_CHAN_LFE;
-        i_nb_channels = 6;
         break;
-    case 2:
-    case 4:
     case 6:
+        i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT
+                               | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT
+                               | AOUT_CHAN_CENTER | AOUT_CHAN_MIDDLELEFT
+                               | AOUT_CHAN_MIDDLERIGHT;
+        break;
     case 7:
-    default:
-        msg_Err( p_dec->p_fifo, "unsupported LPCM channels (0x%x)",
-                 i_header );
-        p_dec->p_fifo->b_error = 1;
-        return;
+        i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT
+                               | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT
+                               | AOUT_CHAN_CENTER | AOUT_CHAN_MIDDLELEFT
+                               | AOUT_CHAN_MIDDLERIGHT | AOUT_CHAN_LFE;
+        break;
     }
 
     if( (p_dec->p_aout_input != NULL) &&
index e02813bb8c643d82b7602c9036fc9c7368dbe5cb..c86b8158d7b12b6234773abd5fa6866985411385 100644 (file)
@@ -2,7 +2,7 @@
  * common.c : audio output management of common data structures
  *****************************************************************************
  * Copyright (C) 2002 VideoLAN
- * $Id: common.c,v 1.16 2003/01/23 17:13:28 massiot Exp $
+ * $Id: common.c,v 1.17 2003/02/11 11:16:04 massiot Exp $
  *
  * Authors: Christophe Massiot <massiot@via.ecp.fr>
  *
@@ -99,7 +99,7 @@ unsigned int aout_FormatNbChannels( const audio_sample_format_t * p_format )
     static const uint32_t pi_channels[] =
         { AOUT_CHAN_CENTER, AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT,
           AOUT_CHAN_REARCENTER, AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT,
-          AOUT_CHAN_LFE };
+          AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, AOUT_CHAN_LFE };
     unsigned int i_nb = 0, i;
 
     for ( i = 0; i < sizeof(pi_channels)/sizeof(uint32_t); i++ )
@@ -235,6 +235,14 @@ const char * aout_FormatPrintChannels( const audio_sample_format_t * p_format )
     case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
           | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_LFE:
         return "3F2R/LFE";
+    case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
+          | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_MIDDLELEFT
+          | AOUT_CHAN_MIDDLERIGHT:
+        return "3F2M2R";
+    case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
+          | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_MIDDLELEFT
+          | AOUT_CHAN_MIDDLERIGHT | AOUT_CHAN_LFE:
+        return "3F2M2R/LFE";
     }
 
     return "ERROR";