mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 00:31:13 +00:00
subtitleoverlay: Remove some more unneeded segment tracking
This commit is contained in:
parent
436ea03362
commit
e4b1a58675
2 changed files with 0 additions and 190 deletions
|
@ -605,86 +605,6 @@ _remove_element (GstSubtitleOverlay * self, GstElement ** element)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
_pad_query_convert_to_time (GstPad * pad, GstFormat src_format, gint64 src_val,
|
|
||||||
gint64 * dest_val)
|
|
||||||
{
|
|
||||||
GstFormat dest_format;
|
|
||||||
|
|
||||||
if (src_val == GST_CLOCK_TIME_NONE) {
|
|
||||||
*dest_val = GST_CLOCK_TIME_NONE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
dest_format = GST_FORMAT_TIME;
|
|
||||||
return gst_pad_query_convert (pad, src_format, src_val, dest_format,
|
|
||||||
dest_val);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_generate_update_segment_event (GstPad * pad, GstSegment * segment,
|
|
||||||
GstEvent ** event1)
|
|
||||||
{
|
|
||||||
GstEvent *event;
|
|
||||||
GstStructure *structure;
|
|
||||||
GstSegment newsegment;
|
|
||||||
gboolean use_newseg = FALSE;
|
|
||||||
gint64 start, stop, base, time, position, duration;
|
|
||||||
|
|
||||||
/* always push newsegment with format TIME */
|
|
||||||
if (segment->format != GST_FORMAT_TIME) {
|
|
||||||
gboolean res;
|
|
||||||
GstPad *peer;
|
|
||||||
|
|
||||||
peer = gst_pad_get_peer (pad);
|
|
||||||
if (peer) {
|
|
||||||
res = _pad_query_convert_to_time (peer, segment->format,
|
|
||||||
segment->start, &start);
|
|
||||||
res = res && _pad_query_convert_to_time (peer, segment->format,
|
|
||||||
segment->stop, &stop);
|
|
||||||
res = res && _pad_query_convert_to_time (peer, segment->format,
|
|
||||||
segment->time, &time);
|
|
||||||
res = res && _pad_query_convert_to_time (peer, segment->format,
|
|
||||||
segment->base, &base);
|
|
||||||
res = res && _pad_query_convert_to_time (peer, segment->format,
|
|
||||||
segment->position, &position);
|
|
||||||
res = res && _pad_query_convert_to_time (peer, segment->format,
|
|
||||||
segment->duration, &duration);
|
|
||||||
if (!res) {
|
|
||||||
start = 0;
|
|
||||||
stop = GST_CLOCK_TIME_NONE;
|
|
||||||
time = 0;
|
|
||||||
position = 0;
|
|
||||||
duration = GST_CLOCK_TIME_NONE;
|
|
||||||
base = 0;
|
|
||||||
} else {
|
|
||||||
use_newseg = TRUE;
|
|
||||||
gst_segment_init (&newsegment, GST_FORMAT_TIME);
|
|
||||||
newsegment.rate = segment->rate;
|
|
||||||
newsegment.applied_rate = segment->applied_rate;
|
|
||||||
newsegment.start = start;
|
|
||||||
newsegment.stop = stop;
|
|
||||||
newsegment.time = time;
|
|
||||||
newsegment.base = base;
|
|
||||||
newsegment.position = position;
|
|
||||||
newsegment.duration = duration;
|
|
||||||
}
|
|
||||||
|
|
||||||
gst_object_unref (peer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (use_newseg) {
|
|
||||||
event = gst_event_new_segment (&newsegment);
|
|
||||||
} else {
|
|
||||||
event = gst_event_new_segment (segment);
|
|
||||||
}
|
|
||||||
structure = gst_event_writable_structure (event);
|
|
||||||
gst_structure_id_set (structure, _subtitle_overlay_event_marker_id,
|
|
||||||
G_TYPE_BOOLEAN, TRUE, NULL);
|
|
||||||
*event1 = event;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_setup_passthrough (GstSubtitleOverlay * self)
|
_setup_passthrough (GstSubtitleOverlay * self)
|
||||||
{
|
{
|
||||||
|
@ -743,17 +663,6 @@ _setup_passthrough (GstSubtitleOverlay * self)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send segment to the identity. This is dropped because identity
|
|
||||||
* is not linked downstream yet */
|
|
||||||
if (self->video_segment.format != GST_FORMAT_UNDEFINED) {
|
|
||||||
GstEvent *event1;
|
|
||||||
|
|
||||||
_generate_update_segment_event (sink, &self->video_segment, &event1);
|
|
||||||
GST_DEBUG_OBJECT (self,
|
|
||||||
"Pushing video segment event: %" GST_PTR_FORMAT, event1);
|
|
||||||
gst_pad_send_event (sink, event1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Link sink ghostpads to identity */
|
/* Link sink ghostpads to identity */
|
||||||
if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
|
if (G_UNLIKELY (!gst_ghost_pad_set_target (GST_GHOST_PAD_CAST
|
||||||
(self->video_sinkpad), sink))) {
|
(self->video_sinkpad), sink))) {
|
||||||
|
@ -1404,8 +1313,6 @@ gst_subtitle_overlay_change_state (GstElement * element,
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
case GST_STATE_CHANGE_READY_TO_PAUSED:
|
||||||
GST_DEBUG_OBJECT (self, "State change READY->PAUSED");
|
GST_DEBUG_OBJECT (self, "State change READY->PAUSED");
|
||||||
gst_segment_init (&self->video_segment, GST_FORMAT_UNDEFINED);
|
|
||||||
gst_segment_init (&self->subtitle_segment, GST_FORMAT_UNDEFINED);
|
|
||||||
|
|
||||||
self->fps_n = self->fps_d = 0;
|
self->fps_n = self->fps_d = 0;
|
||||||
|
|
||||||
|
@ -1797,14 +1704,6 @@ gst_subtitle_overlay_video_sink_event (GstPad * pad, GstObject * parent,
|
||||||
gboolean ret;
|
gboolean ret;
|
||||||
|
|
||||||
switch (GST_EVENT_TYPE (event)) {
|
switch (GST_EVENT_TYPE (event)) {
|
||||||
case GST_EVENT_FLUSH_STOP:
|
|
||||||
{
|
|
||||||
GST_DEBUG_OBJECT (pad,
|
|
||||||
"Resetting video segment because of flush-stop event");
|
|
||||||
gst_segment_init (&self->video_segment, GST_FORMAT_UNDEFINED);
|
|
||||||
self->fps_n = self->fps_d = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case GST_EVENT_CAPS:
|
case GST_EVENT_CAPS:
|
||||||
{
|
{
|
||||||
GstCaps *caps;
|
GstCaps *caps;
|
||||||
|
@ -1821,27 +1720,10 @@ gst_subtitle_overlay_video_sink_event (GstPad * pad, GstObject * parent,
|
||||||
|
|
||||||
ret = gst_pad_event_default (pad, parent, gst_event_ref (event));
|
ret = gst_pad_event_default (pad, parent, gst_event_ref (event));
|
||||||
|
|
||||||
if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
|
|
||||||
GST_DEBUG_OBJECT (pad, "segment event: %" GST_PTR_FORMAT, event);
|
|
||||||
gst_event_copy_segment (event, &self->video_segment);
|
|
||||||
|
|
||||||
if (self->video_segment.format != GST_FORMAT_TIME)
|
|
||||||
goto invalid_format;
|
|
||||||
}
|
|
||||||
|
|
||||||
done:
|
done:
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* ERRORS */
|
|
||||||
invalid_format:
|
|
||||||
{
|
|
||||||
GST_ERROR_OBJECT (pad, "Segment event in non-time format: %s",
|
|
||||||
gst_format_get_name (self->video_segment.format));
|
|
||||||
ret = FALSE;
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
@ -2035,10 +1917,6 @@ gst_subtitle_overlay_subtitle_sink_event (GstPad * pad, GstObject * parent,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GST_EVENT_FLUSH_STOP:
|
case GST_EVENT_FLUSH_STOP:
|
||||||
GST_DEBUG_OBJECT (pad,
|
|
||||||
"Resetting subtitle segment because of flush-stop");
|
|
||||||
gst_segment_init (&self->subtitle_segment, GST_FORMAT_UNDEFINED);
|
|
||||||
/* fall through */
|
|
||||||
case GST_EVENT_FLUSH_START:
|
case GST_EVENT_FLUSH_START:
|
||||||
case GST_EVENT_SEGMENT:
|
case GST_EVENT_SEGMENT:
|
||||||
case GST_EVENT_EOS:
|
case GST_EVENT_EOS:
|
||||||
|
@ -2060,72 +1938,6 @@ gst_subtitle_overlay_subtitle_sink_event (GstPad * pad, GstObject * parent,
|
||||||
|
|
||||||
ret = gst_pad_event_default (pad, parent, gst_event_ref (event));
|
ret = gst_pad_event_default (pad, parent, gst_event_ref (event));
|
||||||
|
|
||||||
if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
|
|
||||||
const GstSegment *eventsegment;
|
|
||||||
GST_DEBUG_OBJECT (pad, "segment event: %" GST_PTR_FORMAT, event);
|
|
||||||
|
|
||||||
gst_event_parse_segment (event, &eventsegment);
|
|
||||||
|
|
||||||
if (eventsegment->format == GST_FORMAT_TIME) {
|
|
||||||
gst_event_copy_segment (event, &self->subtitle_segment);
|
|
||||||
} else {
|
|
||||||
GstPad *peer;
|
|
||||||
gboolean res = FALSE;
|
|
||||||
gint64 tstart = 0;
|
|
||||||
gint64 tstop = GST_CLOCK_TIME_NONE;
|
|
||||||
gint64 tposition = 0;
|
|
||||||
gint64 tduration = 0;
|
|
||||||
gint64 ttime = 0;
|
|
||||||
gint64 tbase = 0;
|
|
||||||
GstFormat format = eventsegment->format;
|
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (pad, "Subtitle newsegment event (%s) not in TIME "
|
|
||||||
"format, converting", gst_format_get_name (format));
|
|
||||||
peer = gst_pad_get_peer (pad);
|
|
||||||
|
|
||||||
if (peer) {
|
|
||||||
res =
|
|
||||||
_pad_query_convert_to_time (peer, format, eventsegment->start,
|
|
||||||
&tstart);
|
|
||||||
res = res
|
|
||||||
&& _pad_query_convert_to_time (peer, format, eventsegment->stop,
|
|
||||||
&tstop);
|
|
||||||
res = res
|
|
||||||
&& _pad_query_convert_to_time (peer, format, eventsegment->position,
|
|
||||||
&tposition);
|
|
||||||
res = res
|
|
||||||
&& _pad_query_convert_to_time (peer, format, eventsegment->base,
|
|
||||||
&tbase);
|
|
||||||
res = res
|
|
||||||
&& _pad_query_convert_to_time (peer, format, eventsegment->time,
|
|
||||||
&ttime);
|
|
||||||
res = res
|
|
||||||
&& _pad_query_convert_to_time (peer, format, eventsegment->duration,
|
|
||||||
&tduration);
|
|
||||||
|
|
||||||
gst_object_unref (peer);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!res) {
|
|
||||||
tstart = 0;
|
|
||||||
tstop = GST_CLOCK_TIME_NONE;
|
|
||||||
tposition = 0;
|
|
||||||
tduration = GST_CLOCK_TIME_NONE;
|
|
||||||
ttime = 0;
|
|
||||||
tbase = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
gst_segment_init (&self->subtitle_segment, GST_FORMAT_TIME);
|
|
||||||
self->subtitle_segment.start = tstart;
|
|
||||||
self->subtitle_segment.stop = tstop;
|
|
||||||
self->subtitle_segment.base = tbase;
|
|
||||||
self->subtitle_segment.time = ttime;
|
|
||||||
self->subtitle_segment.position = tposition;
|
|
||||||
self->subtitle_segment.duration = tduration;
|
|
||||||
}
|
|
||||||
GST_DEBUG_OBJECT (pad, "New subtitle segment: %" GST_SEGMENT_FORMAT,
|
|
||||||
&self->subtitle_segment);
|
|
||||||
}
|
|
||||||
gst_event_unref (event);
|
gst_event_unref (event);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
|
@ -74,14 +74,12 @@ struct _GstSubtitleOverlay
|
||||||
GstPad *video_block_pad;
|
GstPad *video_block_pad;
|
||||||
gulong video_block_id;
|
gulong video_block_id;
|
||||||
gboolean video_sink_blocked;
|
gboolean video_sink_blocked;
|
||||||
GstSegment video_segment;
|
|
||||||
gint fps_n, fps_d;
|
gint fps_n, fps_d;
|
||||||
|
|
||||||
GstPad *subtitle_sinkpad;
|
GstPad *subtitle_sinkpad;
|
||||||
GstPad *subtitle_block_pad;
|
GstPad *subtitle_block_pad;
|
||||||
gulong subtitle_block_id;
|
gulong subtitle_block_id;
|
||||||
gboolean subtitle_sink_blocked;
|
gboolean subtitle_sink_blocked;
|
||||||
GstSegment subtitle_segment;
|
|
||||||
gboolean subtitle_flush;
|
gboolean subtitle_flush;
|
||||||
gboolean subtitle_error;
|
gboolean subtitle_error;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue