org.mp4parser.boxes.iso14496.part12.SampleFlags Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of isoparser Show documentation
Show all versions of isoparser Show documentation
A generic parser and writer for all ISO 14496 based files (MP4, Quicktime, DCF, PDCF, ...)
The newest version!
/*
* Copyright 2009 castLabs GmbH, 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.iso14496.part12;
import org.mp4parser.tools.IsoTypeReader;
import org.mp4parser.tools.IsoTypeWriter;
import java.nio.ByteBuffer;
/**
* bit(6) reserved=0;
* unsigned int(2) sample_depends_on;
* unsigned int(2) sample_is_depended_on;
* unsigned int(2) sample_has_redundancy;
* bit(3) sample_padding_value;
* bit(1) sample_is_difference_sample;
* // i.e. when 1 signals a non-key or non-sync sample
* unsigned int(16) sample_degradation_priority;
*/
public class SampleFlags {
private byte reserved;
private byte isLeading;
private byte sampleDependsOn;
private byte sampleIsDependedOn;
private byte sampleHasRedundancy;
private byte samplePaddingValue;
private boolean sampleIsDifferenceSample;
private int sampleDegradationPriority;
public SampleFlags() {
}
public SampleFlags(ByteBuffer bb) {
long a = IsoTypeReader.readUInt32(bb);
reserved = (byte) ((a & 0xF0000000) >> 28);
isLeading = (byte) ((a & 0x0C000000) >> 26);
sampleDependsOn = (byte) ((a & 0x03000000) >> 24);
sampleIsDependedOn = (byte) ((a & 0x00C00000) >> 22);
sampleHasRedundancy = (byte) ((a & 0x00300000) >> 20);
samplePaddingValue = (byte) ((a & 0x000e0000) >> 17);
sampleIsDifferenceSample = ((a & 0x00010000) >> 16) > 0;
sampleDegradationPriority = (int) (a & 0x0000ffff);
}
public void getContent(ByteBuffer os) {
long a = 0;
a |= reserved << 28;
a |= isLeading << 26;
a |= sampleDependsOn << 24;
a |= sampleIsDependedOn << 22;
a |= sampleHasRedundancy << 20;
a |= samplePaddingValue << 17;
a |= (sampleIsDifferenceSample ? 1 : 0) << 16;
a |= sampleDegradationPriority;
IsoTypeWriter.writeUInt32(os, a);
}
public int getReserved() {
return reserved;
}
public void setReserved(int reserved) {
this.reserved = (byte) reserved;
}
public byte getIsLeading() {
return isLeading;
}
public void setIsLeading(byte isLeading) {
this.isLeading = isLeading;
}
/**
* sample_depends_on takes one of the following four values:
*
* 0: the dependency of this sample is unknown;
* 1: this sample does depend on others (not an I picture);
* 2: this sample does not depend on others (I picture);
* 3: reserved
*
*
* @return current depends_on level
*/
public int getSampleDependsOn() {
return sampleDependsOn;
}
/**
* sample_depends_on takes one of the following four values:
*
* 0: the dependency of this sample is unknown;
* 1: this sample does depend on others (not an I picture);
* 2: this sample does not depend on others (I picture);
* 3: reserved
*
*
* @param sampleDependsOn new depends on value
*/
public void setSampleDependsOn(int sampleDependsOn) {
this.sampleDependsOn = (byte) sampleDependsOn;
}
/**
* sample_is_depended_on takes one of the following four values:
*
* 0: the dependency of other samples on this sample is unknown;
* 1: other samples may depend on this one (not disposable);
* 2: no other sample depends on this one (disposable);
* 3: reserved
*
*
* @return current is_dependend_on level
*/
public int getSampleIsDependedOn() {
return sampleIsDependedOn;
}
/**
* sample_is_depended_on takes one of the following four values:
*
* 0: the dependency of other samples on this sample is unknown;
* 1: other samples may depend on this one (not disposable);
* 2: no other sample depends on this one (disposable);
* 3: reserved
*
*
* @param sampleIsDependedOn new is_depends on value
*/
public void setSampleIsDependedOn(int sampleIsDependedOn) {
this.sampleIsDependedOn = (byte) sampleIsDependedOn;
}
/**
* sample_has_redundancy takes one of the following four values:
*
* 0: it is unknown whether there is redundant coding in this sample;
* 1: there is redundant coding in this sample;
* 2: there is no redundant coding in this sample;
* 3: reserved
*
*
* @return current redundancy level
*/
public int getSampleHasRedundancy() {
return sampleHasRedundancy;
}
/**
* sample_has_redundancy takes one of the following four values:
*
* 0: it is unknown whether there is redundant coding in this sample;
* 1: there is redundant coding in this sample;
* 2: there is no redundant coding in this sample;
* 3: reserved
*
*
* @param sampleHasRedundancy new redundancy level
*/
public void setSampleHasRedundancy(int sampleHasRedundancy) {
this.sampleHasRedundancy = (byte) sampleHasRedundancy;
}
public int getSamplePaddingValue() {
return samplePaddingValue;
}
public void setSamplePaddingValue(int samplePaddingValue) {
this.samplePaddingValue = (byte) samplePaddingValue;
}
public boolean isSampleIsDifferenceSample() {
return sampleIsDifferenceSample;
}
public void setSampleIsDifferenceSample(boolean sampleIsDifferenceSample) {
this.sampleIsDifferenceSample = sampleIsDifferenceSample;
}
public int getSampleDegradationPriority() {
return sampleDegradationPriority;
}
public void setSampleDegradationPriority(int sampleDegradationPriority) {
this.sampleDegradationPriority = sampleDegradationPriority;
}
@Override
public String toString() {
return "SampleFlags{" +
"reserved=" + reserved +
", isLeading=" + isLeading +
", depOn=" + sampleDependsOn +
", isDepOn=" + sampleIsDependedOn +
", hasRedundancy=" + sampleHasRedundancy +
", padValue=" + samplePaddingValue +
", isDiffSample=" + sampleIsDifferenceSample +
", degradPrio=" + sampleDegradationPriority +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SampleFlags that = (SampleFlags) o;
if (isLeading != that.isLeading) return false;
if (reserved != that.reserved) return false;
if (sampleDegradationPriority != that.sampleDegradationPriority) return false;
if (sampleDependsOn != that.sampleDependsOn) return false;
if (sampleHasRedundancy != that.sampleHasRedundancy) return false;
if (sampleIsDependedOn != that.sampleIsDependedOn) return false;
if (sampleIsDifferenceSample != that.sampleIsDifferenceSample) return false;
if (samplePaddingValue != that.samplePaddingValue) return false;
return true;
}
@Override
public int hashCode() {
int result = (int) reserved;
result = 31 * result + (int) isLeading;
result = 31 * result + (int) sampleDependsOn;
result = 31 * result + (int) sampleIsDependedOn;
result = 31 * result + (int) sampleHasRedundancy;
result = 31 * result + (int) samplePaddingValue;
result = 31 * result + (sampleIsDifferenceSample ? 1 : 0);
result = 31 * result + sampleDegradationPriority;
return result;
}
}