mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Move CeaUtil to extractors package
CeaUtil depends on TrackOutput so should live in the extractors package. To avoid having Cea708Decoder depend on extractors, this change also moves the initialization data building/parsing to CodecSpecificDataUtil. PiperOrigin-RevId: 291348317
This commit is contained in:
parent
e73b5429db
commit
01bc853993
@ -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<byte[]> 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<byte[]> 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.
|
@ -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;
|
||||
|
@ -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(
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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++) {
|
||||
|
@ -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<byte[]> 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<byte[]> 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.
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user