Reland "[media] Simplify VRU::SupportedMultiPlaneChannelFormat"
This reverts commitc20f7a1b8d
. Reason for revert: Missed that shared_image_caps is set inside, need to be set outside as they are now used by SupportedMultiPlaneChannelFormat Bug: 332564976 Original change's description: > Revert "[media] Simplify VRU::SupportedMultiPlaneChannelFormat" > > This reverts commit4e2dcd6c34
. > > Reason for revert: Breaks the build and the tree: https://ci.chromium.org/ui/p/chromium/builders/ci/android-desktop-x64-compile-rel/28788/overview > > Bug: 332564976 > Original change's description: > > [media] Simplify VRU::SupportedMultiPlaneChannelFormat > > > > Update VideoResourceUpdater::SupportedMultiPlaneChannelFormat to > > check directly for capabilities instead of going over > > YuvSharedImageFormat. This allows to remove both YuvSharedImageFormat > > and GetSingleChannel8BitFormat methods. > > > > Also inline IsFormat16BitFloat method where it is needed. > > > > Bug: 332564976 > > Change-Id: I8c2f955d2a18c6273d06f2291b1b3d09442a4a97 > > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6512515 > > Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org> > > Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org> > > Reviewed-by: Dale Curtis <dalecurtis@chromium.org> > > Cr-Commit-Position: refs/heads/main@{#1456573} > > Bug: 332564976 > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Change-Id: I21cf144ab6a19eab3da3b902e810377aab08bf84 > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6512529 > Reviewed-by: Sophey Dong <sophey@chromium.org> > Owners-Override: Anton Maliev <amaliev@chromium.org> > Commit-Queue: Anton Maliev <amaliev@chromium.org> > Cr-Commit-Position: refs/heads/main@{#1456579} Bug: 332564976 Change-Id: I2c5a33136f4c47766cfb74acef5edd6ed8de675e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6516048 Reviewed-by: Vasiliy Telezhnikov <vasilyt@chromium.org> Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org> Reviewed-by: Dale Curtis <dalecurtis@chromium.org> Cr-Commit-Position: refs/heads/main@{#1456949}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
e7f4b7cf64
commit
b5509f3a5c
@ -180,17 +180,6 @@ viz::SharedImageFormat GetRGBSharedImageFormat(VideoPixelFormat format) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
viz::SharedImageFormat GetSingleChannel8BitFormat(
|
|
||||||
const gpu::Capabilities& caps,
|
|
||||||
const gpu::SharedImageCapabilities& shared_image_caps) {
|
|
||||||
if (caps.texture_rg && !shared_image_caps.disable_r8_shared_images) {
|
|
||||||
return viz::SinglePlaneFormat::kR_8;
|
|
||||||
}
|
|
||||||
|
|
||||||
DCHECK(shared_image_caps.supports_luminance_shared_images);
|
|
||||||
return viz::SinglePlaneFormat::kLUMINANCE_8;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns true if the input VideoFrame format can be stored directly in the
|
// Returns true if the input VideoFrame format can be stored directly in the
|
||||||
// provided output shared image format.
|
// provided output shared image format.
|
||||||
bool HasCompatibleRGBFormat(VideoPixelFormat input_format,
|
bool HasCompatibleRGBFormat(VideoPixelFormat input_format,
|
||||||
@ -214,20 +203,24 @@ bool IsFrameFormat32BitRGB(VideoPixelFormat frame_format) {
|
|||||||
frame_format == PIXEL_FORMAT_ABGR || frame_format == PIXEL_FORMAT_ARGB;
|
frame_format == PIXEL_FORMAT_ABGR || frame_format == PIXEL_FORMAT_ARGB;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsFormat16BitFloat(viz::SharedImageFormat format) {
|
|
||||||
// Assume multiplanar SharedImageFormat with ChannelFormat::k16F is always
|
|
||||||
// used as LUMINANCEF16.
|
|
||||||
CHECK(format.is_multi_plane());
|
|
||||||
return format.channel_format() == viz::SharedImageFormat::ChannelFormat::k16F;
|
|
||||||
}
|
|
||||||
|
|
||||||
viz::SharedImageFormat::ChannelFormat SupportedMultiPlaneChannelFormat(
|
viz::SharedImageFormat::ChannelFormat SupportedMultiPlaneChannelFormat(
|
||||||
viz::SharedImageFormat format) {
|
const gpu::Capabilities& caps,
|
||||||
if (format == viz::SinglePlaneFormat::kR_16) {
|
const gpu::SharedImageCapabilities& shared_image_caps,
|
||||||
|
int bits_per_channel) {
|
||||||
|
if (bits_per_channel <= 8) {
|
||||||
|
// Must support texture_rg or 8-bits luminance.
|
||||||
|
DCHECK(shared_image_caps.supports_luminance_shared_images ||
|
||||||
|
caps.texture_rg);
|
||||||
|
return viz::SharedImageFormat::ChannelFormat::k8;
|
||||||
|
}
|
||||||
|
// Can support R_16 formats.
|
||||||
|
if (caps.texture_norm16 && shared_image_caps.supports_r16_shared_images) {
|
||||||
return viz::SharedImageFormat::ChannelFormat::k16;
|
return viz::SharedImageFormat::ChannelFormat::k16;
|
||||||
}
|
}
|
||||||
if (format == viz::SinglePlaneFormat::kLUMINANCE_F16 ||
|
// Can support R_F16 or LUMINANCE_F16 formats.
|
||||||
format == viz::SinglePlaneFormat::kR_F16) {
|
if (shared_image_caps.is_r16f_supported ||
|
||||||
|
(caps.texture_half_float_linear &&
|
||||||
|
shared_image_caps.supports_luminance_shared_images)) {
|
||||||
return viz::SharedImageFormat::ChannelFormat::k16F;
|
return viz::SharedImageFormat::ChannelFormat::k16F;
|
||||||
}
|
}
|
||||||
return viz::SharedImageFormat::ChannelFormat::k8;
|
return viz::SharedImageFormat::ChannelFormat::k8;
|
||||||
@ -857,30 +850,6 @@ VideoFrameExternalResource VideoResourceUpdater::CreateForHardwareFrame(
|
|||||||
return external_resource;
|
return external_resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
viz::SharedImageFormat VideoResourceUpdater::YuvSharedImageFormat(
|
|
||||||
int bits_per_channel) {
|
|
||||||
DCHECK(context_provider_);
|
|
||||||
const auto& caps = context_provider_->ContextCapabilities();
|
|
||||||
const auto& shared_image_caps =
|
|
||||||
context_provider_->SharedImageInterface()->GetCapabilities();
|
|
||||||
if (bits_per_channel <= 8) {
|
|
||||||
DCHECK(shared_image_caps.supports_luminance_shared_images ||
|
|
||||||
caps.texture_rg);
|
|
||||||
return GetSingleChannel8BitFormat(caps, shared_image_caps);
|
|
||||||
}
|
|
||||||
if (caps.texture_norm16 && shared_image_caps.supports_r16_shared_images) {
|
|
||||||
return viz::SinglePlaneFormat::kR_16;
|
|
||||||
}
|
|
||||||
if (shared_image_caps.is_r16f_supported) {
|
|
||||||
return viz::SinglePlaneFormat::kR_F16;
|
|
||||||
}
|
|
||||||
if (caps.texture_half_float_linear &&
|
|
||||||
shared_image_caps.supports_luminance_shared_images) {
|
|
||||||
return viz::SinglePlaneFormat::kLUMINANCE_F16;
|
|
||||||
}
|
|
||||||
return GetSingleChannel8BitFormat(caps, shared_image_caps);
|
|
||||||
}
|
|
||||||
|
|
||||||
viz::SharedImageFormat VideoResourceUpdater::GetSoftwareOutputFormat(
|
viz::SharedImageFormat VideoResourceUpdater::GetSoftwareOutputFormat(
|
||||||
VideoPixelFormat input_frame_format,
|
VideoPixelFormat input_frame_format,
|
||||||
int bits_per_channel,
|
int bits_per_channel,
|
||||||
@ -906,6 +875,8 @@ viz::SharedImageFormat VideoResourceUpdater::GetSoftwareOutputFormat(
|
|||||||
return PaintCanvasVideoRenderer::GetRGBPixelsOutputFormat();
|
return PaintCanvasVideoRenderer::GetRGBPixelsOutputFormat();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto& shared_image_caps =
|
||||||
|
context_provider_->SharedImageInterface()->GetCapabilities();
|
||||||
// Get the multiplanar shared image format for `input_frame_format`.
|
// Get the multiplanar shared image format for `input_frame_format`.
|
||||||
auto yuv_si_format =
|
auto yuv_si_format =
|
||||||
VideoPixelFormatToMultiPlanarSharedImageFormat(input_frame_format);
|
VideoPixelFormatToMultiPlanarSharedImageFormat(input_frame_format);
|
||||||
@ -914,8 +885,6 @@ viz::SharedImageFormat VideoResourceUpdater::GetSoftwareOutputFormat(
|
|||||||
// Only 8-bit formats are supported with UV planes for software decoding.
|
// Only 8-bit formats are supported with UV planes for software decoding.
|
||||||
CHECK_EQ(yuv_si_format.channel_format(),
|
CHECK_EQ(yuv_si_format.channel_format(),
|
||||||
viz::SharedImageFormat::ChannelFormat::k8);
|
viz::SharedImageFormat::ChannelFormat::k8);
|
||||||
const auto& shared_image_caps =
|
|
||||||
context_provider_->SharedImageInterface()->GetCapabilities();
|
|
||||||
// Two channel formats are supported only with texture_rg.
|
// Two channel formats are supported only with texture_rg.
|
||||||
if (!caps.texture_rg || shared_image_caps.disable_r8_shared_images) {
|
if (!caps.texture_rg || shared_image_caps.disable_r8_shared_images) {
|
||||||
texture_needs_rgb_conversion_out = true;
|
texture_needs_rgb_conversion_out = true;
|
||||||
@ -924,8 +893,8 @@ viz::SharedImageFormat VideoResourceUpdater::GetSoftwareOutputFormat(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the supported channel format for `yuv_si_format`'s first plane.
|
// Get the supported channel format for `yuv_si_format`'s first plane.
|
||||||
auto channel_format =
|
auto channel_format = SupportedMultiPlaneChannelFormat(
|
||||||
SupportedMultiPlaneChannelFormat(YuvSharedImageFormat(bits_per_channel));
|
caps, shared_image_caps, bits_per_channel);
|
||||||
if (yuv_si_format.channel_format() != channel_format) {
|
if (yuv_si_format.channel_format() != channel_format) {
|
||||||
// If the requested channel format is not supported, use the supported
|
// If the requested channel format is not supported, use the supported
|
||||||
// channel format and downsample later if needed.
|
// channel format and downsample later if needed.
|
||||||
@ -1076,12 +1045,14 @@ bool VideoResourceUpdater::WriteYUVPixelsForAllPlanesToTexture(
|
|||||||
const bool needs_bit_upshifting =
|
const bool needs_bit_upshifting =
|
||||||
bits_per_channel > 8 && bits_per_channel < resource_bit_depth;
|
bits_per_channel > 8 && bits_per_channel < resource_bit_depth;
|
||||||
|
|
||||||
|
const bool is_16bit_float = yuv_si_format.channel_format() ==
|
||||||
|
viz::SharedImageFormat::ChannelFormat::k16F;
|
||||||
|
|
||||||
// We need to convert the incoming data if we're transferring to half
|
// We need to convert the incoming data if we're transferring to half
|
||||||
// float, if there is need for bit downshift or if the strides need to
|
// float, if there is need for bit downshift or if the strides need to
|
||||||
// be reconciled.
|
// be reconciled.
|
||||||
const bool needs_conversion = IsFormat16BitFloat(yuv_si_format) ||
|
const bool needs_conversion =
|
||||||
needs_bit_downshifting ||
|
is_16bit_float || needs_bit_downshifting || needs_bit_upshifting;
|
||||||
needs_bit_upshifting;
|
|
||||||
const uint8_t* pixels;
|
const uint8_t* pixels;
|
||||||
int pixels_stride_in_bytes;
|
int pixels_stride_in_bytes;
|
||||||
if (!needs_conversion) {
|
if (!needs_conversion) {
|
||||||
@ -1098,7 +1069,7 @@ bool VideoResourceUpdater::WriteYUVPixelsForAllPlanesToTexture(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsFormat16BitFloat(yuv_si_format)) {
|
if (is_16bit_float) {
|
||||||
int max_value = 1 << bits_per_channel;
|
int max_value = 1 << bits_per_channel;
|
||||||
// Use 1.0/max_value to be consistent with multiplanar shared images
|
// Use 1.0/max_value to be consistent with multiplanar shared images
|
||||||
// which create TextureDrawQuads and don't take in a multiplier, offset.
|
// which create TextureDrawQuads and don't take in a multiplier, offset.
|
||||||
|
Reference in New Issue
Block a user