mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-23 15:48:23 +00:00
matroskademux: Allow Matroska headers to be read more than once
This is necessary for MSE, where a new MSE initialization segment may be appended at any point. These MSE initialization segments consist of an entire WebM file until the first Cluster element (not included). [1] Note that track definitions are ignored on successive headers, they must match, but this is not checked by matroskademux (look for `(!demux->tracks_parsed)` in the code). Source pads are not altered when the new headers are read. This patch has been splitted from the original patch from eocanha in [2]. [1] https://www.w3.org/TR/mse-byte-stream-format-webm/ [2] https://bug334082.bugzilla-attachments.gnome.org/attachment.cgi?id=362212 https://bugzilla.gnome.org/show_bug.cgi?id=793333
This commit is contained in:
parent
9605028a71
commit
9dc7859184
1 changed files with 5 additions and 0 deletions
|
@ -4984,6 +4984,11 @@ gst_matroska_demux_parse_id (GstMatroskaDemux * demux, guint32 id,
|
||||||
case GST_MATROSKA_READ_STATE_DATA:
|
case GST_MATROSKA_READ_STATE_DATA:
|
||||||
case GST_MATROSKA_READ_STATE_SEEK:
|
case GST_MATROSKA_READ_STATE_SEEK:
|
||||||
switch (id) {
|
switch (id) {
|
||||||
|
case GST_EBML_ID_HEADER:
|
||||||
|
GST_READ_CHECK (gst_matroska_demux_flush (demux, read));
|
||||||
|
demux->common.state = GST_MATROSKA_READ_STATE_SEGMENT;
|
||||||
|
gst_matroska_demux_check_seekability (demux);
|
||||||
|
break;
|
||||||
case GST_MATROSKA_ID_SEGMENTINFO:
|
case GST_MATROSKA_ID_SEGMENTINFO:
|
||||||
if (!demux->common.segmentinfo_parsed) {
|
if (!demux->common.segmentinfo_parsed) {
|
||||||
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
|
GST_READ_CHECK (gst_matroska_demux_take (demux, read, &ebml));
|
||||||
|
|
Loading…
Reference in a new issue