media/gpu: Add LibYUVImageProcessor and extend ImageProcessor interface

LibYUVImageProcessor is a software image processor to convert video
stream format for video encoder / decoder to consume.

Adds ImageProcessorFactory to encapsulate image processor creation
for video decode/encode accelerators.

Adds Process(VF, VF, cb) in ImageProcessor because it is platform
agnostics, i.e. no ScopedFD, which is POXIS only. Also, it aligns with
our goal to make ImageProcessor support only import mode for output
VideoFrame (input is already import mode only). When we reach the goal,
i.e. all IP's users use Process(VF, VF, cb), we can simplify the logic
of both ImageProcessors and their callers.

We take V4L2 VEA as its first user of this overloaded function.
When V4L2 VEA needs IP and VEA knows how to create VideoFrame for IP
as output, we can use the new interface.
On the contrary, as far as we know, V4L2 VEA is unable to create
DMAbuf-backed VideoFrame for V4L2 IP's output, we keep using the
original interface until the issue is solved.

BUG=b:73752373, chromium:907767, b:110815424
TEST=TEST=Run VEA VDA unittest on devices (peach_pit and elm)
VEA:
video_encode_accelerator_unittest \
--test_stream_data=bear-320x180.yuv:320:180:1:bear.mp4:100000:30 \
--disable_flush --single-process-tests -v=0

Change-Id: I8bfabda30a569030e8e0831efafc502f48cfabf2
Reviewed-on: https://chromium-review.googlesource.com/c/1348150
Commit-Queue: Shuo-Peng Liao <deanliao@google.com>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Wu-Cheng Li <wuchengli@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Cr-Commit-Position: refs/heads/master@{#618991}
12 files changed