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