RELAND: Vaapi decode: split |decoder_|s GetRequiredNumOfPictures()

The problem is that the landed (and then reverted) CL called
from InitiateSurfaceSetChange() and read back true, but later on, when
the client called AssignPictureBuffers(), then
  ShouldDecodeOnclientPictureBuffers(profile_, !va_surface_ids.empty())
returned false and we ended up calling CreateContextAndSurfaces
with |requested_num_reference_frames_| == 0;

This CL fixes that:

Original CL description -----------------------------------------------
Vaapi decode: split |decoder_|s GetRequiredNumOfPictures()

This CL reduces the amount of PictureBuffers requested to be allocated
by the |client_| when we are not |decode_using_client_picture_buffers_|.
Instead, it "splits" the requested allocations into
- the actual needed PictureBuffers (A)
- the codec's requested reference frames (B) (a new method
 GetNumReferenceFrames() is added to AcceleratedVideoDecoder for this).

This splitting saves a lot of memory, since we allocate A+B buffers
instead of 2*(A+B). (B is 5 and A is 4-VP8, 4-12 H264/VP9)

Test: crosvideo changing resolutions for each codec, v_d_a_unittest
on nocturne (KBL) and caroline (SKL).

Bug: 909926
Change-Id: I5f6bda45b748f3b7a82663ba70f0cd4e0d20e37f
Reviewed-by: Hirokazu Honda <>
Commit-Queue: Miguel Casas <>
Cr-Original-Commit-Position: refs/heads/master@{#615571}
Cr-Commit-Position: refs/heads/master@{#617366}
10 files changed