mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
matroskademux: Only check for markup and escape if necessary for plaintext subtitles
Otherwise we break USF and ASS/SSA subtitles.
This commit is contained in:
parent
91834bf80b
commit
588734b291
2 changed files with 22 additions and 13 deletions
|
@ -2943,6 +2943,8 @@ gst_matroska_demux_check_subtitle_buffer (GstElement * element,
|
||||||
size = GST_BUFFER_SIZE (*buf);
|
size = GST_BUFFER_SIZE (*buf);
|
||||||
|
|
||||||
next:
|
next:
|
||||||
|
|
||||||
|
if (sub_stream->check_markup) {
|
||||||
/* caps claim markup text, so we need to escape text,
|
/* caps claim markup text, so we need to escape text,
|
||||||
* except if text is already markup and then needs no further escaping */
|
* except if text is already markup and then needs no further escaping */
|
||||||
sub_stream->seen_markup_tag = sub_stream->seen_markup_tag ||
|
sub_stream->seen_markup_tag = sub_stream->seen_markup_tag ||
|
||||||
|
@ -2960,6 +2962,7 @@ next:
|
||||||
|
|
||||||
*buf = newbuf;
|
*buf = newbuf;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
@ -5394,15 +5397,19 @@ gst_matroska_demux_subtitle_caps (GstMatroskaTrackSubtitleContext *
|
||||||
/* well, plain text simply does not have a lot of markup ... */
|
/* well, plain text simply does not have a lot of markup ... */
|
||||||
caps = gst_caps_new_simple ("text/x-pango-markup", NULL);
|
caps = gst_caps_new_simple ("text/x-pango-markup", NULL);
|
||||||
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
||||||
|
subtitlecontext->check_markup = TRUE;
|
||||||
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_SSA)) {
|
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_SSA)) {
|
||||||
caps = gst_caps_new_simple ("application/x-ssa", NULL);
|
caps = gst_caps_new_simple ("application/x-ssa", NULL);
|
||||||
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
||||||
|
subtitlecontext->check_markup = TRUE;
|
||||||
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_ASS)) {
|
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_ASS)) {
|
||||||
caps = gst_caps_new_simple ("application/x-ass", NULL);
|
caps = gst_caps_new_simple ("application/x-ass", NULL);
|
||||||
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
||||||
|
subtitlecontext->check_markup = FALSE;
|
||||||
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_USF)) {
|
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_USF)) {
|
||||||
caps = gst_caps_new_simple ("application/x-usf", NULL);
|
caps = gst_caps_new_simple ("application/x-usf", NULL);
|
||||||
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
context->postprocess_frame = gst_matroska_demux_check_subtitle_buffer;
|
||||||
|
subtitlecontext->check_markup = FALSE;
|
||||||
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_VOBSUB)) {
|
} else if (!strcmp (codec_id, GST_MATROSKA_CODEC_ID_SUBTITLE_VOBSUB)) {
|
||||||
caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
|
caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
|
||||||
((GstMatroskaTrackContext *) subtitlecontext)->send_dvd_event = TRUE;
|
((GstMatroskaTrackContext *) subtitlecontext)->send_dvd_event = TRUE;
|
||||||
|
|
|
@ -569,6 +569,8 @@ typedef struct _GstMatroskaTrackSubtitleContext {
|
||||||
GstMatroskaTrackContext parent;
|
GstMatroskaTrackContext parent;
|
||||||
|
|
||||||
gboolean check_utf8; /* buffers should be valid UTF-8 */
|
gboolean check_utf8; /* buffers should be valid UTF-8 */
|
||||||
|
gboolean check_markup; /* check if buffers contain markup
|
||||||
|
* or plaintext and escape characters */
|
||||||
gboolean invalid_utf8; /* work around broken files */
|
gboolean invalid_utf8; /* work around broken files */
|
||||||
gboolean seen_markup_tag; /* markup found in text */
|
gboolean seen_markup_tag; /* markup found in text */
|
||||||
} GstMatroskaTrackSubtitleContext;
|
} GstMatroskaTrackSubtitleContext;
|
||||||
|
|
Loading…
Reference in a new issue