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 30ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huberstruct MyVorbisExtractor; 31ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huberstruct OggSource; 323cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 33ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huberstruct OggExtractor : public MediaExtractor { 34ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber OggExtractor(const sp<DataSource> &source); 353cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 363cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber virtual size_t countTracks(); 373cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber virtual sp<MediaSource> getTrack(size_t index); 383cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 393cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 403cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber virtual sp<MetaData> getMetaData(); 413cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 423cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huberprotected: 43ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber virtual ~OggExtractor(); 443cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 453cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huberprivate: 46ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber friend struct OggSource; 47ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber 483cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber sp<DataSource> mDataSource; 493cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber status_t mInitCheck; 503cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 51ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber MyVorbisExtractor *mImpl; 52ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber 53ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber OggExtractor(const OggExtractor &); 54ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber OggExtractor &operator=(const OggExtractor &); 553cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber}; 563cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 57ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huberbool SniffOgg( 585a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 595a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber sp<AMessage> *); 603cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 61856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kastenvoid parseVorbisComment( 62856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten const sp<MetaData> &fileMeta, const char *comment, size_t commentLength); 63856990b491d84b7ed4fefe337485c8997ba9dd02Glenn Kasten 643cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber} // namespace android 653cf4e43cdd391502690c07e08e805aa8ff5db0c0Andreas Huber 66ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber#endif // OGG_EXTRACTOR_H_ 67