media/gpu/chromeos: Add NativePixmapFrameResource

NativePixmapFrameResource is composed of a NativePixmapDmaBuf and
VideoFrame metadata members. It presents a VideoFrame::StorageType of
STORAGE_DMABUF and provides file descriptor accessors.

It can be constructed by assuming ownership over a vector of per-plane
file descriptors (which will be used to import V4L2 buffers), by
allocating the planes using MiniGBM, or by assuming ownership of a
NativePixmapDmaBuf.

The method WrapFrame is used to create a new FrameResource that is
backed by the same NativePixmapDmaBuf, but with caller specified visible
rectangle, and a copy of the VideoFrame metadata, which can be modified.

The conversion method CreateVideoFrame() produces a VideoFrame with a
storage type of STORAGE_GPU_MEMORY_BUFFER with duplicated file
descriptors.

There are two changes to functions in platform_video_frame_utils.h to
expose functionality that is needed by the implementation of
NativePixmapFrameResource:

1. AllocateGpuMemoryBufferHandle() creates a NativePixmap and returns a
GpuMemoryBufferHandle that refers to it. It does so by utilizing a GBM
wrapper that is scoped just to platform_video_frame_utils.cc. In order
for NativePixmapFrameResource to have a Create function that uses
MiniGBM to allocate frames, the function has been moved out of an
anoynmous namespace and is now declared in platform_frame_utils.h.

2. CreateGpuMemoryBufferVideoFrame() allocates a GMBHandle and creates a
VideoFrame with storage type of STORAGE_GPU_MEMORY_BUFFER from it. This
extracts the VideoFrame creation logic into a new function:
CreateVideoFrameFromGpuMemoryBufferHandle(). The new function is called
by the original CreateGpuMemoryBufferVideoFrame() function and is also
used by NativePixmapFrameResource::CreateVideoFrame().

Bug: b:277581596
Test: Test and chrome targets compile

Change-Id: Id028883c2153f18dc0a08396ac2b6222facb96f0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5153222
Commit-Queue: Nathan Hebert <nhebert@chromium.org>
Reviewed-by: Hirokazu Honda <hiroh@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1272854}
7 files changed
tree: f68d8c994f38752638c2d2dfbeac20b5460e28fd
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. webkit/
  51. .clang-format
  52. .clang-tidy
  53. .clangd
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitallowed
  57. .gitattributes
  58. .gitignore
  59. .gitmodules
  60. .gn
  61. .mailmap
  62. .rustfmt.toml
  63. .vpython3
  64. .yapfignore
  65. ATL_OWNERS
  66. AUTHORS
  67. BUILD.gn
  68. CODE_OF_CONDUCT.md
  69. codereview.settings
  70. DEPS
  71. DIR_METADATA
  72. LICENSE
  73. LICENSE.chromium_os
  74. OWNERS
  75. PRESUBMIT.py
  76. PRESUBMIT_test.py
  77. PRESUBMIT_test_mocks.py
  78. README.md
  79. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.