All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mp4parser.boxes.samplegrouping.CencSampleEncryptionInformationGroupEntry Maven / Gradle / Ivy

Go to download

A generic parser and writer for all ISO 14496 based files (MP4, Quicktime, DCF, PDCF, ...)

There is a newer version: 1.9.56
Show newest version
/*
 * Copyright 2012 castLabs, Berlin
 *
 * Licensed under the Apache License, Version 2.0 (the License);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.mp4parser.boxes.samplegrouping;

import org.mp4parser.tools.IsoTypeReader;
import org.mp4parser.tools.IsoTypeWriter;
import org.mp4parser.tools.UUIDConverter;

import java.nio.ByteBuffer;
import java.util.UUID;

/**
 * 

4cc = "{@value #TYPE}"

*

Each sample in a protected track shall be associated with an IsEncrypted flag, IV_Size, and KID. * This can be accomplished by (a) relying on the default values in the TrackEncryptionBox * (see 8.2), or (b) specifying the parameters by sample group, or (c) using a combination of these two techniques.

*

When specifying the parameters by sample group, the SampleToGroupBox in the sample table or track * fragment specifies which samples use which sample group description from the SampleGroupDescriptionBox.

*/ public class CencSampleEncryptionInformationGroupEntry extends GroupEntry { public static final String TYPE = "seig"; private boolean isEncrypted; private byte ivSize; private UUID kid; @Override public String getType() { return TYPE; } @Override public void parse(ByteBuffer byteBuffer) { isEncrypted = IsoTypeReader.readUInt24(byteBuffer) == 1; ivSize = (byte) IsoTypeReader.readUInt8(byteBuffer); byte[] kid = new byte[16]; byteBuffer.get(kid); this.kid = UUIDConverter.convert(kid); } @Override public ByteBuffer get() { ByteBuffer byteBuffer = ByteBuffer.allocate(20); IsoTypeWriter.writeUInt24(byteBuffer, isEncrypted ? 1 : 0); if (isEncrypted) { IsoTypeWriter.writeUInt8(byteBuffer, ivSize); byteBuffer.put(UUIDConverter.convert(kid)); } else { byteBuffer.put(new byte[17]); } byteBuffer.rewind(); return byteBuffer; } public boolean isEncrypted() { return isEncrypted; } public void setEncrypted(boolean encrypted) { isEncrypted = encrypted; } public byte getIvSize() { return ivSize; } public void setIvSize(int ivSize) { this.ivSize = (byte) ivSize; } public UUID getKid() { return kid; } public void setKid(UUID kid) { this.kid = kid; } @Override public String toString() { return "CencSampleEncryptionInformationGroupEntry{" + "isEncrypted=" + isEncrypted + ", ivSize=" + ivSize + ", kid=" + kid + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; CencSampleEncryptionInformationGroupEntry that = (CencSampleEncryptionInformationGroupEntry) o; if (isEncrypted != that.isEncrypted) return false; if (ivSize != that.ivSize) return false; if (kid != null ? !kid.equals(that.kid) : that.kid != null) return false; return true; } @Override public int hashCode() { int result = isEncrypted ? 7 : 19; result = 31 * result + (int) ivSize; result = 31 * result + (kid != null ? kid.hashCode() : 0); return result; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy