1856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten/* 2856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * Copyright (C) 2011 The Android Open Source Project 3856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * 4856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * you may not use this file except in compliance with the License. 6856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * You may obtain a copy of the License at 7856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * 8856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * 10856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * See the License for the specific language governing permissions and 14856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten * limitations under the License. 15856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten */ 16856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 17856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten#ifndef FLAC_EXTRACTOR_H_ 18856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten#define FLAC_EXTRACTOR_H_ 19856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 20856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten#include <media/stagefright/DataSource.h> 21856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten#include <media/stagefright/MediaExtractor.h> 22856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten#include <utils/String8.h> 23856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 24856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastennamespace android { 25856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 26856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenclass FLACParser; 27856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 28856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenclass FLACExtractor : public MediaExtractor { 29856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 30856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenpublic: 31856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten // Extractor assumes ownership of source 3240d8899f60c5212af9d727ba0ffaaecf676ebd1dChih-Hung Hsieh explicit FLACExtractor(const sp<DataSource> &source); 33856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 34856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten virtual size_t countTracks(); 35b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen virtual sp<IMediaSource> getTrack(size_t index); 36856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 37856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 38856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten virtual sp<MetaData> getMetaData(); 39a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen virtual const char * name() { return "FLACExtractor"; } 40856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 41856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenprotected: 42856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten virtual ~FLACExtractor(); 43856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 44856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenprivate: 45856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten sp<DataSource> mDataSource; 46856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten sp<FLACParser> mParser; 47856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten status_t mInitCheck; 48856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten sp<MetaData> mFileMetadata; 49856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 50856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten // There is only one track 51856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten sp<MetaData> mTrackMetadata; 52856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 53856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten status_t init(); 54856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 55856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten FLACExtractor(const FLACExtractor &); 56856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten FLACExtractor &operator=(const FLACExtractor &); 57856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 58856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten}; 59856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 60856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenbool SniffFLAC(const sp<DataSource> &source, String8 *mimeType, 61856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten float *confidence, sp<AMessage> *); 62856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 63856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten} // namespace android 64856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 65856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten#endif // FLAC_EXTRACTOR_H_ 66