mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-06 10:42:22 +00:00
matroskamux: store DTS for V_MS/VFW/FOURCC streams
https://bugzilla.gnome.org/show_bug.cgi?id=745192
This commit is contained in:
parent
f5b511b42b
commit
09b8f0efc3
1 changed files with 8 additions and 2 deletions
|
@ -1128,6 +1128,7 @@ skip_details:
|
||||||
gst_matroska_mux_free_codec_priv (context);
|
gst_matroska_mux_free_codec_priv (context);
|
||||||
context->codec_priv = (gpointer) bih;
|
context->codec_priv = (gpointer) bih;
|
||||||
context->codec_priv_size = size;
|
context->codec_priv_size = size;
|
||||||
|
context->dts_only = TRUE;
|
||||||
} else if (!strcmp (mimetype, "video/x-h264")) {
|
} else if (!strcmp (mimetype, "video/x-h264")) {
|
||||||
gst_matroska_mux_set_codec_id (context,
|
gst_matroska_mux_set_codec_id (context,
|
||||||
GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC);
|
GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC);
|
||||||
|
@ -3392,7 +3393,8 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad,
|
||||||
* this would wreak havoc with time stored in matroska file */
|
* this would wreak havoc with time stored in matroska file */
|
||||||
/* TODO: maybe calculate a timestamp by using the previous timestamp
|
/* TODO: maybe calculate a timestamp by using the previous timestamp
|
||||||
* and default duration */
|
* and default duration */
|
||||||
if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
|
if ((!GST_BUFFER_PTS_IS_VALID (buf) && !collect_pad->track->dts_only)
|
||||||
|
|| (!GST_BUFFER_DTS_IS_VALID (buf) && collect_pad->track->dts_only)) {
|
||||||
GST_WARNING_OBJECT (collect_pad->collect.pad,
|
GST_WARNING_OBJECT (collect_pad->collect.pad,
|
||||||
"Invalid buffer timestamp; dropping buffer");
|
"Invalid buffer timestamp; dropping buffer");
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
@ -3400,7 +3402,11 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the timestamp for outgoing buffers */
|
/* set the timestamp for outgoing buffers */
|
||||||
ebml->timestamp = GST_BUFFER_TIMESTAMP (buf);
|
if (collect_pad->track->dts_only) {
|
||||||
|
ebml->timestamp = GST_BUFFER_DTS (buf);
|
||||||
|
} else {
|
||||||
|
ebml->timestamp = GST_BUFFER_PTS (buf);
|
||||||
|
}
|
||||||
|
|
||||||
if (collect_pad->track->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
|
if (collect_pad->track->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
|
||||||
if (!GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT)) {
|
if (!GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT)) {
|
||||||
|
|
Loading…
Reference in a new issue