mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-04 22:48:54 +00:00
matroska: handle matroska and webm doctype versions equally
The original plan was to let WebM v1 be the same as Matroska v2 (with extra constraints), but for simplicity it was decided to handle the versions equally, such that e.g. SimpleBlock is only allowed in WebM v2.
This commit is contained in:
parent
081f2d00aa
commit
9610c7f354
2 changed files with 5 additions and 10 deletions
|
@ -2581,15 +2581,13 @@ gst_matroska_demux_parse_header (GstMatroskaDemux * demux)
|
|||
doctype_class = g_type_class_ref (GST_TYPE_MATROSKA_DOCTYPE);
|
||||
doctype_value = g_enum_get_value_by_nick (doctype_class, doctype);
|
||||
if (doctype_value) {
|
||||
guint max_version =
|
||||
doctype_value->value == GST_MATROSKA_DOCTYPE_MATROSKA ? 2 : 1;
|
||||
if (version <= max_version) {
|
||||
if (version <= 2) {
|
||||
GST_INFO_OBJECT (demux, "Input is %s version %d", doctype, version);
|
||||
ret = GST_FLOW_OK;
|
||||
} else {
|
||||
GST_ELEMENT_ERROR (demux, STREAM, DEMUX, (NULL),
|
||||
("Demuxer version (%d) is too old to read %s version %d",
|
||||
max_version, doctype, version));
|
||||
("Demuxer version (2) is too old to read %s version %d",
|
||||
doctype, version));
|
||||
}
|
||||
} else {
|
||||
GST_ELEMENT_ERROR (demux, STREAM, WRONG_TYPE, (NULL),
|
||||
|
|
|
@ -2600,7 +2600,7 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad)
|
|||
}
|
||||
}
|
||||
|
||||
/* write the block, for Matroska v2 and WebM use SimpleBlock if possible
|
||||
/* write the block, for doctype v2 use SimpleBlock if possible
|
||||
* one slice (*breath*).
|
||||
* FIXME: Need to do correct lacing! */
|
||||
relative_timestamp64 = GST_BUFFER_TIMESTAMP (buf) - mux->cluster_time;
|
||||
|
@ -2612,10 +2612,7 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad)
|
|||
relative_timestamp64 -= mux->time_scale / 2;
|
||||
}
|
||||
relative_timestamp = relative_timestamp64 / (gint64) mux->time_scale;
|
||||
if (((mux->doctype == GST_MATROSKA_DOCTYPE_MATROSKA
|
||||
&& mux->doctype_version > 1)
|
||||
|| mux->doctype == GST_MATROSKA_DOCTYPE_WEBM)
|
||||
&& !write_duration) {
|
||||
if (mux->doctype_version > 1 && !write_duration) {
|
||||
int flags =
|
||||
GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT) ? 0 : 0x80;
|
||||
|
||||
|
|
Loading…
Reference in a new issue