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
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;
}
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.
Thanks for you quick reply!
I have reviewed your recommended post, however, I think it is not helpful to my problem.
As mentioned above, my problem occurs after I recreate a new pipeline after I unref the pipeline, the memory will increase/leak, while if the pipeline works well, I can get the video and the memory is stable.
NVIDIA-developed element is omxh264dec. If you replace it with avdec_264 and the issue is still present, it is more like an issue in your implementation.
Now I have refactor my application, and the memory will not leak for each reconnection by top. But for the first time, it will. Moreover, I use valgrind tool, and its report shows my application still has memory leakage without details, I guess if the leakage comes from the lib?
Do you have any suggestion on how to fix such issue rootly?
Thanks for your helpfully suggestion, yes, omxh264dec does not have problem, the memory leakage seems coming from other part of gstreamer or other, we will look deep into that.