package com.frostwire.mp3; public abstract class AbstractID3v2FrameData { boolean unsynchronisation; public AbstractID3v2FrameData(boolean unsynchronisation) { this.unsynchronisation = unsynchronisation; } protected void synchroniseAndUnpackFrameData(byte[] bytes) throws InvalidDataException { if (unsynchronisation && BufferTools.sizeSynchronisationWouldSubtract(bytes) > 0) { byte[] synchronisedBytes = BufferTools.synchroniseBuffer(bytes); unpackFrameData(synchronisedBytes); } else { unpackFrameData(bytes); } } protected byte[] packAndUnsynchroniseFrameData() { byte[] bytes = packFrameData(); if (unsynchronisation && BufferTools.sizeUnsynchronisationWouldAdd(bytes) > 0) { return BufferTools.unsynchroniseBuffer(bytes); } return bytes; } protected byte[] toBytes() { return packAndUnsynchroniseFrameData(); } public boolean equals(Object obj) { if (! (obj instanceof AbstractID3v2FrameData)) return false; AbstractID3v2FrameData other = (AbstractID3v2FrameData) obj; if (unsynchronisation != other.unsynchronisation) return false; return true; } protected abstract void unpackFrameData(byte[] bytes) throws InvalidDataException; protected abstract byte[] packFrameData(); protected abstract int getLength(); }