[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:gst-droid.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -6,7 +6,7 @@
<service name="tar_git">
<param name="url">https://github.com/sailfishos/gst-droid.git</param>
<param name="branch">master</param>
- <param name="revision"/>
+ <param name="revision">8a54a1e879948373affb2ad5e490e5fd10ba6f8a</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20160912.0.tar.gz/gst/droidcodec/gstdroidcodec.c
^
|
@@ -68,7 +68,6 @@
typedef struct
{
gpointer data;
- GstVideoCodecFrame *frame;
} GstDroidCodecFrameReleaseData;
struct _GstDroidCodecPrivate
@@ -316,7 +315,6 @@
release_data = g_slice_new (GstDroidCodecFrameReleaseData);
release_data->data = data->data;
- release_data->frame = gst_video_codec_frame_ref (frame);
cb->unref = gst_droid_codec_release_input_frame;
cb->data = release_data;
@@ -1073,7 +1071,6 @@
{
GstDroidCodecFrameReleaseData *info = (GstDroidCodecFrameReleaseData *) data;
- gst_video_codec_frame_unref (info->frame);
g_free (info->data);
g_slice_free (GstDroidCodecFrameReleaseData, info);
|
[-]
[+]
|
Changed |
_service:tar_git:gstreamer1.0-droid-0.20160912.0.tar.gz/gst/droidcodec/gstdroidvdec.c
^
|
@@ -413,9 +413,12 @@
/* We get the timestamp in ns already */
frame->pts = ts;
- /* we have a ref so drop it */
- gst_video_codec_frame_unref (frame);
-
+ /* we have a ref acquired by _get_oldest_frame()
+ * but we don't drop it because _finish_frame() assumes 2 refs.
+ * A ref that we obtained via _handle_frame() which we dropped already
+ * so we need to compensate it and the 2nd ref which is already owned by
+ * the base class GstVideoDecoder
+ */
dec->downstream_flow_ret = gst_droidvdec_finish_frame (decoder, frame);
GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
@@ -488,9 +491,12 @@
frame->pts = encoded->ts;
frame->output_buffer = buff;
- /* we have a ref so drop it */
- gst_video_codec_frame_unref (frame);
-
+ /* we have a ref acquired by _get_oldest_frame()
+ * but we don't drop it because _finish_frame() assumes 2 refs.
+ * A ref that we obtained via _handle_frame() which we dropped already
+ * so we need to compensate it and the 2nd ref which is already owned by
+ * the base class GstVideoDecoder
+ */
flow_ret = gst_droidvdec_finish_frame (decoder, frame);
out:
@@ -1029,15 +1035,14 @@
droid_media_codec_queue (dec->codec, &data, &cb);
GST_VIDEO_DECODER_STREAM_LOCK (decoder);
GST_LOG_OBJECT (dec, "acquired stream lock");
- /* from now on decoder owns a frame reference so we cannot use the out label otherwise
- * we will drop the needed reference
- */
+
+ /* from now on decoder owns a frame reference */
if (dec->downstream_flow_ret != GST_FLOW_OK) {
GST_DEBUG_OBJECT (dec, "not handling frame in error state: %s",
gst_flow_get_name (dec->downstream_flow_ret));
ret = dec->downstream_flow_ret;
- goto out;
+ goto unref;
}
g_mutex_lock (&dec->state_lock);
@@ -1045,15 +1050,22 @@
GST_WARNING_OBJECT (dec, "got frame in eos state");
g_mutex_unlock (&dec->state_lock);
ret = GST_FLOW_EOS;
- goto out;
+ goto unref;
}
+
g_mutex_unlock (&dec->state_lock);
ret = GST_FLOW_OK;
+ goto unref;
+
out:
return ret;
+unref:
+ gst_video_codec_frame_unref (frame);
+ goto out;
+
error:
/* don't leak the frame */
gst_video_decoder_release_frame (decoder, frame);
|