By default the HWC only support reduced color range.
Change-Id: Icf3ed7ab7c8a4a619da6e47341e5832a8577caf7
Tracked-On: https://jira01.devtools.intel.com/browse/OAM-71652
Tests: Support full color video.
Signed-off-by: HeYue <yue.he@intel.com>
-Wno-unused-parameter \
-Wno-unused-variable
+LOCAL_CPPFLAGS += -DVA_SUPPORT_COLOR_RANGE
+
ifeq ($(strip $(BOARD_USES_VULKAN)), true)
LOCAL_SHARED_LIBRARIES += \
libvulkan
-Wno-unused-parameter \
-O3
+LOCAL_CPPFLAGS += -DVA_SUPPORT_COLOR_RANGE
+
ifeq ($(strip $(BOARD_USES_VULKAN)), true)
LOCAL_SHARED_LIBRARIES += \
libvulkan
// Get Input Surface.
OverlayBuffer* buffer_in = state.layer_->GetBuffer();
+ uint32_t dataspace = buffer_in->GetDataSpace();
const MediaResourceHandle& resource = buffer_in->GetMediaResource(
va_display_, state.layer_->GetSourceCropWidth(),
state.layer_->GetSourceCropHeight());
pipe_param.output_region = &output_region;
pipe_param.output_color_standard = VAProcColorStandardBT601;
+#ifdef VA_SUPPORT_COLOR_RANGE
+ if ((dataspace & HAL_DATASPACE_RANGE_FULL) != 0) {
+ pipe_param.input_color_properties.color_range = VA_SOURCE_RANGE_FULL;
+ }
+#endif
+
#ifdef VA_WITH_PAVP
if (state.layer_->IsProtected()) {
/*Turn on protected flag*/
}
}
+void HwcLayer::SetDataSpace(uint32_t dataspace) {
+ if (dataspace_ != dataspace) {
+ dataspace_ = dataspace;
+ }
+}
+
void HwcLayer::SetAlpha(uint8_t alpha) {
if (alpha_ != alpha) {
alpha_ = alpha;
buffer->SetOriginalHandle(handle);
}
+ buffer->SetDataSpace(dataspace_);
+
imported_buffer_.reset(new ImportedBuffer(buffer, acquire_fence));
ValidateForOverlayUsage();
}
source_crop_width_ = layer->GetSourceCropWidth();
source_crop_height_ = layer->GetSourceCropHeight();
source_crop_ = layer->GetSourceCrop();
+ dataspace_ = layer->GetDataSpace();
blending_ = layer->GetBlending();
surface_damage_ = layer->GetLayerDamage();
uint32_t display_frame_width_ = 0;
uint32_t display_frame_height_ = 0;
uint8_t alpha_ = 0xff;
+ uint32_t dataspace_ = 0;
uint32_t solid_color_ = 0;
HWC2::Error IAHWC2::Hwc2Layer::SetLayerDataspace(int32_t dataspace) {
supported(__func__);
dataspace_ = static_cast<android_dataspace_t>(dataspace);
+ hwc_layer_.SetDataSpace(dataspace_);
return HWC2::Error::None;
}
#include <cros_gralloc_handle.h>
#include <hardware/hardware.h>
#include <hardware/hwcomposer.h>
+#include <system/graphics.h>
#include <ui/GraphicBuffer.h>
#include <utils/Trace.h>
#include "platformcommondefines.h"
#include "platformcommondefines.h"
+#define HAL_DATASPACE_RANGE_FULL 0x8000000
+
struct gbm_handle {
union {
// for GBM_BO_IMPORT_FD
return sf_handle_;
}
+ void SetDataSpace(uint32_t dataspace);
+
void SetTransform(int32_t sf_transform);
uint32_t GetTransform() const {
void SetDisplayFrame(const HwcRect<int>& display_frame, int translate_x_pos,
int translate_y_pos);
+ uint32_t GetDataSpace() const {
+ return dataspace_;
+ }
+
const HwcRect<int>& GetDisplayFrame() const {
return display_frame_;
}
uint32_t display_frame_width_ = 0;
uint32_t display_frame_height_ = 0;
uint8_t alpha_ = 0xff;
+ uint32_t dataspace_ = 0;
HwcRect<float> source_crop_;
HwcRect<int> display_frame_;
HwcRect<int> surface_damage_;
int prime_fds_[4];
uint32_t num_planes_ = 0;
uint32_t fb_modifiers_[8];
+ uint32_t dataspace_ = 0;
hwcomposer::HWCLayerType usage_ = hwcomposer::kLayerNormal;
};
-Wno-unused-parameter \
-O3
+LOCAL_CPPFLAGS += -DVA_SUPPORT_COLOR_RANGE
+
ifeq ($(strip $(BOARD_USES_VULKAN)), true)
LOCAL_SHARED_LIBRARIES += \
libvulkan
HWCNativeHandle handle, ResourceManager* buffer_manager,
FrameBufferManager* frame_buffer_manager) override;
+ uint32_t GetDataSpace() const override {
+ return METADATA(dataspace_);
+ }
+
uint32_t GetWidth() const override {
return METADATA(width_);
}
return METADATA(tiling_mode_);
}
+ void SetDataSpace(uint32_t dataspace) override {
+ METADATA(dataspace_) = dataspace;
+ }
+
bool GetInterlace() override {
return METADATA(is_interlaced_);
}
HWCNativeHandle handle, ResourceManager* buffer_manager,
FrameBufferManager* frame_buffer_manager) = 0;
+ virtual uint32_t GetDataSpace() const = 0;
+
virtual uint32_t GetWidth() const = 0;
virtual uint32_t GetHeight() const = 0;
virtual uint32_t GetTilingMode() const = 0;
+ virtual void SetDataSpace(uint32_t dataspace) = 0;
+
virtual bool GetInterlace() = 0;
virtual void SetInterlace(bool isInterlaced) = 0;