113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang/*
213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * Copyright (C) 2011 The Android Open Source Project
313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang *
413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * Licensed under the Apache License, Version 2.0 (the "License");
513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * you may not use this file except in compliance with the License.
613bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * You may obtain a copy of the License at
713bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang *
813bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang *      http://www.apache.org/licenses/LICENSE-2.0
913bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang *
1013bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * Unless required by applicable law or agreed to in writing, software
1113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * distributed under the License is distributed on an "AS IS" BASIS,
1213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * See the License for the specific language governing permissions and
1413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang * limitations under the License.
1513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang */
1613bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
1713bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang#ifndef TIMED_TEXT_PARSER_H_
1813bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
1913bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang#define TIMED_TEXT_PARSER_H_
2013bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
2113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang#include <media/MediaPlayerInterface.h>
2213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang#include <media/stagefright/foundation/ABase.h>
2313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang#include <media/stagefright/foundation/AString.h>
2413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang#include <media/stagefright/MediaSource.h>
2513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
2613bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wangnamespace android {
2713bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
2813bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wangclass DataSource;
2913bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
3013bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wangclass TimedTextParser : public RefBase {
3113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wangpublic:
3213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    TimedTextParser();
3313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    virtual ~TimedTextParser();
3413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
3513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    enum FileType {
3613bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang        OUT_OF_BAND_FILE_SRT = 1,
3713bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    };
3813bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
3913bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    status_t getText(AString *text, int64_t *startTimeUs, int64_t *endTimeUs,
4013bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang                     const MediaSource::ReadOptions *options = NULL);
4113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    status_t init(const sp<DataSource> &dataSource, FileType fileType);
4213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    void reset();
4313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
4413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wangprivate:
4513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    Mutex mLock;
4613bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
4713bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    sp<DataSource> mDataSource;
4813bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    off64_t mOffset;
4913bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
5013bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    struct TextInfo {
5113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang        int64_t endTimeUs;
5213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang        // the offset of the text in the original file
5313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang        off64_t offset;
5413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang        int textLen;
5513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    };
5613bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
5713bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    int mIndex;
5813bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    FileType mFileType;
5913bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
6013bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    // the key indicated the start time of the text
6113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    KeyedVector<int64_t, TextInfo> mTextVector;
6213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
6313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    status_t getNextInSrtFileFormat(
6413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang            off64_t *offset, int64_t *startTimeUs, TextInfo *info);
6513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    status_t readNextLine(off64_t *offset, AString *data);
6613bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
6713bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    status_t scanFile();
6813bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
6913bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang    DISALLOW_EVIL_CONSTRUCTORS(TimedTextParser);
7013bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang};
7113bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
7213bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang}  // namespace android
7313bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
7413bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang#endif  // TIMED_TEXT_PARSER_H_
7513bc8cde1c842bea1fa3000a48739a6e22f25a9cGloria Wang
76