Commit 22aa87e9 authored by Vincent Penquerc'h's avatar Vincent Penquerc'h Committed by Sebastian Dröge

ogg: implement packet duration query for kate streams

https://bugzilla.gnome.org/show_bug.cgi?id=637519
parent aa07af41
......@@ -540,7 +540,12 @@ gst_ogg_demux_chain_peer (GstOggPad * pad, ogg_packet * packet,
} else if (pad->map.is_sparse) {
out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
pad->current_granule);
out_duration = GST_CLOCK_TIME_NONE;
if (duration == GST_CLOCK_TIME_NONE) {
out_duration = GST_CLOCK_TIME_NONE;
} else {
out_duration = gst_util_uint64_scale (duration,
GST_SECOND * pad->map.granulerate_d, pad->map.granulerate_n);
}
} else {
out_timestamp = gst_ogg_stream_granule_to_time (&pad->map,
pad->current_granule - duration);
......
......@@ -1732,6 +1732,32 @@ setup_kate_mapper (GstOggStream * pad, ogg_packet * packet)
return TRUE;
}
static gint64
packet_duration_kate (GstOggStream * pad, ogg_packet * packet)
{
gint64 duration;
if (packet->bytes < 1)
return 0;
switch (packet->packet[0]) {
case 0x00: /* text data */
if (packet->bytes < 1 + 8 * 2) {
duration = 0;
} else {
duration = GST_READ_UINT64_LE (packet->packet + 1 + 8);
if (duration < 0)
duration = 0;
}
break;
default:
duration = GST_CLOCK_TIME_NONE;
break;
}
return duration;
}
/* *INDENT-OFF* */
/* indent hates our freedoms */
......@@ -1875,7 +1901,7 @@ const GstOggMap mappers[] = {
granule_to_granulepos_default,
NULL,
is_header_count,
NULL,
packet_duration_kate,
NULL,
NULL
},
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment