Merge pull request #6836 from DolbyLaboratories:dev-v2-refineAC4
PiperOrigin-RevId: 288772277
This commit is contained in:
commit
4f15cfaa78
@ -57,6 +57,11 @@ public final class Ac4Util {
|
||||
/** The channel count of AC-4 stream. */
|
||||
// TODO: Parse AC-4 stream channel count.
|
||||
private static final int CHANNEL_COUNT_2 = 2;
|
||||
/**
|
||||
* The AC-4 sync frame header size for extractor. The seven bytes are 0xAC, 0x40, 0xFF, 0xFF,
|
||||
* sizeByte1, sizeByte2, sizeByte3. See ETSI TS 103 190-1 V1.3.1, Annex G
|
||||
*/
|
||||
public static final int SAMPLE_HEADER_SIZE = 7;
|
||||
/**
|
||||
* The header size for AC-4 parser. Only needs to be as big as we need to read, not the full
|
||||
* header size.
|
||||
@ -218,7 +223,7 @@ public final class Ac4Util {
|
||||
/** Populates {@code buffer} with an AC-4 sample header for a sample of the specified size. */
|
||||
public static void getAc4SampleHeader(int size, ParsableByteArray buffer) {
|
||||
// See ETSI TS 103 190-1 V1.3.1, Annex G.
|
||||
buffer.reset(/* limit= */ 7);
|
||||
buffer.reset(SAMPLE_HEADER_SIZE);
|
||||
buffer.data[0] = (byte) 0xAC;
|
||||
buffer.data[1] = 0x40;
|
||||
buffer.data[2] = (byte) 0xFF;
|
||||
|
@ -168,7 +168,6 @@ public class FragmentedMp4Extractor implements Extractor {
|
||||
private int sampleBytesWritten;
|
||||
private int sampleCurrentNalBytesRemaining;
|
||||
private boolean processSeiNalUnitPayload;
|
||||
private boolean isAc4HeaderRequired;
|
||||
|
||||
// Extractor output.
|
||||
@MonotonicNonNull private ExtractorOutput extractorOutput;
|
||||
@ -302,7 +301,6 @@ public class FragmentedMp4Extractor implements Extractor {
|
||||
pendingMetadataSampleBytes = 0;
|
||||
pendingSeekTimeUs = timeUs;
|
||||
containerAtoms.clear();
|
||||
isAc4HeaderRequired = false;
|
||||
enterReadingAtomHeaderState();
|
||||
}
|
||||
|
||||
@ -1269,10 +1267,14 @@ public class FragmentedMp4Extractor implements Extractor {
|
||||
}
|
||||
sampleBytesWritten = currentTrackBundle.outputSampleEncryptionData();
|
||||
sampleSize += sampleBytesWritten;
|
||||
if (MimeTypes.AUDIO_AC4.equals(currentTrackBundle.track.format.sampleMimeType)) {
|
||||
Ac4Util.getAc4SampleHeader(sampleSize, scratch);
|
||||
currentTrackBundle.output.sampleData(scratch, Ac4Util.SAMPLE_HEADER_SIZE);
|
||||
sampleBytesWritten += Ac4Util.SAMPLE_HEADER_SIZE;
|
||||
sampleSize += Ac4Util.SAMPLE_HEADER_SIZE;
|
||||
}
|
||||
parserState = STATE_READING_SAMPLE_CONTINUE;
|
||||
sampleCurrentNalBytesRemaining = 0;
|
||||
isAc4HeaderRequired =
|
||||
MimeTypes.AUDIO_AC4.equals(currentTrackBundle.track.format.sampleMimeType);
|
||||
}
|
||||
|
||||
TrackFragment fragment = currentTrackBundle.fragment;
|
||||
@ -1337,14 +1339,6 @@ public class FragmentedMp4Extractor implements Extractor {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isAc4HeaderRequired) {
|
||||
Ac4Util.getAc4SampleHeader(sampleSize, scratch);
|
||||
int length = scratch.limit();
|
||||
output.sampleData(scratch, length);
|
||||
sampleSize += length;
|
||||
sampleBytesWritten += length;
|
||||
isAc4HeaderRequired = false;
|
||||
}
|
||||
while (sampleBytesWritten < sampleSize) {
|
||||
int writtenBytes = output.sampleData(input, sampleSize - sampleBytesWritten, false);
|
||||
sampleBytesWritten += writtenBytes;
|
||||
|
@ -110,9 +110,9 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
@Nullable private ParsableByteArray atomData;
|
||||
|
||||
private int sampleTrackIndex;
|
||||
private int sampleBytesRead;
|
||||
private int sampleBytesWritten;
|
||||
private int sampleCurrentNalBytesRemaining;
|
||||
private boolean isAc4HeaderRequired;
|
||||
|
||||
// Extractor outputs.
|
||||
@MonotonicNonNull private ExtractorOutput extractorOutput;
|
||||
@ -160,9 +160,9 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
containerAtoms.clear();
|
||||
atomHeaderBytesRead = 0;
|
||||
sampleTrackIndex = C.INDEX_UNSET;
|
||||
sampleBytesRead = 0;
|
||||
sampleBytesWritten = 0;
|
||||
sampleCurrentNalBytesRemaining = 0;
|
||||
isAc4HeaderRequired = false;
|
||||
if (position == 0) {
|
||||
enterReadingAtomHeaderState();
|
||||
} else if (tracks != null) {
|
||||
@ -507,15 +507,13 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
if (sampleTrackIndex == C.INDEX_UNSET) {
|
||||
return RESULT_END_OF_INPUT;
|
||||
}
|
||||
isAc4HeaderRequired =
|
||||
MimeTypes.AUDIO_AC4.equals(tracks[sampleTrackIndex].track.format.sampleMimeType);
|
||||
}
|
||||
Mp4Track track = tracks[sampleTrackIndex];
|
||||
TrackOutput trackOutput = track.trackOutput;
|
||||
int sampleIndex = track.sampleIndex;
|
||||
long position = track.sampleTable.offsets[sampleIndex];
|
||||
int sampleSize = track.sampleTable.sizes[sampleIndex];
|
||||
long skipAmount = position - inputPosition + sampleBytesWritten;
|
||||
long skipAmount = position - inputPosition + sampleBytesRead;
|
||||
if (skipAmount < 0 || skipAmount >= RELOAD_MINIMUM_SEEK_DISTANCE) {
|
||||
positionHolder.position = position;
|
||||
return RESULT_SEEK;
|
||||
@ -543,6 +541,7 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
if (sampleCurrentNalBytesRemaining == 0) {
|
||||
// Read the NAL length so that we know where we find the next one.
|
||||
input.readFully(nalLengthData, nalUnitLengthFieldLengthDiff, nalUnitLengthFieldLength);
|
||||
sampleBytesRead += nalUnitLengthFieldLength;
|
||||
nalLength.setPosition(0);
|
||||
int nalLengthInt = nalLength.readInt();
|
||||
if (nalLengthInt < 0) {
|
||||
@ -557,21 +556,23 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
} else {
|
||||
// Write the payload of the NAL unit.
|
||||
int writtenBytes = trackOutput.sampleData(input, sampleCurrentNalBytesRemaining, false);
|
||||
sampleBytesRead += writtenBytes;
|
||||
sampleBytesWritten += writtenBytes;
|
||||
sampleCurrentNalBytesRemaining -= writtenBytes;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (isAc4HeaderRequired) {
|
||||
Ac4Util.getAc4SampleHeader(sampleSize, scratch);
|
||||
int length = scratch.limit();
|
||||
trackOutput.sampleData(scratch, length);
|
||||
sampleSize += length;
|
||||
sampleBytesWritten += length;
|
||||
isAc4HeaderRequired = false;
|
||||
if (MimeTypes.AUDIO_AC4.equals(track.track.format.sampleMimeType)) {
|
||||
if (sampleBytesWritten == 0) {
|
||||
Ac4Util.getAc4SampleHeader(sampleSize, scratch);
|
||||
trackOutput.sampleData(scratch, Ac4Util.SAMPLE_HEADER_SIZE);
|
||||
sampleBytesWritten += Ac4Util.SAMPLE_HEADER_SIZE;
|
||||
}
|
||||
sampleSize += Ac4Util.SAMPLE_HEADER_SIZE;
|
||||
}
|
||||
while (sampleBytesWritten < sampleSize) {
|
||||
int writtenBytes = trackOutput.sampleData(input, sampleSize - sampleBytesWritten, false);
|
||||
sampleBytesRead += writtenBytes;
|
||||
sampleBytesWritten += writtenBytes;
|
||||
sampleCurrentNalBytesRemaining -= writtenBytes;
|
||||
}
|
||||
@ -580,6 +581,7 @@ public final class Mp4Extractor implements Extractor, SeekMap {
|
||||
track.sampleTable.flags[sampleIndex], sampleSize, 0, null);
|
||||
track.sampleIndex++;
|
||||
sampleTrackIndex = C.INDEX_UNSET;
|
||||
sampleBytesRead = 0;
|
||||
sampleBytesWritten = 0;
|
||||
sampleCurrentNalBytesRemaining = 0;
|
||||
return RESULT_CONTINUE;
|
||||
|
BIN
library/core/src/test/assets/mp4/sample_ac4.mp4
Normal file
BIN
library/core/src/test/assets/mp4/sample_ac4.mp4
Normal file
Binary file not shown.
107
library/core/src/test/assets/mp4/sample_ac4.mp4.0.dump
Normal file
107
library/core/src/test/assets/mp4/sample_ac4.mp4.0.dump
Normal file
@ -0,0 +1,107 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=758]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = 622
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 7613
|
||||
sample count = 19
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 367, hash D2762FA
|
||||
sample 1:
|
||||
time = 40000
|
||||
flags = 0
|
||||
data = length 367, hash BDD3224A
|
||||
sample 2:
|
||||
time = 80000
|
||||
flags = 0
|
||||
data = length 367, hash 9302227B
|
||||
sample 3:
|
||||
time = 120000
|
||||
flags = 0
|
||||
data = length 367, hash 72996003
|
||||
sample 4:
|
||||
time = 160000
|
||||
flags = 0
|
||||
data = length 367, hash 88AE5A1B
|
||||
sample 5:
|
||||
time = 200000
|
||||
flags = 0
|
||||
data = length 367, hash E5346FE3
|
||||
sample 6:
|
||||
time = 240000
|
||||
flags = 0
|
||||
data = length 367, hash CE558362
|
||||
sample 7:
|
||||
time = 280000
|
||||
flags = 0
|
||||
data = length 367, hash 51AD3043
|
||||
sample 8:
|
||||
time = 320000
|
||||
flags = 0
|
||||
data = length 367, hash EB72E95B
|
||||
sample 9:
|
||||
time = 360000
|
||||
flags = 0
|
||||
data = length 367, hash 47F8FF23
|
||||
sample 10:
|
||||
time = 400000
|
||||
flags = 0
|
||||
data = length 367, hash 8133883D
|
||||
sample 11:
|
||||
time = 440000
|
||||
flags = 0
|
||||
data = length 495, hash E14BDFEE
|
||||
sample 12:
|
||||
time = 480000
|
||||
flags = 0
|
||||
data = length 520, hash FEE56928
|
||||
sample 13:
|
||||
time = 519999
|
||||
flags = 0
|
||||
data = length 599, hash 41F496C5
|
||||
sample 14:
|
||||
time = 560000
|
||||
flags = 0
|
||||
data = length 436, hash 76D6404
|
||||
sample 15:
|
||||
time = 600000
|
||||
flags = 0
|
||||
data = length 366, hash 56D49D4D
|
||||
sample 16:
|
||||
time = 640000
|
||||
flags = 0
|
||||
data = length 393, hash 822FC8
|
||||
sample 17:
|
||||
time = 680000
|
||||
flags = 0
|
||||
data = length 374, hash FA8AE217
|
||||
sample 18:
|
||||
time = 720000
|
||||
flags = 536870912
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
107
library/core/src/test/assets/mp4/sample_ac4.mp4.1.dump
Normal file
107
library/core/src/test/assets/mp4/sample_ac4.mp4.1.dump
Normal file
@ -0,0 +1,107 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=758]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = 622
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 7613
|
||||
sample count = 19
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 367, hash D2762FA
|
||||
sample 1:
|
||||
time = 40000
|
||||
flags = 0
|
||||
data = length 367, hash BDD3224A
|
||||
sample 2:
|
||||
time = 80000
|
||||
flags = 0
|
||||
data = length 367, hash 9302227B
|
||||
sample 3:
|
||||
time = 120000
|
||||
flags = 0
|
||||
data = length 367, hash 72996003
|
||||
sample 4:
|
||||
time = 160000
|
||||
flags = 0
|
||||
data = length 367, hash 88AE5A1B
|
||||
sample 5:
|
||||
time = 200000
|
||||
flags = 0
|
||||
data = length 367, hash E5346FE3
|
||||
sample 6:
|
||||
time = 240000
|
||||
flags = 0
|
||||
data = length 367, hash CE558362
|
||||
sample 7:
|
||||
time = 280000
|
||||
flags = 0
|
||||
data = length 367, hash 51AD3043
|
||||
sample 8:
|
||||
time = 320000
|
||||
flags = 0
|
||||
data = length 367, hash EB72E95B
|
||||
sample 9:
|
||||
time = 360000
|
||||
flags = 0
|
||||
data = length 367, hash 47F8FF23
|
||||
sample 10:
|
||||
time = 400000
|
||||
flags = 0
|
||||
data = length 367, hash 8133883D
|
||||
sample 11:
|
||||
time = 440000
|
||||
flags = 0
|
||||
data = length 495, hash E14BDFEE
|
||||
sample 12:
|
||||
time = 480000
|
||||
flags = 0
|
||||
data = length 520, hash FEE56928
|
||||
sample 13:
|
||||
time = 519999
|
||||
flags = 0
|
||||
data = length 599, hash 41F496C5
|
||||
sample 14:
|
||||
time = 560000
|
||||
flags = 0
|
||||
data = length 436, hash 76D6404
|
||||
sample 15:
|
||||
time = 600000
|
||||
flags = 0
|
||||
data = length 366, hash 56D49D4D
|
||||
sample 16:
|
||||
time = 640000
|
||||
flags = 0
|
||||
data = length 393, hash 822FC8
|
||||
sample 17:
|
||||
time = 680000
|
||||
flags = 0
|
||||
data = length 374, hash FA8AE217
|
||||
sample 18:
|
||||
time = 720000
|
||||
flags = 536870912
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
107
library/core/src/test/assets/mp4/sample_ac4.mp4.2.dump
Normal file
107
library/core/src/test/assets/mp4/sample_ac4.mp4.2.dump
Normal file
@ -0,0 +1,107 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=758]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = 622
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 7613
|
||||
sample count = 19
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 367, hash D2762FA
|
||||
sample 1:
|
||||
time = 40000
|
||||
flags = 0
|
||||
data = length 367, hash BDD3224A
|
||||
sample 2:
|
||||
time = 80000
|
||||
flags = 0
|
||||
data = length 367, hash 9302227B
|
||||
sample 3:
|
||||
time = 120000
|
||||
flags = 0
|
||||
data = length 367, hash 72996003
|
||||
sample 4:
|
||||
time = 160000
|
||||
flags = 0
|
||||
data = length 367, hash 88AE5A1B
|
||||
sample 5:
|
||||
time = 200000
|
||||
flags = 0
|
||||
data = length 367, hash E5346FE3
|
||||
sample 6:
|
||||
time = 240000
|
||||
flags = 0
|
||||
data = length 367, hash CE558362
|
||||
sample 7:
|
||||
time = 280000
|
||||
flags = 0
|
||||
data = length 367, hash 51AD3043
|
||||
sample 8:
|
||||
time = 320000
|
||||
flags = 0
|
||||
data = length 367, hash EB72E95B
|
||||
sample 9:
|
||||
time = 360000
|
||||
flags = 0
|
||||
data = length 367, hash 47F8FF23
|
||||
sample 10:
|
||||
time = 400000
|
||||
flags = 0
|
||||
data = length 367, hash 8133883D
|
||||
sample 11:
|
||||
time = 440000
|
||||
flags = 0
|
||||
data = length 495, hash E14BDFEE
|
||||
sample 12:
|
||||
time = 480000
|
||||
flags = 0
|
||||
data = length 520, hash FEE56928
|
||||
sample 13:
|
||||
time = 519999
|
||||
flags = 0
|
||||
data = length 599, hash 41F496C5
|
||||
sample 14:
|
||||
time = 560000
|
||||
flags = 0
|
||||
data = length 436, hash 76D6404
|
||||
sample 15:
|
||||
time = 600000
|
||||
flags = 0
|
||||
data = length 366, hash 56D49D4D
|
||||
sample 16:
|
||||
time = 640000
|
||||
flags = 0
|
||||
data = length 393, hash 822FC8
|
||||
sample 17:
|
||||
time = 680000
|
||||
flags = 0
|
||||
data = length 374, hash FA8AE217
|
||||
sample 18:
|
||||
time = 720000
|
||||
flags = 536870912
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
107
library/core/src/test/assets/mp4/sample_ac4.mp4.3.dump
Normal file
107
library/core/src/test/assets/mp4/sample_ac4.mp4.3.dump
Normal file
@ -0,0 +1,107 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=758]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = 622
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 7613
|
||||
sample count = 19
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 367, hash D2762FA
|
||||
sample 1:
|
||||
time = 40000
|
||||
flags = 0
|
||||
data = length 367, hash BDD3224A
|
||||
sample 2:
|
||||
time = 80000
|
||||
flags = 0
|
||||
data = length 367, hash 9302227B
|
||||
sample 3:
|
||||
time = 120000
|
||||
flags = 0
|
||||
data = length 367, hash 72996003
|
||||
sample 4:
|
||||
time = 160000
|
||||
flags = 0
|
||||
data = length 367, hash 88AE5A1B
|
||||
sample 5:
|
||||
time = 200000
|
||||
flags = 0
|
||||
data = length 367, hash E5346FE3
|
||||
sample 6:
|
||||
time = 240000
|
||||
flags = 0
|
||||
data = length 367, hash CE558362
|
||||
sample 7:
|
||||
time = 280000
|
||||
flags = 0
|
||||
data = length 367, hash 51AD3043
|
||||
sample 8:
|
||||
time = 320000
|
||||
flags = 0
|
||||
data = length 367, hash EB72E95B
|
||||
sample 9:
|
||||
time = 360000
|
||||
flags = 0
|
||||
data = length 367, hash 47F8FF23
|
||||
sample 10:
|
||||
time = 400000
|
||||
flags = 0
|
||||
data = length 367, hash 8133883D
|
||||
sample 11:
|
||||
time = 440000
|
||||
flags = 0
|
||||
data = length 495, hash E14BDFEE
|
||||
sample 12:
|
||||
time = 480000
|
||||
flags = 0
|
||||
data = length 520, hash FEE56928
|
||||
sample 13:
|
||||
time = 519999
|
||||
flags = 0
|
||||
data = length 599, hash 41F496C5
|
||||
sample 14:
|
||||
time = 560000
|
||||
flags = 0
|
||||
data = length 436, hash 76D6404
|
||||
sample 15:
|
||||
time = 600000
|
||||
flags = 0
|
||||
data = length 366, hash 56D49D4D
|
||||
sample 16:
|
||||
time = 640000
|
||||
flags = 0
|
||||
data = length 393, hash 822FC8
|
||||
sample 17:
|
||||
time = 680000
|
||||
flags = 0
|
||||
data = length 374, hash FA8AE217
|
||||
sample 18:
|
||||
time = 720000
|
||||
flags = 536870912
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
BIN
library/core/src/test/assets/mp4/sample_ac4_fragmented.mp4
Normal file
BIN
library/core/src/test/assets/mp4/sample_ac4_fragmented.mp4
Normal file
Binary file not shown.
@ -0,0 +1,107 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=685]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = -1
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 7613
|
||||
sample count = 19
|
||||
sample 0:
|
||||
time = 0
|
||||
flags = 1
|
||||
data = length 367, hash D2762FA
|
||||
sample 1:
|
||||
time = 40000
|
||||
flags = 1
|
||||
data = length 367, hash BDD3224A
|
||||
sample 2:
|
||||
time = 80000
|
||||
flags = 1
|
||||
data = length 367, hash 9302227B
|
||||
sample 3:
|
||||
time = 120000
|
||||
flags = 1
|
||||
data = length 367, hash 72996003
|
||||
sample 4:
|
||||
time = 160000
|
||||
flags = 1
|
||||
data = length 367, hash 88AE5A1B
|
||||
sample 5:
|
||||
time = 200000
|
||||
flags = 1
|
||||
data = length 367, hash E5346FE3
|
||||
sample 6:
|
||||
time = 240000
|
||||
flags = 1
|
||||
data = length 367, hash CE558362
|
||||
sample 7:
|
||||
time = 280000
|
||||
flags = 1
|
||||
data = length 367, hash 51AD3043
|
||||
sample 8:
|
||||
time = 320000
|
||||
flags = 1
|
||||
data = length 367, hash EB72E95B
|
||||
sample 9:
|
||||
time = 360000
|
||||
flags = 1
|
||||
data = length 367, hash 47F8FF23
|
||||
sample 10:
|
||||
time = 400000
|
||||
flags = 1
|
||||
data = length 367, hash 8133883D
|
||||
sample 11:
|
||||
time = 440000
|
||||
flags = 1
|
||||
data = length 495, hash E14BDFEE
|
||||
sample 12:
|
||||
time = 480000
|
||||
flags = 1
|
||||
data = length 520, hash FEE56928
|
||||
sample 13:
|
||||
time = 520000
|
||||
flags = 1
|
||||
data = length 599, hash 41F496C5
|
||||
sample 14:
|
||||
time = 560000
|
||||
flags = 1
|
||||
data = length 436, hash 76D6404
|
||||
sample 15:
|
||||
time = 600000
|
||||
flags = 1
|
||||
data = length 366, hash 56D49D4D
|
||||
sample 16:
|
||||
time = 640000
|
||||
flags = 1
|
||||
data = length 393, hash 822FC8
|
||||
sample 17:
|
||||
time = 680000
|
||||
flags = 1
|
||||
data = length 374, hash FA8AE217
|
||||
sample 18:
|
||||
time = 720000
|
||||
flags = 1
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
@ -0,0 +1,83 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=685]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = -1
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 5411
|
||||
sample count = 13
|
||||
sample 0:
|
||||
time = 240000
|
||||
flags = 1
|
||||
data = length 367, hash CE558362
|
||||
sample 1:
|
||||
time = 280000
|
||||
flags = 1
|
||||
data = length 367, hash 51AD3043
|
||||
sample 2:
|
||||
time = 320000
|
||||
flags = 1
|
||||
data = length 367, hash EB72E95B
|
||||
sample 3:
|
||||
time = 360000
|
||||
flags = 1
|
||||
data = length 367, hash 47F8FF23
|
||||
sample 4:
|
||||
time = 400000
|
||||
flags = 1
|
||||
data = length 367, hash 8133883D
|
||||
sample 5:
|
||||
time = 440000
|
||||
flags = 1
|
||||
data = length 495, hash E14BDFEE
|
||||
sample 6:
|
||||
time = 480000
|
||||
flags = 1
|
||||
data = length 520, hash FEE56928
|
||||
sample 7:
|
||||
time = 520000
|
||||
flags = 1
|
||||
data = length 599, hash 41F496C5
|
||||
sample 8:
|
||||
time = 560000
|
||||
flags = 1
|
||||
data = length 436, hash 76D6404
|
||||
sample 9:
|
||||
time = 600000
|
||||
flags = 1
|
||||
data = length 366, hash 56D49D4D
|
||||
sample 10:
|
||||
time = 640000
|
||||
flags = 1
|
||||
data = length 393, hash 822FC8
|
||||
sample 11:
|
||||
time = 680000
|
||||
flags = 1
|
||||
data = length 374, hash FA8AE217
|
||||
sample 12:
|
||||
time = 720000
|
||||
flags = 1
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
@ -0,0 +1,59 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=685]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = -1
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 3081
|
||||
sample count = 7
|
||||
sample 0:
|
||||
time = 480000
|
||||
flags = 1
|
||||
data = length 520, hash FEE56928
|
||||
sample 1:
|
||||
time = 520000
|
||||
flags = 1
|
||||
data = length 599, hash 41F496C5
|
||||
sample 2:
|
||||
time = 560000
|
||||
flags = 1
|
||||
data = length 436, hash 76D6404
|
||||
sample 3:
|
||||
time = 600000
|
||||
flags = 1
|
||||
data = length 366, hash 56D49D4D
|
||||
sample 4:
|
||||
time = 640000
|
||||
flags = 1
|
||||
data = length 393, hash 822FC8
|
||||
sample 5:
|
||||
time = 680000
|
||||
flags = 1
|
||||
data = length 374, hash FA8AE217
|
||||
sample 6:
|
||||
time = 720000
|
||||
flags = 1
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
@ -0,0 +1,35 @@
|
||||
seekMap:
|
||||
isSeekable = true
|
||||
duration = 760000
|
||||
getPosition(0) = [[timeUs=0, position=685]]
|
||||
numberOfTracks = 1
|
||||
track 0:
|
||||
format:
|
||||
bitrate = -1
|
||||
id = 1
|
||||
containerMimeType = null
|
||||
sampleMimeType = audio/ac4
|
||||
maxInputSize = -1
|
||||
width = -1
|
||||
height = -1
|
||||
frameRate = -1.0
|
||||
rotationDegrees = 0
|
||||
pixelWidthHeightRatio = 1.0
|
||||
channelCount = 2
|
||||
sampleRate = 48000
|
||||
pcmEncoding = -1
|
||||
encoderDelay = 0
|
||||
encoderPadding = 0
|
||||
subsampleOffsetUs = 9223372036854775807
|
||||
selectionFlags = 0
|
||||
language = und
|
||||
drmInitData = -
|
||||
metadata = null
|
||||
initializationData:
|
||||
total output bytes = 393
|
||||
sample count = 1
|
||||
sample 0:
|
||||
time = 720000
|
||||
flags = 1
|
||||
data = length 393, hash 8506A1B
|
||||
tracksEnded = true
|
@ -51,6 +51,12 @@ public final class FragmentedMp4ExtractorTest {
|
||||
ExtractorAsserts.assertBehavior(extractorFactory, "mp4/sample_fragmented_sei.mp4");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSampleWithAc4Track() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(
|
||||
getExtractorFactory(Collections.emptyList()), "mp4/sample_ac4_fragmented.mp4");
|
||||
}
|
||||
|
||||
private static ExtractorFactory getExtractorFactory(final List<Format> closedCaptionFormats) {
|
||||
return () -> new FragmentedMp4Extractor(0, null, null, null, closedCaptionFormats);
|
||||
}
|
||||
|
@ -42,4 +42,9 @@ public final class Mp4ExtractorTest {
|
||||
public void testMp4SampleWithMdatTooLong() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(Mp4Extractor::new, "mp4/sample_mdat_too_long.mp4");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMp4SampleWithAc4Track() throws Exception {
|
||||
ExtractorAsserts.assertBehavior(Mp4Extractor::new, "mp4/sample_ac4.mp4");
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user