summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwenchangliu <wenchangliu@google.com>2023-03-25 07:35:27 +0000
committerwenchangliu <wenchangliu@google.com>2023-03-27 12:29:06 +0000
commitfa7ff4574b09cab7a858df597ee6bccf247970ff (patch)
tree6d9c9f5f37efb9b115a4ab4b3e015f18111a16c8
parent7591752dde4e8aec0e1d030fdabbb1f694fdab1a (diff)
downloadgchips-fa7ff4574b09cab7a858df597ee6bccf247970ff.tar.gz
videoapi: remove USE_FULL_ST2094_40 flag
Bug: 233398860 Test: run cts -m CtsMediaV2TestCases -t android.mediav2.cts.EncoderHDRInfoTest Test: run cts -m CtsMediaV2TestCases -t android.mediav2.cts.DecoderHDRInfoTest Test: run cts -m CtsMediaDecoderTestCases -t android.media.decoder.cts.HDRDecoderTest Change-Id: Id7bb22fb7a77436210c879bc18667a072c46f06b Signed-off-by: wenchangliu <wenchangliu@google.com>
-rw-r--r--include/VendorVideoAPI.h21
-rw-r--r--videoapi/Android.mk4
-rw-r--r--videoapi/VendorVideoAPI.cpp792
3 files changed, 0 insertions, 817 deletions
diff --git a/include/VendorVideoAPI.h b/include/VendorVideoAPI.h
index 15ba530..e744e4c 100644
--- a/include/VendorVideoAPI.h
+++ b/include/VendorVideoAPI.h
@@ -81,10 +81,6 @@ typedef struct _ExynosHdrStaticInfo {
};
} ExynosHdrStaticInfo;
-#ifdef USE_FULL_ST2094_40
-#define USE_FULL_ST2094_40_INFO
-#endif
-
typedef struct _ExynosHdrData_ST2094_40 {
unsigned char country_code;
unsigned short provider_code;
@@ -93,7 +89,6 @@ typedef struct _ExynosHdrData_ST2094_40 {
unsigned char application_identifier;
unsigned char application_version;
-#ifdef USE_FULL_ST2094_40
unsigned char num_windows;
unsigned short window_upper_left_corner_x[2];
@@ -138,22 +133,6 @@ typedef struct _ExynosHdrData_ST2094_40 {
unsigned char color_saturation_mapping_flag[3];
unsigned char color_saturation_weight[3];
-#else
- unsigned int display_maximum_luminance;
- unsigned int maxscl[3];
-
- unsigned char num_maxrgb_percentiles;
- unsigned char maxrgb_percentages[15];
- unsigned int maxrgb_percentiles[15];
-
- struct {
- unsigned short tone_mapping_flag;
- unsigned short knee_point_x;
- unsigned short knee_point_y;
- unsigned short num_bezier_curve_anchors;
- unsigned short bezier_curve_anchors[15];
- } tone_mapping;
-#endif
} ExynosHdrData_ST2094_40;
typedef struct _ExynosHdrDynamicInfo {
diff --git a/videoapi/Android.mk b/videoapi/Android.mk
index d99d029..0fd176c 100644
--- a/videoapi/Android.mk
+++ b/videoapi/Android.mk
@@ -21,10 +21,6 @@ LOCAL_PROPRIETARY_MODULE := true
LOCAL_CFLAGS :=
-ifeq ($(BOARD_USE_FULL_ST2094_40), true)
-LOCAL_CFLAGS += -DUSE_FULL_ST2094_40
-endif
-
LOCAL_SRC_FILES := \
VendorVideoAPI.cpp
diff --git a/videoapi/VendorVideoAPI.cpp b/videoapi/VendorVideoAPI.cpp
index 873d77e..6e7f6ee 100644
--- a/videoapi/VendorVideoAPI.cpp
+++ b/videoapi/VendorVideoAPI.cpp
@@ -132,7 +132,6 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data = 0;
CHECK_BOUNDARY(bit_offset + 2, size);
-#ifdef USE_FULL_ST2094_40
/* num_windows : 2bit*/
for (i = 0; i < 1; i++) {
for (j = 0; j < 2; j++) {
@@ -865,465 +864,6 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
}
}
-#else // USE_FULL_ST2094_40
- /* Device does not support full ST2094_40 info for HDR10 plus
- * So some infos will be omitted from data parsing or muxing.
- * (Not parsed but just offset moved)
- */
-
- /* num_windows : 2bit*/
- for (i = 0; i < 1; i++) {
- for (j = 0; j < 2; j++) {
- data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
- }
- }
- bit_offset += 2;
- extraBit = (bit_offset % 8);
- data = data >> (8 - extraBit);
- windows = data;
- data = 0;
-
- for (i = 1; i < windows; i++) {
- /* window_upper_left_corner_x : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* window_upper_left_corner_y : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* window_lower_right_corner_x : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* window_lower_right_corner_y : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* center_of_ellipse_x : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* center_of_ellipse_y : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* rotation_angle : 8bit */
- bit_offset += 8;
- extraBit = bit_offset % 8;
-
- /* semimajor_axis_internal_ellipse : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* semimajor_axis_external_ellipse : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* semiminor_axis_external_ellipse : 16bit */
- bit_offset += 16;
- extraBit = bit_offset % 8;
-
- /* overlap_process_option : 1bit */
- bit_offset += 1;
- extraBit = bit_offset % 8;
- }
-
- /* targeted_system_display_maximum_luminance : 27bit */
- if (extraBit > 5)
- extraByte = 2;
- else if (extraBit <= 5)
- extraByte = 1;
-
- for (i = 0; i < 3 + extraByte; i++) {
- for (j = extraBit; j < 8; j++) {
- data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
- }
-
- if (i < 3 + extraByte - 1)
- data = data << 8;
-
- extraBit += (j - extraBit);
- extraBit %= 8;
- }
- bit_offset += 27;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.display_maximum_luminance = data;
- data = 0;
-
- /* targeted_system_display_actual_peak_luminance_flag : 1bit */
- data |= (*((char *)src + (bit_offset / 8)) & (1 << (7 - extraBit)));
-
- bit_offset += 1;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- targeted_system_display_actual_peak_luminance_flag = data;
- data = 0;
-
- if (targeted_system_display_actual_peak_luminance_flag) {
- /* num_rows_targeted_system_display_actual_peak_luminance : 5bit */
- if (extraBit > 3)
- extraByte = 1;
-
- for (i = 0; i < 1 + extraByte; i++) {
- for (j = extraBit; j < 8; j++) {
- data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
- }
-
- if (i < 1)
- data = data << 8;
-
- extraBit += (j - extraBit);
- extraBit %= 8;
- }
- bit_offset += 5;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- num_rows_targeted_system_display_actual_peak_luminance = data;
- data = 0;
-
- /* num_cols_targeted_system_display_actual_peak_luminance : 5bit */
- if (extraBit > 3)
- extraByte = 1;
-
- for (i = 0; i < 1 + extraByte; i++) {
- for (j = extraBit; j < 8; j++) {
- data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
- }
-
- if (i < 1)
- data = data << 8;
-
- extraBit += (j - extraBit);
- extraBit %= 8;
- }
- bit_offset += 5;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- num_cols_targeted_system_display_actual_peak_luminance = data;
- data = 0;
-
- for (i = 0; i < num_rows_targeted_system_display_actual_peak_luminance; i++) {
- for (j = 0; j < num_cols_targeted_system_display_actual_peak_luminance; j++) {
- /* mastering_display_actual_peak_luminance : 4bit */
- bit_offset += 4;
- extraBit = bit_offset % 8;
- }
- }
- }
-
- for (i = 0; i < windows; i++) {
- for (j = 0; j < 3; j++) {
- CHECK_BOUNDARY(bit_offset + 17, size);
- /* maxscl : 17bit */
- for (k = 0; k < 3; k++) {
- for (l = extraBit; l < 8; l++) {
- data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
- }
-
- if (k < 2)
- data = data << 8;
-
- extraBit += (l - extraBit);
- extraBit %= 8;
- }
- bit_offset += 17;
- extraBit = bit_offset % 8;
-
- if (extraBit != 0)
- data = data >> (8 - extraBit);
-
- pHdr10PlusInfo->data.maxscl[j] = data;
- data = 0;
- }
- CHECK_BOUNDARY(bit_offset + 17, size);
- /* average_maxrgb : 17bit */
- bit_offset += 17;
- extraBit = bit_offset % 8;
-
- CHECK_BOUNDARY(bit_offset + 4, size);
- /* num_distribution_maxrgb_percentiles : 4bit */
- if (extraBit > 4)
- extraByte = 1;
-
- for (j = 0; j < 1 + extraByte; j++) {
- for (k = extraBit; k < 8; k++) {
- data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
- }
-
- if (extraByte > 0) {
- if (j < 1)
- data = data << 8;
- }
-
- extraBit += (k - extraBit);
- extraBit %= 8;
- }
- bit_offset += 4;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.num_maxrgb_percentiles = data;
- data = 0;
-
- for (j = 0; j < pHdr10PlusInfo->data.num_maxrgb_percentiles; j++) {
- CHECK_BOUNDARY(bit_offset + 7, size);
- /* distribution_maxrgb_percentages : 7bit */
- if (extraBit > 1)
- extraByte = 1;
-
- for (k = 0; k < 1 + extraByte; k++) {
- for (l = extraBit; l < 8; l++) {
- data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
- }
-
- if (k < 1)
- data = data << 8;
-
- extraBit += (l - extraBit);
- extraBit %= 8;
- }
- bit_offset += 7;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.maxrgb_percentages[j] = data;
- data = 0;
-
- CHECK_BOUNDARY(bit_offset + 17, size);
- /* distribution_maxrgb_percentiles : 17bit */
- if (extraBit >= 0)
- extraByte = 1;
-
- for (k = 0; k < 2 + extraByte; k++) {
- for (l = extraBit; l < 8; l++) {
- data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
- }
-
- if (k < 2)
- data = data << 8;
-
- extraBit += (l - extraBit);
- extraBit %= 8;
- }
- bit_offset += 17;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.maxrgb_percentiles[j] = data;
- data = 0;
- }
-
- CHECK_BOUNDARY(bit_offset + 10, size);
- /* fraction_bright_pixels : 10bit*/
- bit_offset += 10;
- extraBit = bit_offset % 8;
- }
-
- CHECK_BOUNDARY(bit_offset + 1, size);
- /* mastering_display_actual_peak_luminance_flag : 1bit */
- data |= (*((char *)src + (bit_offset / 8)) & (1 << (7 - extraBit)));
-
- bit_offset += 1;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- mastering_display_actual_peak_luminance_flag = data;
- data = 0;
-
- if (mastering_display_actual_peak_luminance_flag) {
- CHECK_BOUNDARY(bit_offset + 5, size);
- /* num_rows_mastering_display_actual_peak_luminance : 5bit */
- if (extraBit > 3)
- extraByte = 1;
-
- for (i = 0; i < 1 + extraByte; i++) {
- for (j = extraBit; j < 8; j++) {
- data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
- }
-
- if (i < 1)
- data = data << 8;
-
- extraBit += (j - extraBit);
- extraBit %= 8;
- }
- bit_offset += 5;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- num_rows_mastering_display_actual_peak_luminance = data;
- data = 0;
-
- CHECK_BOUNDARY(bit_offset + 5, size);
- /* num_cols_mastering_display_actual_peak_luminance : 5bit */
- if (extraBit > 3)
- extraByte = 1;
-
- for (i = 0; i < 1 + extraByte; i++) {
- for (j = extraBit; j < 8; j++) {
- data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
- }
-
- if (i < 1)
- data = data << 8;
-
- extraBit += (j - extraBit);
- extraBit %= 8;
- }
- bit_offset += 5;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- num_cols_mastering_display_actual_peak_luminance = data;
- data = 0;
-
- for (i = 0; i < num_rows_mastering_display_actual_peak_luminance; i++) {
- for (j = 0; j < num_cols_mastering_display_actual_peak_luminance; j++) {
- CHECK_BOUNDARY(bit_offset + 4, size);
- /* mastering_display_actual_peak_luminance : 4bit */
- bit_offset += 4;
- extraBit = bit_offset % 8;
- }
- }
- }
-
- for (i = 0; i < windows; i++) {
- CHECK_BOUNDARY(bit_offset + 1, size);
- /* tone_mapping_flag : 1bit */
- data |= (*((char *)src + (bit_offset / 8)) & (1 << (7 - extraBit)));
-
- bit_offset += 1;
- extraBit = bit_offset % 8;
- data = data >> (8 - extraBit);
- pHdr10PlusInfo->data.tone_mapping.tone_mapping_flag = data;
- data = 0;
-
- if (pHdr10PlusInfo->data.tone_mapping.tone_mapping_flag) {
- CHECK_BOUNDARY(bit_offset + 12, size);
- /* knee_point_x : 12bit */
- if (extraBit > 5)
- extraByte = 2;
- else if (extraBit <= 5)
- extraByte = 1;
-
- for (j = 0; j < 1 + extraByte; j++) {
- for (k = extraBit; k < 8; k++) {
- data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
- }
-
- if (j < 1 + extraByte - 1)
- data = data << 8;
-
- extraBit += (k - extraBit);
- extraBit %= 8;
- }
- bit_offset += 12;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.knee_point_x = data;
- data = 0;
-
- CHECK_BOUNDARY(bit_offset + 12, size);
- /* knee_point_y : 12bit */
- if (extraBit > 5)
- extraByte = 2;
- else if (extraBit <= 5)
- extraByte = 1;
-
- for (j = 0; j < 1 + extraByte; j++) {
- for (k = extraBit; k < 8; k++) {
- data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
- }
-
- if (j < 1 + extraByte - 1)
- data = data << 8;
-
- extraBit += (k - extraBit);
- extraBit %= 8;
- }
- bit_offset += 12;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.knee_point_y = data;
- data = 0;
-
- CHECK_BOUNDARY(bit_offset + 4, size);
- /* num_bezier_curve_anchors : 4bit */
- if (extraBit > 4)
- extraByte = 1;
-
- for (j = 0; j < 1 + extraByte; j++) {
- for (k = extraBit; k < 8; k++) {
- data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
- }
-
- if (j < 1 + extraByte - 1)
- data = data << 8;
-
- extraBit += (k - extraBit);
- extraBit %= 8;
- }
- bit_offset += 4;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.num_bezier_curve_anchors = data;
- data = 0;
-
- for (j = 0; j < pHdr10PlusInfo->data.tone_mapping.num_bezier_curve_anchors; j++) {
- CHECK_BOUNDARY(bit_offset + 10, size);
- /* bezier_curve_anchors : 10bit */
- if (extraBit > 6)
- extraByte = 2;
- else if (extraBit <= 6)
- extraByte = 1;
-
- for (k = 0; k < 1 + extraByte; k++) {
- for (l = extraBit; l < 8; l++) {
- data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
- }
-
- if (k < 1 + extraByte - 1)
- data = data << 8;
-
- extraBit += (l - extraBit);
- extraBit %= 8;
- }
- bit_offset += 10;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.bezier_curve_anchors[j] = data;
- data = 0;
- }
- }
-
- CHECK_BOUNDARY(bit_offset + 1, size);
- /* color_saturation_mapping_flag : 1bit */
- data |= (*((char *)src + (bit_offset / 8)) & (1 << (7 - extraBit)));
-
- bit_offset += 1;
- extraByte = 0;
- extraBit = bit_offset % 8;
- data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- color_saturation_mapping_flag = data;
- data = 0;
-
- if (color_saturation_mapping_flag) {
- CHECK_BOUNDARY(bit_offset + 6, size);
- /* color_saturation_weight : 6bit */
- bit_offset += 6;
- extraBit = bit_offset % 8;
- }
- }
-#endif // USE_FULL_ST2094_40
-
return 0;
}
@@ -1422,7 +962,6 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
}
extraBit = (bit_offset % 8);
-#ifdef USE_FULL_ST2094_40
/* num_windows: 2bit */
offset_limit = bit_offset + 2;
@@ -2217,337 +1756,6 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
extraByte = 0;
}
}
-#else // USE_FULL_ST2094_40
- /* num_windows: 2bit */
- offset_limit = bit_offset + 2;
-
- for (i = 0; i < 2; i++) {
- /* num_windows is always 1 now */
- *((char *)pBlob + (bit_offset / 8)) |= ((char)0x40/* num_windows */ & (1 << (7 - i)));
- bit_offset++;
-
- if (bit_offset == offset_limit)
- break;
- }
- extraBit = (bit_offset % 8);
-
- for (i = 1; i < 1 /* num_windows */; i++) {
- /* window_upper_left_corner_x: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* window_upper_left_corner_y: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* window_lower_right_corner_x: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* window_lower_right_corner_y: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* center_of_ellipse_x: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* center_of_ellipse_y: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* rotation_angle: 8bit */
- bit_offset += 8;
- extraBit = (bit_offset % 8);
-
- /* semimajor_axis_internal_ellipse: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* semimajor_axis_external_ellipse: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* semiminor_axis_external_ellipse: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
-
- /* overlap_process_option: 1bit */
- bit_offset += 1;
- extraBit = (bit_offset % 8);
- }
-
- /* targeted_system_display_maximum_luminance: 27bit */
- offset_limit = bit_offset + 27;
-
- tempBuffer = pHDRDynamicInfo->data.display_maximum_luminance << (5 - extraBit);
- for (i = 0; i < 4; i++) {
- memcpy((char *)&buffer + i, (char *)&tempBuffer + (3 - i), sizeof(char));
- }
-
- for (i = 0; i < 4; i++) {
- for (j = extraBit; j < 8; j++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + i) & (1 << (7 - j)));
- bit_offset++;
-
- if (bit_offset == offset_limit)
- break;
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
-
- /* targeted_system_display_actual_peak_luminance_flag: 1bit (always 0) */
- bit_offset += 1;
- extraBit = (bit_offset % 8);
-
- /* NOTE: These info would not set because targeted_system_display_actual_peak_luminance_flag is always 0
- * - num_rows_targeted_system_display_actual_peak_luminance: 5bit
- * - num_cols_targeted_system_display_actual_peak_luminance: 5bit
- * - targeted_system_display_actual_peak_luminance: 4bit
- */
-
- /* maxscl: 17bit */
- for (i = 0; i < 3; i++) {
- offset_limit = bit_offset + 17;
-
- tempBuffer = pHDRDynamicInfo->data.maxscl[i] << (15 - extraBit);
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
- }
-
- for (j = 0; j < 3; j++) {
- for (k = extraBit; k < 8; k++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + j) & (1 << (7 - k)));
- bit_offset++;
-
- if (bit_offset == offset_limit)
- break;
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
- }
-
- /* average_maxrgb: 17bit */
- bit_offset += 17;
- extraBit = (bit_offset % 8);
-
- /* num_distribution_maxrgb_percentiles: 4bit */
- offset_limit = bit_offset + 4;
-
- tempBuffer = pHDRDynamicInfo->data.num_maxrgb_percentiles << (4 - extraBit);
-
- for (i = extraBit; i < 8; i++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&tempBuffer) & (1 << (7 - i)));
- bit_offset++;
-
- if (bit_offset == offset_limit)
- break;
- }
- extraBit = (bit_offset % 8);
- tempBuffer = 0;
-
- for (i = 0; i < pHDRDynamicInfo->data.num_maxrgb_percentiles; i++) {
- /* distribution_maxrgb_percentaged: 7bit */
- offset_limit = bit_offset + 7;
-
- if (extraBit > 1)
- extraByte = 1;
-
- tempBuffer = pHDRDynamicInfo->data.maxrgb_percentages[i];
- tempBuffer = tempBuffer << (25 - extraBit);
-
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
- }
-
- for (j = 0; j < (1 + extraByte); j++) {
- for (k = extraBit; k < 8; k++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + j) & (1 << (7 - k)));
- bit_offset++;
-
- if (bit_offset == offset_limit) {
- break;
- }
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
- extraByte = 0;
-
- /* distribution_maxrgb_percentiles: 17bit */
- offset_limit = bit_offset + 17;
-
- tempBuffer = pHDRDynamicInfo->data.maxrgb_percentiles[i] << (15 - extraBit);
-
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
- }
-
- for (j = 0; j < 3; j++) {
- for (k = extraBit; k < 8; k++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + j) & (1 << (7 - k)));
- bit_offset++;
-
- if (bit_offset == offset_limit) {
- break;
- }
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
- }
-
- /* fraction_bright_pixels: 10bit */
- bit_offset += 10;
- extraBit = (bit_offset % 8);
-
- /* mastering_display_actual_peak_luminance_flag: 1bit */
- bit_offset += 1;
- extraBit = (bit_offset % 8);
-
- /* NOTE: These infos would not be set because mastering_display_actual_peak_luminance_flag is always 0.
- * - num_rows_mastering_display_actual_peak_luminance: 5bit
- * - num_cols_mastering_display_actual_peak_luminance: 5bit
- * - mastering_display_actual_peak_luminance: 4bit
- */
-
- /* tone_mapping_flag: 1bit */
- if (pHDRDynamicInfo->data.tone_mapping.tone_mapping_flag) {
- *((char *)pBlob + (bit_offset / 8)) |= (1 << (7 - extraBit));
- }
- bit_offset += 1;
- extraBit = (bit_offset % 8);
-
- if (pHDRDynamicInfo->data.tone_mapping.tone_mapping_flag) {
- /* knee_point_x: 12bit */
- if (extraBit > 4)
- extraByte = 1;
-
- offset_limit = bit_offset + 12;
-
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.knee_point_x;
- tempBuffer = tempBuffer << (20 - extraBit);
-
- for (i = 0; i < 4; i++) {
- memcpy((char *)&buffer + i, (char *)&tempBuffer + (3 - i), sizeof(char));
- }
-
- for (i = 0; i < (2 + extraByte); i++) {
- for (j = extraBit; j < 8; j++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + i) & (1 << (7 - j)));
- bit_offset++;
-
- if (bit_offset == offset_limit) {
- break;
- }
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
- extraByte = 0;
-
- /* knee_point_y: 12bit */
- if (extraBit > 4)
- extraByte = 1;
-
- offset_limit = bit_offset + 12;
-
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.knee_point_y;
- tempBuffer = tempBuffer << (20 - extraBit);
-
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
- }
-
- for (j = 0; j < (2 + extraByte); j++) {
- for (k = extraBit; k < 8; k++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + j) & (1 << (7 - k)));
- bit_offset++;
-
- if (bit_offset == offset_limit) {
- break;
- }
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
- extraByte = 0;
-
- /* num_bezier_curve_anchors: 4bit */
- if (extraBit > 4)
- extraByte = 1;
-
- offset_limit = bit_offset + 4;
-
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.num_bezier_curve_anchors;
- tempBuffer = tempBuffer << (28 - extraBit);
-
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
- }
-
- for (j = 0; j < (1 + extraByte); j++) {
- for (k = extraBit; k < 8; k++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + j) & (1 << (7 - k)));
- bit_offset++;
-
- if (bit_offset == offset_limit) {
- break;
- }
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
- extraByte = 0;
-
- for (i = 0; i < pHDRDynamicInfo->data.tone_mapping.num_bezier_curve_anchors; i++) {
- /* bezier_curve_anchors: 10bit */
- if (extraBit > 6)
- extraByte = 1;
-
- offset_limit = bit_offset + 10;
-
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.bezier_curve_anchors[i];
- tempBuffer = tempBuffer << (22 - extraBit);
-
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
- }
-
- for (j = 0; j < (2 + extraByte); j++) {
- for (k = extraBit; k < 8; k++) {
- *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + j) & (1 << (7 - k)));
- bit_offset++;
-
- if (bit_offset == offset_limit) {
- break;
- }
- }
- extraBit = (bit_offset % 8);
- }
- buffer = 0;
- tempBuffer = 0;
- extraByte = 0;
- }
- }
-
- /* color_saturation_mapping_flag: 1bit */
- bit_offset += 1;
- extraBit = (bit_offset % 8);
-
- /* NOTE: This info would not be set because color_saturation_mapping_flag is always 0.
- * - color_saturation_weight: 6bit
- */
-#endif // USE_FULL_ST2094_40
if(extraBit > 0) {
size = (bit_offset / 8) + 1;