diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/CeaUtil.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/CeaUtil.java similarity index 81% rename from library/core/src/main/java/com/google/android/exoplayer2/util/CeaUtil.java rename to library/core/src/main/java/com/google/android/exoplayer2/extractor/CeaUtil.java index 71b29db2d3..4c3f97975e 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/CeaUtil.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/CeaUtil.java @@ -13,12 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.google.android.exoplayer2.util; +package com.google.android.exoplayer2.extractor; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.extractor.TrackOutput; -import java.util.Collections; -import java.util.List; +import com.google.android.exoplayer2.util.Log; +import com.google.android.exoplayer2.util.ParsableByteArray; /** Utility methods for handling CEA-608/708 messages. Defined in A/53 Part 4:2009. */ public final class CeaUtil { @@ -33,30 +32,6 @@ public final class CeaUtil { private static final int PROVIDER_CODE_ATSC = 0x31; private static final int PROVIDER_CODE_DIRECTV = 0x2F; - /** - * Returns initialization data for formats with MIME type {@link MimeTypes#APPLICATION_CEA708}. - * - * @param isWideAspectRatio Whether the closed caption service is formatted for displays with 16:9 - * aspect ratio. - * @return Initialization data for formats with MIME type {@link MimeTypes#APPLICATION_CEA708}. - */ - public static List getCea708InitializationData(boolean isWideAspectRatio) { - return Collections.singletonList(isWideAspectRatio ? new byte[] {1} : new byte[] {0}); - } - - /** - * Returns whether the closed caption service with the given initialization data is formatted for - * displays with 16:9 aspect ratio. - * - * @param initializationData The initialization data to parse. - * @return Whether the closed caption service is formatted for displays with 16:9 aspect ratio. - */ - public static boolean getIsWideAspectRatio(List initializationData) { - return initializationData.size() == 1 - && initializationData.get(0).length == 1 - && initializationData.get(0)[0] == 1; - } - /** * Consumes the unescaped content of an SEI NAL unit, writing the content of any CEA-608 messages * as samples to all of the provided outputs. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java index d5375cca96..19dbe6bc69 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4Extractor.java @@ -25,6 +25,7 @@ import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.audio.Ac4Util; import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.drm.DrmInitData.SchemeData; +import com.google.android.exoplayer2.extractor.CeaUtil; import com.google.android.exoplayer2.extractor.ChunkIndex; import com.google.android.exoplayer2.extractor.Extractor; import com.google.android.exoplayer2.extractor.ExtractorInput; @@ -38,7 +39,6 @@ import com.google.android.exoplayer2.extractor.mp4.Atom.LeafAtom; import com.google.android.exoplayer2.metadata.emsg.EventMessage; import com.google.android.exoplayer2.metadata.emsg.EventMessageEncoder; import com.google.android.exoplayer2.util.Assertions; -import com.google.android.exoplayer2.util.CeaUtil; import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.NalUnitUtil; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory.java index dcfa8ba9e9..ad1e8cc264 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/DefaultTsPayloadReaderFactory.java @@ -20,7 +20,7 @@ import androidx.annotation.IntDef; import androidx.annotation.Nullable; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.EsInfo; -import com.google.android.exoplayer2.util.CeaUtil; +import com.google.android.exoplayer2.util.CodecSpecificDataUtil; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.ParsableByteArray; import java.lang.annotation.Documented; @@ -253,7 +253,8 @@ public final class DefaultTsPayloadReaderFactory implements TsPayloadReader.Fact // The wide_aspect_ratio flag only has meaning for CEA-708. if (isDigital) { boolean isWideAspectRatio = (flags & 0x40) != 0; - initializationData = CeaUtil.getCea708InitializationData(isWideAspectRatio); + initializationData = + CodecSpecificDataUtil.buildCea708InitializationData(isWideAspectRatio); } closedCaptionFormats.add( diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/SeiReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/SeiReader.java index 6d7196ead1..38db71565a 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/SeiReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/SeiReader.java @@ -18,11 +18,11 @@ package com.google.android.exoplayer2.extractor.ts; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.extractor.CeaUtil; import com.google.android.exoplayer2.extractor.ExtractorOutput; import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.TrackIdGenerator; import com.google.android.exoplayer2.util.Assertions; -import com.google.android.exoplayer2.util.CeaUtil; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.ParsableByteArray; import java.util.List; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/UserDataReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/UserDataReader.java index 3b20af1431..64f9a9d128 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/UserDataReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/ts/UserDataReader.java @@ -18,10 +18,10 @@ package com.google.android.exoplayer2.extractor.ts; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.extractor.CeaUtil; import com.google.android.exoplayer2.extractor.ExtractorOutput; import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.util.Assertions; -import com.google.android.exoplayer2.util.CeaUtil; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.ParsableByteArray; import java.util.List; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java b/library/core/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java index a3398894d0..182fe7a2fe 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/cea/Cea708Decoder.java @@ -34,7 +34,7 @@ import com.google.android.exoplayer2.text.Subtitle; import com.google.android.exoplayer2.text.SubtitleDecoder; import com.google.android.exoplayer2.text.SubtitleInputBuffer; import com.google.android.exoplayer2.util.Assertions; -import com.google.android.exoplayer2.util.CeaUtil; +import com.google.android.exoplayer2.util.CodecSpecificDataUtil; import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.ParsableBitArray; import com.google.android.exoplayer2.util.ParsableByteArray; @@ -164,7 +164,8 @@ public final class Cea708Decoder extends CeaDecoder { serviceBlockPacket = new ParsableBitArray(); selectedServiceNumber = accessibilityChannel == Format.NO_VALUE ? 1 : accessibilityChannel; isWideAspectRatio = - initializationData != null && CeaUtil.getIsWideAspectRatio(initializationData); + initializationData != null + && CodecSpecificDataUtil.parseCea708InitializationData(initializationData); cueInfoBuilders = new CueInfoBuilder[NUM_WINDOWS]; for (int i = 0; i < NUM_WINDOWS; i++) { diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/CodecSpecificDataUtil.java b/library/core/src/main/java/com/google/android/exoplayer2/util/CodecSpecificDataUtil.java index 3372f23971..4a2959a5c8 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/CodecSpecificDataUtil.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/CodecSpecificDataUtil.java @@ -20,6 +20,7 @@ import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ParserException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -221,6 +222,31 @@ public final class CodecSpecificDataUtil { return Pair.create(sampleRate, channelCount); } + /** + * Returns initialization data for formats with MIME type {@link MimeTypes#APPLICATION_CEA708}. + * + * @param isWideAspectRatio Whether the CEA-708 closed caption service is formatted for displays + * with 16:9 aspect ratio. + * @return Initialization data for formats with MIME type {@link MimeTypes#APPLICATION_CEA708}. + */ + public static List buildCea708InitializationData(boolean isWideAspectRatio) { + return Collections.singletonList(isWideAspectRatio ? new byte[] {1} : new byte[] {0}); + } + + /** + * Returns whether the CEA-708 closed caption service with the given initialization data is + * formatted for displays with 16:9 aspect ratio. + * + * @param initializationData The initialization data to parse. + * @return Whether the CEA-708 closed caption service is formatted for displays with 16:9 aspect + * ratio. + */ + public static boolean parseCea708InitializationData(List initializationData) { + return initializationData.size() == 1 + && initializationData.get(0).length == 1 + && initializationData.get(0)[0] == 1; + } + /** * Builds an RFC 6381 AVC codec string using the provided parameters. * @@ -380,5 +406,4 @@ public final class CodecSpecificDataUtil { bitArray.skipBits(1); // extensionFlag3. } } - }