Modify output CS settings for Chroma siting on Linux
Signed-off-by: Du, Kelly <kelly.du@intel.com>
diff --git a/videoprocess/process_chromasitting.cfg.template b/videoprocess/process_chromasitting.cfg.template
index 461be99..3fc7744 100644
--- a/videoprocess/process_chromasitting.cfg.template
+++ b/videoprocess/process_chromasitting.cfg.template
@@ -30,4 +30,7 @@
#4.chromasitting mode parameters set, the following modes are supported:
# UNKNOWN, CHROMA_SITING_TOP_LEFT, CHROMA_SITING_TOP_CENTER,CHROMA_SITING_CENTER_LEFT
# CHROMA_SITING_CENTER_CENTER, CHROMA_SITING_BOTTOM_LEFT,CHROMA_SITING_BOTTOM_CENTER
-CHROMA_SITTING_MODE: CHROMA_SITING_TOP_LEFT
+# input
+IN_CHROMA_SITTING_MODE: CHROMA_SITING_TOP_LEFT
+# output
+DST_CHROMA_SITTING_MODE: CHROMA_SITING_BOTTOM_LEFT
diff --git a/videoprocess/vppchromasitting.cpp b/videoprocess/vppchromasitting.cpp
index eab74ea..3e4db76 100644
--- a/videoprocess/vppchromasitting.cpp
+++ b/videoprocess/vppchromasitting.cpp
@@ -984,38 +984,64 @@
}
static VAStatus
-chromasitting_param_init(uint8_t *chroma_sample_location)
+chromasitting_param_init(uint8_t *in_chroma_sample_location,uint8_t *dst_chroma_sample_location)
{
VAStatus va_status = VA_STATUS_SUCCESS;
- uint8_t sample_location;
- char chroma_siting_mode[MAX_LEN];
+ uint8_t in_sample_location = 0;
+ char in_chroma_siting_mode[MAX_LEN];
-
+ uint8_t dst_sample_location = 0;
+ char dst_chroma_siting_mode[MAX_LEN];
+
/* Read filter type */
- if (read_value_string(g_config_file_fd, "CHROMA_SITTING_MODE", chroma_siting_mode)){
- printf("Read CHROMA_SITTING_MODE type error !\n");
+ if (read_value_string(g_config_file_fd, "IN_CHROMA_SITTING_MODE", in_chroma_siting_mode)){
+ printf("Read IN_CHROMA_SITTING_MODE type error !\n");
assert(0);
}
-
- if (!strcmp(chroma_siting_mode, "UNKNOWN"))
- sample_location = VA_CHROMA_SITING_UNKNOWN;
- else if (!strcmp(chroma_siting_mode, "CHROMA_SITING_TOP_LEFT"))
- sample_location = VA_CHROMA_SITING_VERTICAL_TOP | VA_CHROMA_SITING_HORIZONTAL_LEFT;
- else if (!strcmp(chroma_siting_mode, "CHROMA_SITING_TOP_CENTER"))
- sample_location = VA_CHROMA_SITING_VERTICAL_TOP | VA_CHROMA_SITING_HORIZONTAL_CENTER;
- else if (!strcmp(chroma_siting_mode, "CHROMA_SITING_CENTER_LEFT"))
- sample_location = VA_CHROMA_SITING_VERTICAL_CENTER | VA_CHROMA_SITING_HORIZONTAL_LEFT;
- else if (!strcmp(chroma_siting_mode, "CHROMA_SITING_CENTER_CENTER"))
- sample_location = VA_CHROMA_SITING_VERTICAL_CENTER | VA_CHROMA_SITING_HORIZONTAL_CENTER;
- else if (!strcmp(chroma_siting_mode, "CHROMA_SITING_BOTTOM_LEFT"))
- sample_location = VA_CHROMA_SITING_VERTICAL_BOTTOM | VA_CHROMA_SITING_HORIZONTAL_LEFT;
- else if (!strcmp(chroma_siting_mode, "CHROMA_SITING_BOTTOM_CENTER"))
- sample_location = VA_CHROMA_SITING_VERTICAL_BOTTOM | VA_CHROMA_SITING_HORIZONTAL_CENTER;
+ if (!strcmp(in_chroma_siting_mode, "UNKNOWN"))
+ in_sample_location = VA_CHROMA_SITING_UNKNOWN;
+ else if (!strcmp(in_chroma_siting_mode, "CHROMA_SITING_TOP_LEFT"))
+ in_sample_location = VA_CHROMA_SITING_VERTICAL_TOP | VA_CHROMA_SITING_HORIZONTAL_LEFT;
+ else if (!strcmp(in_chroma_siting_mode, "CHROMA_SITING_TOP_CENTER"))
+ in_sample_location = VA_CHROMA_SITING_VERTICAL_TOP | VA_CHROMA_SITING_HORIZONTAL_CENTER;
+ else if (!strcmp(in_chroma_siting_mode, "CHROMA_SITING_CENTER_LEFT"))
+ in_sample_location = VA_CHROMA_SITING_VERTICAL_CENTER | VA_CHROMA_SITING_HORIZONTAL_LEFT;
+ else if (!strcmp(in_chroma_siting_mode, "CHROMA_SITING_CENTER_CENTER"))
+ in_sample_location = VA_CHROMA_SITING_VERTICAL_CENTER | VA_CHROMA_SITING_HORIZONTAL_CENTER;
+ else if (!strcmp(in_chroma_siting_mode, "CHROMA_SITING_BOTTOM_LEFT"))
+ in_sample_location = VA_CHROMA_SITING_VERTICAL_BOTTOM | VA_CHROMA_SITING_HORIZONTAL_LEFT;
+ else if (!strcmp(in_chroma_siting_mode, "CHROMA_SITING_BOTTOM_CENTER"))
+ in_sample_location = VA_CHROMA_SITING_VERTICAL_BOTTOM | VA_CHROMA_SITING_HORIZONTAL_CENTER;
else {
- printf("Unsupported CHROMA_SITTING_MODE type :%s \n", chroma_siting_mode);
+ printf("Unsupported IN_CHROMA_SITTING_MODE type :%s \n", in_chroma_siting_mode);
return -1;
}
- *chroma_sample_location = sample_location;
+ *in_chroma_sample_location = in_sample_location;
+
+ if (read_value_string(g_config_file_fd, "DST_CHROMA_SITTING_MODE", dst_chroma_siting_mode)){
+ printf("Read DST_CHROMA_SITTING_MODE type error !\n");
+ assert(0);
+ }
+ if (!strcmp(dst_chroma_siting_mode, "UNKNOWN"))
+ dst_sample_location = VA_CHROMA_SITING_UNKNOWN;
+ else if (!strcmp(dst_chroma_siting_mode, "CHROMA_SITING_TOP_LEFT"))
+ dst_sample_location = VA_CHROMA_SITING_VERTICAL_TOP | VA_CHROMA_SITING_HORIZONTAL_LEFT;
+ else if (!strcmp(dst_chroma_siting_mode, "CHROMA_SITING_TOP_CENTER"))
+ dst_sample_location = VA_CHROMA_SITING_VERTICAL_TOP | VA_CHROMA_SITING_HORIZONTAL_CENTER;
+ else if (!strcmp(dst_chroma_siting_mode, "CHROMA_SITING_CENTER_LEFT"))
+ dst_sample_location = VA_CHROMA_SITING_VERTICAL_CENTER | VA_CHROMA_SITING_HORIZONTAL_LEFT;
+ else if (!strcmp(dst_chroma_siting_mode, "CHROMA_SITING_CENTER_CENTER"))
+ dst_sample_location = VA_CHROMA_SITING_VERTICAL_CENTER | VA_CHROMA_SITING_HORIZONTAL_CENTER;
+ else if (!strcmp(dst_chroma_siting_mode, "CHROMA_SITING_BOTTOM_LEFT"))
+ dst_sample_location = VA_CHROMA_SITING_VERTICAL_BOTTOM | VA_CHROMA_SITING_HORIZONTAL_LEFT;
+ else if (!strcmp(dst_chroma_siting_mode, "CHROMA_SITING_BOTTOM_CENTER"))
+ dst_sample_location = VA_CHROMA_SITING_VERTICAL_BOTTOM | VA_CHROMA_SITING_HORIZONTAL_CENTER;
+ else {
+ printf("Unsupported DST_CHROMA_SITTING_MODE type :%s \n", dst_chroma_siting_mode);
+ return -1;
+ }
+ *dst_chroma_sample_location = dst_sample_location;
+
return va_status;
}
@@ -1027,8 +1053,9 @@
VAProcPipelineParameterBuffer pipeline_param;
VARectangle surface_region, output_region;
VABufferID pipeline_param_buf_id = VA_INVALID_ID;
- uint8_t chroma_sample_location = VA_CHROMA_SITING_UNKNOWN;
- chromasitting_param_init(&chroma_sample_location);
+ uint8_t in_chroma_sample_location = VA_CHROMA_SITING_UNKNOWN;
+ uint8_t dst_chroma_sample_location = VA_CHROMA_SITING_UNKNOWN;
+ chromasitting_param_init(&in_chroma_sample_location, &dst_chroma_sample_location);
/* Fill pipeline buffer */
surface_region.x = 0;
surface_region.y = 0;
@@ -1043,7 +1070,9 @@
pipeline_param.surface = in_surface_id;
pipeline_param.surface_region = &surface_region;
pipeline_param.output_region = &output_region;
- pipeline_param.input_color_properties.chroma_sample_location = chroma_sample_location;
+ pipeline_param.input_color_properties.chroma_sample_location = in_chroma_sample_location;
+ pipeline_param.output_color_properties.chroma_sample_location = dst_chroma_sample_location;
+
va_status = vaCreateBuffer(va_dpy,
context_id,
VAProcPipelineParameterBufferType,