1e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman/* 2e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Copyright (C) 2009 The Android Open Source Project 3e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 4e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Licensed under the Apache License, Version 2.0 (the "License"); 5e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * you may not use this file except in compliance with the License. 6e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * You may obtain a copy of the License at 7e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 8e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * http://www.apache.org/licenses/LICENSE-2.0 9e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * 10e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * Unless required by applicable law or agreed to in writing, software 11e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * distributed under the License is distributed on an "AS IS" BASIS, 12e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * See the License for the specific language governing permissions and 14e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman * limitations under the License. 15e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman */ 16e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 17e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#ifndef IMEDIA_EXTRACTOR_BASE_H_ 18e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 19e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#define IMEDIA_EXTRACTOR_BASE_H_ 20e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 21e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/IMediaSource.h> 22e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#include <media/stagefright/DataSource.h> 23e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 24e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace android { 25e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 26e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass MetaData; 27e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramannamespace media { 28e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass ICas; 29e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 30e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanusing namespace media; 31e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 32e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass IMediaExtractor : public IInterface { 33e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic: 34e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman DECLARE_META_INTERFACE(MediaExtractor); 35e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 36e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual size_t countTracks() = 0; 37322db26b76f7511c6d73f34a92a4e54840fcb876Wei Jia // This function could return NULL IMediaSource even when index is within the 38322db26b76f7511c6d73f34a92a4e54840fcb876Wei Jia // track count returned by countTracks, since it's possible the track is malformed 39322db26b76f7511c6d73f34a92a4e54840fcb876Wei Jia // and it's not detected during countTracks call. 40e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual sp<IMediaSource> getTrack(size_t index) = 0; 41e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 42e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman enum GetTrackMetaDataFlags { 43e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman kIncludeExtensiveMetaData = 1 44e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman }; 45e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual sp<MetaData> getTrackMetaData( 46e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman size_t index, uint32_t flags = 0) = 0; 47e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 48e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // Return container specific meta-data. The default implementation 49e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // returns an empty metadata object. 50e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual sp<MetaData> getMetaData() = 0; 51e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 52e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual status_t getMetrics(Parcel *reply) = 0; 53e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 54e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman enum Flags { 55e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman CAN_SEEK_BACKWARD = 1, // the "seek 10secs back button" 56e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman CAN_SEEK_FORWARD = 2, // the "seek 10secs forward button" 57e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman CAN_PAUSE = 4, 58e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman CAN_SEEK = 8, // the "seek bar" 59e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman }; 60e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 61e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // If subclasses do _not_ override this, the default is 62e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE 63e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual uint32_t flags() const = 0; 64e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 65e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman // for DRM 66e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual char* getDrmTrackInfo(size_t trackID, int *len) = 0; 67e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 68e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual status_t setMediaCas(const sp<ICas> &cas) = 0; 69e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 70e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual void setUID(uid_t uid) = 0; 71e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 72e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual const char * name() = 0; 73e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 74e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 75e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 76e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanclass BnMediaExtractor: public BnInterface<IMediaExtractor> 77e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman{ 78e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanpublic: 79e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman virtual status_t onTransact(uint32_t code, const Parcel& data, Parcel* reply, 80e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman uint32_t flags = 0); 81e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman}; 82e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 83e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanvoid registerMediaExtractor( 84e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<IMediaExtractor> &extractor, 85e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<DataSource> &source, 86e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const char *mime); 87e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 88e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanvoid registerMediaSource( 89e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<IMediaExtractor> &extractor, 90e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman const sp<IMediaSource> &source); 91e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 92e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatramanstatus_t dumpExtractors(int fd, const Vector<String16>& args); 93e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 94e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 95e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman} // namespace android 96e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman 97e2b43843fd12783188edd2c54188ea8d26864788Vijay Venkatraman#endif // IMEDIA_EXTRACTOR_BASE_H_ 98