NuPlayer.h revision 43c3e6ce02215ca99d506458f596cb1211639f29
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; 2843c3e6ce02215ca99d506458f596cb1211639f29Andreas Huberstruct NuPlayerDriver; 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 30f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer : public AHandler { 31f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NuPlayer(); 32f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 3343c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void setDriver(const wp<NuPlayerDriver> &driver); 34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 35f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setDataSource(const sp<IStreamSource> &source); 365bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 375bc087c573c70c84c6a39946457590b42d392a33Andreas Huber void setDataSource( 385bc087c573c70c84c6a39946457590b42d392a33Andreas Huber const char *url, const KeyedVector<String8, String8> *headers); 395bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setVideoSurface(const sp<Surface> &surface); 41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink); 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void start(); 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 4443c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void pause(); 4543c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void resume(); 4643c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 4743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber // Will notify the driver through "notifyResetComplete" once finished. 481aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void resetAsync(); 491aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 5043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber // Will notify the driver through "notifySeekComplete" once finished. 5143c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber void seekToAsync(int64_t seekTimeUs); 5243c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~NuPlayer(); 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct Decoder; 605bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct HTTPLiveSource; 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct NuPlayerStreamListener; 625bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Renderer; 635bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct Source; 645bc087c573c70c84c6a39946457590b42d392a33Andreas Huber struct StreamingSource; 65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 66f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetDataSource, 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetVideoSurface, 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatSetAudioSink, 70f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatMoreDataQueued, 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatStart, 72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatScanSources, 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatVideoNotify, 74f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatAudioNotify, 75f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatRendererNotify, 761aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber kWhatReset, 7743c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber kWhatSeek, 78f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 79f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 8043c3e6ce02215ca99d506458f596cb1211639f29Andreas Huber wp<NuPlayerDriver> mDriver; 815bc087c573c70c84c6a39946457590b42d392a33Andreas Huber sp<Source> mSource; 82f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Surface> mSurface; 83f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<MediaPlayerBase::AudioSink> mAudioSink; 84f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mVideoDecoder; 85f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Decoder> mAudioDecoder; 86f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<Renderer> mRenderer; 87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 88f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mAudioEOS; 89f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mVideoEOS; 90f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 915bc087c573c70c84c6a39946457590b42d392a33Andreas Huber bool mScanSourcesPending; 921aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber int32_t mScanSourcesGeneration; 935bc087c573c70c84c6a39946457590b42d392a33Andreas Huber 94f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum FlushStatus { 95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NONE, 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber AWAITING_DISCONTINUITY, 97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FLUSHING_DECODER, 981aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber FLUSHING_DECODER_SHUTDOWN, 993831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUTTING_DOWN_DECODER, 1003831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber FLUSHED, 1013831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber SHUT_DOWN, 102f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 103f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 104f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingAudio; 105f933441648ef6a71dee783d733aac17b9508b452Andreas Huber FlushStatus mFlushingVideo; 1061aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetInProgress; 1071aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber bool mResetPostponed; 108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1095bc087c573c70c84c6a39946457590b42d392a33Andreas Huber status_t instantiateDecoder(bool audio, sp<Decoder> *decoder); 110f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 111f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg); 112f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void renderBuffer(bool audio, const sp<AMessage> &msg); 113f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 114f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyListener(int msg, int ext1, int ext2); 115f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 1163831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void finishFlushIfPossible(); 1173831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 1181aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void flushDecoder(bool audio, bool needShutdown); 1191aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1201aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL); 1211aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber 1221aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void finishReset(); 1231aef211b4e5dc952081727bfd2318b2cb5ca4506Andreas Huber void postScanSources(); 12453df1a460bcfdd129ca2bc416dee2009e35c042eAndreas Huber 125f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuPlayer); 126f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 127f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 128f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 129f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 130f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NU_PLAYER_H_ 131