Add BGRA color formats for VIO
Change shvio_start_blend and rename to shvio_setup_blend

Move the shvio_start call out of shvio_start_blend, so that it matches
shvio_setup.
vio_blend: Enable setting of the virtual BRU input as master layer

When compositing several layers into one with the BRU, a master layer
must be specified and the offset of all other layers are indicated
in relation to the top left corner of the master layer an should not
extend past the bottom right corner of the master layer.  If none of
the layers to be composited can bound all of the other layers, the
virtual layer can be used as the master layer.

The virtual layer, when enabled, is filled with opaque black and
is at the bottom of the blend stack.
vio_blend: Specify the position offset for blended layers

The .x and .y elements of the surface structure are used to specify
where a blended layer will appear in relation to the master layer, which
is specified as the virtual layer (if non-null) or src0 if virt is null.
vio_blend: Perform color conversion before BRU

When using the BRU, all source layers must be in the same color-space.
Make the color space used match the output (WPF) color space, and perform
any necessary conversion at the input (RPF)
vio_blend: Define constants to set blending coefficients in BRU
vio_blend: Convert the blend api to use an array of input sources

Makes adjusting the number of supported input planes and
register setup easier.
vio_blend: Add support for premultiplied blending (per surface)

Adjust the blending calculations to provide per surface premultiplied
alpha composition.  Alpha blending mode is specified in the surface
.flags element.
vio_blend: Add blend_out element to surface

The .blend_out element will contain the output window of a surface
to be blended.  This allows for specifying the window offset
and size, and is necessary to be able to support window resizing
while blending.
vio_blend; Support surface resizing while blending

Resize a surface to the size specified in .blend_out before
blending.

Note: Perfoming surface resizes before blending depends on the
availablility of a scaling module.  The number of scaling modules
available my be less than the number of possible blending surfaces,
so it may not be possible to resize all surfaces when blending.
Add logging via logcat if building on Android
blend: Only unlock the VIO when blend setup fails

The VIO was not being locked during blend operations as it should have been.
Make the behavior of setup_blend match that of setup.
get_sel_surface: Correct pixel size resitrictions when cropping surfaces

Correct the bitmasking operations used by get_sel_surface to make sure
that the surface offsets and sizes do not violate the restrictions of
the colorspace for the surface (eg NV12 surfaces, must have
multiple of 2 offsets).