+ fourcc_to_wf_tag( p_stream->i_fourcc, &i_tag );
+ if( i_tag == WAVE_FORMAT_UNKNOWN )
+ {
+ FREENULL( p_input->p_sys );
+ return VLC_EGENERIC;
+ }
+
+ p_stream->p_oggds_header =
+ malloc( sizeof(oggds_header_t) + p_input->p_fmt->i_extra );
+ memset( p_stream->p_oggds_header, 0, sizeof(oggds_header_t) );
+ p_stream->p_oggds_header->i_packet_type = PACKET_TYPE_HEADER;
+
+ SetDWLE( &p_stream->p_oggds_header->i_size,
+ sizeof( oggds_header_t ) - 1 + p_input->p_fmt->i_extra );
+
+ if( p_input->p_fmt->i_extra )
+ {
+ memcpy( &p_stream->p_oggds_header[1],
+ p_input->p_fmt->p_extra, p_input->p_fmt->i_extra );
+ }
+
+ memcpy( p_stream->p_oggds_header->stream_type, "audio", 5 );
+
+ memset( p_stream->p_oggds_header->sub_type, 0, 4 );
+ sprintf( p_stream->p_oggds_header->sub_type, "%-x", i_tag );
+
+ SetQWLE( &p_stream->p_oggds_header->i_time_unit, I64C(10000000) );
+ SetDWLE( &p_stream->p_oggds_header->i_default_len, 1 );
+ SetDWLE( &p_stream->p_oggds_header->i_buffer_size, 30*1024 );
+ SetQWLE( &p_stream->p_oggds_header->i_samples_per_unit,
+ p_input->p_fmt->audio.i_rate );
+ SetWLE( &p_stream->p_oggds_header->i_bits_per_sample,
+ p_input->p_fmt->audio.i_bitspersample );
+ SetDWLE( &p_stream->p_oggds_header->header.audio.i_channels,
+ p_input->p_fmt->audio.i_channels );
+ SetDWLE( &p_stream->p_oggds_header->header.audio.i_block_align,
+ p_input->p_fmt->audio.i_blockalign );
+ SetDWLE( &p_stream->p_oggds_header->header.audio.i_avgbytespersec,
+ p_input->p_fmt->i_bitrate / 8);
+ msg_Dbg( p_mux, "%4.4s stream", (char *)&p_stream->i_fourcc );
+ break;