TimedTextSource.h revision d411b4ca2945cd8974a3a78199fce94646950128
1c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org/*
2c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org * Copyright (C) 2012 The Android Open Source Project
3c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org *
492ae1613a125071690336a57cedd4dd9e298cf20agl@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
592ae1613a125071690336a57cedd4dd9e298cf20agl@chromium.org * you may not use this file except in compliance with the License.
6c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org * You may obtain a copy of the License at
7c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org *
8c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org *      http://www.apache.org/licenses/LICENSE-2.0
9c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org *
10c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org * Unless required by applicable law or agreed to in writing, software
11c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
12c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org * See the License for the specific language governing permissions and
14c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org * limitations under the License.
15c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org */
16c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
17c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org#ifndef TIMED_TEXT_SOURCE_H_
18c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org#define TIMED_TEXT_SOURCE_H_
19c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
20c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org#include <media/stagefright/foundation/ABase.h>  // for DISALLOW_XXX macro.
21c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org#include <media/stagefright/MediaErrors.h>
22c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org#include <media/stagefright/MediaSource.h>  // for MediaSource::ReadOptions
23c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org#include <utils/RefBase.h>
24c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
25c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.orgnamespace android {
26c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
27c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.orgclass DataSource;
28c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.orgclass MetaData;
29c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.orgclass Parcel;
30c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
31c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.orgclass TimedTextSource : public RefBase {
32c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org public:
33c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  enum FileType {
34c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org      OUT_OF_BAND_FILE_SRT = 1,
35c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org      OUT_OF_BAND_FILE_SMI = 2,
36c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  };
37c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  static sp<TimedTextSource> CreateTimedTextSource(
38c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org      const sp<MediaSource>& source);
39c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  static sp<TimedTextSource> CreateTimedTextSource(
40c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org      const sp<DataSource>& source, FileType filetype);
41c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  TimedTextSource() {}
42c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  virtual status_t start() = 0;
43c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  virtual status_t stop() = 0;
44c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  // Returns subtitle parcel and its start time.
45c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  virtual status_t read(
46c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org          int64_t *startTimeUs,
47c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org          int64_t *endTimeUs,
48c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org          Parcel *parcel,
49c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org          const MediaSource::ReadOptions *options = NULL) = 0;
50c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  virtual status_t extractGlobalDescriptions(Parcel * /* parcel */) {
51c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org      return INVALID_OPERATION;
52c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  }
53c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  virtual sp<MetaData> getFormat();
54c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
55c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org protected:
56c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  virtual ~TimedTextSource() { }
57c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
58c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org private:
59c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org  DISALLOW_EVIL_CONSTRUCTORS(TimedTextSource);
60c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org};
61c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
62c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org}  // namespace android
63c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org
64c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org#endif  // TIMED_TEXT_SOURCE_H_
65c2a937599a1ec33cd0f57649580e93ff25b22fcabashi@chromium.org