1f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber/*
2f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * Copyright (C) 2009 The Android Open Source Project
3f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber *
4f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * you may not use this file except in compliance with the License.
6f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * You may obtain a copy of the License at
7f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber *
8f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber *
10f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * Unless required by applicable law or agreed to in writing, software
11f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * See the License for the specific language governing permissions and
14f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber * limitations under the License.
15f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber */
16f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
17f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber#ifndef AMR_EXTRACTOR_H_
18f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
19f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber#define AMR_EXTRACTOR_H_
20f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
2195d7e994c73c17b27c7134ba3cc3acbb5889aa87Mathias Agopian#include <utils/Errors.h>
22f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber#include <media/stagefright/MediaExtractor.h>
23f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
24f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Hubernamespace android {
25f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
265a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage;
27f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberclass String8;
2880f68ce02c91f188bb0cb0019fd25df2b8115f18Gloria Wang#define OFFSET_TABLE_LEN    300
29f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
30f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberclass AMRExtractor : public MediaExtractor {
31f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberpublic:
32f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    AMRExtractor(const sp<DataSource> &source);
33f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
34f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    virtual size_t countTracks();
35f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    virtual sp<MediaSource> getTrack(size_t index);
367e04dcf8d6784dd56f53aa90bf34431ab4f0710cAndreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
37f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
387be6407f2ad7f2b0782d195d9f792072c084d6f5Andreas Huber    virtual sp<MetaData> getMetaData();
397be6407f2ad7f2b0782d195d9f792072c084d6f5Andreas Huber
40f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberprotected:
41f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    virtual ~AMRExtractor();
42f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
43f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberprivate:
44f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    sp<DataSource> mDataSource;
45bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber    sp<MetaData> mMeta;
46f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    status_t mInitCheck;
47f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    bool mIsWide;
48f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
4980f68ce02c91f188bb0cb0019fd25df2b8115f18Gloria Wang    off64_t mOffsetTable[OFFSET_TABLE_LEN]; //5 min
5080f68ce02c91f188bb0cb0019fd25df2b8115f18Gloria Wang    size_t mOffsetTableLength;
5180f68ce02c91f188bb0cb0019fd25df2b8115f18Gloria Wang
52f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    AMRExtractor(const AMRExtractor &);
53f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber    AMRExtractor &operator=(const AMRExtractor &);
54f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber};
55f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
56f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberbool SniffAMR(
575a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
585a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        sp<AMessage> *);
59f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
60f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber}  // namespace android
61f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber
62f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber#endif  // AMR_EXTRACTOR_H_
63