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: 3240d8899f60c5212af9d727ba0ffaaecf676ebd1dChih-Hung Hsieh explicit AMRExtractor(const sp<DataSource> &source); 33f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber 34f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber virtual size_t countTracks(); 35b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen virtual sp<IMediaSource> getTrack(size_t index); 367e04dcf8d6784dd56f53aa90bf34431ab4f0710cAndreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 37f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber 387be6407f2ad7f2b0782d195d9f792072c084d6f5Andreas Huber virtual sp<MetaData> getMetaData(); 39a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen virtual const char * name() { return "AMRExtractor"; } 407be6407f2ad7f2b0782d195d9f792072c084d6f5Andreas Huber 41f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberprotected: 42f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber virtual ~AMRExtractor(); 43f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber 44f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberprivate: 45f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber sp<DataSource> mDataSource; 46bfa6b2d7a1be1832ac40ed90aece1834f720b5c6Andreas Huber sp<MetaData> mMeta; 47f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber status_t mInitCheck; 48f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber bool mIsWide; 49f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber 5080f68ce02c91f188bb0cb0019fd25df2b8115f18Gloria Wang off64_t mOffsetTable[OFFSET_TABLE_LEN]; //5 min 5180f68ce02c91f188bb0cb0019fd25df2b8115f18Gloria Wang size_t mOffsetTableLength; 5280f68ce02c91f188bb0cb0019fd25df2b8115f18Gloria Wang 53f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber AMRExtractor(const AMRExtractor &); 54f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber AMRExtractor &operator=(const AMRExtractor &); 55f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber}; 56f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber 57f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huberbool SniffAMR( 585a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 595a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber sp<AMessage> *); 60f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber 61f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber} // namespace android 62f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber 63f75978f63a25e79c683e96611f95cb5cd49efd3dAndreas Huber#endif // AMR_EXTRACTOR_H_ 64