msdk: Fix increasing memory usage in dynamic pipelines
Our context is non-persistent, and we propagate it throughout the pipeline. This means that if we try to reuse any gstmsdk element by removing it from the pipeline and then re-adding it, we'll clone the mfxSession and create a new gstmsdk context as a child of the old one inside `gst_msdk_context_new_with_parent()`. Normally this only allocates a few KB inside the driver, but on Windows it seems to allocate tens of MBs which leads to linearly increasing memory usage for each PLAYING->NULL->PLAYING state cycle for the process. The contexts will only be freed when the pipeline itself goes to `NULL`, which would defeat the purpose of dynamic pipelines. Essentially, we need to optimize the case in which the element is removed from the pipeline and re-added and the same context is re-set on it. To detect that case, we set the context on `old_context`, and compare it to the new one when preparing the context. If they're the same, we don't need to do anything. Fixes gstreamer/gst-plugins-bad#946
Showing
- sys/msdk/gstmsdkcontextutil.c 1 addition, 7 deletionssys/msdk/gstmsdkcontextutil.c
- sys/msdk/gstmsdkdec.c 11 additions, 0 deletionssys/msdk/gstmsdkdec.c
- sys/msdk/gstmsdkdec.h 1 addition, 0 deletionssys/msdk/gstmsdkdec.h
- sys/msdk/gstmsdkenc.c 12 additions, 0 deletionssys/msdk/gstmsdkenc.c
- sys/msdk/gstmsdkenc.h 1 addition, 0 deletionssys/msdk/gstmsdkenc.h
- sys/msdk/gstmsdkvpp.c 15 additions, 0 deletionssys/msdk/gstmsdkvpp.c
- sys/msdk/gstmsdkvpp.h 1 addition, 0 deletionssys/msdk/gstmsdkvpp.h
Loading
Please register or sign in to comment