mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-03 04:52:28 +00:00
oggstream: account for opus pre-skip in granpos/time mapping
This commit is contained in:
parent
da69993a49
commit
e05f1df04b
2 changed files with 10 additions and 0 deletions
|
@ -127,6 +127,10 @@ gst_ogg_stream_granule_to_time (GstOggStream * pad, gint64 granule)
|
||||||
if (granule == 0 || pad->granulerate_n == 0 || pad->granulerate_d == 0)
|
if (granule == 0 || pad->granulerate_n == 0 || pad->granulerate_d == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
granule += pad->granule_offset;
|
||||||
|
if (granule < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return gst_util_uint64_scale (granule, GST_SECOND * pad->granulerate_d,
|
return gst_util_uint64_scale (granule, GST_SECOND * pad->granulerate_d,
|
||||||
pad->granulerate_n);
|
pad->granulerate_n);
|
||||||
}
|
}
|
||||||
|
@ -1858,6 +1862,11 @@ setup_opus_mapper (GstOggStream * pad, ogg_packet * packet)
|
||||||
pad->granuleshift = 0;
|
pad->granuleshift = 0;
|
||||||
pad->n_header_packets = 2;
|
pad->n_header_packets = 2;
|
||||||
|
|
||||||
|
/* pre-skip is in samples at 48000 Hz, which matches granule one for one */
|
||||||
|
pad->granule_offset = -GST_READ_UINT16_LE (packet->packet + 10);
|
||||||
|
GST_INFO ("Opus has a pre-skip of %" G_GINT64_FORMAT " samples",
|
||||||
|
-pad->granule_offset);
|
||||||
|
|
||||||
pad->caps = gst_caps_new_simple ("audio/x-opus", NULL);
|
pad->caps = gst_caps_new_simple ("audio/x-opus", NULL);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -60,6 +60,7 @@ struct _GstOggStream
|
||||||
gboolean have_fisbone;
|
gboolean have_fisbone;
|
||||||
gint granulerate_n;
|
gint granulerate_n;
|
||||||
gint granulerate_d;
|
gint granulerate_d;
|
||||||
|
gint64 granule_offset;
|
||||||
guint32 preroll;
|
guint32 preroll;
|
||||||
guint granuleshift;
|
guint granuleshift;
|
||||||
gint n_header_packets;
|
gint n_header_packets;
|
||||||
|
|
Loading…
Reference in a new issue