matroska: Do not write SegmentUID for WebM mux
WebM spec states SegmentUID is Unsupported. Files produced with gstreamer without this change will spit an error like this when passed to mkvalidator: ERR201: Invalid 'SegmentUID' for profile 'webm' in Info at 192
This commit is contained in:
parent
cf12017ef8
commit
edeed575ae
@ -2481,6 +2481,7 @@ gst_matroska_mux_start (GstMatroskaMux * mux)
|
|||||||
};
|
};
|
||||||
const gchar *media_type;
|
const gchar *media_type;
|
||||||
gboolean audio_only;
|
gboolean audio_only;
|
||||||
|
gboolean is_webm = FALSE;
|
||||||
guint64 master, child;
|
guint64 master, child;
|
||||||
GSList *collected;
|
GSList *collected;
|
||||||
int i;
|
int i;
|
||||||
@ -2521,9 +2522,13 @@ gst_matroska_mux_start (GstMatroskaMux * mux)
|
|||||||
g_snprintf (s_id, sizeof (s_id), "matroskamux-%08x", g_random_int ());
|
g_snprintf (s_id, sizeof (s_id), "matroskamux-%08x", g_random_int ());
|
||||||
gst_pad_push_event (mux->srcpad, gst_event_new_stream_start (s_id));
|
gst_pad_push_event (mux->srcpad, gst_event_new_stream_start (s_id));
|
||||||
|
|
||||||
|
/* Are we muxing a WebM stream? */
|
||||||
|
if (!strcmp (mux->doctype, GST_MATROSKA_DOCTYPE_WEBM)) {
|
||||||
|
is_webm = TRUE;
|
||||||
|
}
|
||||||
/* output caps */
|
/* output caps */
|
||||||
audio_only = mux->num_v_streams == 0 && mux->num_a_streams > 0;
|
audio_only = mux->num_v_streams == 0 && mux->num_a_streams > 0;
|
||||||
if (!strcmp (mux->doctype, GST_MATROSKA_DOCTYPE_WEBM)) {
|
if (is_webm) {
|
||||||
media_type = (audio_only) ? "audio/webm" : "video/webm";
|
media_type = (audio_only) ? "audio/webm" : "video/webm";
|
||||||
} else {
|
} else {
|
||||||
media_type = (audio_only) ? "audio/x-matroska" : "video/x-matroska";
|
media_type = (audio_only) ? "audio/x-matroska" : "video/x-matroska";
|
||||||
@ -2581,11 +2586,16 @@ gst_matroska_mux_start (GstMatroskaMux * mux)
|
|||||||
/* segment info */
|
/* segment info */
|
||||||
mux->info_pos = ebml->pos;
|
mux->info_pos = ebml->pos;
|
||||||
master = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_SEGMENTINFO);
|
master = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_SEGMENTINFO);
|
||||||
|
|
||||||
|
/* WebM does not support SegmentUID field on SegmentInfo */
|
||||||
|
if (!is_webm) {
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
segment_uid[i] = g_random_int ();
|
segment_uid[i] = g_random_int ();
|
||||||
}
|
}
|
||||||
gst_ebml_write_binary (ebml, GST_MATROSKA_ID_SEGMENTUID,
|
gst_ebml_write_binary (ebml, GST_MATROSKA_ID_SEGMENTUID,
|
||||||
(guint8 *) segment_uid, 16);
|
(guint8 *) segment_uid, 16);
|
||||||
|
}
|
||||||
|
|
||||||
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_TIMECODESCALE, mux->time_scale);
|
gst_ebml_write_uint (ebml, GST_MATROSKA_ID_TIMECODESCALE, mux->time_scale);
|
||||||
mux->duration_pos = ebml->pos;
|
mux->duration_pos = ebml->pos;
|
||||||
/* get duration */
|
/* get duration */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user