10dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber/* 20dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * Copyright (C) 2009 The Android Open Source Project 30dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * 40dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 50dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * you may not use this file except in compliance with the License. 60dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * You may obtain a copy of the License at 70dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * 80dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 90dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * 100dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * Unless required by applicable law or agreed to in writing, software 110dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 120dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * See the License for the specific language governing permissions and 140dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber * limitations under the License. 150dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber */ 160dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 170dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber#ifndef WAV_EXTRACTOR_H_ 180dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 190dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber#define WAV_EXTRACTOR_H_ 200dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 2195d7e994c73c17b27c7134ba3cc3acbb5889aa87Mathias Agopian#include <utils/Errors.h> 220dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber#include <media/stagefright/MediaExtractor.h> 230dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 240dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Hubernamespace android { 250dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 265a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage; 270dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huberclass DataSource; 280dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huberclass String8; 290dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 300dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huberclass WAVExtractor : public MediaExtractor { 310dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huberpublic: 320dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber // Extractor assumes ownership of "source". 330dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber WAVExtractor(const sp<DataSource> &source); 340dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 350dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber virtual size_t countTracks(); 360dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber virtual sp<MediaSource> getTrack(size_t index); 370dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 380dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 397be6407f2ad7f2b0782d195d9f792072c084d6f5Andreas Huber virtual sp<MetaData> getMetaData(); 407be6407f2ad7f2b0782d195d9f792072c084d6f5Andreas Huber 410dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huberprotected: 420dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber virtual ~WAVExtractor(); 430dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 440dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huberprivate: 450dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber sp<DataSource> mDataSource; 460dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber status_t mInitCheck; 470dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber bool mValidFormat; 4842d66f25af9cb8089a93c6796876a6bc16e36ceaAndreas Huber uint16_t mWaveFormat; 490dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber uint16_t mNumChannels; 503bed68cb3d43af40475f56211869c40470c1fb4dJean-Michel Trivi uint32_t mChannelMask; 510dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber uint32_t mSampleRate; 52f99f049dd228333e3d6f886efe373f8e461ff2daAndreas Huber uint16_t mBitsPerSample; 53c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong off64_t mDataOffset; 540dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber size_t mDataSize; 55f99f049dd228333e3d6f886efe373f8e461ff2daAndreas Huber sp<MetaData> mTrackMeta; 560dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 570dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber status_t init(); 580dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 590dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber WAVExtractor(const WAVExtractor &); 600dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber WAVExtractor &operator=(const WAVExtractor &); 610dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber}; 620dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 630dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huberbool SniffWAV( 645a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 655a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber sp<AMessage> *); 660dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 670dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber} // namespace android 680dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 690dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber#endif // WAV_EXTRACTOR_H_ 700dba73763a04d39faf999dcc5ef12af3c99535a7Andreas Huber 71