15a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber/*
25a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * Copyright (C) 2009 The Android Open Source Project
35a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber *
45a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
55a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * you may not use this file except in compliance with the License.
65a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * You may obtain a copy of the License at
75a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber *
85a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
95a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber *
105a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * Unless required by applicable law or agreed to in writing, software
115a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
125a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * See the License for the specific language governing permissions and
145a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber * limitations under the License.
155a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber */
165a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
175a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber#ifndef AMR_EXTRACTOR_H_
185a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
195a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber#define AMR_EXTRACTOR_H_
205a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
215a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber#include <media/stagefright/MediaExtractor.h>
225a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
235a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Hubernamespace android {
245a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
25efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huberstruct AMessage;
265a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huberclass String8;
275a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
285a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huberclass AMRExtractor : public MediaExtractor {
295a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huberpublic:
305a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    AMRExtractor(const sp<DataSource> &source);
315a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
325a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    virtual size_t countTracks();
335a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    virtual sp<MediaSource> getTrack(size_t index);
34e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
355a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
361cb02bf661807ffc6525dcc13e16d7ce027bef00Andreas Huber    virtual sp<MetaData> getMetaData();
371cb02bf661807ffc6525dcc13e16d7ce027bef00Andreas Huber
385a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huberprotected:
395a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    virtual ~AMRExtractor();
405a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
415a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huberprivate:
425a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    sp<DataSource> mDataSource;
4327366fc9540cb642ee4856957dabffe7ddf1f901Andreas Huber    sp<MetaData> mMeta;
445a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    status_t mInitCheck;
4527366fc9540cb642ee4856957dabffe7ddf1f901Andreas Huber    size_t mFrameSize;
465a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    bool mIsWide;
475a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
485a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    AMRExtractor(const AMRExtractor &);
495a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber    AMRExtractor &operator=(const AMRExtractor &);
505a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber};
515a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
525a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huberbool SniffAMR(
53efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
54efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber        sp<AMessage> *);
555a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
565a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber}  // namespace android
575a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber
585a65a6e22017e51ebcebb0f41510c54f1085f82cAndreas Huber#endif  // AMR_EXTRACTOR_H_
59