msdk: Use gst_clear_object() `gst_object_replace()` is not supposed to be used for unreffing and NULLing objects.
msdk: Fix warning about unused variable on Windows
msdk: Reorganize context preparation code Split it out into a separate function with early exits to make the flow clearer, and document what the function is doing clearly. No functional changes.
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 #946 (closed)