@Override protected void unpackDataLength(byte[] buffer, int offset) { dataLength = BufferTools.unpackSynchsafeInteger(buffer[offset + DATA_LENGTH_OFFSET], buffer[offset + DATA_LENGTH_OFFSET + 1], buffer[offset + DATA_LENGTH_OFFSET + 2], buffer[offset + DATA_LENGTH_OFFSET + 3]); }
private int unpackExtendedHeader(byte[] bytes, int offset) { extendedHeaderLength = BufferTools.unpackSynchsafeInteger(bytes[offset], bytes[offset + 1], bytes[offset + 2], bytes[offset + 3]) + 4; extendedHeaderData = BufferTools.copyBuffer(bytes, offset + 4, extendedHeaderLength); return extendedHeaderLength; }
protected int preScanFile(SeekableByteChannel seekableByteChannel) { ByteBuffer byteBuffer = ByteBuffer.allocate(AbstractID3v2Tag.HEADER_LENGTH); try { seekableByteChannel.position(0); byteBuffer.clear(); int bytesRead = seekableByteChannel.read(byteBuffer); if (bytesRead == AbstractID3v2Tag.HEADER_LENGTH) { try { byte[] bytes = byteBuffer.array(); ID3v2TagFactory.sanityCheckTag(bytes); return AbstractID3v2Tag.HEADER_LENGTH + BufferTools.unpackSynchsafeInteger(bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET], bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET + 1], bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET + 2], bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET + 3]); } catch (NoSuchTagException | UnsupportedTagException e) { // do nothing } } } catch (IOException e) { // do nothing } return 0; }
private int unpackHeader(byte[] bytes) throws UnsupportedTagException, InvalidDataException { int majorVersion = bytes[MAJOR_VERSION_OFFSET]; int minorVersion = bytes[MINOR_VERSION_OFFSET]; version = majorVersion + "." + minorVersion; if (majorVersion != 2 && majorVersion != 3 && majorVersion != 4) { throw new UnsupportedTagException("Unsupported version " + version); } unpackFlags(bytes); if ((bytes[FLAGS_OFFSET] & 0x0F) != 0) throw new UnsupportedTagException("Unrecognised bits in header"); dataLength = BufferTools.unpackSynchsafeInteger(bytes[DATA_LENGTH_OFFSET], bytes[DATA_LENGTH_OFFSET + 1], bytes[DATA_LENGTH_OFFSET + 2], bytes[DATA_LENGTH_OFFSET + 3]); if (dataLength < 1) throw new InvalidDataException("Zero size tag"); return HEADER_LENGTH; }
@Override protected void unpackDataLength(byte[] buffer, int offset) { dataLength = BufferTools.unpackSynchsafeInteger(buffer[offset + DATA_LENGTH_OFFSET], buffer[offset + DATA_LENGTH_OFFSET + 1], buffer[offset + DATA_LENGTH_OFFSET + 2], buffer[offset + DATA_LENGTH_OFFSET + 3]); }
private int unpackExtendedHeader(byte[] bytes, int offset) { extendedHeaderLength = BufferTools.unpackSynchsafeInteger(bytes[offset], bytes[offset + 1], bytes[offset + 2], bytes[offset + 3]) + 4; extendedHeaderData = BufferTools.copyBuffer(bytes, offset + 4, extendedHeaderLength); return extendedHeaderLength; }
protected int preScanFile(SeekableByteChannel seekableByteChannel) { ByteBuffer byteBuffer = ByteBuffer.allocate(AbstractID3v2Tag.HEADER_LENGTH); try { seekableByteChannel.position(0); byteBuffer.clear(); int bytesRead = seekableByteChannel.read(byteBuffer); if (bytesRead == AbstractID3v2Tag.HEADER_LENGTH) { try { byte[] bytes = byteBuffer.array(); ID3v2TagFactory.sanityCheckTag(bytes); return AbstractID3v2Tag.HEADER_LENGTH + BufferTools.unpackSynchsafeInteger(bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET], bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET + 1], bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET + 2], bytes[AbstractID3v2Tag.DATA_LENGTH_OFFSET + 3]); } catch (NoSuchTagException | UnsupportedTagException e) { // do nothing } } } catch (IOException e) { // do nothing } return 0; }
private int unpackHeader(byte[] bytes) throws UnsupportedTagException, InvalidDataException { int majorVersion = bytes[MAJOR_VERSION_OFFSET]; int minorVersion = bytes[MINOR_VERSION_OFFSET]; version = majorVersion + "." + minorVersion; if (majorVersion != 2 && majorVersion != 3 && majorVersion != 4) { throw new UnsupportedTagException("Unsupported version " + version); } unpackFlags(bytes); if ((bytes[FLAGS_OFFSET] & 0x0F) != 0) throw new UnsupportedTagException("Unrecognised bits in header"); dataLength = BufferTools.unpackSynchsafeInteger(bytes[DATA_LENGTH_OFFSET], bytes[DATA_LENGTH_OFFSET + 1], bytes[DATA_LENGTH_OFFSET + 2], bytes[DATA_LENGTH_OFFSET + 3]); if (dataLength < 1) throw new InvalidDataException("Zero size tag"); return HEADER_LENGTH; }