diff options
author | Jan Schmidt <jan@centricular.com> | 2021-08-30 23:26:39 +1000 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2021-09-06 14:14:50 +0000 |
commit | 640aad2b464d5aef0f38ef3405660f971f8221c4 (patch) | |
tree | bb9dccb2c7acf1f0c8dbe385dd748c95fd1577cb /ext/mpeg2enc/gstmpeg2encpicturereader.cc | |
parent | cd3aa029d6b85405b2318be109bacaabe6522d1a (diff) | |
download | gstreamer-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.cc | 4 |
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); |