NuPlayerDecoderPassThrough.h revision c6cfd70f24a11b946859485ce398a189c301a4e2
1bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia/* 2bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * Copyright (C) 2014 The Android Open Source Project 3bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * 4bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * Licensed under the Apache License, Version 2.0 (the "License"); 5bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * you may not use this file except in compliance with the License. 6bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * You may obtain a copy of the License at 7bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * 8bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * http://www.apache.org/licenses/LICENSE-2.0 9bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * 10bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * Unless required by applicable law or agreed to in writing, software 11bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * distributed under the License is distributed on an "AS IS" BASIS, 12bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * See the License for the specific language governing permissions and 14bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia * limitations under the License. 15bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia */ 16bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 17bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#ifndef NUPLAYER_DECODER_PASS_THROUGH_H_ 18bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 19bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#define NUPLAYER_DECODER_PASS_THROUGH_H_ 20bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 21bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include "NuPlayer.h" 22bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 23bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include "NuPlayerDecoder.h" 24bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 25bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jianamespace android { 26bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 27bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiastruct NuPlayer::DecoderPassThrough : public Decoder { 28c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia DecoderPassThrough(const sp<AMessage> ¬ify, 29c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia const sp<Source> &source, 30c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia const sp<Renderer> &renderer); 31bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 32bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void configure(const sp<AMessage> &format); 33bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void init(); 34bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 35bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void signalFlush(); 36bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void signalResume(); 37bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void initiateShutdown(); 38bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 39bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia bool supportsSeamlessFormatChange(const sp<AMessage> &to) const; 40bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 41bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprotected: 42bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 43bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual ~DecoderPassThrough(); 44bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 45bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void onMessageReceived(const sp<AMessage> &msg); 46bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 47bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprivate: 48bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia enum { 49bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatRequestABuffer = 'reqB', 50bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatBufferConsumed = 'bufC', 51bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia }; 52bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 53bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia sp<AMessage> mNotify; 54bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia sp<ALooper> mDecoderLooper; 55bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 56c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia sp<Source> mSource; 57c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia sp<Renderer> mRenderer; 58c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia 59c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk /** Returns true if a buffer was requested. 60c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk * Returns false if at EOS or cache already full. 61c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk */ 62c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk bool requestABuffer(); 63bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia bool isStaleReply(const sp<AMessage> &msg); 64bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 65bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia void onConfigure(const sp<AMessage> &format); 66bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia void onFlush(); 67bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia void onInputBufferFilled(const sp<AMessage> &msg); 68de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang void onBufferConsumed(int32_t size); 69c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk void requestMaxBuffers(); 70bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia void onShutdown(); 71bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 72c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia int64_t mSkipRenderingUntilMediaTimeUs; 73c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia 74bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia int32_t mBufferGeneration; 75c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk bool mReachedEOS; 76c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk // TODO mPendingBuffersToFill and mPendingBuffersToDrain are only for 77c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk // debugging. They can be removed when the power investigation is done. 78c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk size_t mPendingBuffersToFill; 79c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk size_t mPendingBuffersToDrain; 80c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk size_t mCachedBytes; 81bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia AString mComponentName; 82bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 83bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough); 84bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}; 85bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 86bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia} // namespace android 87bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 88bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#endif // NUPLAYER_DECODER_PASS_THROUGH_H_ 89