1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/*
2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Copyright 2011 Sebastian Annies, Hamburg
3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Licensed under the Apache License, Version 2.0 (the License);
5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * you may not use this file except in compliance with the License.
6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * You may obtain a copy of the License at
7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *     http://www.apache.org/licenses/LICENSE-2.0
9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu *
10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Unless required by applicable law or agreed to in writing, software
11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * distributed under the License is distributed on an AS IS BASIS,
12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * See the License for the specific language governing permissions and
14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * limitations under the License.
15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.googlecode.mp4parser.srt;
17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.authoring.tracks.TextTrackImpl;
19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.IOException;
21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.InputStream;
22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.InputStreamReader;
23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.LineNumberReader;
24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/**
26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Parses a .srt file and creates a Track for it.
27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */
28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class SrtParser {
29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public static TextTrackImpl parse(InputStream is) throws IOException {
30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        LineNumberReader r = new LineNumberReader(new InputStreamReader(is, "UTF-8"));
31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        TextTrackImpl track = new TextTrackImpl();
32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        String numberString;
33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        while ((numberString = r.readLine()) != null) {
34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            String timeString = r.readLine();
35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            String lineString = "";
36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            String s;
37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            while (!((s = r.readLine()) == null || s.trim().equals(""))) {
38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu                lineString += s + "\n";
39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            }
40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            long startTime = parse(timeString.split("-->")[0]);
42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            long endTime = parse(timeString.split("-->")[1]);
43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            track.getSubs().add(new TextTrackImpl.Line(startTime, endTime, lineString));
45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return track;
48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private static long parse(String in) {
51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long hours = Long.parseLong(in.split(":")[0].trim());
52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long minutes = Long.parseLong(in.split(":")[1].trim());
53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long seconds = Long.parseLong(in.split(":")[2].split(",")[0].trim());
54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        long millies = Long.parseLong(in.split(":")[2].split(",")[1].trim());
55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return hours * 60 * 60 * 1000 + minutes * 60 * 1000 + seconds * 1000 + millies;
57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
60