NuPlayer.h revision 1aef211b4e5dc952081727bfd2318b2cb5ca4506
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 Hubernamespace android { 25f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct ACodec; 27f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct MetaData; 28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer : public AHandler { 30f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NuPlayer(); 31f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 32f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setListener(const wp<MediaPlayerBase> &listener); 33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setDataSource(const sp<IStreamSource> &source); 355bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 365bc087c573c70c84c6a39946457590b42d392a33Andreas Huber void setDataSource( 375bc087c573c70c84c6a39946457590b42d392a33Andreas Huber const char *url, const KeyedVector<String8, String8> *headers); 385bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setVideoSurface(const sp<Surface> &surface); 40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink); 41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void start(); 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 431aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber // Will notify the listener that reset() has completed 441aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber // with code MEDIA_RESET_COMPLETE. 451aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void resetAsync(); 461aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~NuPlayer(); 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct Decoder; 545bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct HTTPLiveSource; 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct NuPlayerStreamListener; 565bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Renderer; 575bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Source; 585bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct StreamingSource; 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetDataSource, 62f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetVideoSurface, 63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetAudioSink, 64f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatMoreDataQueued, 65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatStart, 66f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatScanSources, 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatVideoNotify, 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatAudioNotify, 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatRendererNotify, 701aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber kWhatReset, 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber wp<MediaPlayerBase> mListener; 745bc087c573c70c84c6a39946457590b42d392a33Andreas Huber sp<Source> mSource; 75f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Surface> mSurface; 76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<MediaPlayerBase::AudioSink> mAudioSink; 77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mVideoDecoder; 78f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mAudioDecoder; 79f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Renderer> mRenderer; 80f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 81f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mAudioEOS; 82f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mVideoEOS; 83f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 845bc087c573c70c84c6a39946457590b42d392a33Andreas Huber bool mScanSourcesPending; 851aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber int32_t mScanSourcesGeneration; 865bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum FlushStatus { 88f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NONE, 89f933441648ef6a71dee783d733aac17b9508b452Andreas Huber AWAITING_DISCONTINUITY, 90f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FLUSHING_DECODER, 911aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber FLUSHING_DECODER_SHUTDOWN, 923831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUTTING_DOWN_DECODER, 933831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber FLUSHED, 943831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUT_DOWN, 95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingAudio; 98f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingVideo; 991aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetInProgress; 1001aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetPostponed; 101f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1025bc087c573c70c84c6a39946457590b42d392a33Andreas Huber status_t instantiateDecoder(bool audio, sp<Decoder> *decoder); 103f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 104f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg); 105f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void renderBuffer(bool audio, const sp<AMessage> &msg); 106f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 107f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyListener(int msg, int ext1, int ext2); 108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1093831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void finishFlushIfPossible(); 1103831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 1111aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void flushDecoder(bool audio, bool needShutdown); 1121aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1131aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL); 1141aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1151aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void finishReset(); 1161aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void postScanSources(); 11753df1a460bcfdd129ca2bc416dee2009e35c042eAndreas Huber 118f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuPlayer); 119f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 120f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 121f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 122f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 123f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NU_PLAYER_H_ 124