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

org.mp4parser.boxes.iso14496.part12.SampleFlags Maven / Gradle / Ivy

Go to download

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; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy