GenericSource.h revision dd235727a1b4e283deeb581559f99c2c8889da07
1afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber/* 2afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * Copyright (C) 2012 The Android Open Source Project 3afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * 4afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * you may not use this file except in compliance with the License. 6afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * You may obtain a copy of the License at 7afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * 8afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * 10afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * Unless required by applicable law or agreed to in writing, software 11afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * See the License for the specific language governing permissions and 14afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber * limitations under the License. 15afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber */ 16afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 17afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber#ifndef GENERIC_SOURCE_H_ 18afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 19afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber#define GENERIC_SOURCE_H_ 20afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 21afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber#include "NuPlayer.h" 22afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber#include "NuPlayerSource.h" 23afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 24afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber#include "ATSParser.h" 25afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 26afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Hubernamespace android { 27afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 28afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct AnotherPacketSource; 29afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct ARTSPController; 30afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct DataSource; 31afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct MediaSource; 32afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 33afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct NuPlayer::GenericSource : public NuPlayer::Source { 34afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber GenericSource( 35b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber const sp<AMessage> ¬ify, 361b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 37afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber const char *url, 3881e68448f3361eaf8618930471fdc3c21bdf5cbcAndreas Huber const KeyedVector<String8, String8> *headers); 39afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 40b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber GenericSource( 41b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber const sp<AMessage> ¬ify, 42b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber int fd, int64_t offset, int64_t length); 43afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 449575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber virtual void prepareAsync(); 459575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber 46afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual void start(); 47afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 48afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t feedMoreTSData(); 49afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 50afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); 51afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 52afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t getDuration(int64_t *durationUs); 53dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih virtual size_t getTrackCount() const; 54dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; 55afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t seekTo(int64_t seekTimeUs); 56b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber 57afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberprotected: 58afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual ~GenericSource(); 59afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 60840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber virtual sp<MetaData> getFormatMeta(bool audio); 61840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 62afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberprivate: 63dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih Vector<sp<MediaSource> > mSources; 64dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih 65afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber struct Track { 66dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih size_t mIndex; 67afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber sp<MediaSource> mSource; 68afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber sp<AnotherPacketSource> mPackets; 69afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber }; 70afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 71afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber Track mAudioTrack; 72afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber Track mVideoTrack; 73afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 74afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber int64_t mDurationUs; 75afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber bool mAudioIsVorbis; 76afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 77afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber void initFromDataSource(const sp<DataSource> &dataSource); 78afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 79afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber void readBuffer( 80afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber bool audio, 81afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL); 82afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 83afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(GenericSource); 84afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber}; 85afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 86afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber} // namespace android 87afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 88afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber#endif // GENERIC_SOURCE_H_ 89