/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef NU_PLAYER_H_ #define NU_PLAYER_H_ #include #include #include "ATSParser.h" #include "AnotherPacketSource.h" namespace android { struct ACodec; struct MetaData; struct NuPlayer : public AHandler { NuPlayer(); void setListener(const wp &listener); void setDataSource(const sp &source); void setVideoSurface(const sp &surface); void setAudioSink(const sp &sink); void start(); protected: virtual ~NuPlayer(); virtual void onMessageReceived(const sp &msg); private: struct Renderer; struct Decoder; struct NuPlayerStreamListener; enum { kWhatSetDataSource, kWhatSetVideoSurface, kWhatSetAudioSink, kWhatMoreDataQueued, kWhatStart, kWhatScanSources, kWhatVideoNotify, kWhatAudioNotify, kWhatRendererNotify, }; wp mListener; sp mSource; sp mSurface; sp mAudioSink; sp mStreamListener; sp mTSParser; sp mVideoDecoder; sp mAudioDecoder; sp mRenderer; bool mEOS; bool mAudioEOS; bool mVideoEOS; enum FlushStatus { NONE, AWAITING_DISCONTINUITY, FLUSHING_DECODER, FLUSHING_DECODER_FORMATCHANGE, SHUTTING_DOWN_DECODER, FLUSHED, SHUT_DOWN, }; FlushStatus mFlushingAudio; FlushStatus mFlushingVideo; status_t instantiateDecoder( bool audio, sp *decoder, bool ignoreCodecSpecificData); status_t feedDecoderInputData(bool audio, const sp &msg); void renderBuffer(bool audio, const sp &msg); status_t dequeueNextAccessUnit( ATSParser::SourceType *type, sp *accessUnit); status_t dequeueAccessUnit( ATSParser::SourceType type, sp *accessUnit); void feedMoreTSData(); void notifyListener(int msg, int ext1, int ext2); void finishFlushIfPossible(); static bool IsFlushingState(FlushStatus state, bool *formatChange = NULL); DISALLOW_EVIL_CONSTRUCTORS(NuPlayer); }; } // namespace android #endif // NU_PLAYER_H_