16655174826330afe66ef766258181ae8c11f3f6cInsun Kang/* 26655174826330afe66ef766258181ae8c11f3f6cInsun Kang * Copyright (C) 2012 The Android Open Source Project 36655174826330afe66ef766258181ae8c11f3f6cInsun Kang * 46655174826330afe66ef766258181ae8c11f3f6cInsun Kang * Licensed under the Apache License, Version 2.0 (the "License"); 56655174826330afe66ef766258181ae8c11f3f6cInsun Kang * you may not use this file except in compliance with the License. 66655174826330afe66ef766258181ae8c11f3f6cInsun Kang * You may obtain a copy of the License at 76655174826330afe66ef766258181ae8c11f3f6cInsun Kang * 86655174826330afe66ef766258181ae8c11f3f6cInsun Kang * http://www.apache.org/licenses/LICENSE-2.0 96655174826330afe66ef766258181ae8c11f3f6cInsun Kang * 106655174826330afe66ef766258181ae8c11f3f6cInsun Kang * Unless required by applicable law or agreed to in writing, software 116655174826330afe66ef766258181ae8c11f3f6cInsun Kang * distributed under the License is distributed on an "AS IS" BASIS, 126655174826330afe66ef766258181ae8c11f3f6cInsun Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136655174826330afe66ef766258181ae8c11f3f6cInsun Kang * See the License for the specific language governing permissions and 146655174826330afe66ef766258181ae8c11f3f6cInsun Kang * limitations under the License. 156655174826330afe66ef766258181ae8c11f3f6cInsun Kang */ 166655174826330afe66ef766258181ae8c11f3f6cInsun Kang 176655174826330afe66ef766258181ae8c11f3f6cInsun Kang#ifndef TIMED_TEXT_SRT_SOURCE_H_ 186655174826330afe66ef766258181ae8c11f3f6cInsun Kang#define TIMED_TEXT_SRT_SOURCE_H_ 196655174826330afe66ef766258181ae8c11f3f6cInsun Kang 206655174826330afe66ef766258181ae8c11f3f6cInsun Kang#include <media/stagefright/MediaErrors.h> 216655174826330afe66ef766258181ae8c11f3f6cInsun Kang#include <media/stagefright/MediaSource.h> 226655174826330afe66ef766258181ae8c11f3f6cInsun Kang#include <utils/Compat.h> // off64_t 236655174826330afe66ef766258181ae8c11f3f6cInsun Kang 246655174826330afe66ef766258181ae8c11f3f6cInsun Kang#include "TimedTextSource.h" 256655174826330afe66ef766258181ae8c11f3f6cInsun Kang 266655174826330afe66ef766258181ae8c11f3f6cInsun Kangnamespace android { 276655174826330afe66ef766258181ae8c11f3f6cInsun Kang 286655174826330afe66ef766258181ae8c11f3f6cInsun Kangclass AString; 296655174826330afe66ef766258181ae8c11f3f6cInsun Kangclass DataSource; 306655174826330afe66ef766258181ae8c11f3f6cInsun Kangclass MediaBuffer; 316655174826330afe66ef766258181ae8c11f3f6cInsun Kangclass Parcel; 326655174826330afe66ef766258181ae8c11f3f6cInsun Kang 336655174826330afe66ef766258181ae8c11f3f6cInsun Kangclass TimedTextSRTSource : public TimedTextSource { 34083c271152f2d930f259816d52327ed47e022780Insun Kangpublic: 35083c271152f2d930f259816d52327ed47e022780Insun Kang TimedTextSRTSource(const sp<DataSource>& dataSource); 36083c271152f2d930f259816d52327ed47e022780Insun Kang virtual status_t start(); 37083c271152f2d930f259816d52327ed47e022780Insun Kang virtual status_t stop(); 38083c271152f2d930f259816d52327ed47e022780Insun Kang virtual status_t read( 39bae00e73c6d1d87cc5fd42b50f95d1d9572162eaInsun Kang int64_t *startTimeUs, 40bae00e73c6d1d87cc5fd42b50f95d1d9572162eaInsun Kang int64_t *endTimeUs, 41083c271152f2d930f259816d52327ed47e022780Insun Kang Parcel *parcel, 42083c271152f2d930f259816d52327ed47e022780Insun Kang const MediaSource::ReadOptions *options = NULL); 43f9d660a5e0196240add5daf0199f128d471e592cInsun Kang virtual sp<MetaData> getFormat(); 446655174826330afe66ef766258181ae8c11f3f6cInsun Kang 45083c271152f2d930f259816d52327ed47e022780Insun Kangprotected: 46083c271152f2d930f259816d52327ed47e022780Insun Kang virtual ~TimedTextSRTSource(); 476655174826330afe66ef766258181ae8c11f3f6cInsun Kang 48083c271152f2d930f259816d52327ed47e022780Insun Kangprivate: 49083c271152f2d930f259816d52327ed47e022780Insun Kang sp<DataSource> mSource; 50f9d660a5e0196240add5daf0199f128d471e592cInsun Kang sp<MetaData> mMetaData; 516655174826330afe66ef766258181ae8c11f3f6cInsun Kang 52083c271152f2d930f259816d52327ed47e022780Insun Kang struct TextInfo { 53083c271152f2d930f259816d52327ed47e022780Insun Kang int64_t endTimeUs; 54083c271152f2d930f259816d52327ed47e022780Insun Kang // The offset of the text in the original file. 55083c271152f2d930f259816d52327ed47e022780Insun Kang off64_t offset; 56083c271152f2d930f259816d52327ed47e022780Insun Kang int textLen; 57083c271152f2d930f259816d52327ed47e022780Insun Kang }; 586655174826330afe66ef766258181ae8c11f3f6cInsun Kang 590a2f0e047a2e593c62f54b07b903baf4728b9d0aInsun Kang size_t mIndex; 60083c271152f2d930f259816d52327ed47e022780Insun Kang KeyedVector<int64_t, TextInfo> mTextVector; 616655174826330afe66ef766258181ae8c11f3f6cInsun Kang 62083c271152f2d930f259816d52327ed47e022780Insun Kang void reset(); 63083c271152f2d930f259816d52327ed47e022780Insun Kang status_t scanFile(); 64083c271152f2d930f259816d52327ed47e022780Insun Kang status_t getNextSubtitleInfo( 65083c271152f2d930f259816d52327ed47e022780Insun Kang off64_t *offset, int64_t *startTimeUs, TextInfo *info); 66083c271152f2d930f259816d52327ed47e022780Insun Kang status_t readNextLine(off64_t *offset, AString *data); 67083c271152f2d930f259816d52327ed47e022780Insun Kang status_t getText( 68083c271152f2d930f259816d52327ed47e022780Insun Kang const MediaSource::ReadOptions *options, 69083c271152f2d930f259816d52327ed47e022780Insun Kang AString *text, int64_t *startTimeUs, int64_t *endTimeUs); 70083c271152f2d930f259816d52327ed47e022780Insun Kang status_t extractAndAppendLocalDescriptions( 71083c271152f2d930f259816d52327ed47e022780Insun Kang int64_t timeUs, const AString &text, Parcel *parcel); 726655174826330afe66ef766258181ae8c11f3f6cInsun Kang 73083c271152f2d930f259816d52327ed47e022780Insun Kang DISALLOW_EVIL_CONSTRUCTORS(TimedTextSRTSource); 746655174826330afe66ef766258181ae8c11f3f6cInsun Kang}; 756655174826330afe66ef766258181ae8c11f3f6cInsun Kang 766655174826330afe66ef766258181ae8c11f3f6cInsun Kang} // namespace android 776655174826330afe66ef766258181ae8c11f3f6cInsun Kang 786655174826330afe66ef766258181ae8c11f3f6cInsun Kang#endif // TIMED_TEXT_SRT_SOURCE_H_ 79