public static byte[] parseChildNalUnit(ParsableByteArray parsablebytearray) { int i = parsablebytearray.readUnsignedShort(); int j = parsablebytearray.getPosition(); parsablebytearray.skipBytes(i); return CodecSpecificDataUtil.buildNalUnit(parsablebytearray.data, j, i); }
/** * Returns the AC-3 format given {@code data} containing the AC3SpecificBox according to ETSI TS * 102 366 Annex F. */ public static MediaFormat parseAnnexFAc3Format(ParsableByteArray data) { // fscod (sample rate code) int fscod = (data.readUnsignedByte() & 0xC0) >> 6; int sampleRate = SAMPLE_RATES[fscod]; int nextByte = data.readUnsignedByte(); // Map acmod (audio coding mode) onto a channel count. int channelCount = CHANNEL_COUNTS[(nextByte & 0x38) >> 3]; // lfeon (low frequency effects on) if ((nextByte & 0x04) != 0) { channelCount++; } return MediaFormat.createAudioFormat( MimeTypes.AUDIO_AC3, MediaFormat.NO_VALUE, channelCount, sampleRate, null); }
/** * Returns the AC-3 format given {@code data} containing the EC3SpecificBox according to ETSI TS * 102 366 Annex F. */ public static MediaFormat parseAnnexFEAc3Format(ParsableByteArray data) { data.skipBytes(2); // Skip data_rate and num_ind_sub. // Read only the first substream. // TODO: Read later substreams? // fscod (sample rate code) int fscod = (data.readUnsignedByte() & 0xC0) >> 6; int sampleRate = SAMPLE_RATES[fscod]; int nextByte = data.readUnsignedByte(); // Map acmod (audio coding mode) onto a channel count. int channelCount = CHANNEL_COUNTS[(nextByte & 0x0E) >> 1]; // lfeon (low frequency effects on) if ((nextByte & 0x01) != 0) { channelCount++; } return MediaFormat.createAudioFormat( MimeTypes.AUDIO_EC3, MediaFormat.NO_VALUE, channelCount, sampleRate, null); }