NuPlayer.h revision 32f3cefa373cd55e63deda36ca9d07c7fe22eaaf
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 11532f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber int64_t mSkipRenderingAudioUntilMediaTimeUs; 11632f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber int64_t mSkipRenderingVideoUntilMediaTimeUs; 11732f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber 1185bc087c573c70c84c6a39946457590b42d392a33Andreas Huber status_t instantiateDecoder(bool audio, sp<Decoder> *decoder); 119f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 120f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg); 121f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void renderBuffer(bool audio, const sp<AMessage> &msg); 122f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 123f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyListener(int msg, int ext1, int ext2); 124f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1253831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void finishFlushIfPossible(); 1263831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 1271aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void flushDecoder(bool audio, bool needShutdown); 1281aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1291aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL); 1301aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1311aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void finishReset(); 1321aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void postScanSources(); 13353df1a460bcfdd129ca2bc416dee2009e35c042eAndreas Huber 134f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuPlayer); 135f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 136f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 137f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 138f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 139f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NU_PLAYER_H_ 140