mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 10:11:08 +00:00
ext/pango/gsttextoverlay.c: Some more logging. Only accept newsegment events in TIME format and send a WARNING messag...
Original commit message from CVS: * ext/pango/gsttextoverlay.c: (gst_text_overlay_text_event), (gst_text_overlay_video_event): Some more logging. Only accept newsegment events in TIME format and send a WARNING message if they are not in TIME format. * gst/subparse/gstsubparse.c: (gst_sub_parse_dispose), (gst_sub_parse_init), (gst_sub_parse_src_event), (handle_buffer), (gst_sub_parse_chain), (gst_sub_parse_sink_event): * gst/subparse/gstsubparse.h: No need to allocate GstSegment structure dynamically, just put it into the instance structure; ignore newsegment events in BYTE format and in particular don't let it overwrite our saved TIME segment from the last seek.
This commit is contained in:
parent
c9cd89bbab
commit
b9ca5573a9
4 changed files with 60 additions and 33 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,19 @@
|
||||||
|
2007-03-09 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* ext/pango/gsttextoverlay.c: (gst_text_overlay_text_event),
|
||||||
|
(gst_text_overlay_video_event):
|
||||||
|
Some more logging. Only accept newsegment events in TIME format and
|
||||||
|
send a WARNING message if they are not in TIME format.
|
||||||
|
|
||||||
|
* gst/subparse/gstsubparse.c: (gst_sub_parse_dispose),
|
||||||
|
(gst_sub_parse_init), (gst_sub_parse_src_event), (handle_buffer),
|
||||||
|
(gst_sub_parse_chain), (gst_sub_parse_sink_event):
|
||||||
|
* gst/subparse/gstsubparse.h:
|
||||||
|
No need to allocate GstSegment structure dynamically, just put it
|
||||||
|
into the instance structure; ignore newsegment events in BYTE
|
||||||
|
format and in particular don't let it overwrite our saved TIME
|
||||||
|
segment from the last seek.
|
||||||
|
|
||||||
2007-03-09 Michael Smith <msmith@fluendo.com>
|
2007-03-09 Michael Smith <msmith@fluendo.com>
|
||||||
|
|
||||||
* gst/typefind/gsttypefindfunctions.c: (ac3_type_find):
|
* gst/typefind/gsttypefindfunctions.c: (ac3_type_find):
|
||||||
|
|
|
@ -1092,7 +1092,11 @@ gst_text_overlay_text_event (GstPad * pad, GstEvent * event)
|
||||||
GST_DEBUG_OBJECT (overlay, "TEXT SEGMENT now: %" GST_SEGMENT_FORMAT,
|
GST_DEBUG_OBJECT (overlay, "TEXT SEGMENT now: %" GST_SEGMENT_FORMAT,
|
||||||
&overlay->text_segment);
|
&overlay->text_segment);
|
||||||
GST_OBJECT_UNLOCK (overlay);
|
GST_OBJECT_UNLOCK (overlay);
|
||||||
|
} else {
|
||||||
|
GST_ELEMENT_WARNING (overlay, STREAM, MUX, (NULL),
|
||||||
|
("received non-TIME newsegment event on text input"));
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
|
|
||||||
|
@ -1164,9 +1168,16 @@ gst_text_overlay_video_event (GstPad * pad, GstEvent * event)
|
||||||
gst_event_parse_new_segment (event, &update, &rate, &format, &start,
|
gst_event_parse_new_segment (event, &update, &rate, &format, &start,
|
||||||
&stop, &time);
|
&stop, &time);
|
||||||
|
|
||||||
/* now copy over the values */
|
if (format == GST_FORMAT_TIME) {
|
||||||
gst_segment_set_newsegment (overlay->segment, update, rate, format,
|
GST_DEBUG_OBJECT (overlay, "VIDEO SEGMENT now: %" GST_SEGMENT_FORMAT,
|
||||||
start, stop, time);
|
overlay->segment);
|
||||||
|
|
||||||
|
gst_segment_set_newsegment (overlay->segment, update, rate, format,
|
||||||
|
start, stop, time);
|
||||||
|
} else {
|
||||||
|
GST_ELEMENT_WARNING (overlay, STREAM, MUX, (NULL),
|
||||||
|
("received non-TIME newsegment event on video input"));
|
||||||
|
}
|
||||||
|
|
||||||
ret = gst_pad_event_default (pad, event);
|
ret = gst_pad_event_default (pad, event);
|
||||||
break;
|
break;
|
||||||
|
@ -1194,6 +1205,7 @@ gst_text_overlay_video_event (GstPad * pad, GstEvent * event)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ret = gst_pad_event_default (pad, event);
|
ret = gst_pad_event_default (pad, event);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_object_unref (overlay);
|
gst_object_unref (overlay);
|
||||||
|
|
|
@ -137,10 +137,6 @@ gst_sub_parse_dispose (GObject * object)
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (subparse, "cleaning up subtitle parser");
|
GST_DEBUG_OBJECT (subparse, "cleaning up subtitle parser");
|
||||||
|
|
||||||
if (subparse->segment) {
|
|
||||||
gst_segment_free (subparse->segment);
|
|
||||||
subparse->segment = NULL;
|
|
||||||
}
|
|
||||||
if (subparse->encoding) {
|
if (subparse->encoding) {
|
||||||
g_free (subparse->encoding);
|
g_free (subparse->encoding);
|
||||||
subparse->encoding = NULL;
|
subparse->encoding = NULL;
|
||||||
|
@ -194,14 +190,8 @@ gst_sub_parse_init (GstSubParse * subparse)
|
||||||
subparse->textbuf = g_string_new (NULL);
|
subparse->textbuf = g_string_new (NULL);
|
||||||
subparse->parser_type = GST_SUB_PARSE_FORMAT_UNKNOWN;
|
subparse->parser_type = GST_SUB_PARSE_FORMAT_UNKNOWN;
|
||||||
subparse->flushing = FALSE;
|
subparse->flushing = FALSE;
|
||||||
subparse->segment = gst_segment_new ();
|
gst_segment_init (&subparse->segment, GST_FORMAT_TIME);
|
||||||
if (subparse->segment) {
|
subparse->need_segment = TRUE;
|
||||||
gst_segment_init (subparse->segment, GST_FORMAT_TIME);
|
|
||||||
subparse->need_segment = TRUE;
|
|
||||||
} else {
|
|
||||||
GST_WARNING_OBJECT (subparse, "segment creation failed");
|
|
||||||
g_assert_not_reached ();
|
|
||||||
}
|
|
||||||
subparse->encoding = g_strdup (DEFAULT_ENCODING);
|
subparse->encoding = g_strdup (DEFAULT_ENCODING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,14 +233,11 @@ gst_sub_parse_src_event (GstPad * pad, GstEvent * event)
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
/* Apply the seek to our segment */
|
/* Apply the seek to our segment */
|
||||||
gst_segment_set_seek (self->segment, rate, format, self->segment_flags,
|
gst_segment_set_seek (&self->segment, rate, format, self->segment_flags,
|
||||||
start_type, start, stop_type, stop, &update);
|
start_type, start, stop_type, stop, &update);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (self, "segment configured from %" GST_TIME_FORMAT
|
GST_DEBUG_OBJECT (self, "segment after seek: %" GST_SEGMENT_FORMAT,
|
||||||
" to %" GST_TIME_FORMAT ", position %" GST_TIME_FORMAT,
|
&self->segment);
|
||||||
GST_TIME_ARGS (self->segment->start),
|
|
||||||
GST_TIME_ARGS (self->segment->stop),
|
|
||||||
GST_TIME_ARGS (self->segment->last_stop));
|
|
||||||
|
|
||||||
self->next_offset = 0;
|
self->next_offset = 0;
|
||||||
|
|
||||||
|
@ -944,7 +931,7 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
|
||||||
|
|
||||||
while ((line = get_next_line (self)) && !self->flushing) {
|
while ((line = get_next_line (self)) && !self->flushing) {
|
||||||
/* Set segment on our parser state machine */
|
/* Set segment on our parser state machine */
|
||||||
self->state.segment = self->segment;
|
self->state.segment = &self->segment;
|
||||||
/* Now parse the line, out of segment lines will just return NULL */
|
/* Now parse the line, out of segment lines will just return NULL */
|
||||||
GST_LOG_OBJECT (self, "Parsing line '%s'", line);
|
GST_LOG_OBJECT (self, "Parsing line '%s'", line);
|
||||||
subtitle = self->parse_line (&self->state, line);
|
subtitle = self->parse_line (&self->state, line);
|
||||||
|
@ -965,7 +952,7 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
|
||||||
GST_BUFFER_TIMESTAMP (buf) = self->state.start_time;
|
GST_BUFFER_TIMESTAMP (buf) = self->state.start_time;
|
||||||
GST_BUFFER_DURATION (buf) = self->state.duration;
|
GST_BUFFER_DURATION (buf) = self->state.duration;
|
||||||
|
|
||||||
gst_segment_set_last_stop (self->segment, GST_FORMAT_TIME,
|
gst_segment_set_last_stop (&self->segment, GST_FORMAT_TIME,
|
||||||
self->state.start_time);
|
self->state.start_time);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (self, "Sending text '%s', %" GST_TIME_FORMAT " + %"
|
GST_DEBUG_OBJECT (self, "Sending text '%s', %" GST_TIME_FORMAT " + %"
|
||||||
|
@ -998,10 +985,12 @@ gst_sub_parse_chain (GstPad * sinkpad, GstBuffer * buf)
|
||||||
|
|
||||||
/* Push newsegment if needed */
|
/* Push newsegment if needed */
|
||||||
if (self->need_segment) {
|
if (self->need_segment) {
|
||||||
|
GST_LOG_OBJECT (self, "pushing newsegment event with %" GST_SEGMENT_FORMAT,
|
||||||
|
&self->segment);
|
||||||
|
|
||||||
gst_pad_push_event (self->srcpad, gst_event_new_new_segment (FALSE,
|
gst_pad_push_event (self->srcpad, gst_event_new_new_segment (FALSE,
|
||||||
self->segment->rate, self->segment->format,
|
self->segment.rate, self->segment.format,
|
||||||
self->segment->last_stop, self->segment->stop,
|
self->segment.last_stop, self->segment.stop, self->segment.time));
|
||||||
self->segment->time));
|
|
||||||
self->need_segment = FALSE;
|
self->need_segment = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1042,14 +1031,24 @@ gst_sub_parse_sink_event (GstPad * pad, GstEvent * event)
|
||||||
gint64 start, stop, time;
|
gint64 start, stop, time;
|
||||||
gboolean update;
|
gboolean update;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (self, "received new segment");
|
|
||||||
|
|
||||||
gst_event_parse_new_segment (event, &update, &rate, &format, &start,
|
gst_event_parse_new_segment (event, &update, &rate, &format, &start,
|
||||||
&stop, &time);
|
&stop, &time);
|
||||||
|
|
||||||
/* now copy over the values */
|
GST_DEBUG_OBJECT (self, "newsegment (%s)", gst_format_get_name (format));
|
||||||
gst_segment_set_newsegment (self->segment, update, rate, format,
|
|
||||||
start, stop, time);
|
if (format == GST_FORMAT_TIME) {
|
||||||
|
gst_segment_set_newsegment (&self->segment, update, rate, format,
|
||||||
|
start, stop, time);
|
||||||
|
} else {
|
||||||
|
/* if not time format, we'll either start with a 0 timestamp anyway or
|
||||||
|
* it's following a seek in which case we'll have saved the requested
|
||||||
|
* seek segment and don't want to overwrite it (remember that on a seek
|
||||||
|
* we always just seek back to the start in BYTES format and just throw
|
||||||
|
* away all text that's before the requested position; if the subtitles
|
||||||
|
* come from an upstream demuxer, it won't be able to handle our BYTES
|
||||||
|
* seek request and instead send us a newsegment from the seek request
|
||||||
|
* it received via its video pads instead, so all is fine then too) */
|
||||||
|
}
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
|
|
@ -83,9 +83,9 @@ struct _GstSubParse {
|
||||||
guint64 next_offset;
|
guint64 next_offset;
|
||||||
|
|
||||||
/* Segment */
|
/* Segment */
|
||||||
GstSegment *segment;
|
GstSegment segment;
|
||||||
GstSeekFlags segment_flags;
|
GstSeekFlags segment_flags;
|
||||||
gboolean need_segment;
|
gboolean need_segment;
|
||||||
|
|
||||||
gboolean flushing;
|
gboolean flushing;
|
||||||
gboolean valid_utf8;
|
gboolean valid_utf8;
|
||||||
|
|
Loading…
Reference in a new issue