Commit 07d1970f by huangdarwin Committed by Rohit Singh

HDR: Add COLOR_TRANSFER_LINEAR in C.java.

This is more clear than using Format.NO_VALUE, when we do actually intend for an
output value.

Also, fix @see formatting by using summary fragments instead, and add an error
output for OETF and EOTF transfer functions.

PiperOrigin-RevId: 490910229
parent 7d62943b
...@@ -1048,24 +1048,27 @@ public final class C { ...@@ -1048,24 +1048,27 @@ public final class C {
// LINT.IfChange(color_transfer) // LINT.IfChange(color_transfer)
/** /**
* Video color transfer characteristics. One of {@link Format#NO_VALUE}, {@link * Video color transfer characteristics. One of {@link Format#NO_VALUE}, {@link
* #COLOR_TRANSFER_SDR}, {@link #COLOR_TRANSFER_ST2084} or {@link #COLOR_TRANSFER_HLG}. * #COLOR_TRANSFER_LINEAR}, {@link #COLOR_TRANSFER_SDR}, {@link #COLOR_TRANSFER_ST2084} or {@link
* #COLOR_TRANSFER_HLG}.
*/ */
@Documented @Documented
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
@Target(TYPE_USE) @Target(TYPE_USE)
@IntDef({Format.NO_VALUE, COLOR_TRANSFER_SDR, COLOR_TRANSFER_ST2084, COLOR_TRANSFER_HLG}) @IntDef({
Format.NO_VALUE,
COLOR_TRANSFER_LINEAR,
COLOR_TRANSFER_SDR,
COLOR_TRANSFER_ST2084,
COLOR_TRANSFER_HLG
})
public @interface ColorTransfer {} public @interface ColorTransfer {}
/** /** See {@link MediaFormat#COLOR_TRANSFER_LINEAR}. */
* @see MediaFormat#COLOR_TRANSFER_SDR_VIDEO public static final int COLOR_TRANSFER_LINEAR = MediaFormat.COLOR_TRANSFER_LINEAR;
*/ /** See {@link MediaFormat#COLOR_TRANSFER_SDR_VIDEO}. */
public static final int COLOR_TRANSFER_SDR = MediaFormat.COLOR_TRANSFER_SDR_VIDEO; public static final int COLOR_TRANSFER_SDR = MediaFormat.COLOR_TRANSFER_SDR_VIDEO;
/** /** See {@link MediaFormat#COLOR_TRANSFER_ST2084}. */
* @see MediaFormat#COLOR_TRANSFER_ST2084
*/
public static final int COLOR_TRANSFER_ST2084 = MediaFormat.COLOR_TRANSFER_ST2084; public static final int COLOR_TRANSFER_ST2084 = MediaFormat.COLOR_TRANSFER_ST2084;
/** /** See {@link MediaFormat#COLOR_TRANSFER_HLG}. */
* @see MediaFormat#COLOR_TRANSFER_HLG
*/
public static final int COLOR_TRANSFER_HLG = MediaFormat.COLOR_TRANSFER_HLG; public static final int COLOR_TRANSFER_HLG = MediaFormat.COLOR_TRANSFER_HLG;
// LINT.IfChange(color_range) // LINT.IfChange(color_range)
......
...@@ -321,7 +321,8 @@ public final class MediaFormatUtil { ...@@ -321,7 +321,8 @@ public final class MediaFormatUtil {
/** Whether this is a valid {@link C.ColorTransfer} instance. */ /** Whether this is a valid {@link C.ColorTransfer} instance. */
private static boolean isValidColorTransfer(int colorTransfer) { private static boolean isValidColorTransfer(int colorTransfer) {
// LINT.IfChange(color_transfer) // LINT.IfChange(color_transfer)
return colorTransfer == C.COLOR_TRANSFER_SDR return colorTransfer == C.COLOR_TRANSFER_LINEAR
|| colorTransfer == C.COLOR_TRANSFER_SDR
|| colorTransfer == C.COLOR_TRANSFER_ST2084 || colorTransfer == C.COLOR_TRANSFER_ST2084
|| colorTransfer == C.COLOR_TRANSFER_HLG || colorTransfer == C.COLOR_TRANSFER_HLG
|| colorTransfer == Format.NO_VALUE; || colorTransfer == Format.NO_VALUE;
......
...@@ -90,11 +90,16 @@ public final class ColorInfo implements Bundleable { ...@@ -90,11 +90,16 @@ public final class ColorInfo implements Bundleable {
} }
} }
/** Returns whether the {@code ColorInfo} uses an HDR {@link C.ColorTransfer}. */ /**
* Returns whether the {@code ColorInfo} uses an HDR {@link C.ColorTransfer}.
*
* <p>{@link C#COLOR_TRANSFER_LINEAR} is not considered to be an HDR {@link C.ColorTransfer},
* because it may represent either SDR or HDR contents.
*/
public static boolean isTransferHdr(@Nullable ColorInfo colorInfo) { public static boolean isTransferHdr(@Nullable ColorInfo colorInfo) {
return colorInfo != null return colorInfo != null
&& colorInfo.colorTransfer != Format.NO_VALUE && (colorInfo.colorTransfer == C.COLOR_TRANSFER_HLG
&& colorInfo.colorTransfer != C.COLOR_TRANSFER_SDR; || colorInfo.colorTransfer == C.COLOR_TRANSFER_ST2084);
} }
/** /**
...@@ -110,9 +115,9 @@ public final class ColorInfo implements Bundleable { ...@@ -110,9 +115,9 @@ public final class ColorInfo implements Bundleable {
public final @C.ColorRange int colorRange; public final @C.ColorRange int colorRange;
/** /**
* The color transfer characteristics of the video. Valid values are {@link C#COLOR_TRANSFER_HLG}, * The color transfer characteristics of the video. Valid values are {@link
* {@link C#COLOR_TRANSFER_ST2084}, {@link C#COLOR_TRANSFER_SDR} or {@link Format#NO_VALUE} if * C#COLOR_TRANSFER_LINEAR}, {@link C#COLOR_TRANSFER_HLG}, {@link C#COLOR_TRANSFER_ST2084}, {@link
* unknown. * C#COLOR_TRANSFER_SDR} or {@link Format#NO_VALUE} if unknown.
*/ */
public final @C.ColorTransfer int colorTransfer; public final @C.ColorTransfer int colorTransfer;
......
...@@ -79,12 +79,20 @@ highp vec3 pqOetf(highp vec3 linearColor) { ...@@ -79,12 +79,20 @@ highp vec3 pqOetf(highp vec3 linearColor) {
highp vec3 getElectricalColor(highp vec3 linearColor) { highp vec3 getElectricalColor(highp vec3 linearColor) {
// LINT.IfChange(color_transfer) // LINT.IfChange(color_transfer)
const int COLOR_TRANSFER_ST2084 = 6; const int COLOR_TRANSFER_ST2084 = 6;
return (uOetfColorTransfer == COLOR_TRANSFER_ST2084) ? const int COLOR_TRANSFER_HLG = 7;
pqOetf(linearColor) : hlgOetf(linearColor); if (uOetfColorTransfer == COLOR_TRANSFER_ST2084) {
return pqOetf(linearColor);
} else if (uOetfColorTransfer == COLOR_TRANSFER_HLG) {
return hlgOetf(linearColor);
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
}
} }
void main() { void main() {
vec4 inputColor = texture(uTexSampler, vTexSamplingCoord); vec4 inputColor = texture(uTexSampler, vTexSamplingCoord);
// transformedColors is an optical color.
vec4 transformedColors = uRgbMatrix * vec4(inputColor.rgb, 1); vec4 transformedColors = uRgbMatrix * vec4(inputColor.rgb, 1);
outColor = vec4(getElectricalColor(transformedColors.rgb), inputColor.a); outColor = vec4(getElectricalColor(transformedColors.rgb), inputColor.a);
} }
...@@ -86,12 +86,17 @@ highp vec3 getOpticalColor(highp vec3 electricalColor) { ...@@ -86,12 +86,17 @@ highp vec3 getOpticalColor(highp vec3 electricalColor) {
const int COLOR_TRANSFER_ST2084 = 6; const int COLOR_TRANSFER_ST2084 = 6;
const int COLOR_TRANSFER_HLG = 7; const int COLOR_TRANSFER_HLG = 7;
const int FORMAT_NO_VALUE = -1;
if (uEotfColorTransfer == COLOR_TRANSFER_ST2084) { if (uEotfColorTransfer == COLOR_TRANSFER_ST2084) {
return pqEotf(electricalColor); return pqEotf(electricalColor);
} else if (uEotfColorTransfer == COLOR_TRANSFER_HLG) { } else if (uEotfColorTransfer == COLOR_TRANSFER_HLG) {
return hlgEotf(electricalColor); return hlgEotf(electricalColor);
} else { } else if (uEotfColorTransfer == FORMAT_NO_VALUE) {
return electricalColor; return electricalColor;
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment