13cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber/*
23cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * Copyright (C) 2010 The Android Open Source Project
33cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber *
43cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
53cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * you may not use this file except in compliance with the License.
63cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * You may obtain a copy of the License at
73cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber *
83cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
93cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber *
103cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * Unless required by applicable law or agreed to in writing, software
113cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
123cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * See the License for the specific language governing permissions and
143cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber * limitations under the License.
153cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber */
163cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
17ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber#ifndef OGG_EXTRACTOR_H_
183cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
19ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber#define OGG_EXTRACTOR_H_
203cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
2195d7e994c73c17b27c7134ba3cc3acbb5889aa87Mathias Agopian#include <utils/Errors.h>
223cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber#include <media/stagefright/MediaExtractor.h>
233cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
243cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Hubernamespace android {
253cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
265a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage;
273cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huberclass DataSource;
283cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huberclass String8;
293cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
308c10a80cf1af68f15eb39552ca116ec6f04fc173Robert Shihstruct MyOggExtractor;
31ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huberstruct OggSource;
323cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
33ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huberstruct OggExtractor : public MediaExtractor {
3440d8899f60c5212af9d727ba0ffaaecf676ebd1dChih-Hung Hsieh    explicit OggExtractor(const sp<DataSource> &source);
353cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
363cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber    virtual size_t countTracks();
37b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual sp<IMediaSource> getTrack(size_t index);
383cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
393cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
403cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber    virtual sp<MetaData> getMetaData();
41b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual const char * name() { return "OggExtractor"; }
423cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
433cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huberprotected:
44ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber    virtual ~OggExtractor();
453cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
463cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huberprivate:
47ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber    friend struct OggSource;
48ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber
493cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber    sp<DataSource> mDataSource;
503cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber    status_t mInitCheck;
513cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
528c10a80cf1af68f15eb39552ca116ec6f04fc173Robert Shih    MyOggExtractor *mImpl;
53ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber
54ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber    OggExtractor(const OggExtractor &);
55ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber    OggExtractor &operator=(const OggExtractor &);
563cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber};
573cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
58ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huberbool SniffOgg(
595a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
605a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        sp<AMessage> *);
613cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
62856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenvoid parseVorbisComment(
63856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten        const sp<MetaData> &fileMeta, const char *comment, size_t commentLength);
64856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten
653cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber}  // namespace android
663cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber
67ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber#endif  // OGG_EXTRACTOR_H_
68