msdkh264dec: large memory leak
gst-launch-1.0 -v rtspsrc location="rtsp://SOME_URL" !rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! d3dvideosink
has stable memory allocation
gst-launch-1.0 -v rtspsrc location="rtsp://SOME_URL" !rtph264depay ! h264parse ! msdkh264dec ! videoconvert ! d3dvideosink
shows rapid constant increase in memory.
Environment: windows 10, coffee lake CPU, gst-build on latest master, MSDK 2018 SDK
Activity
-
Newest first Oldest first
-
Show all activity Show comments only Show history only
- Aaron Boxer mentioned in issue #946 (closed)
mentioned in issue #946 (closed)
- Author
Buffer, memory and caps leaks!
$ GST_LEAKS_TRACER_STACK_TRACE=1 GST_DEBUG="GST_TRACER:7" GST_TRACERS="leaks" gst-launch-1.0 rtspsrc location="rtspt://Service:333@192.168.100.79:554/live/camera6/stream1" ! rtph264depay ! h264parse ! msdkh264dec ! videoconvert ! d3dvideosink 0:00:00.085993000 2872 00000287D1A07870 DEBUG GST_TRACER gsttracer.c:162:gst_tracer_register:<registry0> update existing feature 00000287CFBCE3C0 (latency) 0:00:00.086314000 2872 00000287D1A07870 DEBUG GST_TRACER gsttracer.c:162:gst_tracer_register:<registry0> update existing feature 00000287CFBCE300 (log) 0:00:00.086576000 2872 00000287D1A07870 DEBUG GST_TRACER gsttracer.c:162:gst_tracer_register:<registry0> update existing feature 00000287CFBCE240 (stats) 0:00:00.086833000 2872 00000287D1A07870 DEBUG GST_TRACER gsttracer.c:162:gst_tracer_register:<registry0> update existing feature 00000287CFBCE180 (leaks) 0:00:00.087169000 2872 00000287D1A07870 TRACE GST_TRACER gsttracerrecord.c:111:gst_tracer_record_build_format: object-alive.class, type-name=(structure)"value\,\ type\=\(type\)gchararray\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", address=(structure)"value\,\ type\=\(type\)gpointer\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", description=(structure)"value\,\ type\=\(type\)gchararray\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", ref-count=(structure)"value\,\ type\=\(type\)guint\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", trace=(structure)"value\,\ type\=\(type\)gchararray\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;"; 0:00:00.088381000 2872 00000287D1A07870 DEBUG GST_TRACER gsttracerrecord.c:125:gst_tracer_record_build_format: new format string: object-alive, type-name=(string)%s, address=(gpointer)%p, description=(string)%s, ref-count=(uint)%u, trace=(string)%s; 0:00:00.088831000 2872 00000287D1A07870 TRACE GST_TRACER gsttracerrecord.c:111:gst_tracer_record_build_format: object-refings.class, ts=(structure)"value\,\ type\=\(type\)guint64\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", type-name=(structure)"value\,\ type\=\(type\)gchararray\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", address=(structure)"value\,\ type\=\(type\)gpointer\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", description=(structure)"value\,\ type\=\(type\)gchararray\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", ref-count=(structure)"value\,\ type\=\(type\)guint\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;", trace=(structure)"value\,\ type\=\(type\)gchararray\,\ related-to\=\(GstTracerValueScope\)GST_TRACER_VALUE_SCOPE_PROCESS\;"; 0:00:00.090232000 2872 00000287D1A07870 DEBUG GST_TRACER gsttracerrecord.c:125:gst_tracer_record_build_format: new format string: object-refings, ts=(guint64)%llu, type-name=(string)%s, address=(gpointer)%p, description=(string)%s, ref-count=(uint)%u, trace=(string)%s; Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Got context from element 'msdkh264dec0': gst.msdk.Context=context, gst.msdk.Context=(GstMsdkContext)"\(GstMsdkContext\)\ msdkcontext0"; Progress: (open) Opening Stream Progress: (connect) Connecting to rtspt://Service:333@192.168.100.79:554/live/camera6/stream1 Progress: (open) Retrieving server options Progress: (open) Retrieving media info Progress: (request) SETUP stream 0 Progress: (request) SETUP stream 1 Progress: (open) Opened Stream Setting pipeline to PLAYING ... New clock: GstSystemClock Progress: (request) Sending PLAY request Progress: (request) Sending PLAY request Progress: (request) Sent PLAY request Redistribute latency... ERROR: from element /GstPipeline:pipeline0/GstD3DVideoSink:d3dvideosink0: Output window was closed Additional debug info: ../subprojects/gst-plugins-bad/sys/d3dvideosink/d3dhelpers.c(1910): d3d_render_buffer (): /GstPipeline:pipeline0/GstD3DVideoSink:d3dvideosink0 Execution ended after 0:00:07.208516000 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ... 0:00:07.599014000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D8004000, description=(string)buffer: 00000287D8004000, pts 0:00:05.486930751, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3648, offset 773123, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.599750000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D800C360, description=(string)buffer: 00000287D800C360, pts 0:00:05.453574256, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3783, offset 769346, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.600441000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D8077120, description=(string)buffer: 00000287D8077120, pts 0:00:05.553643983, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3687, offset 780547, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.601065000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D80086C0, description=(string)buffer: 00000287D80086C0, pts 0:00:05.320160216, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3793, offset 754157, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.601637000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D8007B40, description=(string)buffer: 00000287D8007B40, pts 0:00:05.386883736, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3902, offset 761737, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.602278000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D807A120, description=(string)buffer: 00000287D807A120, pts 0:00:05.420228955, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3719, offset 765633, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.602884000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D8078120, description=(string)buffer: 00000287D8078120, pts 0:00:05.587000720, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3695, offset 784228, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.603537000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D800CB40, description=(string)buffer: 00000287D800CB40, pts 0:00:05.253448145, dts 99:99:99.999999999, dur 99:99:99.999999999, size 4433, offset 746156, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.604237000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D7FFE240, description=(string)buffer: 00000287D7FFE240, pts 0:00:05.286815249, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3580, offset 750583, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.604762000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D8077900, description=(string)buffer: 00000287D8077900, pts 0:00:05.353505267, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3799, offset 757944, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.605344000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D8078D80, description=(string)buffer: 00000287D8078D80, pts 0:00:05.520287327, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3788, offset 776765, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.606009000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)00000287D8072480, description=(string)buffer: 00000287D8072480, pts 0:00:05.653714430, dts 99:99:99.999999999, dur 99:99:99.999999999, size 3721, offset 791607, offset_end none, flags 0x6200, ref-count=(uint)1, trace=(string); 0:00:07.606668000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstCaps, address=(gpointer)00000287D7FB4840, description=(string)video/x-raw, format=(string)NV12, width=(int)704, height=(int)480, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)10/11, chroma-site=(string)jpeg, colorimetry=(string)bt601, framerate=(fraction)0/1, ref-count=(uint)1, trace=(string); 0:00:07.607676000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstCaps, address=(gpointer)00000287D7FB4660, description=(string)video/x-raw, format=(string)NV12, width=(int)704, height=(int)480, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)10/11, chroma-site=(string)jpeg, colorimetry=(string)bt601, framerate=(fraction)0/1, ref-count=(uint)1, trace=(string); 0:00:07.608754000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBC40C90, description=(string)00000287DBC40C90, ref-count=(uint)1, trace=(string); 0:00:07.609194000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DC082FD0, description=(string)00000287DC082FD0, ref-count=(uint)1, trace=(string); 0:00:07.609597000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8009BD0, description=(string)00000287D8009BD0, ref-count=(uint)1, trace=(string); 0:00:07.610024000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8009480, description=(string)00000287D8009480, ref-count=(uint)1, trace=(string); 0:00:07.610433000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBC9E380, description=(string)00000287DBC9E380, ref-count=(uint)1, trace=(string); 0:00:07.610800000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8075510, description=(string)00000287D8075510, ref-count=(uint)1, trace=(string); 0:00:07.611123000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8075E10, description=(string)00000287D8075E10, ref-count=(uint)1, trace=(string); 0:00:07.611481000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DC082060, description=(string)00000287DC082060, ref-count=(uint)1, trace=(string); 0:00:07.611792000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8079120, description=(string)00000287D8079120, ref-count=(uint)1, trace=(string); 0:00:07.612530000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8006E10, description=(string)00000287D8006E10, ref-count=(uint)1, trace=(string); 0:00:07.612878000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D806ECF0, description=(string)00000287D806ECF0, ref-count=(uint)1, trace=(string); 0:00:07.613345000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D806E360, description=(string)00000287D806E360, ref-count=(uint)1, trace=(string); 0:00:07.613692000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8075090, description=(string)00000287D8075090, ref-count=(uint)1, trace=(string); 0:00:07.614081000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8071090, description=(string)00000287D8071090, ref-count=(uint)1, trace=(string); 0:00:07.614479000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DC081100, description=(string)00000287DC081100, ref-count=(uint)1, trace=(string); 0:00:07.614827000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D80027E0, description=(string)00000287D80027E0, ref-count=(uint)1, trace=(string); 0:00:07.615256000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D8075CF0, description=(string)00000287D8075CF0, ref-count=(uint)1, trace=(string); 0:00:07.615754000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBC3BE80, description=(string)00000287DBC3BE80, ref-count=(uint)1, trace=(string); 0:00:07.616384000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287D80B2850, description=(string)00000287D80B2850, ref-count=(uint)1, trace=(string); 0:00:07.616924000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBC510F0, description=(string)00000287DBC510F0, ref-count=(uint)1, trace=(string); 0:00:07.617558000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBC52000, description=(string)00000287DBC52000, ref-count=(uint)1, trace=(string); 0:00:07.618126000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBF20440, description=(string)00000287DBF20440, ref-count=(uint)1, trace=(string); 0:00:07.618648000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBC3AEA0, description=(string)00000287DBC3AEA0, ref-count=(uint)1, trace=(string); 0:00:07.619221000 2872 00000287D1A07870 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00000287DBC29120, description=(string)00000287DBC29120, ref-count=(uint)1, trace=(string);
Edited by Aaron Boxer Collapse replies We also found the memory leak problem on Ubuntu 16.04/X86_64, gstreamer 1.15.
Aaron, have you fixed this bug?
I forgot to mention, the leak I am being tormented by is in the encoder. I haven't yet tried the decoder.
- Author
Yes, I saw that. Once I figure out the decoder issues, we can take a look at that.
- Developer
Hi @boxerab , please try this patch !852 (merged)
- Julien Isorce mentioned in merge request !852 (merged)
mentioned in merge request !852 (merged)
- Author
@cap thanks! this fixes the really bad leak I was seeing.
LGTM !!!
- Julien Isorce assigned to @cap
assigned to @cap
- Haihao Xiang closed via commit a7dc4070
closed via commit a7dc4070
- Author
I'm afraid I have to re-open this - leak still occurring.
- Aaron Boxer reopened
reopened
- Author
This may be related to the warnings:
buffer pool gst_buffer_pool_set_active: stop failed
- Developer
Can you see the leak error after applying !857 (merged)?
- Author
@haihao thanks, I can see the leak using leak tracing:
GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7" gst-launch-1.0 ...
- Author
@haihao I tried !857 (merged) but I didn't see any errors posted .
- Author
GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7" gst-launch-1.0 -v rtspsrc location="rtsp://SOME_URL" ! rtph264depay ! h264parse ! msdkh264dec ! videoconvert ! d3dvideosink
will display leak info when exiting the video window.Edited by Aaron Boxer - Author
The leak is much less severe than when I first reported this issue: while running my pipeline, the memory usage is stable. So, the leak is unlikely to be happening in the handle frame method.
- Developer
Does the info show the leak occurs in msdhh264dec? Can you see memory leak with
GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7" gst-launch-1.0 -v rtspsrc location="rtsp://SOME_URL" !rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! d3dvideosink
? - Author
@haihao correct, no leak with
avdec_h264
decoderEdited by Aaron Boxer - Maintainer
See the doc on how to get more information about this leak (like listing all places where ref/unref happens, providing stack traces, etc.)
- Author
Interesting: the following pipeline does NOT leak on the attached file :
GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7" gst-launch-1.0.exe -v filesrc location=msdk_artifact.mkv ! matroskademux ! h264parse ! msdkh264dec ! videoconvert ! autovideosink
Edited by Aaron Boxer - Author
@ndufresne thanks for the link - unfortunately, on windows, there will be no stack trace.
Collapse replies - Maintainer
That could be fixed, meanwhile, static instrumentation will let you solves this quickly.
- Maintainer
I've also used hardware watch point (works in msvc) on the refcount of the leaked objects. In order to see when ref/unref happens.
- Author
thanks, will look into hardware watch.
- Author
So, there are a few different leaks happening, but the first one is this ...
Leak only appears when the video sink does not support video meta or video alignment. In this case, the msdk buffer pool is used as a side pool to decode into and copy from. So, since
d3dvideosink
does not support alignment , it has this first kind of leak.From the code comments
"If downstream supports video meta and video alignment, we can replace with our own msdk bufferpool and use it"
Edited by Aaron Boxer Collapse replies - Developer
msdk pool is kept as a side pool too when filesink is used because filesink doesn't have videometa. I didn't see leak info in msdkh264dec when using filesink on Linux, maybe this is a specific issue on Windows.
- Author
@haihao : I am not sure, but @Robbie-Juelich has reported a leak on Ubuntu. I think there is definitely a problem with the side pool.
- Author
@haihao I also get a leak with
filesink
andfakesink
Edited by Aaron Boxer - Developer
@boxerab it is on Linux, right?
- Author
@haihao only testing on windows.
- Author
Here is the second leak: the buffer sizes are all around 4K, so these are not video buffers. Also, there are always double the number of GstMemory leaks vs GstBuffer leaks.
0:00:10.042332000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstTagList, address=(gpointer)06519930, description=(string)taglist, video-codec=(string)"H.264\ \(Main\ Profile\)", minimum-bitrate=(uint)243800, maximum-bitrate=(uint)25412600, bitrate=(uint)2138558;, ref-count=(uint)1, trace=(string); 0:00:10.042890000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstTagList, address=(gpointer)161C0A28, description=(string)taglist, video-codec=(string)"H.264\ \(Main\ Profile\)", minimum-bitrate=(uint)243800, maximum-bitrate=(uint)25412600, bitrate=(uint)2070057;, ref-count=(uint)1, trace=(string); 0:00:10.043380000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstTagList, address=(gpointer)161C0A58, description=(string)taglist, video-codec=(string)"H.264\ \(Main\ Profile\)", minimum-bitrate=(uint)243800, maximum-bitrate=(uint)25412600, bitrate=(uint)2019025;, ref-count=(uint)1, trace=(string); 0:00:10.043789000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstTagList, address=(gpointer)161C0AE8, description=(string)taglist, video-codec=(string)"H.264\ \(Main\ Profile\)", minimum-bitrate=(uint)243800, maximum-bitrate=(uint)25412600, bitrate=(uint)1974106;, ref-count=(uint)1, trace=(string); 0:00:10.044199000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstTagList, address=(gpointer)161C0B48, description=(string)taglist, video-codec=(string)"H.264\ \(Main\ Profile\)", minimum-bitrate=(uint)243800, maximum-bitrate=(uint)25412600, bitrate=(uint)1880914;, ref-count=(uint)1, trace=(string); 0:00:10.044606000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstTagList, address=(gpointer)1B848700, description=(string)taglist, video-codec=(string)"H.264\ \(Main\ Profile\)", minimum-bitrate=(uint)243800, maximum-bitrate=(uint)25412600, bitrate=(uint)1934082;, ref-count=(uint)1, trace=(string); 0:00:10.045696000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161BD6C0, description=(string)161BD6C0, ref-count=(uint)1, trace=(string); 0:00:10.046116000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1B854110, description=(string)1B854110, ref-count=(uint)1, trace=(string); 0:00:10.046523000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)00ABA0E0, description=(string)00ABA0E0, ref-count=(uint)1, trace=(string); 0:00:10.046948000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161BD8F0, description=(string)161BD8F0, ref-count=(uint)1, trace=(string); 0:00:10.047407000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F09FAF0, description=(string)1F09FAF0, ref-count=(uint)1, trace=(string); 0:00:10.047965000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161BDB20, description=(string)161BDB20, ref-count=(uint)1, trace=(string); 0:00:10.048460000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161BDE90, description=(string)161BDE90, ref-count=(uint)1, trace=(string); 0:00:10.048930000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161C3BA8, description=(string)161C3BA8, ref-count=(uint)1, trace=(string); 0:00:10.049426000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F269D08, description=(string)1F269D08, ref-count=(uint)1, trace=(string); 0:00:10.049855000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)16053128, description=(string)16053128, ref-count=(uint)1, trace=(string); 0:00:10.050329000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F2661C0, description=(string)1F2661C0, ref-count=(uint)1, trace=(string); 0:00:10.050856000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1B885220, description=(string)1B885220, ref-count=(uint)1, trace=(string); 0:00:10.051383000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1B892C50, description=(string)1B892C50, ref-count=(uint)1, trace=(string); 0:00:10.051848000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1B883EA0, description=(string)1B883EA0, ref-count=(uint)1, trace=(string); 0:00:10.052399000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161BDE40, description=(string)161BDE40, ref-count=(uint)1, trace=(string); 0:00:10.052923000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161C3B58, description=(string)161C3B58, ref-count=(uint)1, trace=(string); 0:00:10.053445000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F28B1F0, description=(string)1F28B1F0, ref-count=(uint)1, trace=(string); 0:00:10.053951000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)16053E98, description=(string)16053E98, ref-count=(uint)1, trace=(string); 0:00:10.054459000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)160539E8, description=(string)160539E8, ref-count=(uint)1, trace=(string); 0:00:10.054936000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1B881D98, description=(string)1B881D98, ref-count=(uint)1, trace=(string); 0:00:10.055414000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F287370, description=(string)1F287370, ref-count=(uint)1, trace=(string); 0:00:10.055901000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)161C3798, description=(string)161C3798, ref-count=(uint)1, trace=(string); 0:00:10.056431000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1B88EBD8, description=(string)1B88EBD8, ref-count=(uint)1, trace=(string); 0:00:10.056902000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F26E798, description=(string)1F26E798, ref-count=(uint)1, trace=(string); 0:00:10.057488000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)163740A0, description=(string)163740A0, ref-count=(uint)1, trace=(string); 0:00:10.058091000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F2FD878, description=(string)1F2FD878, ref-count=(uint)1, trace=(string); 0:00:10.058626000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)16053AD8, description=(string)16053AD8, ref-count=(uint)1, trace=(string); 0:00:10.059122000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstMemory, address=(gpointer)1F09FA00, description=(string)1F09FA00, ref-count=(uint)1, trace=(string); 0:00:10.059654000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstEvent, address=(gpointer)1F275330, description=(string)tag event: 1F275330, time 99:99:99.999999999, seq-num 612, GstTagList-stream, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"H.264\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)243800\,\ maximum-bitrate\=\(uint\)25412600\,\ bitrate\=\(uint\)2138558\;";, ref-count=(uint)1, trace=(string); 0:00:10.060685000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstEvent, address=(gpointer)1F275258, description=(string)tag event: 1F275258, time 99:99:99.999999999, seq-num 639, GstTagList-stream, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"H.264\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)243800\,\ maximum-bitrate\=\(uint\)25412600\,\ bitrate\=\(uint\)1974106\;";, ref-count=(uint)1, trace=(string); 0:00:10.061654000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstEvent, address=(gpointer)1F2754E0, description=(string)tag event: 1F2754E0, time 99:99:99.999999999, seq-num 648, GstTagList-stream, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"H.264\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)243800\,\ maximum-bitrate\=\(uint\)25412600\,\ bitrate\=\(uint\)1934082\;";, ref-count=(uint)1, trace=(string); 0:00:10.062621000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstEvent, address=(gpointer)1F2752E8, description=(string)tag event: 1F2752E8, time 99:99:99.999999999, seq-num 621, GstTagList-stream, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"H.264\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)243800\,\ maximum-bitrate\=\(uint\)25412600\,\ bitrate\=\(uint\)2070057\;";, ref-count=(uint)1, trace=(string); 0:00:10.063618000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstEvent, address=(gpointer)1F275498, description=(string)tag event: 1F275498, time 99:99:99.999999999, seq-num 662, GstTagList-stream, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"H.264\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)243800\,\ maximum-bitrate\=\(uint\)25412600\,\ bitrate\=\(uint\)1880914\;";, ref-count=(uint)1, trace=(string); 0:00:10.064930000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstEvent, address=(gpointer)1F2752A0, description=(string)tag event: 1F2752A0, time 99:99:99.999999999, seq-num 630, GstTagList-stream, taglist=(taglist)"taglist\,\ video-codec\=\(string\)\"H.264\\\ \\\(Main\\\ Profile\\\)\"\,\ minimum-bitrate\=\(uint\)243800\,\ maximum-bitrate\=\(uint\)25412600\,\ bitrate\=\(uint\)2019025\;";, ref-count=(uint)1, trace=(string); 0:00:10.065946000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B846A80, description=(string)buffer: 1B846A80, pts 0:00:02.013940419, dts 0:00:01.880000000, dur 0:00:00.040000000, size 4469, offset 474472, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.066690000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84C938, description=(string)buffer: 1B84C938, pts 0:00:01.816961971, dts 0:00:01.680000000, dur 0:00:00.040000000, size 1262, offset 458535, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.067514000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84CA88, description=(string)buffer: 1B84CA88, pts 0:00:01.974939841, dts 0:00:01.840000000, dur 0:00:00.040000000, size 4445, offset 470033, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.068241000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)161348A0, description=(string)buffer: 161348A0, pts 0:00:02.205446365, dts 0:00:02.080000000, dur 0:00:00.040000000, size 4865, offset 497988, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.068942000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B8469D8, description=(string)buffer: 1B8469D8, pts 0:00:02.318141819, dts 0:00:02.200000000, dur 0:00:00.040000000, size 4691, offset 512819, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.069637000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84C890, description=(string)buffer: 1B84C890, pts 0:00:02.091235587, dts 0:00:01.960000000, dur 0:00:00.040000000, size 4728, offset 483657, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.070312000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84CDD0, description=(string)buffer: 1B84CDD0, pts 0:00:02.280679221, dts 0:00:02.160000000, dur 0:00:00.040000000, size 4977, offset 507848, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.071093000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)161349F0, description=(string)buffer: 161349F0, pts 0:00:01.896302112, dts 0:00:01.760000000, dur 0:00:00.040000000, size 4277, offset 461493, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.072009000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)06523E70, description=(string)buffer: 06523E70, pts 0:00:02.052707907, dts 0:00:01.920000000, dur 0:00:00.040000000, size 4728, offset 478935, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.072751000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84B888, description=(string)buffer: 1B84B888, pts 0:00:01.856710215, dts 0:00:01.720000000, dur 0:00:00.040000000, size 1708, offset 459791, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.073412000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84C7E8, description=(string)buffer: 1B84C7E8, pts 0:00:02.129525340, dts 0:00:02.000000000, dur 0:00:00.040000000, size 4819, offset 488379, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.074174000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84CB30, description=(string)buffer: 1B84CB30, pts 0:00:02.243129923, dts 0:00:02.120000000, dur 0:00:00.040000000, size 5007, offset 502847, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.074842000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)16134948, description=(string)buffer: 16134948, pts 0:00:01.935720321, dts 0:00:01.800000000, dur 0:00:00.040000000, size 4275, offset 465764, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string); 0:00:10.075659000 11032 064E1000 TRACE GST_TRACER :0:: object-alive, type-name=(string)GstBuffer, address=(gpointer)1B84C3F8, description=(string)buffer: 1B84C3F8, pts 0:00:02.167588515, dts 0:00:02.040000000, dur 0:00:00.040000000, size 4802, offset 493192, offset_end none, flags 0x6000, ref-count=(uint)1, trace=(string);
Edited by Aaron Boxer - Author
btw, @cap, adding the alignment flag to
d3dvideosink
fixes the green translucent bar appearing at the top of the video frame.Edited by Aaron Boxer - Author
Another interesting data point:
GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7" gst-launch-1.0 -v rtspsrc location="rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov" \ ! rtph264depay ! h264parse ! msdkh264dec ! videoconvert ! d3dvideosink
has no leaks, but
GST_TRACERS="leaks" GST_DEBUG="GST_TRACER:7" gst-launch-1.0 -v rtspsrc location="rtsp://PRIVATE_URL" \ ! rtph264depay ! h264parse ! msdkh264dec ! videoconvert ! d3dvideosink
does have leaks.
Caps for leaky pipeline:
/GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1080, framerate=(fraction)25/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, colorimetry=(string)1:3:5:1, parsed=(boolean)true, profile=(string)main, level=(string)4.2 Redistribute latency... /GstPipeline:pipeline0/GstMsdkH264Dec:msdkh264dec0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1080, framerate=(fraction)25/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, colorimetry=(string)1:3:5:1, parsed=(boolean)true, profile=(string)main, level=(string)4.2 /GstPipeline:pipeline0/GstMsdkH264Dec:msdkh264dec0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)1:3:5:1, framerate=(fraction)25/1 /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)1:3:5:1, framerate=(fraction)25/1 /GstPipeline:pipeline0/GstD3DVideoSink:d3dvideosink0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)1:3:5:1, framerate=(fraction)25/1 /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)1920, height=(int)1080, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)mpeg2, colorimetry=(string)1:3:5:1, framerate=(fraction)25/1
and caps for non-leaky pipeline:
/GstPipeline:pipeline0/GstMsdkH264Dec:msdkh264dec0.GstPad:sink: caps = video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)240, height=(int)160, framerate=(fraction)24/1, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true, profile=(string)constrained-baseline, level=(string)3 /GstPipeline:pipeline0/GstMsdkH264Dec:msdkh264dec0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)240, height=(int)160, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg, colorimetry=(string)bt601, framerate=(fraction)24/1 /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, format=(string)NV12, width=(int)240, height=(int)160, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg, colorimetry=(string)bt601, framerate=(fraction)24/1 /GstPipeline:pipeline0/GstD3DVideoSink:d3dvideosink0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)240, height=(int)160, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg, colorimetry=(string)bt601, framerate=(fraction)24/1 /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw, format=(string)NV12, width=(int)240, height=(int)160, interlace-mode=(string)progressive, multiview-mode=(string)mono, multiview-flags=(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-first/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixed-mono, pixel-aspect-ratio=(fraction)1/1, chroma-site=(string)jpeg, colorimetry=(string)bt601, framerate=(fraction)24/1
Edited by Aaron Boxer - Author
And, switching sink to
d3d11videosink
doesn't fix the leak, so it's not the sink. - Author
@haihao Also leaks on linux, with various sinks.
- Author
leak stack trace:
handle_object_created.part.1 (gstleaks.c:334) gst_mini_object_init (gstminiobject.c:166) gst_tag_list_new_internal (gsttaglist.c:697) gst_tag_list_merge (gsttaglist.h:476) gst_video_decoder_create_merged_tags_event (gstvideodecoder.c:886) gst_video_decoder_sink_event_default (gstvideodecoder.c:1378) gst_pad_send_event_unchecked (gstpad.c:5772) gst_pad_push_event_unchecked (gstpad.c:5417) push_sticky (gstpad.c:3933) events_foreach (gstpad.c:608) gst_pad_push_event (gstpad.c:3992) gst_base_parse_push_pending_events (gstbaseparse.c:2287) gst_base_parse_push_frame (gstbaseparse.c:2526) gst_base_parse_finish_frame (gstbaseparse.c:2394) gst_h264_parse_handle_frame (gsth264parse.c:1358) gst_base_parse_handle_buffer (gstbaseparse.c:2202) gst_base_parse_chain (gstbaseparse.c:3287) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_rtp_base_depayload_push (gstrtpbasedepayload.c:915) gst_rtp_h264_depay_handle_nal (gstrtph264depay.c:978) gst_rtp_h264_finish_fragmentation_unit (gstrtph264depay.c:1020) gst_rtp_h264_depay_process (gstrtph264depay.c:1245) gst_rtp_base_depayload_handle_buffer.isra.1 (gstrtpbasedepayload.c:503) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_proxy_pad_chain_default (gstghostpad.c:127) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_proxy_pad_chain_default (gstghostpad.c:127) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_rtp_pt_demux_chain (gstrtpptdemux.c:554) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) pop_and_push_next (gstrtpjitterbuffer.c:3511) gst_rtp_jitter_buffer_loop (gstrtpjitterbuffer.c:3610) gst_task_func (gsttask.c:328)
Collapse replies - Maintainer
I followed that one quickly, the tag is wrapped in an event and pushed downstream, then it's up to downstream to unref the event, which will unref the tag. So question, do you also see a GstEvent leaked to pair with this one ?
- Author
yes, exactly. There was a GstEvent that also leaked. So, the decoder is not unrefing the event. In which method should the decoder be unrefing ?
Edited by Aaron Boxer - Author
!816 (merged) fixes all leaks, but there is then still a bug.
- Author
and another leak:
trace=(string)gst_debug_get_stack_trace (gstinfo.c:2908) handle_object_created.part.1 (gstleaks.c:334) gst_mini_object_init (gstminiobject.c:166) gst_memory_init (gstmemory.c:121) _sysmem_new_block (gstallocator.c:370) gst_buffer_new_allocate (gstbuffer.c:881) gst_h264_parse_wrap_nal (gsth264parse.c:442) gst_h264_parse_process_nal (gsth264parse.c:971) gst_h264_parse_handle_frame (gsth264parse.c:1316) gst_base_parse_handle_buffer (gstbaseparse.c:2202) gst_base_parse_chain (gstbaseparse.c:3287) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_rtp_base_depayload_push (gstrtpbasedepayload.c:915) gst_rtp_h264_depay_handle_nal (gstrtph264depay.c:978) gst_rtp_h264_finish_fragmentation_unit (gstrtph264depay.c:1020) gst_rtp_h264_depay_process (gstrtph264depay.c:1245) gst_rtp_base_depayload_handle_buffer.isra.1 (gstrtpbasedepayload.c:503) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_proxy_pad_chain_default (gstghostpad.c:127) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_proxy_pad_chain_default (gstghostpad.c:127) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) gst_rtp_pt_demux_chain (gstrtpptdemux.c:554) gst_pad_push_data (gstpad.c:4333) gst_pad_push (gstpad.c:4708) pop_and_push_next (gstrtpjitterbuffer.c:3511) gst_rtp_jitter_buffer_loop (gstrtpjitterbuffer.c:3610) gst_task_func (gsttask.c:328)
- Aaron Boxer mentioned in merge request !816 (merged)
mentioned in merge request !816 (merged)
- Author
I am closing this, as the original leak as reported has been fixed. There is still a leak of the msdk context, but this will be fixed by
- Aaron Boxer closed
closed