vpx_alpha: fix leaks and refactor merging
p_sys is used by the pool to forward the picture pool context. Pictures that are supporting copying should be using picture context instead, which the vpx_alpha decoder was already doing.
This fixes a huge memory leak of picture data when playing VP9 videos.
STACK OF 1242 INSTANCES OF 'ROOT LEAK: malloc[2097152]':
9 libsystem_pthread.dylib 0x185e89d34 thread_start + 8
8 libsystem_pthread.dylib 0x185e8ef94 _pthread_start + 136
7 libvlccore.9.dylib 0x1032606cc DecoderThread + 348 decoder.c:1869
6 libvlccore.9.dylib 0x103262c04 DecoderThread_DecodeBlock + 256 decoder.c:1627
5 ??? 0x107066034 0x7fffffffffffffff + 9223372041267601461
4 ??? 0x12a809674 0x7fffffffffffffff + 9223372041862813301
3 ??? 0x107065c70 0x7fffffffffffffff + 9223372041267600497
2 ??? 0x107066644 0x7fffffffffffffff + 9223372041267603013
1 ??? 0x1070662ec 0x7fffffffffffffff + 9223372041267602157
0 libsystem_malloc.dylib 0x185cc8a68 _malloc_zone_malloc_instrumented_or_legacy + 148
Instruments correctly indicates the following trace:
CombinePicturesCPU
SendMergedLocked
QueuePic
ecoder_QueueVideo
ecodeBlock
DecodeVideo
Decode
DecoderThread_DecodeBlock
DecoderThread
_pthread_start
thread_start
The MR then establish reference counting for the picture context as well as some minor early return which removes some branching complexity and separate the allocation path against the re-use path.
Fixes #28792 (closed)