summaryrefslogtreecommitdiff
path: root/videoapi/VendorVideoAPI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'videoapi/VendorVideoAPI.cpp')
-rw-r--r--videoapi/VendorVideoAPI.cpp927
1 files changed, 702 insertions, 225 deletions
diff --git a/videoapi/VendorVideoAPI.cpp b/videoapi/VendorVideoAPI.cpp
index d186a04..e439051 100644
--- a/videoapi/VendorVideoAPI.cpp
+++ b/videoapi/VendorVideoAPI.cpp
@@ -27,12 +27,12 @@
#define LOG_TAG "VendorVideoAPI"
/* Check data boundary before read it */
-#define CHECK_BOUNDARY(bit_offset, size) { \
- if ((bit_offset) > (size) * 8) { \
- ALOGE("[%s] read bit offset(%d) > total bits(%d)", \
- __func__, (bit_offset), (size) * 8); \
- return -1; \
- } \
+#define CHECK_BOUNDARY(bit_offset, size) { \
+ if ((bit_offset) > (size) * 8) { \
+ ALOGE("[%s][%d] read bit offset(%d) > total bits(%d)", \
+ __func__, __LINE__, (bit_offset), (size) * 8); \
+ return -1; \
+ } \
}
#include <stdio.h>
@@ -141,12 +141,10 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
bit_offset += 2;
extraBit = (bit_offset % 8);
data = data >> (8 - extraBit);
- //pHdr10PlusInfo->data.num_windows = data;
- windows = data;
+ pHdr10PlusInfo->data.num_windows = data;
data = 0;
-
- for (i = 1; i < windows; i++) {
+ for (i = 1; i < pHdr10PlusInfo->data.num_windows; i++) {
CHECK_BOUNDARY(bit_offset + 16, size);
/* window_upper_left_corner_x : 16bit */
if (extraBit > 0)
@@ -157,7 +155,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -167,7 +165,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.window_upper_left_corner_x[i] = data;
+ pHdr10PlusInfo->data.window_upper_left_corner_x[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
@@ -180,7 +178,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -190,11 +188,11 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.window_upper_left_corner_y[i] = data;
+ pHdr10PlusInfo->data.window_upper_left_corner_y[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
- /* window_upper_right_corner_x : 16bit */
+ /* window_lower_right_corner_x : 16bit */
if (extraBit > 0)
extraByte = 1;
@@ -203,7 +201,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -213,11 +211,11 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.window_upper_right_corner_x[i] = data;
+ pHdr10PlusInfo->data.window_lower_right_corner_x[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
- /* window_upper_right_corner_y : 16bit */
+ /* window_lower_right_corner_y : 16bit */
if (extraBit > 0)
extraByte = 1;
@@ -226,7 +224,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -236,7 +234,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.window_upper_right_corner_y[i] = data;
+ pHdr10PlusInfo->data.window_lower_right_corner_y[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
@@ -249,7 +247,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -259,7 +257,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.window_upper_right_corner_y[i] = data;
+ pHdr10PlusInfo->data.center_of_ellipse_x[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
@@ -272,7 +270,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -282,7 +280,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.window_upper_right_corner_y[i] = data;
+ pHdr10PlusInfo->data.center_of_ellipse_y[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 8, size);
@@ -295,7 +293,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 1)
+ if (j < 1 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -305,7 +303,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.rotation_angle[i] = data;
+ pHdr10PlusInfo->data.rotation_angle[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
@@ -318,7 +316,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -328,7 +326,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.semimajor_axis_internal_ellipse[i] = data;
+ pHdr10PlusInfo->data.semimajor_axis_internal_ellipse[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
@@ -341,7 +339,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -351,7 +349,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.semimajor_axis_external_ellipse[i] = data;
+ pHdr10PlusInfo->data.semimajor_axis_external_ellipse[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 16, size);
@@ -364,7 +362,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 2 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -374,7 +372,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.semiminor_axis_external_ellipse[i] = data;
+ pHdr10PlusInfo->data.semiminor_axis_external_ellipse[i - 1] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 1, size);
@@ -385,7 +383,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.overlap_process_option[i] = data;
+ pHdr10PlusInfo->data.overlap_process_option[i - 1] = data;
data = 0;
}
@@ -404,14 +402,14 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
if (i < 3 + extraByte - 1)
data = data << 8;
- extraBit += (k - extraBit);
+ 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;
+ pHdr10PlusInfo->data.targeted_system_display_maximum_luminance = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 1, size);
@@ -421,11 +419,10 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
bit_offset += 1;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.targeted_system_display_actual_peak_luminance_flag = data;
+ pHdr10PlusInfo->data.targeted_system_display_actual_peak_luminance_flag = data;
targeted_system_display_actual_peak_luminance_flag = data;
data = 0;
-
if (targeted_system_display_actual_peak_luminance_flag) {
CHECK_BOUNDARY(bit_offset + 5, size);
/* num_rows_targeted_system_display_actual_peak_luminance : 5bit */
@@ -437,7 +434,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
}
- if (i < 1)
+ if (i < 1 + extraByte - 1)
data = data << 8;
extraBit += (j - extraBit);
@@ -447,7 +444,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.num_rows_targeted_system_display_actual_peak_luminance = data;
+ pHdr10PlusInfo->data.num_rows_targeted_system_display_actual_peak_luminance = data;
num_rows_targeted_system_display_actual_peak_luminance = data;
data = 0;
@@ -461,7 +458,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
}
- if (i < 1)
+ if (i < 1 + extraByte - 1)
data = data << 8;
extraBit += (j - extraBit);
@@ -471,15 +468,14 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.num_cols_targeted_system_display_actual_peak_luminance = data;
+ pHdr10PlusInfo->data.num_cols_targeted_system_display_actual_peak_luminance = 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++) {
CHECK_BOUNDARY(bit_offset + 4, size);
- /* mastering_display_actual_peak_luminance : 4bit */
+ /* targeted_system_display_actual_peak_luminance : 4bit */
if (extraBit > 4)
extraByte = 1;
@@ -488,7 +484,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
}
- if (k < 1)
+ if (k < 1 + extraByte - 1)
data = data << 8;
extraBit += (l - extraBit);
@@ -498,13 +494,13 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.mastering_display_actual_peak_luminance = data;
+ pHdr10PlusInfo->data.targeted_system_display_actual_peak_luminance[i][j] = data;
data = 0;
}
}
}
- for (i = 0; i < windows; i++) {
+ for (i = 0; i < pHdr10PlusInfo->data.num_windows; i++) {
for (j = 0; j < 3; j++) {
CHECK_BOUNDARY(bit_offset + 17, size);
/* maxscl : 17bit */
@@ -525,9 +521,10 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
if (extraBit != 0)
data = data >> (8 - extraBit);
- pHdr10PlusInfo->data.maxscl[j] = data;
+ pHdr10PlusInfo->data.maxscl[i][j] = data;
data = 0;
}
+
CHECK_BOUNDARY(bit_offset + 17, size);
/* average_maxrgb : 17bit */
for (j = 0; j < 3; j++) {
@@ -544,7 +541,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
bit_offset += 17;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.average_maxrgb = data;
+ pHdr10PlusInfo->data.average_maxrgb[i] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 4, size);
@@ -557,10 +554,8 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (extraByte > 0) {
- if (j < 1)
- data = data << 8;
- }
+ if (j < 1 + extraByte - 1)
+ data = data << 8;
extraBit += (k - extraBit);
extraBit %= 8;
@@ -569,11 +564,10 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.num_maxrgb_percentiles = data;
+ pHdr10PlusInfo->data.num_maxrgb_percentiles[i] = data;
data = 0;
-
- for (j = 0; j < pHdr10PlusInfo->data.num_maxrgb_percentiles; j++) {
+ for (j = 0; j < pHdr10PlusInfo->data.num_maxrgb_percentiles[i]; j++) {
CHECK_BOUNDARY(bit_offset + 7, size);
/* distribution_maxrgb_percentages : 7bit */
if (extraBit > 1)
@@ -584,7 +578,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
}
- if (k < 1)
+ if (k < 1 + extraByte - 1)
data = data << 8;
extraBit += (l - extraBit);
@@ -594,7 +588,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.maxrgb_percentages[j] = data;
+ pHdr10PlusInfo->data.maxrgb_percentages[i][j] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 17, size);
@@ -607,7 +601,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
}
- if (k < 2)
+ if (k < 2 + extraByte - 1)
data = data << 8;
extraBit += (l - extraBit);
@@ -617,7 +611,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.maxrgb_percentiles[j] = data;
+ pHdr10PlusInfo->data.maxrgb_percentiles[i][j] = data;
data = 0;
}
@@ -633,7 +627,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + j) & (1 << (7 - k)));
}
- if (j < 2)
+ if (j < 1 + extraByte - 1)
data = data << 8;
extraBit += (k - extraBit);
@@ -643,7 +637,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.fraction_bright_pixels = data;
+ pHdr10PlusInfo->data.fraction_bright_pixels[i] = data;
data = 0;
}
@@ -654,11 +648,10 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
bit_offset += 1;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.mastering_display_actual_peak_luminance_flag = data;
+ pHdr10PlusInfo->data.mastering_display_actual_peak_luminance_flag = 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 */
@@ -670,7 +663,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
}
- if (i < 1)
+ if (i < 1 + extraByte - 1)
data = data << 8;
extraBit += (j - extraBit);
@@ -680,7 +673,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.num_rows_mastering_display_actual_peak_luminance = data;
+ pHdr10PlusInfo->data.num_rows_mastering_display_actual_peak_luminance = data;
num_rows_mastering_display_actual_peak_luminance = data;
data = 0;
@@ -694,7 +687,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + i) & (1 << (7 - j)));
}
- if (i < 1)
+ if (i < 1 + extraByte - 1)
data = data << 8;
extraBit += (j - extraBit);
@@ -704,11 +697,10 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.num_cols_mastering_display_actual_peak_luminance = data;
+ pHdr10PlusInfo->data.num_cols_mastering_display_actual_peak_luminance = 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);
@@ -721,7 +713,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
data |= (*((char *)src + (bit_offset / 8) + k) & (1 << (7 - l)));
}
- if (k < 1)
+ if (k < 1 + extraByte - 1)
data = data << 8;
extraBit += (l - extraBit);
@@ -731,30 +723,29 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.mastering_display_actual_peak_luminance = data;
+ pHdr10PlusInfo->data.mastering_display_actual_peak_luminance[i][j] = data;
data = 0;
}
}
}
- for (i = 0; i < windows; i++) {
+ for (i = 0; i < pHdr10PlusInfo->data.num_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 = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
+ pHdr10PlusInfo->data.tone_mapping.tone_mapping_flag[i] = data;
data = 0;
-
- if (pHdr10PlusInfo->data.tone_mapping.tone_mapping_flag) {
+ if (pHdr10PlusInfo->data.tone_mapping.tone_mapping_flag[i]) {
CHECK_BOUNDARY(bit_offset + 12, size);
/* knee_point_x : 12bit */
- if (extraBit > 5)
+ if (extraBit > 4)
extraByte = 2;
- else if (extraBit <= 5)
+ else if (extraBit <= 4)
extraByte = 1;
for (j = 0; j < 1 + extraByte; j++) {
@@ -772,14 +763,14 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.knee_point_x = data;
+ pHdr10PlusInfo->data.tone_mapping.knee_point_x[i] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 12, size);
/* knee_point_y : 12bit */
- if (extraBit > 5)
+ if (extraBit > 4)
extraByte = 2;
- else if (extraBit <= 5)
+ else if (extraBit <= 4)
extraByte = 1;
for (j = 0; j < 1 + extraByte; j++) {
@@ -797,7 +788,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.knee_point_y = data;
+ pHdr10PlusInfo->data.tone_mapping.knee_point_y[i] = data;
data = 0;
CHECK_BOUNDARY(bit_offset + 4, size);
@@ -820,11 +811,10 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.num_bezier_curve_anchors = data;
+ pHdr10PlusInfo->data.tone_mapping.num_bezier_curve_anchors[i] = data;
data = 0;
-
- for (j = 0; j < pHdr10PlusInfo->data.tone_mapping.num_bezier_curve_anchors; j++) {
+ for (j = 0; j < pHdr10PlusInfo->data.tone_mapping.num_bezier_curve_anchors[i]; j++) {
CHECK_BOUNDARY(bit_offset + 10, size);
/* bezier_curve_anchors : 10bit */
if (extraBit > 6)
@@ -847,7 +837,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- pHdr10PlusInfo->data.tone_mapping.bezier_curve_anchors[j] = data;
+ pHdr10PlusInfo->data.tone_mapping.bezier_curve_anchors[i][j] = data;
data = 0;
}
}
@@ -860,15 +850,13 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->data.color_saturation_mapping_flag = data;
- color_saturation_mapping_flag = data;
+ pHdr10PlusInfo->data.color_saturation_mapping_flag[i] = data;
data = 0;
-
- if (color_saturation_mapping_flag) {
+ if (pHdr10PlusInfo->data.color_saturation_mapping_flag[i]) {
CHECK_BOUNDARY(bit_offset + 6, size);
/* color_saturation_weight : 6bit */
- if (extraBit > 3)
+ if (extraBit > 2)
extraByte = 1;
for (j = 0; j < 1 + extraByte; j++) {
@@ -886,7 +874,7 @@ int Exynos_parsing_user_data_registered_itu_t_t35 (
extraByte = 0;
extraBit = bit_offset % 8;
data = (extraBit != 0) ? (data >> (8 - extraBit)) : data;
- //pHdr10PlusInfo->color_saturation_weight = data;
+ pHdr10PlusInfo->data.color_saturation_weight[i] = data;
data = 0;
}
}
@@ -910,7 +898,7 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
int buffer = 0;
int tempBuffer = 0;
- int i, j, k;
+ int i, j, k, l;
if ((src == NULL) || (dst == NULL)) {
ALOGE("[%s] invalid parameters", __FUNCTION__);
@@ -931,6 +919,7 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
if (bit_offset == offset_limit)
break;
}
+ extraBit = (bit_offset % 8);
/* terminal_provider_code: 16bit */
offset_limit = bit_offset + 16;
@@ -945,6 +934,7 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
break;
}
}
+ extraBit = (bit_offset % 8);
/* terminal_provider_oriented_code: 16bit */
offset_limit = bit_offset + 16;
@@ -959,6 +949,7 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
break;
}
}
+ extraBit = (bit_offset % 8);
/* application_identifier: 8bit */
offset_limit = bit_offset + 8;
@@ -971,6 +962,7 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
if (bit_offset == offset_limit)
break;
}
+ extraBit = (bit_offset % 8);
/* application_version: 8bit */
offset_limit = bit_offset + 8;
@@ -983,62 +975,299 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
if (bit_offset == offset_limit)
break;
}
+ extraBit = (bit_offset % 8);
/* num_windows: 2bit */
offset_limit = bit_offset + 2;
+ tempBuffer = pHDRDynamicInfo->data.num_windows << (6 - extraBit);
for (i = 0; i < 2; i++) {
/* num_windows is always 1 now */
- *((char *)pBlob + (bit_offset / 8)) |= ((char)0x40/* num_windows */ & (1 << (7 - 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 = 1; i < 1 /* num_windows */; i++) {
+ for (i = 1; i < pHDRDynamicInfo->data.num_windows; i++) {
/* window_upper_left_corner_x: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.window_upper_left_corner_x[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
/* window_upper_left_corner_y: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 16;
- /* window_upper_right_corner_x: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ if (extraBit > 0)
+ extraByte = 1;
- /* window_upper_right_corner_y: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ tempBuffer = pHDRDynamicInfo->data.window_upper_left_corner_y[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
+
+ /* window_lower_right_corner_x: 16bit */
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.window_lower_right_corner_x[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
+
+ /* window_lower_right_corner_y: 16bit */
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.window_lower_right_corner_y[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
/* center_of_ellipse_x: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.center_of_ellipse_x[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
/* center_of_ellipse_y: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.center_of_ellipse_y[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
/* rotation_angle: 8bit */
- bit_offset += 8;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 8;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.rotation_angle[i - 1];
+ tempBuffer = tempBuffer << (24 - 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;
/* semimajor_axis_internal_ellipse: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.semimajor_axis_internal_ellipse[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
/* semimajor_axis_external_ellipse: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.semimajor_axis_external_ellipse[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
/* semiminor_axis_external_ellipse: 16bit */
- bit_offset += 16;
- extraBit = (bit_offset % 8);
+ offset_limit = bit_offset + 16;
+
+ if (extraBit > 0)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.semiminor_axis_external_ellipse[i - 1];
+ tempBuffer = tempBuffer << (16 - 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;
/* overlap_process_option: 1bit */
+ if (pHDRDynamicInfo->data.overlap_process_option[i - 1]) {
+ *((char *)pBlob + (bit_offset / 8)) |= (1 << (7 - extraBit));
+ }
+
bit_offset += 1;
extraBit = (bit_offset % 8);
}
@@ -1046,7 +1275,8 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
/* targeted_system_display_maximum_luminance: 27bit */
offset_limit = bit_offset + 27;
- tempBuffer = pHDRDynamicInfo->data.display_maximum_luminance << (5 - extraBit);
+ tempBuffer = pHDRDynamicInfo->data.targeted_system_display_maximum_luminance;
+ tempBuffer = tempBuffer << (5 - extraBit);
for (i = 0; i < 4; i++) {
memcpy((char *)&buffer + i, (char *)&tempBuffer + (3 - i), sizeof(char));
}
@@ -1064,20 +1294,128 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
buffer = 0;
tempBuffer = 0;
- /* targeted_system_display_actual_peak_luminance_flag: 1bit (always 0) */
+ /* targeted_system_display_actual_peak_luminance_flag: 1bit */
+ if (pHDRDynamicInfo->data.targeted_system_display_actual_peak_luminance_flag) {
+ *((char *)pBlob + (bit_offset / 8)) |= (1 << (7 - extraBit));
+ }
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 */
+ if (pHDRDynamicInfo->data.targeted_system_display_actual_peak_luminance_flag) {
+ /* num_rows_targeted_system_display_actual_peak_luminance: 5bit */
+ offset_limit = bit_offset + 5;
+
+ if (extraBit > 3)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.num_rows_targeted_system_display_actual_peak_luminance;
+ tempBuffer = tempBuffer << (27 - extraBit);
+ for (i = 0; i < 4; i++) {
+ memcpy((char *)&buffer + i, (char *)&tempBuffer + (3 - i), sizeof(char));
+ }
+
+ for (i = 0; i < (1 + 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;
+
+ /* num_cols_targeted_system_display_actual_peak_luminance: 5bit */
+ offset_limit = bit_offset + 5;
+
+ if (extraBit > 3)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.num_cols_targeted_system_display_actual_peak_luminance;
+ tempBuffer = tempBuffer << (27 - extraBit);
+ for (i = 0; i < 4; i++) {
+ memcpy((char *)&buffer + i, (char *)&tempBuffer + (3 - i), sizeof(char));
+ }
+
+ for (i = 0; i < (1 + 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;
+
+ /* targeted_system_display_actual_peak_luminance[row][col]: 4bit */
+ for (i = 0; i < pHDRDynamicInfo->data.num_rows_targeted_system_display_actual_peak_luminance; i++) {
+ for (j = 0; j < pHDRDynamicInfo->data.num_cols_targeted_system_display_actual_peak_luminance; j++) {
+ offset_limit = bit_offset + 4;
+
+ if (extraBit > 4)
+ extraByte = 1;
+
+ tempBuffer = pHDRDynamicInfo->data.targeted_system_display_actual_peak_luminance[i][j];
+ tempBuffer = tempBuffer << (28 - extraBit);
+ for (k = 0; k < 4; k++) {
+ memcpy((char *)&buffer + k, (char *)&tempBuffer + (3 - k), sizeof(char));
+ }
+
+ for (k = 0; k < (1 + extraByte); k++) {
+ for (l = extraBit; l < 8; l++) {
+ *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + k) & (1 << (7 - l)));
+ bit_offset++;
+
+ if (bit_offset == offset_limit) {
+ break;
+ }
+ }
+ extraBit = (bit_offset % 8);
+ }
+ buffer = 0;
+ tempBuffer = 0;
+ extraByte = 0;
+ }
+ }
+ }
+
+ for (i = 0; i < pHDRDynamicInfo->data.num_windows; i++) {
+ /* maxscl: 17bit */
+ for (j = 0; j < 3; j++) {
+ offset_limit = bit_offset + 17;
+
+ tempBuffer = pHDRDynamicInfo->data.maxscl[i][j] << (15 - extraBit);
+ for (k = 0; k < 4; k++) {
+ memcpy((char *)&buffer + k, (char *)&tempBuffer + (3 - k), sizeof(char));
+ }
+
+ for (k = 0; k < 3; k++) {
+ for (l = extraBit; l < 8; l++) {
+ *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + k) & (1 << (7 - l)));
+ bit_offset++;
+
+ if (bit_offset == offset_limit)
+ break;
+ }
+ extraBit = (bit_offset % 8);
+ }
+ buffer = 0;
+ tempBuffer = 0;
+ }
- /* maxscl: 17bit */
- for (i = 0; i < 3; i++) {
+ /* average_maxrgb: 17bit */
offset_limit = bit_offset + 17;
- tempBuffer = pHDRDynamicInfo->data.maxscl[i] << (15 - extraBit);
+ tempBuffer = pHDRDynamicInfo->data.average_maxrgb[i] << (15 - extraBit);
for (j = 0; j < 4; j++) {
memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
}
@@ -1094,37 +1432,14 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
}
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;
+ /* num_distribution_maxrgb_percentiles: 4bit */
+ offset_limit = bit_offset + 4;
- if (extraBit > 1)
+ if (extraBit > 4)
extraByte = 1;
- tempBuffer = pHDRDynamicInfo->data.maxrgb_percentages[i];
- tempBuffer = tempBuffer << (25 - extraBit);
-
+ tempBuffer = pHDRDynamicInfo->data.num_maxrgb_percentiles[i] << (28 - extraBit);
for (j = 0; j < 4; j++) {
memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
}
@@ -1134,9 +1449,8 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
*((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + j) & (1 << (7 - k)));
bit_offset++;
- if (bit_offset == offset_limit) {
+ if (bit_offset == offset_limit)
break;
- }
}
extraBit = (bit_offset % 8);
}
@@ -1144,16 +1458,70 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
tempBuffer = 0;
extraByte = 0;
- /* distribution_maxrgb_percentiles: 17bit */
- offset_limit = bit_offset + 17;
+ for (j = 0; j < pHDRDynamicInfo->data.num_maxrgb_percentiles[i]; j++) {
+ /* distribution_maxrgb_percentaged: 7bit */
+ offset_limit = bit_offset + 7;
+
+ if (extraBit > 1)
+ extraByte = 1;
- tempBuffer = pHDRDynamicInfo->data.maxrgb_percentiles[i] << (15 - extraBit);
+ tempBuffer = pHDRDynamicInfo->data.maxrgb_percentages[i][j];
+ tempBuffer = tempBuffer << (25 - extraBit);
+ for (k = 0; k < 4; k++) {
+ memcpy((char *)&buffer + k, (char *)&tempBuffer + (3 - k), sizeof(char));
+ }
+ for (k = 0; k < (1 + extraByte); k++) {
+ for (l = extraBit; l < 8; l++) {
+ *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + k) & (1 << (7 - l)));
+ 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][j] << (15 - extraBit);
+ for (k = 0; k < 4; k++) {
+ memcpy((char *)&buffer + k, (char *)&tempBuffer + (3 - k), sizeof(char));
+ }
+
+ for (k = 0; k < 3; k++) {
+ for (l = extraBit; l < 8; l++) {
+ *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + k) & (1 << (7 - l)));
+ bit_offset++;
+
+ if (bit_offset == offset_limit) {
+ break;
+ }
+ }
+ extraBit = (bit_offset % 8);
+ }
+ buffer = 0;
+ tempBuffer = 0;
+ }
+
+ /* fraction_bright_pixels: 10bit */
+ if (extraBit > 6)
+ extraByte = 1;
+
+ offset_limit = bit_offset + 10;
+
+ tempBuffer = pHDRDynamicInfo->data.fraction_bright_pixels[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 < 3; j++) {
+ 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++;
@@ -1166,43 +1534,30 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
}
buffer = 0;
tempBuffer = 0;
+ extraByte = 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) {
+ if (pHDRDynamicInfo->data.mastering_display_actual_peak_luminance_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;
+ if (pHDRDynamicInfo->data.mastering_display_actual_peak_luminance_flag) {
+ /* num_rows_mastering_display_actual_peak_luminance: 5bit */
+ offset_limit = bit_offset + 5;
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.knee_point_x;
- tempBuffer = tempBuffer << (20 - extraBit);
+ if (extraBit > 3)
+ extraByte = 1;
+ tempBuffer = pHDRDynamicInfo->data.num_rows_mastering_display_actual_peak_luminance;
+ tempBuffer = tempBuffer << (27 - 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 (i = 0; i < (1 + extraByte); i++) {
for (j = extraBit; j < 8; j++) {
*((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + i) & (1 << (7 - j)));
bit_offset++;
@@ -1217,22 +1572,21 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
tempBuffer = 0;
extraByte = 0;
- /* knee_point_y: 12bit */
- if (extraBit > 4)
- extraByte = 1;
+ /* num_cols_mastering_display_actual_peak_luminance: 5bit */
+ offset_limit = bit_offset + 5;
- offset_limit = bit_offset + 12;
-
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.knee_point_y;
- tempBuffer = tempBuffer << (20 - extraBit);
+ if (extraBit > 3)
+ extraByte = 1;
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
+ tempBuffer = pHDRDynamicInfo->data.num_cols_mastering_display_actual_peak_luminance;
+ tempBuffer = tempBuffer << (27 - extraBit);
+ for (i = 0; i < 4; i++) {
+ memcpy((char *)&buffer + i, (char *)&tempBuffer + (3 - i), 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)));
+ for (i = 0; i < (1 + 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) {
@@ -1245,44 +1599,82 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
tempBuffer = 0;
extraByte = 0;
- /* num_bezier_curve_anchors: 4bit */
- if (extraBit > 4)
- extraByte = 1;
-
- offset_limit = bit_offset + 4;
+ /* mastering_display_actual_peak_luminance[row][col]: 4bit */
+ for (i = 0; i < pHDRDynamicInfo->data.num_rows_mastering_display_actual_peak_luminance; i++) {
+ for (j = 0; j < pHDRDynamicInfo->data.num_cols_mastering_display_actual_peak_luminance; j++) {
+ offset_limit = bit_offset + 4;
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.num_bezier_curve_anchors;
- tempBuffer = tempBuffer << (28 - extraBit);
+ if (extraBit > 4)
+ extraByte = 1;
- for (j = 0; j < 4; j++) {
- memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
- }
+ tempBuffer = pHDRDynamicInfo->data.mastering_display_actual_peak_luminance[i][j];
+ tempBuffer = tempBuffer << (28 - extraBit);
+ for (k = 0; k < 4; k++) {
+ memcpy((char *)&buffer + k, (char *)&tempBuffer + (3 - k), 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++;
+ for (k = 0; k < (1 + extraByte); k++) {
+ for (l = extraBit; l < 8; l++) {
+ *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + k) & (1 << (7 - l)));
+ bit_offset++;
- if (bit_offset == offset_limit) {
- break;
+ if (bit_offset == offset_limit) {
+ break;
+ }
+ }
+ extraBit = (bit_offset % 8);
}
+ buffer = 0;
+ tempBuffer = 0;
+ extraByte = 0;
}
- extraBit = (bit_offset % 8);
}
- buffer = 0;
- tempBuffer = 0;
- extraByte = 0;
+ }
+
+ for (i = 0; i < pHDRDynamicInfo->data.num_windows; i++) {
+ /* tone_mapping_flag: 1bit */
+ if (pHDRDynamicInfo->data.tone_mapping.tone_mapping_flag[i]) {
+ *((char *)pBlob + (bit_offset / 8)) |= (1 << (7 - extraBit));
+ }
+ bit_offset += 1;
+ extraBit = (bit_offset % 8);
- for (i = 0; i < pHDRDynamicInfo->data.tone_mapping.num_bezier_curve_anchors; i++) {
- /* bezier_curve_anchors: 10bit */
- if (extraBit > 6)
+ if (pHDRDynamicInfo->data.tone_mapping.tone_mapping_flag[i]) {
+ /* knee_point_x: 12bit */
+ if (extraBit > 4)
extraByte = 1;
- offset_limit = bit_offset + 10;
+ offset_limit = bit_offset + 12;
+
+ tempBuffer = pHDRDynamicInfo->data.tone_mapping.knee_point_x[i];
+ 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;
+
+ /* knee_point_y: 12bit */
+ if (extraBit > 4)
+ extraByte = 1;
- tempBuffer = pHDRDynamicInfo->data.tone_mapping.bezier_curve_anchors[i];
- tempBuffer = tempBuffer << (22 - extraBit);
+ offset_limit = bit_offset + 12;
+ tempBuffer = pHDRDynamicInfo->data.tone_mapping.knee_point_y[i];
+ tempBuffer = tempBuffer << (20 - extraBit);
for (j = 0; j < 4; j++) {
memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
}
@@ -1301,15 +1693,100 @@ int Exynos_dynamic_meta_to_itu_t_t35 (
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[i];
+ 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 (j = 0; j < pHDRDynamicInfo->data.tone_mapping.num_bezier_curve_anchors[i]; j++) {
+ /* bezier_curve_anchors: 10bit */
+ if (extraBit > 6)
+ extraByte = 1;
+
+ offset_limit = bit_offset + 10;
+
+ tempBuffer = pHDRDynamicInfo->data.tone_mapping.bezier_curve_anchors[i][j];
+ tempBuffer = tempBuffer << (22 - extraBit);
+ for (k = 0; k < 4; k++) {
+ memcpy((char *)&buffer + k, (char *)&tempBuffer + (3 - k), sizeof(char));
+ }
+
+ for (k = 0; k < (2 + extraByte); k++) {
+ for (l = extraBit; l < 8; l++) {
+ *((char *)pBlob + (bit_offset / 8)) |= (*((char *)&buffer + k) & (1 << (7 - l)));
+ 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);
+ /* color_saturation_mapping_flag: 1bit */
+ if (pHDRDynamicInfo->data.color_saturation_mapping_flag[i]) {
+ *((char *)pBlob + (bit_offset / 8)) |= (1 << (7 - extraBit));
+ }
+ bit_offset += 1;
+ extraBit = (bit_offset % 8);
+
+ if (pHDRDynamicInfo->data.color_saturation_mapping_flag[i]) {
+ /* color_saturation_weight: 6bit */
+ if (extraBit > 2)
+ extraByte = 1;
+
+ offset_limit = bit_offset + 6;
+
+ tempBuffer = pHDRDynamicInfo->data.color_saturation_weight[i];
+ tempBuffer = tempBuffer << (26 - extraBit);
+ for (j = 0; j < 4; j++) {
+ memcpy((char *)&buffer + j, (char *)&tempBuffer + (3 - j), sizeof(char));
+ }
- /* NOTE: This info would not be set because color_saturation_mapping_flag is always 0.
- * - color_saturation_weight: 6bit */
+ 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;
+ }
+ }
if(extraBit > 0) {
size = (bit_offset / 8) + 1;