summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-07-04 10:52:24 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-07-25 13:12:55 +0300
commit17c292dfd6ede3d299a65e747dfba523ae3313cd (patch)
treeacb9249280917aa07e123dc173656a708693e6ab
parent78b658d204fb3279197b095ba3c4386fca03b28f (diff)
downloadgstreamer-plugins-base-17c292dfd6ede3d299a65e747dfba523ae3313cd.tar.gz
videoencoder: Use the object lock to protect bytes/time tracking
-rw-r--r--gst-libs/gst/video/gstvideoencoder.c8
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);