Minor additional cleanup of multiple DVB subtitles per PID support

This commit is contained in:
Oliver Woodman 2017-04-25 16:41:04 +01:00
parent f903098721
commit c50cfd8345
3 changed files with 16 additions and 12 deletions

View File

@ -23,6 +23,7 @@ import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.DvbSubtitleInf
import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.TrackIdGenerator; import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.TrackIdGenerator;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.ParsableByteArray;
import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
@ -58,8 +59,8 @@ public final class DvbSubtitleReader implements ElementaryStreamReader {
idGenerator.generateNewId(); idGenerator.generateNewId();
TrackOutput output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_TEXT); TrackOutput output = extractorOutput.track(idGenerator.getTrackId(), C.TRACK_TYPE_TEXT);
output.format(Format.createImageSampleFormat(idGenerator.getFormatId(), output.format(Format.createImageSampleFormat(idGenerator.getFormatId(),
MimeTypes.APPLICATION_DVBSUBS, null, Format.NO_VALUE, subtitleInfo.initializationData, MimeTypes.APPLICATION_DVBSUBS, null, Format.NO_VALUE,
subtitleInfo.language, null)); Collections.singletonList(subtitleInfo.initializationData), subtitleInfo.language, null));
outputs[i] = output; outputs[i] = output;
} }
} }

View File

@ -517,11 +517,11 @@ public final class TsExtractor implements Extractor {
dvbSubtitleInfos = new ArrayList<>(); dvbSubtitleInfos = new ArrayList<>();
while (data.getPosition() < positionOfNextDescriptor) { while (data.getPosition() < positionOfNextDescriptor) {
String dvbLanguage = data.readString(3).trim(); String dvbLanguage = data.readString(3).trim();
int dvbProgramElementType = data.readUnsignedByte(); int dvbSubtitlingType = data.readUnsignedByte();
byte[] initializationData = new byte[4]; byte[] initializationData = new byte[4];
data.readBytes(initializationData, 0, 4); data.readBytes(initializationData, 0, 4);
dvbSubtitleInfos.add(new DvbSubtitleInfo(dvbLanguage, dvbProgramElementType, dvbSubtitleInfos.add(new DvbSubtitleInfo(dvbLanguage, dvbSubtitlingType,
Collections.singletonList(initializationData))); initializationData));
} }
} }
// Skip unused bytes of current descriptor. // Skip unused bytes of current descriptor.

View File

@ -20,7 +20,6 @@ import com.google.android.exoplayer2.extractor.ExtractorOutput;
import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.extractor.TrackOutput;
import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.android.exoplayer2.util.TimestampAdjuster; import com.google.android.exoplayer2.util.TimestampAdjuster;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -85,18 +84,22 @@ public interface TsPayloadReader {
} }
/** /**
* Holds information about a DVB subtitle. * Holds information about a DVB subtitle, as defined in ETSI EN 300 468 V1.11.1 section 6.2.41.
*/ */
final class DvbSubtitleInfo { final class DvbSubtitleInfo {
public final String language; public final String language;
public final int programElementType; public final int type;
public final List<byte[]> initializationData; public final byte[] initializationData;
public DvbSubtitleInfo(String language, int programElementType, /**
List<byte[]> initializationData) { * @param language The ISO 639-2 three character language.
* @param type The subtitling type.
* @param initializationData The composition and ancillary page ids.
*/
public DvbSubtitleInfo(String language, int type, byte[] initializationData) {
this.language = language; this.language = language;
this.programElementType = programElementType; this.type = type;
this.initializationData = initializationData; this.initializationData = initializationData;
} }