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

View File

@ -517,11 +517,11 @@ public final class TsExtractor implements Extractor {
dvbSubtitleInfos = new ArrayList<>();
while (data.getPosition() < positionOfNextDescriptor) {
String dvbLanguage = data.readString(3).trim();
int dvbProgramElementType = data.readUnsignedByte();
int dvbSubtitlingType = data.readUnsignedByte();
byte[] initializationData = new byte[4];
data.readBytes(initializationData, 0, 4);
dvbSubtitleInfos.add(new DvbSubtitleInfo(dvbLanguage, dvbProgramElementType,
Collections.singletonList(initializationData)));
dvbSubtitleInfos.add(new DvbSubtitleInfo(dvbLanguage, dvbSubtitlingType,
initializationData));
}
}
// 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.util.ParsableByteArray;
import com.google.android.exoplayer2.util.TimestampAdjuster;
import java.util.Collections;
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 {
public final String language;
public final int programElementType;
public final List<byte[]> initializationData;
public final int type;
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.programElementType = programElementType;
this.type = type;
this.initializationData = initializationData;
}