summaryrefslogtreecommitdiff
path: root/ext/mpeg2enc/gstmpeg2encpicturereader.cc
diff options
context:
space:
mode:
authorJan Schmidt <jan@centricular.com>2021-08-30 23:26:39 +1000
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2021-09-06 14:14:50 +0000
commit640aad2b464d5aef0f38ef3405660f971f8221c4 (patch)
treebb9dccb2c7acf1f0c8dbe385dd748c95fd1577cb /ext/mpeg2enc/gstmpeg2encpicturereader.cc
parentcd3aa029d6b85405b2318be109bacaabe6522d1a (diff)
downloadgstreamer-plugins-bad-640aad2b464d5aef0f38ef3405660f971f8221c4.tar.gz
mpeg2enc: Only allow 1 pending frame for encoding
Having an unlimited input queue is very bad if the encoder can't run at real-time. Eventually it will consume all RAM. I don't really see any reason to have more than 1 outstanding encoded frame, so remove the queue and limit things to 1 pending frame. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2499>
Diffstat (limited to 'ext/mpeg2enc/gstmpeg2encpicturereader.cc')
-rw-r--r--ext/mpeg2enc/gstmpeg2encpicturereader.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/ext/mpeg2enc/gstmpeg2encpicturereader.cc b/ext/mpeg2enc/gstmpeg2encpicturereader.cc
index 3641b613a..b0c5484d9 100644
--- a/ext/mpeg2enc/gstmpeg2encpicturereader.cc
+++ b/ext/mpeg2enc/gstmpeg2encpicturereader.cc
@@ -135,7 +135,7 @@ bool
GST_MPEG2ENC_MUTEX_LOCK (enc);
/* hang around until the element provides us with a buffer */
- while (!(inframe = (GstVideoCodecFrame *)g_queue_pop_head (enc->frames))) {
+ while (enc->pending_frame == NULL) {
if (enc->eos) {
GST_MPEG2ENC_MUTEX_UNLOCK (enc);
/* inform the mpeg encoding loop that it can give up */
@@ -144,7 +144,9 @@ bool
GST_MPEG2ENC_WAIT (enc);
}
+ inframe = enc->pending_frame;
gst_video_frame_map (&vframe, &enc->input_state->info, inframe->input_buffer, GST_MAP_READ);
+ enc->pending_frame = NULL;
frame = GST_VIDEO_FRAME_COMP_DATA (&vframe, 0);
s = GST_VIDEO_FRAME_COMP_STRIDE (&vframe, 0);