memory leak when reconnection to camera using gstreamer on TX1 platform
Nicolas Dufresne
nicolas at ndufresne.ca
Fri Nov 30 15:56:25 UTC 2018
Le jeudi 29 novembre 2018 à 03:59 +0000, oonamao(毛江云) a écrit :
> 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
This is relatively old, if it's an upstream bug, it is likely fixed.
>
> 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})
Though, most of these report are related to miss-used of appsink.
appsink is non leak and have inifit queues by default. Make sure you
limite that queue and pop and unref buffers properly.
> 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
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20181130/a05d2cac/attachment.sig>
More information about the gstreamer-devel
mailing list