GenericSource.h revision e26940f11c3f2040bced09f06a8f374b50c985fb
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 263423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih#include <media/mediaplayer.h> 273423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih 28afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Hubernamespace android { 29afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 30afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct AnotherPacketSource; 31afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct ARTSPController; 32afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct DataSource; 33afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct MediaSource; 343423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shihclass MediaBuffer; 35afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 36afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberstruct NuPlayer::GenericSource : public NuPlayer::Source { 37afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber GenericSource( 38b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber const sp<AMessage> ¬ify, 391b86fe063badb5f28c467ade39be0f4008688947Andreas Huber const sp<IMediaHTTPService> &httpService, 40afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber const char *url, 41cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar const KeyedVector<String8, String8> *headers, 42cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar bool isWidevine = false, 43cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar bool uidValid = false, 44cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar uid_t uid = 0); 45afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 46b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber GenericSource( 47b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber const sp<AMessage> ¬ify, 48b5f25f005bc1d3ae35f45b58c88345e183dc336dAndreas Huber int fd, int64_t offset, int64_t length); 49afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 509575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber virtual void prepareAsync(); 519575c96b6e418914e2ffc6741ecc8d71e3968dbeAndreas Huber 52afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual void start(); 53afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 54afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t feedMoreTSData(); 55afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 56afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); 57afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 58afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t getDuration(int64_t *durationUs); 59dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih virtual size_t getTrackCount() const; 60dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; 61e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar virtual ssize_t getSelectedTrack(media_track_type type) const; 623423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih virtual status_t selectTrack(size_t trackIndex, bool select); 63afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual status_t seekTo(int64_t seekTimeUs); 64b7c8e91880463ff4981e3e53e98e45d68e2fe374Andreas Huber 65cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar virtual status_t setBuffers(bool audio, Vector<MediaBuffer *> &buffers); 66cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar 67afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberprotected: 68afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber virtual ~GenericSource(); 69afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 703423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih virtual void onMessageReceived(const sp<AMessage> &msg); 713423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih 72840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber virtual sp<MetaData> getFormatMeta(bool audio); 73840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 74afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huberprivate: 753423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih enum { 763423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih kWhatFetchSubtitleData, 77e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar kWhatFetchTimedTextData, 783423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih kWhatSendSubtitleData, 79e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar kWhatSendTimedTextData, 803423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih kWhatChangeAVSource, 813423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih }; 823423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih 83dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih Vector<sp<MediaSource> > mSources; 84dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih 85afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber struct Track { 86dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih size_t mIndex; 87afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber sp<MediaSource> mSource; 88afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber sp<AnotherPacketSource> mPackets; 89afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber }; 90afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 91afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber Track mAudioTrack; 92afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber Track mVideoTrack; 933423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih Track mSubtitleTrack; 94e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar Track mTimedTextTrack; 95afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 963423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih int32_t mFetchSubtitleDataGeneration; 97e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar int32_t mFetchTimedTextDataGeneration; 98afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber int64_t mDurationUs; 99afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber bool mAudioIsVorbis; 100cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar bool mIsWidevine; 101cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar bool mUIDValid; 102cc227036b05f7c2f960a89c567a61f9decefe742Lajos Molnar uid_t mUID; 103afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 104afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber void initFromDataSource(const sp<DataSource> &dataSource); 105afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 106e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar void fetchTextData( 107e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar uint32_t what, media_track_type type, 108e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar int32_t curGen, sp<AnotherPacketSource> packets, sp<AMessage> msg); 109e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar 110e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar void sendTextData( 111e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar uint32_t what, media_track_type type, 112e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar int32_t curGen, sp<AnotherPacketSource> packets, sp<AMessage> msg); 113e26940f11c3f2040bced09f06a8f374b50c985fbLajos Molnar 1143423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih sp<ABuffer> mediaBufferToABuffer( 1153423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih MediaBuffer *mbuf, 1163423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih media_track_type trackType, 1173423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih int64_t *actualTimeUs = NULL); 1183423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih 119afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber void readBuffer( 1203423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih media_track_type trackType, 1213423bbdb05f843a64356fa24e8657f03ecbb7d65Robert Shih int64_t seekTimeUs = -1ll, int64_t *actualTimeUs = NULL, bool formatChange = false); 122afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 123afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(GenericSource); 124afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber}; 125afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 126afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber} // namespace android 127afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber 128afed0e1fa37473a4cd30018577b560acc79d9a3fAndreas Huber#endif // GENERIC_SOURCE_H_ 129