NuPlayer.h revision 9b80c2bdb205bc143104f54d0743b6eedd67b14e
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 369b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber void setUID(uid_t uid); 379b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber 3843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void setDriver(const wp<NuPlayerDriver> &driver); 39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setDataSource(const sp<IStreamSource> &source); 415bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 425bc087c573c70c84c6a39946457590b42d392a33Andreas Huber void setDataSource( 435bc087c573c70c84c6a39946457590b42d392a33Andreas Huber const char *url, const KeyedVector<String8, String8> *headers); 445bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setVideoSurface(const sp<Surface> &surface); 461173118eace0e9e347cb007f0da817cee87579edGlenn Kasten void setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink); 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void start(); 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 5043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void pause(); 5143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void resume(); 5243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 5343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber // Will notify the driver through "notifyResetComplete" once finished. 541aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void resetAsync(); 551aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 5643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber // Will notify the driver through "notifySeekComplete" once finished. 5743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void seekToAsync(int64_t seekTimeUs); 5843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~NuPlayer(); 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 62f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 64f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct Decoder; 665bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct HTTPLiveSource; 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct NuPlayerStreamListener; 685bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Renderer; 695bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Source; 705bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct StreamingSource; 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetDataSource, 741173118eace0e9e347cb007f0da817cee87579edGlenn Kasten kWhatSetVideoNativeWindow, 75f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetAudioSink, 76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatMoreDataQueued, 77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatStart, 78f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatScanSources, 79f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatVideoNotify, 80f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatAudioNotify, 81f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatRendererNotify, 821aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber kWhatReset, 8343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber kWhatSeek, 84b408222bd9479c291874b607acae1425d6154fe7Andreas Huber kWhatPause, 85b408222bd9479c291874b607acae1425d6154fe7Andreas Huber kWhatResume, 86f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 8843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber wp<NuPlayerDriver> mDriver; 899b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber bool mUIDValid; 909b80c2bdb205bc143104f54d0743b6eedd67b14eAndreas Huber uid_t mUID; 915bc087c573c70c84c6a39946457590b42d392a33Andreas Huber sp<Source> mSource; 921173118eace0e9e347cb007f0da817cee87579edGlenn Kasten sp<NativeWindowWrapper> mNativeWindow; 93f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<MediaPlayerBase::AudioSink> mAudioSink; 94f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mVideoDecoder; 95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mAudioDecoder; 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Renderer> mRenderer; 97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 98f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mAudioEOS; 99f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mVideoEOS; 100f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1015bc087c573c70c84c6a39946457590b42d392a33Andreas Huber bool mScanSourcesPending; 1021aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber int32_t mScanSourcesGeneration; 1035bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 104f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum FlushStatus { 105f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NONE, 106f933441648ef6a71dee783d733aac17b9508b452Andreas Huber AWAITING_DISCONTINUITY, 107f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FLUSHING_DECODER, 1081aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber FLUSHING_DECODER_SHUTDOWN, 1093831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUTTING_DOWN_DECODER, 1103831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber FLUSHED, 1113831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUT_DOWN, 112f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 113f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 114f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingAudio; 115f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingVideo; 1161aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetInProgress; 1171aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetPostponed; 118f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 11932f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber int64_t mSkipRenderingAudioUntilMediaTimeUs; 12032f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber int64_t mSkipRenderingVideoUntilMediaTimeUs; 12132f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber 1225bc087c573c70c84c6a39946457590b42d392a33Andreas Huber status_t instantiateDecoder(bool audio, sp<Decoder> *decoder); 123f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 124f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg); 125f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void renderBuffer(bool audio, const sp<AMessage> &msg); 126f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 127f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyListener(int msg, int ext1, int ext2); 128f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1293831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void finishFlushIfPossible(); 1303831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 1311aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void flushDecoder(bool audio, bool needShutdown); 1321aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1331aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL); 1341aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1351aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void finishReset(); 1361aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void postScanSources(); 13753df1a460bcfdd129ca2bc416dee2009e35c042eAndreas Huber 138f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuPlayer); 139f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 140f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 141f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 142f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 143f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NU_PLAYER_H_ 144