oggstream: recognize opus headers from data, not packet count

Opus streams outside of Ogg may not have headers, and oggstream
may be used by oggmux to mux an Opus stream which does not come
from Ogg - thus without headers.
Determining headerness by packet count would strip the first two
packets from such an Opus stream, leading to a very small amount
of audio being clipped at the beginning of the stream.
This commit is contained in:
Vincent Penquerc'h 2011-11-22 13:15:33 +00:00
parent 9d4989395c
commit bf73491077

View file

@ -1872,6 +1872,12 @@ setup_opus_mapper (GstOggStream * pad, ogg_packet * packet)
return TRUE;
}
static gboolean
is_header_opus (GstOggStream * pad, ogg_packet * packet)
{
return packet->bytes >= 8 && !memcmp (packet->packet, "Opus", 4);
}
static gint64
packet_duration_opus (GstOggStream * pad, ogg_packet * packet)
{
@ -1896,7 +1902,7 @@ packet_duration_opus (GstOggStream * pad, ogg_packet * packet)
return 0;
/* headers */
if (packet->bytes >= 8 && !memcmp (packet->packet, "Opus", 4))
if (is_header_opus (pad, packet))
return 0;
toc = packet->packet[0];
@ -2109,7 +2115,7 @@ const GstOggMap mappers[] = {
granulepos_to_granule_default,
granule_to_granulepos_default,
NULL,
is_header_count,
is_header_opus,
packet_duration_opus,
NULL,
extract_tags_count