picture.cc 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // Copyright (c) 2011 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "media/video/picture.h"
  5. #include "base/check_op.h"
  6. #include "base/logging.h"
  7. namespace media {
  8. PictureBuffer::PictureBuffer(int32_t id, const gfx::Size& size)
  9. : id_(id), size_(size) {}
  10. PictureBuffer::PictureBuffer(int32_t id,
  11. const gfx::Size& size,
  12. const TextureIds& client_texture_ids)
  13. : id_(id), size_(size), client_texture_ids_(client_texture_ids) {
  14. DCHECK(!client_texture_ids_.empty());
  15. }
  16. PictureBuffer::PictureBuffer(int32_t id,
  17. const gfx::Size& size,
  18. const TextureIds& client_texture_ids,
  19. const TextureIds& service_texture_ids,
  20. uint32_t texture_target,
  21. VideoPixelFormat pixel_format)
  22. : id_(id),
  23. size_(size),
  24. client_texture_ids_(client_texture_ids),
  25. service_texture_ids_(service_texture_ids),
  26. texture_target_(texture_target),
  27. pixel_format_(pixel_format) {
  28. // We either not have client texture ids at all, or if we do, then their
  29. // number must be the same as the number of service texture ids.
  30. DCHECK(client_texture_ids_.empty() ||
  31. client_texture_ids_.size() == service_texture_ids_.size());
  32. }
  33. PictureBuffer::PictureBuffer(int32_t id,
  34. const gfx::Size& size,
  35. const TextureIds& client_texture_ids,
  36. const std::vector<gpu::Mailbox>& texture_mailboxes,
  37. uint32_t texture_target,
  38. VideoPixelFormat pixel_format)
  39. : id_(id),
  40. size_(size),
  41. client_texture_ids_(client_texture_ids),
  42. texture_mailboxes_(texture_mailboxes),
  43. texture_target_(texture_target),
  44. pixel_format_(pixel_format) {
  45. DCHECK_EQ(client_texture_ids.size(), texture_mailboxes.size());
  46. }
  47. PictureBuffer::PictureBuffer(int32_t id,
  48. const gfx::Size& size,
  49. const TextureSizes& texture_sizes,
  50. const TextureIds& client_texture_ids,
  51. const TextureIds& service_texture_ids,
  52. uint32_t texture_target,
  53. VideoPixelFormat pixel_format)
  54. : id_(id),
  55. size_(size),
  56. texture_sizes_(texture_sizes),
  57. client_texture_ids_(client_texture_ids),
  58. service_texture_ids_(service_texture_ids),
  59. texture_target_(texture_target),
  60. pixel_format_(pixel_format) {
  61. // We either not have client texture ids at all, or if we do, then their
  62. // number must be the same as the number of service texture ids.
  63. DCHECK(client_texture_ids_.empty() ||
  64. client_texture_ids_.size() == service_texture_ids_.size());
  65. }
  66. PictureBuffer::PictureBuffer(const PictureBuffer& other) = default;
  67. PictureBuffer::~PictureBuffer() = default;
  68. gfx::Size PictureBuffer::texture_size(size_t plane) const {
  69. if (plane >= texture_sizes_.size()) {
  70. LOG(ERROR) << "Missing texture size for plane " << plane;
  71. return gfx::Size();
  72. }
  73. return texture_sizes_[plane];
  74. }
  75. Picture::Picture(int32_t picture_buffer_id,
  76. int32_t bitstream_buffer_id,
  77. const gfx::Rect& visible_rect,
  78. const gfx::ColorSpace& color_space,
  79. bool allow_overlay)
  80. : picture_buffer_id_(picture_buffer_id),
  81. bitstream_buffer_id_(bitstream_buffer_id),
  82. visible_rect_(visible_rect),
  83. color_space_(color_space),
  84. allow_overlay_(allow_overlay),
  85. read_lock_fences_enabled_(false),
  86. size_changed_(false),
  87. texture_owner_(false),
  88. wants_promotion_hint_(false),
  89. is_webgpu_compatible_(false) {}
  90. Picture::Picture(const Picture& other) = default;
  91. Picture::~Picture() = default;
  92. Picture::ScopedSharedImage::ScopedSharedImage(
  93. gpu::Mailbox mailbox,
  94. uint32_t texture_target,
  95. base::OnceClosure destruction_closure)
  96. : destruction_closure_(std::move(destruction_closure)),
  97. mailbox_holder_(mailbox, gpu::SyncToken(), texture_target) {}
  98. Picture::ScopedSharedImage::~ScopedSharedImage() {
  99. std::move(destruction_closure_).Run();
  100. }
  101. } // namespace media