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
32856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    FLACExtractor(const sp<DataSource> &source);
33856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
34856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    virtual size_t countTracks();
35856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    virtual sp<MediaSource> getTrack(size_t index);
36856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
37856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
38856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    virtual sp<MetaData> getMetaData();
39856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
40856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenprotected:
41856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    virtual ~FLACExtractor();
42856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
43856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenprivate:
44856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    sp<DataSource> mDataSource;
45856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    sp<FLACParser> mParser;
46856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    status_t mInitCheck;
47856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    sp<MetaData> mFileMetadata;
48856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
49856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    // There is only one track
50856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    sp<MetaData> mTrackMetadata;
51856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
52856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    status_t init();
53856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
54856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    FLACExtractor(const FLACExtractor &);
55856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten    FLACExtractor &operator=(const FLACExtractor &);
56856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
57856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten};
58856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
59856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenbool SniffFLAC(const sp<DataSource> &source, String8 *mimeType,
60856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten        float *confidence, sp<AMessage> *);
61856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
62856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten}  // namespace android
63856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
64856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten#endif  // FLAC_EXTRACTOR_H_
65