decodebin2: fix pad leak and problem with GWeakRef code
Follow-up to !160 and commit 6a99ad2c. Firstly, don't leak the sinkpad. g_weak_ref_get() returns a strong reference (unless it returns NULL), so that must be unrefed, as detected by the playbin-complex and discoverer unit tests. Next, if we do that we get invalid memory access when the final pad ref is dropped a few lines below after the request pad is released. The reason for this is that GWeakRefs are not movable once they're in use, because their address will be stored inside the object. In this case the GWeakRef was embedded inside the GstDemuxerPad struct which in turn was embedded inside the GArray data section, and when the GArray gets resized, the structs move. Just KISS and use a list with individual allocations for each DemuxerPad instead.
Showing with 18 additions and 18 deletions