mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-03 21:12:26 +00:00
oggstream: additional tag extraction
... supporting theora, flac, speex, celt. Fixes #629349.
This commit is contained in:
parent
d5055a9f23
commit
524b7c60f2
1 changed files with 45 additions and 4 deletions
|
@ -429,6 +429,22 @@ is_header_theora (GstOggStream * pad, ogg_packet * packet)
|
||||||
return (packet->bytes > 0 && (packet->packet[0] & 0x80) == 0x80);
|
return (packet->bytes > 0 && (packet->packet[0] & 0x80) == 0x80);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
extract_tags_theora (GstOggStream * pad, ogg_packet * packet)
|
||||||
|
{
|
||||||
|
if (packet->bytes > 0 && packet->packet[0] == 0x81) {
|
||||||
|
tag_list_from_vorbiscomment_packet (packet,
|
||||||
|
(const guint8 *) "\201theora", 7, &pad->taglist);
|
||||||
|
|
||||||
|
if (!pad->taglist)
|
||||||
|
pad->taglist = gst_tag_list_new ();
|
||||||
|
|
||||||
|
if (pad->bitrate)
|
||||||
|
gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
|
||||||
|
GST_TAG_BITRATE, (guint) pad->bitrate, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* dirac */
|
/* dirac */
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -828,6 +844,22 @@ setup_speex_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
extract_tags_count (GstOggStream * pad, ogg_packet * packet)
|
||||||
|
{
|
||||||
|
/* packet 2 must be comment packet */
|
||||||
|
if (packet->bytes > 0 && pad->n_header_packets_seen == 1) {
|
||||||
|
tag_list_from_vorbiscomment_packet (packet, NULL, 0, &pad->taglist);
|
||||||
|
|
||||||
|
if (!pad->taglist)
|
||||||
|
pad->taglist = gst_tag_list_new ();
|
||||||
|
|
||||||
|
if (pad->bitrate)
|
||||||
|
gst_tag_list_add (pad->taglist, GST_TAG_MERGE_REPLACE,
|
||||||
|
GST_TAG_BITRATE, (guint) pad->bitrate, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* flac */
|
/* flac */
|
||||||
|
|
||||||
|
@ -937,6 +969,15 @@ packet_duration_flac (GstOggStream * pad, ogg_packet * packet)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
extract_tags_flac (GstOggStream * pad, ogg_packet * packet)
|
||||||
|
{
|
||||||
|
if (packet->bytes > 4 && ((packet->packet[0] & 0x7F) == 0x4)) {
|
||||||
|
tag_list_from_vorbiscomment_packet (packet,
|
||||||
|
packet->packet, 4, &pad->taglist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* fishead */
|
/* fishead */
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -1705,7 +1746,7 @@ const GstOggMap mappers[] = {
|
||||||
is_header_theora,
|
is_header_theora,
|
||||||
packet_duration_constant,
|
packet_duration_constant,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
extract_tags_theora
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"\001vorbis", 7, 22,
|
"\001vorbis", 7, 22,
|
||||||
|
@ -1729,7 +1770,7 @@ const GstOggMap mappers[] = {
|
||||||
is_header_count,
|
is_header_count,
|
||||||
packet_duration_constant,
|
packet_duration_constant,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
extract_tags_count
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"PCM ", 8, 0,
|
"PCM ", 8, 0,
|
||||||
|
@ -1801,7 +1842,7 @@ const GstOggMap mappers[] = {
|
||||||
is_header_flac,
|
is_header_flac,
|
||||||
packet_duration_flac,
|
packet_duration_flac,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
extract_tags_flac
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"AnxData", 7, 0,
|
"AnxData", 7, 0,
|
||||||
|
@ -1824,7 +1865,7 @@ const GstOggMap mappers[] = {
|
||||||
is_header_count,
|
is_header_count,
|
||||||
packet_duration_constant,
|
packet_duration_constant,
|
||||||
NULL,
|
NULL,
|
||||||
NULL
|
extract_tags_count
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"\200kate\0\0\0", 8, 0,
|
"\200kate\0\0\0", 8, 0,
|
||||||
|
|
Loading…
Reference in a new issue