NuPlayer.h revision 1173118eace0e9e347cb007f0da817cee87579ed
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> 231173118eace0e9e347cb007f0da817cee87579edGlenn Kasten#include <media/stagefright/NativeWindowWrapper.h> 241173118eace0e9e347cb007f0da817cee87579edGlenn Kasten#include <gui/SurfaceTextureClient.h> 251173118eace0e9e347cb007f0da817cee87579edGlenn Kasten#include <surfaceflinger/Surface.h> 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 27f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android { 28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct ACodec; 30f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct MetaData; 3143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huberstruct NuPlayerDriver; 32f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 33f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer : public AHandler { 34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NuPlayer(); 35f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 3643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void setDriver(const wp<NuPlayerDriver> &driver); 37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setDataSource(const sp<IStreamSource> &source); 395bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 405bc087c573c70c84c6a39946457590b42d392a33Andreas Huber void setDataSource( 415bc087c573c70c84c6a39946457590b42d392a33Andreas Huber const char *url, const KeyedVector<String8, String8> *headers); 425bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setVideoSurface(const sp<Surface> &surface); 441173118eace0e9e347cb007f0da817cee87579edGlenn Kasten void setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); 45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink); 46f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void start(); 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 4843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void pause(); 4943c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void resume(); 5043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 5143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber // Will notify the driver through "notifyResetComplete" once finished. 521aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void resetAsync(); 531aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 5443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber // Will notify the driver through "notifySeekComplete" once finished. 5543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void seekToAsync(int64_t seekTimeUs); 5643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~NuPlayer(); 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 62f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct Decoder; 645bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct HTTPLiveSource; 65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct NuPlayerStreamListener; 665bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Renderer; 675bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Source; 685bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct StreamingSource; 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 70f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetDataSource, 721173118eace0e9e347cb007f0da817cee87579edGlenn Kasten kWhatSetVideoNativeWindow, 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetAudioSink, 74f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatMoreDataQueued, 75f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatStart, 76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatScanSources, 77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatVideoNotify, 78f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatAudioNotify, 79f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatRendererNotify, 801aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber kWhatReset, 8143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber kWhatSeek, 82b408222bd9479c291874b607acae1425d6154fe7Andreas Huber kWhatPause, 83b408222bd9479c291874b607acae1425d6154fe7Andreas Huber kWhatResume, 84f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 85f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 8643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber wp<NuPlayerDriver> mDriver; 875bc087c573c70c84c6a39946457590b42d392a33Andreas Huber sp<Source> mSource; 881173118eace0e9e347cb007f0da817cee87579edGlenn Kasten sp<NativeWindowWrapper> mNativeWindow; 89f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<MediaPlayerBase::AudioSink> mAudioSink; 90f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mVideoDecoder; 91f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mAudioDecoder; 92f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Renderer> mRenderer; 93f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 94f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mAudioEOS; 95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mVideoEOS; 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 975bc087c573c70c84c6a39946457590b42d392a33Andreas Huber bool mScanSourcesPending; 981aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber int32_t mScanSourcesGeneration; 995bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 100f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum FlushStatus { 101f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NONE, 102f933441648ef6a71dee783d733aac17b9508b452Andreas Huber AWAITING_DISCONTINUITY, 103f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FLUSHING_DECODER, 1041aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber FLUSHING_DECODER_SHUTDOWN, 1053831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUTTING_DOWN_DECODER, 1063831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber FLUSHED, 1073831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUT_DOWN, 108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 109f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 110f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingAudio; 111f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingVideo; 1121aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetInProgress; 1131aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetPostponed; 114f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1155bc087c573c70c84c6a39946457590b42d392a33Andreas Huber status_t instantiateDecoder(bool audio, sp<Decoder> *decoder); 116f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 117f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg); 118f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void renderBuffer(bool audio, const sp<AMessage> &msg); 119f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 120f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyListener(int msg, int ext1, int ext2); 121f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1223831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void finishFlushIfPossible(); 1233831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 1241aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void flushDecoder(bool audio, bool needShutdown); 1251aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1261aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL); 1271aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1281aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void finishReset(); 1291aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void postScanSources(); 13053df1a460bcfdd129ca2bc416dee2009e35c042eAndreas Huber 131f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuPlayer); 132f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 133f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 134f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 135f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 136f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NU_PLAYER_H_ 137