16bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber/* 26bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * Copyright (C) 2009 The Android Open Source Project 36bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * 46bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 56bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * you may not use this file except in compliance with the License. 66bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * You may obtain a copy of the License at 76bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * 86bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 96bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * 106bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * Unless required by applicable law or agreed to in writing, software 116bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 126bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * See the License for the specific language governing permissions and 146bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber * limitations under the License. 156bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber */ 166bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 176bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber#ifndef WAV_EXTRACTOR_H_ 186bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 196bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber#define WAV_EXTRACTOR_H_ 206bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 21a688b574d294faae5f56224908b40856c5045aacMathias Agopian#include <utils/Errors.h> 226bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber#include <media/stagefright/MediaExtractor.h> 236bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 246bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Hubernamespace android { 256bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 26efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huberstruct AMessage; 276bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huberclass DataSource; 286bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huberclass String8; 296bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 306bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huberclass WAVExtractor : public MediaExtractor { 316bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huberpublic: 326bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber // Extractor assumes ownership of "source". 336bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber WAVExtractor(const sp<DataSource> &source); 346bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 356bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber virtual size_t countTracks(); 366bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber virtual sp<MediaSource> getTrack(size_t index); 376bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 386bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 391cb02bf661807ffc6525dcc13e16d7ce027bef00Andreas Huber virtual sp<MetaData> getMetaData(); 401cb02bf661807ffc6525dcc13e16d7ce027bef00Andreas Huber 416bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huberprotected: 426bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber virtual ~WAVExtractor(); 436bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 446bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huberprivate: 456bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber sp<DataSource> mDataSource; 466bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber status_t mInitCheck; 476bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber bool mValidFormat; 48520b2a7039792f03da11a8d54344f10175cebfbcAndreas Huber uint16_t mWaveFormat; 496bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber uint16_t mNumChannels; 506bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber uint32_t mSampleRate; 51e9999cfea449223f308e25ba7a0d9a9e9e0ac3c0Andreas Huber uint16_t mBitsPerSample; 52b1262a8b1dd23abad64465f9ffd25c44facdf4d2James Dong off64_t mDataOffset; 536bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber size_t mDataSize; 54e9999cfea449223f308e25ba7a0d9a9e9e0ac3c0Andreas Huber sp<MetaData> mTrackMeta; 556bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 566bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber status_t init(); 576bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 586bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber WAVExtractor(const WAVExtractor &); 596bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber WAVExtractor &operator=(const WAVExtractor &); 606bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber}; 616bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 626bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huberbool SniffWAV( 63efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 64efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber sp<AMessage> *); 656bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 666bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber} // namespace android 676bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 686bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber#endif // WAV_EXTRACTOR_H_ 696bce6d87b3fd98e68fb54328fb4dc8e40cd2c293Andreas Huber 70