plugins: fix GstVaapiVideoMemory to allocate VA surface proxies.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 9 Oct 2013 07:33:56 +0000 (09:33 +0200)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 9 Oct 2013 16:30:06 +0000 (18:30 +0200)
commit4df68163dcd5f58e7b7e9bf6909d61be1658f30c
tree14f7a703302ece35dc581596b2cc7cc41a37e504
parentcc9afca3edf74a821e337b46d6bf383eff0fcac0
plugins: fix GstVaapiVideoMemory to allocate VA surface proxies.

Make sure GstVaapiVideoMemory allocates VA surface proxies from a
pool stored in the parent VA memory allocator.

This fixes the following scenario:
- VA video buffer 1 is allocated from a buffer pool
- Another video buffer is created, and inherits info from buffer 1
- Buffer 1 is released, thus pushing it back to the buffer pool
- New buffer alloc request comes it, this yields buffer 1 back
- At this stage, buffers 1 and 2 still share the same underlying VA
  surface, but buffer 2 was already submitted downstream for further
  processing, thus conflicting with additional processing we were
  about to perform on buffer 1.

Maybe the core GstBufferPool implementation should have been fixed
instead to actually make sure that the returned GstBuffer memory we
found from the pool is writable?
gst/vaapi/gstvaapivideomemory.c
gst/vaapi/gstvaapivideomemory.h