diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2016-07-04 10:52:24 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2016-07-25 13:12:55 +0300 |
commit | 17c292dfd6ede3d299a65e747dfba523ae3313cd (patch) | |
tree | acb9249280917aa07e123dc173656a708693e6ab | |
parent | 78b658d204fb3279197b095ba3c4386fca03b28f (diff) | |
download | gstreamer-plugins-base-17c292dfd6ede3d299a65e747dfba523ae3313cd.tar.gz |
videoencoder: Use the object lock to protect bytes/time tracking
-rw-r--r-- | gst-libs/gst/video/gstvideoencoder.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index a13d4ed2e..ab5c35490 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -355,8 +355,10 @@ gst_video_encoder_reset (GstVideoEncoder * encoder, gboolean hard) priv->drained = TRUE; + GST_OBJECT_LOCK (encoder); priv->bytes = 0; priv->time = 0; + GST_OBJECT_UNLOCK (encoder); priv->time_adjustment = GST_CLOCK_TIME_NONE; @@ -1266,9 +1268,11 @@ gst_video_encoder_src_query_default (GstVideoEncoder * enc, GstQuery * query) gint64 src_val, dest_val; gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val); + GST_OBJECT_LOCK (enc); res = gst_video_encoded_video_convert (priv->bytes, priv->time, src_fmt, src_val, &dest_fmt, &dest_val); + GST_OBJECT_UNLOCK (enc); if (!res) goto error; gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val); @@ -2122,6 +2126,7 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder, GST_BUFFER_DTS (frame->output_buffer) = frame->dts; GST_BUFFER_DURATION (frame->output_buffer) = frame->duration; + GST_OBJECT_LOCK (encoder); /* update rate estimate */ priv->bytes += gst_buffer_get_size (frame->output_buffer); if (GST_CLOCK_TIME_IS_VALID (frame->duration)) { @@ -2130,6 +2135,7 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder, /* better none than nothing valid */ priv->time = GST_CLOCK_TIME_NONE; } + GST_OBJECT_UNLOCK (encoder); if (G_UNLIKELY (send_headers || priv->new_headers)) { GList *tmp, *copy = NULL; @@ -2148,7 +2154,9 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder, for (tmp = priv->headers; tmp; tmp = tmp->next) { GstBuffer *tmpbuf = GST_BUFFER (tmp->data); + GST_OBJECT_LOCK (encoder); priv->bytes += gst_buffer_get_size (tmpbuf); + GST_OBJECT_UNLOCK (encoder); if (G_UNLIKELY (discont)) { GST_LOG_OBJECT (encoder, "marking discont"); GST_BUFFER_FLAG_SET (tmpbuf, GST_BUFFER_FLAG_DISCONT); |