else
msg_Warn( p_demux,"Missing or unsupported vorbis header." );
}
+ else if( !strcmp( sub->codecName(), "OPUS" ) )
+ {
+ tk->fmt.i_codec = VLC_CODEC_OPUS;
+ }
}
else if( !strcmp( sub->mediumName(), "video" ) )
{
void *pp_data[XIPH_MAX_HEADER_COUNT];
unsigned i_count;
+ int i_extra = p_dec->fmt_in.i_extra;
+ uint8_t *p_extra = p_dec->fmt_in.p_extra;
+
+ /* If we have no header (e.g. from RTP), make one. */
+ bool b_dummy_header = false;
+ if( !i_extra )
+ {
+ OpusHeader header;
+ opus_prepare_header( p_dec->fmt_in.audio.i_channels,
+ p_dec->fmt_in.audio.i_rate, &header );
+ if( opus_write_header( &p_extra, &i_extra, &header,
+ opus_get_version_string() ) )
+ return VLC_ENOMEM;
+ b_dummy_header = true;
+ }
+
if( xiph_SplitHeaders( pi_size, pp_data, &i_count,
- p_dec->fmt_in.i_extra, p_dec->fmt_in.p_extra) )
+ i_extra, p_extra ) )
+ {
+ if( b_dummy_header )
+ free( p_extra );
return VLC_EGENERIC;
+ }
+
if( i_count < 2 )
- return VLC_EGENERIC;;
+ {
+ if( b_dummy_header )
+ free( p_extra );
+ return VLC_EGENERIC;
+ }
oggpacket.granulepos = -1;
oggpacket.e_o_s = 0;
if (ret != VLC_SUCCESS)
msg_Err( p_dec, "initial Opus header is corrupted" );
+ if( b_dummy_header )
+ free( p_extra );
+
return ret;
}