NuPlayer.h revision 3831a066bcf1019864a94d2bc7b4c9241efc5c22
1f933441648ef6a71dee783d733aac17b9508b452Andreas Huber/* 2f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 4f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * you may not use this file except in compliance with the License. 6f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * You may obtain a copy of the License at 7f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 8f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 10f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Unless required by applicable law or agreed to in writing, software 11f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * See the License for the specific language governing permissions and 14f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * limitations under the License. 15f933441648ef6a71dee783d733aac17b9508b452Andreas Huber */ 16f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#ifndef NU_PLAYER_H_ 18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define NU_PLAYER_H_ 20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/MediaPlayerInterface.h> 22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/stagefright/foundation/AHandler.h> 23f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "ATSParser.h" 25f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "AnotherPacketSource.h" 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 27f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android { 28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct ACodec; 30f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct MetaData; 31f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 32f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer : public AHandler { 33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NuPlayer(); 34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 35f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setListener(const wp<MediaPlayerBase> &listener); 36f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setDataSource(const sp<IStreamSource> &source); 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setVideoSurface(const sp<Surface> &surface); 39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink); 40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void start(); 41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~NuPlayer(); 44f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 46f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct Renderer; 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct Decoder; 50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct NuPlayerStreamListener; 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetDataSource, 54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetVideoSurface, 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetAudioSink, 56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatMoreDataQueued, 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatStart, 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatScanSources, 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatVideoNotify, 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatAudioNotify, 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatRendererNotify, 62f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 64f933441648ef6a71dee783d733aac17b9508b452Andreas Huber wp<MediaPlayerBase> mListener; 65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<IStreamSource> mSource; 66f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Surface> mSurface; 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<MediaPlayerBase::AudioSink> mAudioSink; 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<NuPlayerStreamListener> mStreamListener; 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<ATSParser> mTSParser; 70f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mVideoDecoder; 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mAudioDecoder; 72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Renderer> mRenderer; 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 74f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mEOS; 75f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mAudioEOS; 76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mVideoEOS; 77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 78f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum FlushStatus { 79f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NONE, 80f933441648ef6a71dee783d733aac17b9508b452Andreas Huber AWAITING_DISCONTINUITY, 81f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FLUSHING_DECODER, 823831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUTTING_DOWN_DECODER, 833831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber FLUSHED, 843831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUT_DOWN, 85f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 86f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingAudio; 88f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingVideo; 89f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 90f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t instantiateDecoder( 913831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber bool audio, sp<Decoder> *decoder, bool ignoreCodecSpecificData); 92f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 93f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg); 94f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void renderBuffer(bool audio, const sp<AMessage> &msg); 95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t dequeueNextAccessUnit( 97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber ATSParser::SourceType *type, sp<ABuffer> *accessUnit); 98f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 99f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t dequeueAccessUnit( 100f933441648ef6a71dee783d733aac17b9508b452Andreas Huber ATSParser::SourceType type, sp<ABuffer> *accessUnit); 101f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 102f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void feedMoreTSData(); 103f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyListener(int msg, int ext1, int ext2); 104f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1053831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void finishFlushIfPossible(); 1063831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 107f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuPlayer); 108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 109f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 110f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 111f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 112f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NU_PLAYER_H_ 113