memory leak when reconnection to camera using gstreamer on TX1 platform

oonamao(毛江云) oonamao at tencent.com
Thu Nov 29 03:59:43 UTC 2018


Hi all,

This is Oona, a junior software engineer. I send this email to ask your help about my gstreamer application:
Recently, I met a memory leak problem on TX1 platform, when my gstreamer application tried to reconnect to the camera by rtsp.
Moreover, the tegra I’m using is:
# R28 (release), REVISION: 2.0, GCID: 10567845, BOARD: t210ref, EABI: aarch64, DATE: Fri Mar  2 04:58:16 UTC 2018
Gstreamer is:
gst-inspect-1.0 version 1.8.1
GStreamer 1.8.3
https://launchpad.net/distros/ubuntu/+source/gstreamer1.0

Problem Details:

1.      The application will call gst_init() at the very first, then builds pipleline as “rtspsrc location=rtsp://${usrname}:${pwd}@${ip}:${port}/cam/realmonitor?channel=1&subtype=0 protocols=tcp ! rtph264depay ! h264parse ! omxh264dec ! video/x-raw, format=NV12 ! appsink sync=false async=false name=appsink1”. As expected, it gets data from camera. By `top` commands, I can see its occupied-memory is ~108M;
(disable ${ip})

2.      Of course, the application fails to get data. And the application is trying to reconnect the pipeline periodically. It is still occupied ~108M;
(enable ${ip})

3.      The application succeeds to get video again. However, the memory rises to ~180M!
After trying 2,3 for times, I finds that: the memory will increase by -80M each time when it succeed in reconnection.

The following code segment is the reconnection (first close() then open()). I think I have unref all the resources in close(), in addition, I unref gst-sample, gst-message in time.
```
int GSTCameraMini::open() {
  this->m_camera_state = CAM_INIT;
  this -> build_pipeline();
  gst_element_set_state(this -> pipeline, GST_STATE_PLAYING);
  return 0;
}

int GSTCameraMini::close() {
  this->m_camera_state = CAM_OFFLINE;
  gst_element_set_state(this -> pipeline, GST_STATE_NULL);
  // unref appsink
  gst_object_unref(G_OBJECT(this -> appsink));
  // unref bus
  gst_object_unref(G_OBJECT(this -> bus));
  // unref pipeline
  gst_object_unref(G_OBJECT(this -> pipeline));
  return 0;
}
```
I have no idea where goes wrong, and this problem makes me headache for a long time. It is a bug from gstreamer or other?
Sincerely looking forward to your reply.

Best & Regards,
Oona

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20181129/7199ed5a/attachment.html>


More information about the gstreamer-devel mailing list