/*
* Copyright (C) 2011 in-somnia
*
* This file is part of JAAD.
*
* JAAD is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* JAAD is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
* Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
* If not, see <http://www.gnu.org/licenses/>.
*/
package net.sourceforge.jaad.mp4.api;
import net.sourceforge.jaad.mp4.api.Track.Codec;
import net.sourceforge.jaad.mp4.api.drm.ITunesProtection;
import net.sourceforge.jaad.mp4.boxes.Box;
import net.sourceforge.jaad.mp4.boxes.BoxTypes;
import net.sourceforge.jaad.mp4.boxes.impl.OriginalFormatBox;
import net.sourceforge.jaad.mp4.boxes.impl.SchemeTypeBox;
/**
* This class contains information about a DRM system.
*/
public abstract class Protection {
public static enum Scheme {
ITUNES_FAIR_PLAY(1769239918),
UNKNOWN(-1);
private long type;
private Scheme(long type) {
this.type = type;
}
}
static Protection parse(Box sinf) {
Protection p = null;
if(sinf.hasChild(BoxTypes.SCHEME_TYPE_BOX)) {
final SchemeTypeBox schm = (SchemeTypeBox) sinf.getChild(BoxTypes.SCHEME_TYPE_BOX);
final long l = schm.getSchemeType();
if(l==Scheme.ITUNES_FAIR_PLAY.type) p = new ITunesProtection(sinf);
}
if(p==null) p = new UnknownProtection(sinf);
return p;
}
private final Codec originalFormat;
protected Protection(Box sinf) {
//original format
final long type = ((OriginalFormatBox) sinf.getChild(BoxTypes.ORIGINAL_FORMAT_BOX)).getOriginalFormat();
Codec c;
//TODO: currently it tests for audio and video codec, can do this any other way?
if(!(c = AudioTrack.AudioCodec.forType(type)).equals(AudioTrack.AudioCodec.UNKNOWN_AUDIO_CODEC)) originalFormat = c;
else if(!(c = VideoTrack.VideoCodec.forType(type)).equals(VideoTrack.VideoCodec.UNKNOWN_VIDEO_CODEC)) originalFormat = c;
else originalFormat = null;
}
Codec getOriginalFormat() {
return originalFormat;
}
public abstract Scheme getScheme();
//default implementation for unknown protection schemes
private static class UnknownProtection extends Protection {
UnknownProtection(Box sinf) {
super(sinf);
}
@Override
public Scheme getScheme() {
return Scheme.UNKNOWN;
}
}
}