NuPlayerSource.h revision 9737d3497f6ef8bf6a1083aabd8a03569944795d
1282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski/* 2282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Copyright (C) 2010 The Android Open Source Project 3282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * 4282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * you may not use this file except in compliance with the License. 6ad2d07d2d98a46babb2a9472413fe9ce5080ca76Adam Lesinski * You may obtain a copy of the License at 7fab50875b98e8274ac8ee44b38ba42521bbbf1f9Adam Lesinski * 8282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 92c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski * 102c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski * Unless required by applicable law or agreed to in writing, software 11282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * See the License for the specific language governing permissions and 14282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski * limitations under the License. 152c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski */ 162c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski 172c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski#ifndef NUPLAYER_SOURCE_H_ 18282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 192c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski#define NUPLAYER_SOURCE_H_ 20282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 212c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski#include "NuPlayer.h" 22282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 23282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <media/stagefright/foundation/AMessage.h> 242c72b6822debb08fe997926eedc110f62d287d34Adam Lesinski#include <media/stagefright/MetaData.h> 25282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <media/mediaplayer.h> 26282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#include <utils/Vector.h> 27282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 28ad751224401564dcc8338df3d5c4c5de7722be8fAdam Lesinskinamespace android { 29ad751224401564dcc8338df3d5c4c5de7722be8fAdam Lesinski 30ad751224401564dcc8338df3d5c4c5de7722be8fAdam Lesinskistruct ABuffer; 31ad751224401564dcc8338df3d5c4c5de7722be8fAdam Lesinskiclass MediaBuffer; 32282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 33282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskistruct NuPlayer::Source : public AHandler { 34282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski enum Flags { 35282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FLAG_CAN_PAUSE = 1, 36282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FLAG_CAN_SEEK_BACKWARD = 2, // the "10 sec back button" 37282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FLAG_CAN_SEEK_FORWARD = 4, // the "10 sec forward button" 38282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FLAG_CAN_SEEK = 8, // the "seek bar" 39282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FLAG_DYNAMIC_DURATION = 16, 40ad751224401564dcc8338df3d5c4c5de7722be8fAdam Lesinski FLAG_SECURE = 32, 41282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski FLAG_PROTECTED = 64, 42282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 43282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 44282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski enum { 45282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatPrepared, 46282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatFlagsChanged, 47282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatVideoSizeChanged, 48282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatBufferingUpdate, 49282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatPauseOnBufferingStart, 50282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatResumeOnBufferingEnd, 51282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatCacheStats, 52282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatSubtitleData, 53282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatTimedTextData, 54282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatTimedMetaData, 55282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatQueueDecoderShutdown, 56282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatDrmNoLicense, 57282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski kWhatInstantiateSecureDecoders, 58282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski }; 59282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 60282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // The provides message is used to notify the player about various 61282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // events. 62282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski explicit Source(const sp<AMessage> ¬ify) 63282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski : mNotify(notify) { 64282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 65282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 66282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void prepareAsync() = 0; 67282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 68282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void start() = 0; 69282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void stop() {} 70282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void pause() {} 71282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void resume() {} 72282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 73282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Explicitly disconnect the underling data source 74282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void disconnect() {} 75282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 76282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Returns OK iff more data was available, 77282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // an error or ERROR_END_OF_STREAM if not. 78282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual status_t feedMoreTSData() = 0; 79282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 80282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Returns non-NULL format when the specified track exists. 81282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // When the format has "err" set to -EWOULDBLOCK, source needs more time to get valid meta data. 82282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski // Returns NULL if the specified track doesn't exist or is invalid; 83282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual sp<AMessage> getFormat(bool audio); 84282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 85282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual sp<MetaData> getFormatMeta(bool /* audio */) { return NULL; } 86282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual sp<MetaData> getFileFormatMeta() const { return NULL; } 87282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 88282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual status_t dequeueAccessUnit( 89282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski bool audio, sp<ABuffer> *accessUnit) = 0; 90282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 91282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual status_t getDuration(int64_t * /* durationUs */) { 92282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return INVALID_OPERATION; 93282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 94282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 95282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual size_t getTrackCount() const { 96282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return 0; 97282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 98282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 99282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual sp<AMessage> getTrackInfo(size_t /* trackIndex */) const { 100282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return NULL; 101282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 102282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 103282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ssize_t getSelectedTrack(media_track_type /* type */) const { 104282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return INVALID_OPERATION; 105282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 106282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 107282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual status_t selectTrack(size_t /* trackIndex */, bool /* select */, int64_t /* timeUs*/) { 108282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return INVALID_OPERATION; 109282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 110282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 111282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual status_t seekTo( 112282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski int64_t /* seekTimeUs */, 113282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski MediaPlayerSeekMode /* mode */ = MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC) { 114282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return INVALID_OPERATION; 115282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 116282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 117282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual status_t setBuffers(bool /* audio */, Vector<MediaBuffer *> &/* buffers */) { 118282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return INVALID_OPERATION; 119282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 120282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 121282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool isRealTime() const { 122282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return false; 123282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 124282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 125282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual bool isStreaming() const { 126282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski return true; 127282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski } 128282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 129282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void setOffloadAudio(bool /* offload */) {} 130282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 131282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprotected: 132282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual ~Source() {} 133282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 134282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski virtual void onMessageReceived(const sp<AMessage> &msg); 135282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 136282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AMessage> dupNotify() const { return mNotify->dup(); } 137282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 138282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void notifyFlagsChanged(uint32_t flags); 139282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void notifyVideoSizeChanged(const sp<AMessage> &format = NULL); 140282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void notifyInstantiateSecureDecoders(const sp<AMessage> &reply); 141282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski void notifyPrepared(status_t err = OK); 142282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 143282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinskiprivate: 144282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski sp<AMessage> mNotify; 145282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 146282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski DISALLOW_EVIL_CONSTRUCTORS(Source); 147282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski}; 148282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 149282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski} // namespace android 150282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 151282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski#endif // NUPLAYER_SOURCE_H_ 152282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski 153282e181b58cf72b6ca770dc7ca5f91f135444502Adam Lesinski