summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/webp/gstwebpdec.c29
1 files changed, 22 insertions, 7 deletions
diff --git a/ext/webp/gstwebpdec.c b/ext/webp/gstwebpdec.c
index 68215dc9b..85bb5bf36 100644
--- a/ext/webp/gstwebpdec.c
+++ b/ext/webp/gstwebpdec.c
@@ -72,6 +72,8 @@ static GstFlowReturn gst_webp_dec_handle_frame (GstVideoDecoder * bdec,
GstVideoCodecFrame * frame);
static gboolean gst_webp_dec_decide_allocation (GstVideoDecoder * bdec,
GstQuery * query);
+static gboolean gst_webp_dec_sink_event (GstVideoDecoder * bdec,
+ GstEvent * event);
static gboolean gst_webp_dec_reset_frame (GstWebPDec * webpdec);
@@ -123,6 +125,7 @@ gst_webp_dec_class_init (GstWebPDecClass * klass)
vdec_class->set_format = gst_webp_dec_set_format;
vdec_class->handle_frame = gst_webp_dec_handle_frame;
vdec_class->decide_allocation = gst_webp_dec_decide_allocation;
+ vdec_class->sink_event = gst_webp_dec_sink_event;
GST_DEBUG_CATEGORY_INIT (webp_dec_debug, "webpdec", 0, "WebP decoder");
}
@@ -213,8 +216,6 @@ gst_webp_dec_start (GstVideoDecoder * decoder)
{
GstWebPDec *webpdec = (GstWebPDec *) decoder;
- gst_video_decoder_set_packetized (GST_VIDEO_DECODER (webpdec), FALSE);
-
return gst_webp_dec_reset_frame (webpdec);
}
@@ -243,11 +244,6 @@ gst_webp_dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
gst_video_codec_state_unref (webpdec->input_state);
webpdec->input_state = gst_video_codec_state_ref (state);
- if (decoder->input_segment.format == GST_FORMAT_TIME)
- gst_video_decoder_set_packetized (decoder, TRUE);
- else
- gst_video_decoder_set_packetized (decoder, FALSE);
-
return TRUE;
}
@@ -277,6 +273,25 @@ gst_webp_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
return TRUE;
}
+static gboolean
+gst_webp_dec_sink_event (GstVideoDecoder * bdec, GstEvent * event)
+{
+ const GstSegment *segment;
+
+ if (GST_EVENT_TYPE (event) != GST_EVENT_SEGMENT)
+ goto done;
+
+ gst_event_parse_segment (event, &segment);
+
+ if (segment->format == GST_FORMAT_TIME)
+ gst_video_decoder_set_packetized (bdec, TRUE);
+ else
+ gst_video_decoder_set_packetized (bdec, FALSE);
+
+done:
+ return GST_VIDEO_DECODER_CLASS (parent_class)->sink_event (bdec, event);
+}
+
static GstFlowReturn
gst_webp_dec_parse (GstVideoDecoder * decoder, GstVideoCodecFrame * frame,
GstAdapter * adapter, gboolean at_eos)