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