Commit 96734144 by Oliver Woodman

Extract DTS samples in DASH, MP4 and Matroska.

parent bca2d16c
...@@ -57,6 +57,11 @@ import java.util.List; ...@@ -57,6 +57,11 @@ import java.util.List;
public static final int TYPE_dac3 = Util.getIntegerCodeForString("dac3"); public static final int TYPE_dac3 = Util.getIntegerCodeForString("dac3");
public static final int TYPE_ec_3 = Util.getIntegerCodeForString("ec-3"); public static final int TYPE_ec_3 = Util.getIntegerCodeForString("ec-3");
public static final int TYPE_dec3 = Util.getIntegerCodeForString("dec3"); public static final int TYPE_dec3 = Util.getIntegerCodeForString("dec3");
public static final int TYPE_dtsc = Util.getIntegerCodeForString("dtsc");
public static final int TYPE_dtsh = Util.getIntegerCodeForString("dtsh");
public static final int TYPE_dtsl = Util.getIntegerCodeForString("dtsl");
public static final int TYPE_dtse = Util.getIntegerCodeForString("dtse");
public static final int TYPE_ddts = Util.getIntegerCodeForString("ddts");
public static final int TYPE_tfdt = Util.getIntegerCodeForString("tfdt"); public static final int TYPE_tfdt = Util.getIntegerCodeForString("tfdt");
public static final int TYPE_tfhd = Util.getIntegerCodeForString("tfhd"); public static final int TYPE_tfhd = Util.getIntegerCodeForString("tfhd");
public static final int TYPE_trex = Util.getIntegerCodeForString("trex"); public static final int TYPE_trex = Util.getIntegerCodeForString("trex");
......
...@@ -372,7 +372,9 @@ import java.util.List; ...@@ -372,7 +372,9 @@ import java.util.List;
parseVideoSampleEntry(stsd, childStartPosition, childAtomSize, durationUs, rotationDegrees, parseVideoSampleEntry(stsd, childStartPosition, childAtomSize, durationUs, rotationDegrees,
out, i); out, i);
} else if (childAtomType == Atom.TYPE_mp4a || childAtomType == Atom.TYPE_enca } else if (childAtomType == Atom.TYPE_mp4a || childAtomType == Atom.TYPE_enca
|| childAtomType == Atom.TYPE_ac_3) { || childAtomType == Atom.TYPE_ac_3 || childAtomType == Atom.TYPE_ec_3
|| childAtomType == Atom.TYPE_dtsc || childAtomType == Atom.TYPE_dtse
|| childAtomType == Atom.TYPE_dtsh || childAtomType == Atom.TYPE_dtsl) {
parseAudioSampleEntry(stsd, childAtomType, childStartPosition, childAtomSize, durationUs, parseAudioSampleEntry(stsd, childAtomType, childStartPosition, childAtomSize, durationUs,
out, i); out, i);
} else if (childAtomType == Atom.TYPE_TTML) { } else if (childAtomType == Atom.TYPE_TTML) {
...@@ -597,6 +599,10 @@ import java.util.List; ...@@ -597,6 +599,10 @@ import java.util.List;
mimeType = MimeTypes.AUDIO_AC3; mimeType = MimeTypes.AUDIO_AC3;
} else if (atomType == Atom.TYPE_ec_3) { } else if (atomType == Atom.TYPE_ec_3) {
mimeType = MimeTypes.AUDIO_EC3; mimeType = MimeTypes.AUDIO_EC3;
} else if (atomType == Atom.TYPE_dtsc || atomType == Atom.TYPE_dtse) {
mimeType = MimeTypes.AUDIO_DTS;
} else if (atomType == Atom.TYPE_dtsh || atomType == Atom.TYPE_dtsl) {
mimeType = MimeTypes.AUDIO_DTS_HD;
} }
byte[] initializationData = null; byte[] initializationData = null;
...@@ -631,10 +637,16 @@ import java.util.List; ...@@ -631,10 +637,16 @@ import java.util.List;
parent.setPosition(Atom.HEADER_SIZE + childStartPosition); parent.setPosition(Atom.HEADER_SIZE + childStartPosition);
out.mediaFormat = Ac3Util.parseAnnexFAc3Format(parent); out.mediaFormat = Ac3Util.parseAnnexFAc3Format(parent);
return; return;
} else if (atomType == Atom.TYPE_ec_3 && childAtomType == Atom.TYPE_dec3) { } else if (atomType == Atom.TYPE_ec_3 && childAtomType == Atom.TYPE_dec3) {
parent.setPosition(Atom.HEADER_SIZE + childStartPosition); parent.setPosition(Atom.HEADER_SIZE + childStartPosition);
out.mediaFormat = Ac3Util.parseAnnexFEAc3Format(parent); out.mediaFormat = Ac3Util.parseAnnexFEAc3Format(parent);
return; return;
} else if ((atomType == Atom.TYPE_dtsc || atomType == Atom.TYPE_dtse
|| atomType == Atom.TYPE_dtsh || atomType == Atom.TYPE_dtsl)
&& childAtomType == Atom.TYPE_ddts) {
out.mediaFormat = MediaFormat.createAudioFormat(mimeType, MediaFormat.NO_VALUE,
MediaFormat.NO_VALUE, channelCount, sampleRate, null);
return;
} }
childPosition += childAtomSize; childPosition += childAtomSize;
} }
...@@ -684,7 +696,6 @@ import java.util.List; ...@@ -684,7 +696,6 @@ import java.util.List;
switch (objectTypeIndication) { switch (objectTypeIndication) {
case 0x6B: case 0x6B:
mimeType = MimeTypes.AUDIO_MPEG; mimeType = MimeTypes.AUDIO_MPEG;
// Don't extract codec-specific data for MPEG audio tracks, as it is not needed.
return Pair.create(mimeType, null); return Pair.create(mimeType, null);
case 0x20: case 0x20:
mimeType = MimeTypes.VIDEO_MP4V; mimeType = MimeTypes.VIDEO_MP4V;
...@@ -707,6 +718,14 @@ import java.util.List; ...@@ -707,6 +718,14 @@ import java.util.List;
case 0xA6: case 0xA6:
mimeType = MimeTypes.AUDIO_EC3; mimeType = MimeTypes.AUDIO_EC3;
break; break;
case 0xA9:
case 0xAC:
mimeType = MimeTypes.AUDIO_DTS;
return Pair.create(mimeType, null);
case 0xAA:
case 0xAB:
mimeType = MimeTypes.AUDIO_DTS_HD;
return Pair.create(mimeType, null);
default: default:
mimeType = null; mimeType = null;
break; break;
......
...@@ -74,6 +74,9 @@ public final class WebmExtractor implements Extractor { ...@@ -74,6 +74,9 @@ public final class WebmExtractor implements Extractor {
private static final String CODEC_ID_AAC = "A_AAC"; private static final String CODEC_ID_AAC = "A_AAC";
private static final String CODEC_ID_MP3 = "A_MPEG/L3"; private static final String CODEC_ID_MP3 = "A_MPEG/L3";
private static final String CODEC_ID_AC3 = "A_AC3"; private static final String CODEC_ID_AC3 = "A_AC3";
private static final String CODEC_ID_DTS = "A_DTS";
private static final String CODEC_ID_DTS_EXPRESS = "A_DTS/EXPRESS";
private static final String CODEC_ID_DTS_LOSSLESS = "A_DTS/LOSSLESS";
private static final String CODEC_ID_SUBRIP = "S_TEXT/UTF8"; private static final String CODEC_ID_SUBRIP = "S_TEXT/UTF8";
private static final int VORBIS_MAX_INPUT_SIZE = 8192; private static final int VORBIS_MAX_INPUT_SIZE = 8192;
...@@ -1035,6 +1038,9 @@ public final class WebmExtractor implements Extractor { ...@@ -1035,6 +1038,9 @@ public final class WebmExtractor implements Extractor {
|| CODEC_ID_AAC.equals(codecId) || CODEC_ID_AAC.equals(codecId)
|| CODEC_ID_MP3.equals(codecId) || CODEC_ID_MP3.equals(codecId)
|| CODEC_ID_AC3.equals(codecId) || CODEC_ID_AC3.equals(codecId)
|| CODEC_ID_DTS.equals(codecId)
|| CODEC_ID_DTS_EXPRESS.equals(codecId)
|| CODEC_ID_DTS_LOSSLESS.equals(codecId)
|| CODEC_ID_SUBRIP.equals(codecId); || CODEC_ID_SUBRIP.equals(codecId);
} }
...@@ -1187,6 +1193,13 @@ public final class WebmExtractor implements Extractor { ...@@ -1187,6 +1193,13 @@ public final class WebmExtractor implements Extractor {
case CODEC_ID_AC3: case CODEC_ID_AC3:
mimeType = MimeTypes.AUDIO_AC3; mimeType = MimeTypes.AUDIO_AC3;
break; break;
case CODEC_ID_DTS:
case CODEC_ID_DTS_EXPRESS:
mimeType = MimeTypes.AUDIO_DTS;
break;
case CODEC_ID_DTS_LOSSLESS:
mimeType = MimeTypes.AUDIO_DTS_HD;
break;
case CODEC_ID_SUBRIP: case CODEC_ID_SUBRIP:
mimeType = MimeTypes.APPLICATION_SUBRIP; mimeType = MimeTypes.APPLICATION_SUBRIP;
break; break;
......
...@@ -44,6 +44,8 @@ public final class MimeTypes { ...@@ -44,6 +44,8 @@ public final class MimeTypes {
public static final String AUDIO_RAW = BASE_TYPE_AUDIO + "/raw"; public static final String AUDIO_RAW = BASE_TYPE_AUDIO + "/raw";
public static final String AUDIO_AC3 = BASE_TYPE_AUDIO + "/ac3"; public static final String AUDIO_AC3 = BASE_TYPE_AUDIO + "/ac3";
public static final String AUDIO_EC3 = BASE_TYPE_AUDIO + "/eac3"; public static final String AUDIO_EC3 = BASE_TYPE_AUDIO + "/eac3";
public static final String AUDIO_DTS = BASE_TYPE_AUDIO + "/x-dts";
public static final String AUDIO_DTS_HD = BASE_TYPE_AUDIO + "/vnd.dts.hd";
public static final String AUDIO_VORBIS = BASE_TYPE_AUDIO + "/vorbis"; public static final String AUDIO_VORBIS = BASE_TYPE_AUDIO + "/vorbis";
public static final String AUDIO_OPUS = BASE_TYPE_AUDIO + "/opus"; public static final String AUDIO_OPUS = BASE_TYPE_AUDIO + "/opus";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment