Add number of temporal layers to Format

The number of temporal sub-layers is required for
H.265 non-reference frame identification as
only frames from the highest temporal sub-layer can be
discarded.

PiperOrigin-RevId: 713247354
This commit is contained in:
dancho 2025-01-08 04:48:03 -08:00 committed by Copybara-Service
parent 281a0e7ac8
commit b54d8737cf
76 changed files with 123 additions and 1 deletions

View file

@ -103,6 +103,7 @@ import java.util.UUID;
* <li>{@link #projectionData}
* <li>{@link #stereoMode}
* <li>{@link #colorInfo}
* <li>{@link #maxSubLayers}
* </ul>
*
* <h2 id="audio-formats">Fields relevant to audio formats</h2>
@ -179,6 +180,7 @@ public final class Format {
@Nullable private byte[] projectionData;
private @C.StereoMode int stereoMode;
@Nullable private ColorInfo colorInfo;
private int maxSubLayers;
// Audio specific.
@ -217,6 +219,7 @@ public final class Format {
frameRate = NO_VALUE;
pixelWidthHeightRatio = 1.0f;
stereoMode = NO_VALUE;
maxSubLayers = NO_VALUE;
// Audio specific.
channelCount = NO_VALUE;
sampleRate = NO_VALUE;
@ -268,6 +271,7 @@ public final class Format {
this.projectionData = format.projectionData;
this.stereoMode = format.stereoMode;
this.colorInfo = format.colorInfo;
this.maxSubLayers = format.maxSubLayers;
// Audio specific.
this.channelCount = format.channelCount;
this.sampleRate = format.sampleRate;
@ -656,6 +660,18 @@ public final class Format {
return this;
}
/**
* Sets {@link Format#maxSubLayers}. The default value is {@link #NO_VALUE}.
*
* @param maxSubLayers The {@link Format#maxSubLayers}.
* @return The builder.
*/
@CanIgnoreReturnValue
public Builder setMaxSubLayers(int maxSubLayers) {
this.maxSubLayers = maxSubLayers;
return this;
}
// Audio specific.
/**
@ -1009,6 +1025,12 @@ public final class Format {
/** The color metadata associated with the video, or null if not applicable. */
@UnstableApi @Nullable public final ColorInfo colorInfo;
/**
* The maximum number of temporal scalable sub-layers in the video bitstream, or {@link #NO_VALUE}
* if not applicable.
*/
@UnstableApi public final int maxSubLayers;
// Audio specific.
/** The number of audio channels, or {@link #NO_VALUE} if unknown or not applicable. */
@ -1127,6 +1149,7 @@ public final class Format {
projectionData = builder.projectionData;
stereoMode = builder.stereoMode;
colorInfo = builder.colorInfo;
maxSubLayers = builder.maxSubLayers;
// Audio specific.
channelCount = builder.channelCount;
sampleRate = builder.sampleRate;
@ -1309,6 +1332,7 @@ public final class Format {
// [Omitted] projectionData.
result = 31 * result + stereoMode;
// [Omitted] colorInfo.
result = 31 * result + maxSubLayers;
// Audio specific.
result = 31 * result + channelCount;
result = 31 * result + sampleRate;
@ -1351,6 +1375,7 @@ public final class Format {
&& height == other.height
&& rotationDegrees == other.rotationDegrees
&& stereoMode == other.stereoMode
&& maxSubLayers == other.maxSubLayers
&& channelCount == other.channelCount
&& sampleRate == other.sampleRate
&& pcmEncoding == other.pcmEncoding
@ -1452,6 +1477,9 @@ public final class Format {
if (format.frameRate != NO_VALUE) {
builder.append(", fps=").append(format.frameRate);
}
if (format.maxSubLayers != NO_VALUE) {
builder.append(", maxSubLayers=").append(format.maxSubLayers);
}
if (format.channelCount != NO_VALUE) {
builder.append(", channels=").append(format.channelCount);
}
@ -1523,6 +1551,7 @@ public final class Format {
private static final String FIELD_TILE_COUNT_VERTICAL = Util.intToStringMaxRadix(31);
private static final String FIELD_LABELS = Util.intToStringMaxRadix(32);
private static final String FIELD_AUXILIARY_TRACK_TYPE = Util.intToStringMaxRadix(33);
private static final String FIELD_MAX_SUB_LAYERS = Util.intToStringMaxRadix(34);
/**
* Returns a {@link Bundle} representing the information stored in this object. If {@code
@ -1568,6 +1597,7 @@ public final class Format {
if (colorInfo != null) {
bundle.putBundle(FIELD_COLOR_INFO, colorInfo.toBundle());
}
bundle.putInt(FIELD_MAX_SUB_LAYERS, maxSubLayers);
// Audio specific.
bundle.putInt(FIELD_CHANNEL_COUNT, channelCount);
bundle.putInt(FIELD_SAMPLE_RATE, sampleRate);
@ -1635,7 +1665,8 @@ public final class Format {
.setPixelWidthHeightRatio(
bundle.getFloat(FIELD_PIXEL_WIDTH_HEIGHT_RATIO, DEFAULT.pixelWidthHeightRatio))
.setProjectionData(bundle.getByteArray(FIELD_PROJECTION_DATA))
.setStereoMode(bundle.getInt(FIELD_STEREO_MODE, DEFAULT.stereoMode));
.setStereoMode(bundle.getInt(FIELD_STEREO_MODE, DEFAULT.stereoMode))
.setMaxSubLayers(bundle.getInt(FIELD_MAX_SUB_LAYERS, DEFAULT.maxSubLayers));
Bundle colorInfoBundle = bundle.getBundle(FIELD_COLOR_INFO);
if (colorInfoBundle != null) {
builder.setColorInfo(ColorInfo.fromBundle(colorInfoBundle));

View file

@ -1211,6 +1211,7 @@ public final class BoxParser {
@C.StereoMode int stereoMode = Format.NO_VALUE;
@Nullable EsdsData esdsData = null;
int maxNumReorderSamples = Format.NO_VALUE;
int maxSubLayers = Format.NO_VALUE;
@Nullable NalUnitUtil.H265VpsData vpsData = null;
// HDR related metadata.
@ -1258,6 +1259,7 @@ public final class BoxParser {
pixelWidthHeightRatio = hevcConfig.pixelWidthHeightRatio;
}
maxNumReorderSamples = hevcConfig.maxNumReorderPics;
maxSubLayers = hevcConfig.maxSubLayers;
codecs = hevcConfig.codecs;
if (hevcConfig.stereoMode != Format.NO_VALUE) {
// HEVCDecoderConfigurationRecord may include 3D reference displays information SEI.
@ -1526,6 +1528,7 @@ public final class BoxParser {
.setStereoMode(stereoMode)
.setInitializationData(initializationData)
.setMaxNumReorderSamples(maxNumReorderSamples)
.setMaxSubLayers(maxSubLayers)
.setDrmInitData(drmInitData)
// Note that if either mdcv or clli are missing, we leave the corresponding HDR static
// metadata bytes with value zero. See [Internal ref: b/194535665].

View file

@ -275,6 +275,7 @@ public final class H265Reader implements ElementaryStreamReader {
.build())
.setPixelWidthHeightRatio(spsData.pixelWidthHeightRatio)
.setMaxNumReorderSamples(spsData.maxNumReorderPics)
.setMaxSubLayers(spsData.maxSubLayersMinus1 + 1)
.setInitializationData(Collections.singletonList(csdData))
.build();
}

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -278,6 +279,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -222,6 +223,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -138,6 +139,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -54,6 +55,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -277,6 +278,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -221,6 +222,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -137,6 +138,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -53,6 +54,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -277,6 +278,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -221,6 +222,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -137,6 +138,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -53,6 +54,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -277,6 +278,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 768
frameRate = 27.61
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1
@ -277,6 +278,7 @@ track 1:
height = 1536
frameRate = 2.14
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 1

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 28.03
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -21,6 +21,7 @@ track 0:
height = 1440
frameRate = 28.81
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorRange = 1
colorTransfer = 3

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1934
height = 2160
frameRate = 90.00
maxSubLayers = 1
colorInfo:
colorSpace = 1
colorRange = 2

View file

@ -17,6 +17,7 @@ track 256:
maxNumReorderSamples = 2
width = 854
height = 480
maxSubLayers = 1
colorInfo:
colorRange = 2
lumaBitdepth = 8

View file

@ -17,6 +17,7 @@ track 256:
maxNumReorderSamples = 2
width = 854
height = 480
maxSubLayers = 1
colorInfo:
colorRange = 2
lumaBitdepth = 8

View file

@ -17,6 +17,7 @@ track 256:
maxNumReorderSamples = 2
width = 854
height = 480
maxSubLayers = 1
colorInfo:
colorRange = 2
lumaBitdepth = 8

View file

@ -17,6 +17,7 @@ track 256:
maxNumReorderSamples = 2
width = 854
height = 480
maxSubLayers = 1
colorInfo:
colorRange = 2
lumaBitdepth = 8

View file

@ -14,6 +14,7 @@ track 256:
maxNumReorderSamples = 2
width = 854
height = 480
maxSubLayers = 1
colorInfo:
colorRange = 2
lumaBitdepth = 8

View file

@ -18,6 +18,7 @@ track 256:
width = 914
height = 686
pixelWidthHeightRatio = 1.0003651
maxSubLayers = 4
colorInfo:
lumaBitdepth = 8
chromaBitdepth = 8

View file

@ -18,6 +18,7 @@ track 256:
width = 914
height = 686
pixelWidthHeightRatio = 1.0003651
maxSubLayers = 4
colorInfo:
lumaBitdepth = 8
chromaBitdepth = 8

View file

@ -18,6 +18,7 @@ track 256:
width = 914
height = 686
pixelWidthHeightRatio = 1.0003651
maxSubLayers = 4
colorInfo:
lumaBitdepth = 8
chromaBitdepth = 8

View file

@ -18,6 +18,7 @@ track 256:
width = 914
height = 686
pixelWidthHeightRatio = 1.0003651
maxSubLayers = 4
colorInfo:
lumaBitdepth = 8
chromaBitdepth = 8

View file

@ -15,6 +15,7 @@ track 256:
width = 914
height = 686
pixelWidthHeightRatio = 1.0003651
maxSubLayers = 4
colorInfo:
lumaBitdepth = 8
chromaBitdepth = 8

View file

@ -72,6 +72,7 @@ track 2:
width = 1920
height = 1080
frameRate = 29.98
maxSubLayers = 1
colorInfo:
colorSpace = 2
colorRange = 1

View file

@ -20,6 +20,7 @@ track 0:
width = 1280
height = 720
frameRate = 29.98
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -14,6 +14,7 @@ track 0:
maxNumReorderSamples = 0
width = 1280
height = 720
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1280
height = 720
frameRate = 29.96
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1280
height = 720
frameRate = 29.98
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -20,6 +20,7 @@ track 0:
width = 1280
height = 720
frameRate = 29.98
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 720
frameRate = 30.00
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 6
colorRange = 2

View file

@ -21,6 +21,7 @@ track 0:
height = 1080
frameRate = 29.98
rotationDegrees = 90
maxSubLayers = 1
colorInfo:
colorSpace = 2
colorRange = 1

View file

@ -65,6 +65,7 @@ public final class DumpableFormat implements Dumper.Dumpable {
"rotationDegrees", format, DEFAULT_FORMAT, format -> format.rotationDegrees);
dumper.addIfNonDefault(
"pixelWidthHeightRatio", format, DEFAULT_FORMAT, format -> format.pixelWidthHeightRatio);
dumper.addIfNonDefault("maxSubLayers", format, DEFAULT_FORMAT, format -> format.maxSubLayers);
@Nullable ColorInfo colorInfo = format.colorInfo;
if (colorInfo != null) {
dumper.startBlock("colorInfo");