blob: 0658682ae0646c102921de12c36978320612c83d [file] [log] [blame]
/*
* Copyright 2012 Sebastian Annies, Hamburg
*
* 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 com.googlecode.mp4parser.authoring;
import java.util.LinkedList;
import java.util.List;
/**
*
*/
public class Movie {
List<Track> tracks = new LinkedList<Track>();
public List<Track> getTracks() {
return tracks;
}
public void setTracks(List<Track> tracks) {
this.tracks = tracks;
}
public void addTrack(Track nuTrack) {
// do some checking
// perhaps the movie needs to get longer!
if (getTrackByTrackId(nuTrack.getTrackMetaData().getTrackId()) != null) {
// We already have a track with that trackId. Create a new one
nuTrack.getTrackMetaData().setTrackId(getNextTrackId());
}
tracks.add(nuTrack);
}
@Override
public String toString() {
String s = "Movie{ ";
for (Track track : tracks) {
s += "track_" + track.getTrackMetaData().getTrackId() + " (" + track.getHandler() + ") ";
}
s += '}';
return s;
}
public long getNextTrackId() {
long nextTrackId = 0;
for (Track track : tracks) {
nextTrackId = nextTrackId < track.getTrackMetaData().getTrackId() ? track.getTrackMetaData().getTrackId() : nextTrackId;
}
return ++nextTrackId;
}
public Track getTrackByTrackId(long trackId) {
for (Track track : tracks) {
if (track.getTrackMetaData().getTrackId() == trackId) {
return track;
}
}
return null;
}
public long getTimescale() {
long timescale = this.getTracks().iterator().next().getTrackMetaData().getTimescale();
for (Track track : this.getTracks()) {
timescale = gcd(track.getTrackMetaData().getTimescale(), timescale);
}
return timescale;
}
public static long gcd(long a, long b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
}