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