summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2015-05-04 19:26:14 +0200
committerNicolas Dufresne <nicolas.dufresne@collabora.co.uk>2015-05-05 13:56:05 -0400
commit1421fc558e138c6e7c8ba4e3a835c12102e05946 (patch)
tree67a66629d8d867fd1851a163d45f90b105b00114 /ext
parent9865730cfa5b3a8b2560d082e7e56b350042d3d2 (diff)
jpegdec: fix frame leaks in handle_frame() implementation
handle_frame() is supposed to consume @frame, so if we don't call gst_video_decoder_drop_frame() or gst_video_decoder_finish_frame() we have to release it manually. https://bugzilla.gnome.org/show_bug.cgi?id=748909
Diffstat (limited to 'ext')
-rw-r--r--ext/jpeg/gstjpegdec.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c
index 25dfb0093..a1ba7c0c1 100644
--- a/ext/jpeg/gstjpegdec.c
+++ b/ext/jpeg/gstjpegdec.c
@@ -994,6 +994,7 @@ gst_jpeg_dec_handle_frame (GstVideoDecoder * bdec, GstVideoCodecFrame * frame)
guint code, hdr_ok;
gboolean need_unmap = TRUE;
GstVideoCodecState *state = NULL;
+ gboolean release_frame = TRUE;
dec->current_frame = frame;
gst_buffer_map (frame->input_buffer, &dec->current_frame_map, GST_MAP_READ);
@@ -1141,6 +1142,7 @@ gst_jpeg_dec_handle_frame (GstVideoDecoder * bdec, GstVideoCodecFrame * frame)
gst_buffer_unmap (frame->input_buffer, &dec->current_frame_map);
ret = gst_video_decoder_finish_frame (bdec, frame);
+ release_frame = FALSE;
need_unmap = FALSE;
done:
@@ -1150,6 +1152,9 @@ exit:
if (need_unmap)
gst_buffer_unmap (frame->input_buffer, &dec->current_frame_map);
+ if (release_frame)
+ gst_video_decoder_release_frame (bdec, frame);
+
if (state)
gst_video_codec_state_unref (state);
@@ -1183,6 +1188,7 @@ decode_error:
gst_buffer_unmap (frame->input_buffer, &dec->current_frame_map);
gst_video_decoder_drop_frame (bdec, frame);
+ release_frame = FALSE;
need_unmap = FALSE;
jpeg_abort_decompress (&dec->cinfo);