@Override
  public void decode(MP4InputStream in) throws IOException {
    super.decode(in);

    trackID = in.readBytes(4);

    // optional fields
    baseDataOffsetPresent = ((flags & 1) == 1);
    baseDataOffset = baseDataOffsetPresent ? in.readBytes(8) : 0;

    sampleDescriptionIndexPresent = ((flags & 2) == 2);
    sampleDescriptionIndex = sampleDescriptionIndexPresent ? in.readBytes(4) : 0;

    defaultSampleDurationPresent = ((flags & 8) == 8);
    defaultSampleDuration = defaultSampleDurationPresent ? in.readBytes(4) : 0;

    defaultSampleSizePresent = ((flags & 16) == 16);
    defaultSampleSize = defaultSampleSizePresent ? in.readBytes(4) : 0;

    defaultSampleFlagsPresent = ((flags & 32) == 32);
    defaultSampleFlags = defaultSampleFlagsPresent ? in.readBytes(4) : 0;

    durationIsEmpty = ((flags & 0x10000) == 0x10000);
  }