1e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber/* 2e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Copyright (C) 2009 The Android Open Source Project 3e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * 4e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * you may not use this file except in compliance with the License. 6e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * You may obtain a copy of the License at 7e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * 8e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * 10e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * Unless required by applicable law or agreed to in writing, software 11e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * See the License for the specific language governing permissions and 14e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber * limitations under the License. 15e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber */ 16e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 17e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#ifndef MEDIA_EXTRACTOR_H_ 18e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 19e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#define MEDIA_EXTRACTOR_H_ 20e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 21e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#include <utils/RefBase.h> 22e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 23e46b7be812d68e49710b34048662cbf18e2a6550Andreas Hubernamespace android { 24e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 25e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass DataSource; 26e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass MediaSource; 27e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberclass MetaData; 28e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 29be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huberclass MediaExtractor : public RefBase { 30e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberpublic: 31be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber static sp<MediaExtractor> Create( 32be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber const sp<DataSource> &source, const char *mime = NULL); 33e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 34be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber virtual size_t countTracks() = 0; 35be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber virtual sp<MediaSource> getTrack(size_t index) = 0; 36e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber 37e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber enum GetTrackMetaDataFlags { 38e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber kIncludeExtensiveMetaData = 1 39e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber }; 40e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber virtual sp<MetaData> getTrackMetaData( 41e981c33446a98d5ccc0d73c1a840696d77cf0732Andreas Huber size_t index, uint32_t flags = 0) = 0; 42e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 43aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber // Return container specific meta-data. The default implementation 44aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber // returns an empty metadata object. 45aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber virtual sp<MetaData> getMetaData(); 46aee3c6394a367abf283936cb8b8bd85ed028c050Andreas Huber 4762f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber enum Flags { 4810b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber CAN_SEEK_BACKWARD = 1, // the "seek 10secs back button" 4910b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber CAN_SEEK_FORWARD = 2, // the "seek 10secs forward button" 5062f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber CAN_PAUSE = 4, 5110b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber CAN_SEEK = 8, // the "seek bar" 5262f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber }; 5362f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber 5462f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber // If subclasses do _not_ override this, the default is 5510b9b3f3fe47cea0833fe2c7d5ed08a1185f9006Andreas Huber // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE 5662f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber virtual uint32_t flags() const; 5762f7ffe106a7126ef31b199552c5cfc6599bc3d1Andreas Huber 58d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang // for DRM 5982428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang virtual void setDrmFlag(bool flag) { 6082428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang mIsDrm = flag; 6182428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang }; 6282428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang virtual bool getDrmFlag() { 6382428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang return mIsDrm; 6482428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang } 65d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang virtual char* getDrmTrackInfo(size_t trackID, int *len) { 66d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang return NULL; 67d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang } 68d5770917a50a828cb4337c2a392b3e4a375624b9Gloria Wang 69e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberprotected: 70e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber MediaExtractor() {} 71be06d26cdc70070654f1eedcd08c1c68cd587ad6Andreas Huber virtual ~MediaExtractor() {} 72e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 73e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huberprivate: 7482428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang bool mIsDrm; 7582428a862f325238cfb5646bbd65de3f1a11e7ccGloria Wang 76e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber MediaExtractor(const MediaExtractor &); 77e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber MediaExtractor &operator=(const MediaExtractor &); 78e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber}; 79e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 80e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber} // namespace android 81e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber 82e46b7be812d68e49710b34048662cbf18e2a6550Andreas Huber#endif // MEDIA_EXTRACTOR_H_ 83