NuPlayerSource.h revision 866e028bbe30b1ba0b9d8903c88bbe8525b81a37
16f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/* 26f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * Copyright (C) 2010 The Android Open Source Project 36f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * 46f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 56f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * you may not use this file except in compliance with the License. 66f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * You may obtain a copy of the License at 76f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * 86f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 96f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * 10f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines * Unless required by applicable law or agreed to in writing, software 116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines * See the License for the specific language governing permissions and 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines * limitations under the License. 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines */ 166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#ifndef NUPLAYER_SOURCE_H_ 186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define NUPLAYER_SOURCE_H_ 206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include "NuPlayer.h" 226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <media/stagefright/foundation/AMessage.h> 24f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#include <media/stagefright/MetaData.h> 2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include <media/mediaplayer.h> 266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <utils/Vector.h> 276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 28f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesnamespace android { 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesstruct ABuffer; 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesstruct MetaData; 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesstruct MediaBuffer; 336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesstruct NuPlayer::Source : public AHandler { 356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines enum Flags { 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines FLAG_CAN_PAUSE = 1, 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines FLAG_CAN_SEEK_BACKWARD = 2, // the "10 sec back button" 38cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines FLAG_CAN_SEEK_FORWARD = 4, // the "10 sec forward button" 39cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines FLAG_CAN_SEEK = 8, // the "seek bar" 40cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines FLAG_DYNAMIC_DURATION = 16, 41cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines FLAG_SECURE = 32, 426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines }; 43f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines enum { 45f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines kWhatPrepared, 46551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines kWhatFlagsChanged, 47f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines kWhatVideoSizeChanged, 486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines kWhatBufferingUpdate, 496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines kWhatBufferingStart, 5037b74a387bb3993387029859c2d9d051c41c724eStephen Hines kWhatBufferingEnd, 516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines kWhatSubtitleData, 526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines kWhatTimedTextData, 5337b74a387bb3993387029859c2d9d051c41c724eStephen Hines kWhatQueueDecoderShutdown, 54551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines kWhatDrmNoLicense, 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines }; 56551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines // The provides message is used to notify the player about various 586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines // events. 596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines Source(const sp<AMessage> ¬ify) 606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines : mNotify(notify) { 616f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines } 626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 636f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual void prepareAsync() = 0; 6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 656f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual void start() = 0; 666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual void stop() {} 676f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual void pause() {} 686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual void resume() {} 69f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 70f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines // Explicitly disconnect the underling data source 71f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines virtual void disconnect() {} 72f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 73f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines // Returns OK iff more data was available, 74f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines // an error or ERROR_END_OF_STREAM if not. 75551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines virtual status_t feedMoreTSData() = 0; 76f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 776f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual sp<AMessage> getFormat(bool audio); 786f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual sp<MetaData> getFormatMeta(bool /* audio */) { return NULL; } 796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual sp<MetaData> getFileFormatMeta() const { return NULL; } 80551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 81551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines virtual status_t dequeueAccessUnit( 826f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines bool audio, sp<ABuffer> *accessUnit) = 0; 836f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 846f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines virtual status_t getDuration(int64_t * /* durationUs */) { 856f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return INVALID_OPERATION; 866f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines } 8737b74a387bb3993387029859c2d9d051c41c724eStephen Hines 88551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines virtual size_t getTrackCount() const { 89f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return 0; 90f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines } 9137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 92551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines virtual sp<AMessage> getTrackInfo(size_t /* trackIndex */) const { 93f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return NULL; 94f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines } 9537b74a387bb3993387029859c2d9d051c41c724eStephen Hines 96f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines virtual ssize_t getSelectedTrack(media_track_type /* type */) const { 97f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return INVALID_OPERATION; 98f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines } 99f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 100f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines virtual status_t selectTrack(size_t /* trackIndex */, bool /* select */) { 101f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return INVALID_OPERATION; 102f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines } 103f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 104f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines virtual status_t seekTo(int64_t /* seekTimeUs */) { 105f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return INVALID_OPERATION; 106f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines } 107f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 10837b74a387bb3993387029859c2d9d051c41c724eStephen Hines virtual status_t setBuffers(bool /* audio */, Vector<MediaBuffer *> &/* buffers */) { 10937b74a387bb3993387029859c2d9d051c41c724eStephen Hines return INVALID_OPERATION; 110f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines } 111f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 112f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines virtual bool isRealTime() const { 113f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return false; 114f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines } 115f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 116f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hinesprotected: 117f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines virtual ~Source() {} 118f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 119f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines virtual void onMessageReceived(const sp<AMessage> &msg); 120f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 121f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines sp<AMessage> dupNotify() const { return mNotify->dup(); } 122f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 123f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines void notifyFlagsChanged(uint32_t flags); 124f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines void notifyVideoSizeChanged(const sp<AMessage> &format = NULL); 125f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines void notifyPrepared(status_t err = OK); 126551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines 127551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hinesprivate: 128f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines sp<AMessage> mNotify; 129f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 130f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines DISALLOW_EVIL_CONSTRUCTORS(Source); 13137b74a387bb3993387029859c2d9d051c41c724eStephen Hines}; 132f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 133f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines} // namespace android 13437b74a387bb3993387029859c2d9d051c41c724eStephen Hines 135f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines#endif // NUPLAYER_SOURCE_H_ 13637b74a387bb3993387029859c2d9d051c41c724eStephen Hines 137f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines