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