if (bytes[offset] == (byte) 0xFF && (bytes[offset + 1] & (byte) 0xE0) == (byte) 0xE0) { try { MpegFrame frame = new MpegFrame(bytes[offset], bytes[offset + 1], bytes[offset + 2], bytes[offset + 3]); if (xingOffset < 0 && isXingFrame(bytes, offset)) { xingOffset = absoluteOffset + offset; xingBitrate = frame.getBitrate(); offset += frame.getLengthInBytes(); } else { startOffset = absoluteOffset + offset; channelMode = frame.getChannelMode(); emphasis = frame.getEmphasis(); layer = frame.getLayer(); modeExtension = frame.getModeExtension(); sampleRate = frame.getSampleRate(); version = frame.getVersion(); copyright = frame.isCopyright(); original = frame.isOriginal(); frameCount++; addBitrate(frame.getBitrate()); offset += frame.getLengthInBytes(); return offset;
private void setFields(long frameHeader) throws InvalidDataException { long frameSync = extractField(frameHeader, BITMASK_FRAME_SYNC); if (frameSync != FRAME_SYNC) throw new InvalidDataException("Frame sync missing"); setVersion(extractField(frameHeader, BITMASK_VERSION)); setLayer(extractField(frameHeader, BITMASK_LAYER)); setProtection(extractField(frameHeader, BITMASK_PROTECTION)); setBitRate(extractField(frameHeader, BITMASK_BITRATE)); setSampleRate(extractField(frameHeader, BITMASK_SAMPLE_RATE)); setPadding(extractField(frameHeader, BITMASK_PADDING)); setPrivate(extractField(frameHeader, BITMASK_PRIVATE)); setChannelMode(extractField(frameHeader, BITMASK_CHANNEL_MODE)); setModeExtension(extractField(frameHeader, BITMASK_MODE_EXTENSION)); setCopyright(extractField(frameHeader, BITMASK_COPYRIGHT)); setOriginal(extractField(frameHeader, BITMASK_ORIGINAL)); setEmphasis(extractField(frameHeader, BITMASK_EMPHASIS)); }
private int scanBlock(byte[] bytes, int bytesRead, int absoluteOffset, int offset) throws InvalidDataException { while (offset < bytesRead - MINIMUM_BUFFER_LENGTH) { MpegFrame frame = new MpegFrame(bytes[offset], bytes[offset + 1], bytes[offset + 2], bytes[offset + 3]); sanityCheckFrame(frame, absoluteOffset + offset); int newEndOffset = absoluteOffset + offset + frame.getLengthInBytes() - 1; if (newEndOffset < maxEndOffset()) { endOffset = absoluteOffset + offset + frame.getLengthInBytes() - 1; frameCount++; addBitrate(frame.getBitrate()); offset += frame.getLengthInBytes(); } else { break; } } return offset; }
private void sanityCheckFrame(MpegFrame frame, int offset) throws InvalidDataException { if (sampleRate != frame.getSampleRate()) throw new InvalidDataException("Inconsistent frame header"); if (!layer.equals(frame.getLayer())) throw new InvalidDataException("Inconsistent frame header"); if (!version.equals(frame.getVersion())) throw new InvalidDataException("Inconsistent frame header"); if (offset + frame.getLengthInBytes() > getLength()) throw new InvalidDataException("Frame would extend beyond end of file"); }
private void sanityCheckFrame(MpegFrame frame, int offset) throws InvalidDataException { if (sampleRate != frame.getSampleRate()) throw new InvalidDataException("Inconsistent frame header"); if (!layer.equals(frame.getLayer())) throw new InvalidDataException("Inconsistent frame header"); if (!version.equals(frame.getVersion())) throw new InvalidDataException("Inconsistent frame header"); if (offset + frame.getLengthInBytes() > getLength()) throw new InvalidDataException("Frame would extend beyond end of file"); }
private int scanBlock(byte[] bytes, int bytesRead, int absoluteOffset, int offset) throws InvalidDataException { while (offset < bytesRead - MINIMUM_BUFFER_LENGTH) { MpegFrame frame = new MpegFrame(bytes[offset], bytes[offset + 1], bytes[offset + 2], bytes[offset + 3]); sanityCheckFrame(frame, absoluteOffset + offset); int newEndOffset = absoluteOffset + offset + frame.getLengthInBytes() - 1; if (newEndOffset < maxEndOffset()) { endOffset = absoluteOffset + offset + frame.getLengthInBytes() - 1; frameCount++; addBitrate(frame.getBitrate()); offset += frame.getLengthInBytes(); } else { break; } } return offset; }
private void setFields(long frameHeader) throws InvalidDataException { long frameSync = extractField(frameHeader, BITMASK_FRAME_SYNC); if (frameSync != FRAME_SYNC) throw new InvalidDataException("Frame sync missing"); setVersion(extractField(frameHeader, BITMASK_VERSION)); setLayer(extractField(frameHeader, BITMASK_LAYER)); setProtection(extractField(frameHeader, BITMASK_PROTECTION)); setBitRate(extractField(frameHeader, BITMASK_BITRATE)); setSampleRate(extractField(frameHeader, BITMASK_SAMPLE_RATE)); setPadding(extractField(frameHeader, BITMASK_PADDING)); setPrivate(extractField(frameHeader, BITMASK_PRIVATE)); setChannelMode(extractField(frameHeader, BITMASK_CHANNEL_MODE)); setModeExtension(extractField(frameHeader, BITMASK_MODE_EXTENSION)); setCopyright(extractField(frameHeader, BITMASK_COPYRIGHT)); setOriginal(extractField(frameHeader, BITMASK_ORIGINAL)); setEmphasis(extractField(frameHeader, BITMASK_EMPHASIS)); }
if (bytes[offset] == (byte) 0xFF && (bytes[offset + 1] & (byte) 0xE0) == (byte) 0xE0) { try { MpegFrame frame = new MpegFrame(bytes[offset], bytes[offset + 1], bytes[offset + 2], bytes[offset + 3]); if (xingOffset < 0 && isXingFrame(bytes, offset)) { xingOffset = absoluteOffset + offset; xingBitrate = frame.getBitrate(); offset += frame.getLengthInBytes(); } else { startOffset = absoluteOffset + offset; channelMode = frame.getChannelMode(); emphasis = frame.getEmphasis(); layer = frame.getLayer(); modeExtension = frame.getModeExtension(); sampleRate = frame.getSampleRate(); version = frame.getVersion(); copyright = frame.isCopyright(); original = frame.isOriginal(); frameCount++; addBitrate(frame.getBitrate()); offset += frame.getLengthInBytes(); return offset;