From 1cb31eeacc749801d391bd17d914d804ea1ad928 Mon Sep 17 00:00:00 2001 From: "Reynaldo H. Verdejo Pinochet" Date: Sun, 6 Oct 2013 09:17:00 -0700 Subject: [PATCH] matroskamux: Add context flag for WebM WebM has a couple of specific requirements we need to handle. Idea is to set this flag once and just rely on mux->is_webm at run time instead of repeatedly figuring this out from GST_MATROSKA_DOCTYPE_WEBM (which requires a strcmp()). --- gst/matroska/matroska-mux.c | 9 ++------- gst/matroska/matroska-mux.h | 3 +++ gst/matroska/webm-mux.c | 1 + 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c index 7b846e5..dbcf4c9 100644 --- a/gst/matroska/matroska-mux.c +++ b/gst/matroska/matroska-mux.c @@ -2481,7 +2481,6 @@ gst_matroska_mux_start (GstMatroskaMux * mux) }; const gchar *media_type; gboolean audio_only; - gboolean is_webm = FALSE; guint64 master, child; GSList *collected; int i; @@ -2522,13 +2521,9 @@ gst_matroska_mux_start (GstMatroskaMux * mux) 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)); - /* Are we muxing a WebM stream? */ - if (!strcmp (mux->doctype, GST_MATROSKA_DOCTYPE_WEBM)) { - is_webm = TRUE; - } /* output caps */ audio_only = mux->num_v_streams == 0 && mux->num_a_streams > 0; - if (is_webm) { + if (mux->is_webm) { media_type = (audio_only) ? "audio/webm" : "video/webm"; } else { media_type = (audio_only) ? "audio/x-matroska" : "video/x-matroska"; @@ -2588,7 +2583,7 @@ gst_matroska_mux_start (GstMatroskaMux * mux) master = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_SEGMENTINFO); /* WebM does not support SegmentUID field on SegmentInfo */ - if (!is_webm) { + if (!mux->is_webm) { for (i = 0; i < 4; i++) { segment_uid[i] = g_random_int (); } diff --git a/gst/matroska/matroska-mux.h b/gst/matroska/matroska-mux.h index 7fea78d..47b0271 100644 --- a/gst/matroska/matroska-mux.h +++ b/gst/matroska/matroska-mux.h @@ -129,6 +129,9 @@ typedef struct _GstMatroskaMux { /* GstForceKeyUnit event */ GstEvent *force_key_unit_event; + + /* Flag to ease handling of WebM specifics */ + gboolean is_webm; } GstMatroskaMux; typedef struct _GstMatroskaMuxClass { diff --git a/gst/matroska/webm-mux.c b/gst/matroska/webm-mux.c index 19aa245..2b83b6c 100644 --- a/gst/matroska/webm-mux.c +++ b/gst/matroska/webm-mux.c @@ -97,4 +97,5 @@ static void gst_webm_mux_init (GstWebMMux * mux) { GST_MATROSKA_MUX (mux)->doctype = GST_MATROSKA_DOCTYPE_WEBM; + GST_MATROSKA_MUX (mux)->is_webm = TRUE; } -- 2.7.4