AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
| AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_LFE,
AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER
- | AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT | AOUT_CHAN_MIDDLELEFT
- | AOUT_CHAN_MIDDLERIGHT,
+ | AOUT_CHAN_REARCENTER | AOUT_CHAN_MIDDLELEFT
+ | AOUT_CHAN_MIDDLERIGHT | AOUT_CHAN_LFE,
AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER | AOUT_CHAN_REARLEFT
| AOUT_CHAN_REARRIGHT | AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT
- | AOUT_CHAN_LFE
+ | AOUT_CHAN_LFE,
};
/*
-** channel order as defined in http://www.ogghelp.com/ogg/glossary.cfm#Audio_Channels
+** channel order as defined in http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9
*/
+/* recommended vorbis channel order for 8 channels */
+static const uint32_t pi_8channels_in[] =
+{ AOUT_CHAN_LEFT, AOUT_CHAN_CENTER, AOUT_CHAN_RIGHT,
+ AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT,
+ AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT,AOUT_CHAN_LFE,0 };
+
+/* recommended vorbis channel order for 7 channels */
+static const uint32_t pi_7channels_in[] =
+{ AOUT_CHAN_LEFT, AOUT_CHAN_CENTER, AOUT_CHAN_RIGHT,
+ AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT,
+ AOUT_CHAN_REARCENTER,AOUT_CHAN_LFE,0 };
+
/* recommended vorbis channel order for 6 channels */
static const uint32_t pi_6channels_in[] =
{ AOUT_CHAN_LEFT, AOUT_CHAN_CENTER, AOUT_CHAN_RIGHT,
# define ENC_CFG_PREFIX "sout-vorbis-"
add_submodule ()
set_description( N_("Vorbis audio encoder") )
- set_capability( "encoder", 100 )
+ set_capability( "encoder", 130 )
set_callbacks( OpenEncoder, CloseEncoder )
add_integer( ENC_CFG_PREFIX "quality", 0, NULL, ENC_QUALITY_TEXT,
const uint32_t *pi_channels_in;
switch( i_channels )
{
+ case 8:
+ pi_channels_in = pi_8channels_in;
+ break;
+ case 7:
+ pi_channels_in = pi_7channels_in;
+ break;
case 6:
case 5:
pi_channels_in = pi_6channels_in;
{
encoder_t *p_enc = (encoder_t *)p_this;
encoder_sys_t *p_sys;
- int i_quality, i_min_bitrate, i_max_bitrate, i;
+ int i_quality, i_min_bitrate, i_max_bitrate;
ogg_packet header[3];
- uint8_t *p_extra;
if( p_enc->fmt_out.i_codec != VLC_CODEC_VORBIS &&
!p_enc->b_force )
/* Create and store headers */
vorbis_analysis_headerout( &p_sys->vd, &p_sys->vc,
&header[0], &header[1], &header[2]);
- p_enc->fmt_out.i_extra = 3 * 2 + header[0].bytes +
- header[1].bytes + header[2].bytes;
- p_extra = p_enc->fmt_out.p_extra = xmalloc( p_enc->fmt_out.i_extra );
- for( i = 0; i < 3; i++ )
+ for( int i = 0; i < 3; i++ )
{
- *(p_extra++) = header[i].bytes >> 8;
- *(p_extra++) = header[i].bytes & 0xFF;
- memcpy( p_extra, header[i].packet, header[i].bytes );
- p_extra += header[i].bytes;
+ if( xiph_AppendHeaders( &p_enc->fmt_out.i_extra, &p_enc->fmt_out.p_extra,
+ header[i].bytes, header[i].packet ) )
+ {
+ p_enc->fmt_out.i_extra = 0;
+ p_enc->fmt_out.p_extra = NULL;
+ }
}
p_sys->i_channels = p_enc->fmt_in.audio.i_channels;