+ return ProcessPacket( p_dec, &oggpacket, pp_block );
+}
+
+/*****************************************************************************
+ * ProcessHeaders: process Speex headers.
+ *****************************************************************************/
+static int ProcessHeaders( decoder_t *p_dec )
+{
+ decoder_sys_t *p_sys = p_dec->p_sys;
+ ogg_packet oggpacket;
+ uint8_t *p_extra;
+ int i_extra;
+
+ if( !p_dec->fmt_in.i_extra ) return VLC_EGENERIC;
+
+ oggpacket.granulepos = -1;
+ oggpacket.b_o_s = 1; /* yes this actually is a b_o_s packet :) */
+ oggpacket.e_o_s = 0;
+ oggpacket.packetno = 0;
+ p_extra = p_dec->fmt_in.p_extra;
+ i_extra = p_dec->fmt_in.i_extra;
+
+ /* Take care of the initial Vorbis header */
+ oggpacket.bytes = *(p_extra++) << 8;
+ oggpacket.bytes |= (*(p_extra++) & 0xFF);
+ oggpacket.packet = p_extra;
+ p_extra += oggpacket.bytes;
+ i_extra -= (oggpacket.bytes + 2);
+ if( i_extra < 0 )
+ {
+ msg_Err( p_dec, "header data corrupted");
+ return VLC_EGENERIC;
+ }