188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber/* 288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * Copyright 2012, The Android Open Source Project 388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * 488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * you may not use this file except in compliance with the License. 688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * You may obtain a copy of the License at 788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * 888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * 1088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * Unless required by applicable law or agreed to in writing, software 1188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * See the License for the specific language governing permissions and 1488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber * limitations under the License. 1588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber */ 1688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 1788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#ifndef _ANDROID_MEDIA_MEDIAEXTRACTOR_H_ 1888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#define _ANDROID_MEDIA_MEDIAEXTRACTOR_H_ 1988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 2088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include <media/stagefright/foundation/ABase.h> 21f2855b3df5994e165b29025c4c49d8e7d634c034Andreas Huber#include <media/stagefright/MediaSource.h> 22c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen#include <media/stagefright/DataSource.h> 2388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include <utils/Errors.h> 2407ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber#include <utils/KeyedVector.h> 2588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include <utils/RefBase.h> 2607ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber#include <utils/String8.h> 2788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 2888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#include "jni.h" 2988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 3088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Hubernamespace android { 3188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 3291befdc0c4710234840cdfd853e7d30e8f9de62cAndreas Huberstruct MetaData; 3388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberstruct NuMediaExtractor; 3488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 3588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberstruct JMediaExtractor : public RefBase { 3688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber JMediaExtractor(JNIEnv *env, jobject thiz); 3788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 3807ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber status_t setDataSource( 3907ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber const char *path, 4007ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber const KeyedVector<String8, String8> *headers); 4107ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber 4207ea426e3ae8915ca6bf67135f523f42cd920af0Andreas Huber status_t setDataSource(int fd, off64_t offset, off64_t size); 43c209a06cfdcf633f12a299245312e3ac32bff27cMarco Nelissen status_t setDataSource(const sp<DataSource> &source); 4488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 4588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber size_t countTracks() const; 4688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t getTrackFormat(size_t index, jobject *format) const; 4788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 48e20a6d5c479909f37af748a81a6e5a5deb7b6e2cMarco Nelissen status_t getFileFormat(jobject *format) const; 49e20a6d5c479909f37af748a81a6e5a5deb7b6e2cMarco Nelissen 5088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t selectTrack(size_t index); 51f2855b3df5994e165b29025c4c49d8e7d634c034Andreas Huber status_t unselectTrack(size_t index); 5288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 53f2855b3df5994e165b29025c4c49d8e7d634c034Andreas Huber status_t seekTo(int64_t timeUs, MediaSource::ReadOptions::SeekMode mode); 5488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 5588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t advance(); 5688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t readSampleData(jobject byteBuf, size_t offset, size_t *sampleSize); 5788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t getSampleTrackIndex(size_t *trackIndex); 5888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber status_t getSampleTime(int64_t *sampleTimeUs); 599b8e496f4d143280deff137c5f30ca8907bc28dbAndreas Huber status_t getSampleFlags(uint32_t *sampleFlags); 6091befdc0c4710234840cdfd853e7d30e8f9de62cAndreas Huber status_t getSampleMeta(sp<MetaData> *sampleMeta); 6188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 6274a78b0f6e8c07cfc7da8f043987f6de0648bc05Andreas Huber bool getCachedDuration(int64_t *durationUs, bool *eos) const; 6374a78b0f6e8c07cfc7da8f043987f6de0648bc05Andreas Huber 6488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberprotected: 6588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber virtual ~JMediaExtractor(); 6688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 6788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huberprivate: 6888572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber jclass mClass; 6988572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber jweak mObject; 7088572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber sp<NuMediaExtractor> mImpl; 7188572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 7288572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(JMediaExtractor); 7388572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber}; 7488572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 7588572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber} // namespace android 7688572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber 7788572f7a3e9d7ef85c26865a0150f3c2041561c2Andreas Huber#endif // _ANDROID_MEDIA_MEDIAEXTRACTOR_H_ 78