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 237137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#include "NuPlayerDecoderBase.h" 24bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 25bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jianamespace android { 26bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 277137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangstruct NuPlayer::DecoderPassThrough : public DecoderBase { 28c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia DecoderPassThrough(const sp<AMessage> ¬ify, 29c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia const sp<Source> &source, 30c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia const sp<Renderer> &renderer); 31bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 32bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprotected: 33bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 34bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual ~DecoderPassThrough(); 35bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 36bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void onMessageReceived(const sp<AMessage> &msg); 37bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 387137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onConfigure(const sp<AMessage> &format); 398db8813d39e3c8b5fbd580dfc3062830744afd63Ronghua Wu virtual void onSetParameters(const sp<AMessage> ¶ms); 407137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onSetRenderer(const sp<Renderer> &renderer); 417137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onGetInputBuffers(Vector<sp<ABuffer> > *dstBuffers); 42f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang virtual void onResume(bool notifyComplete); 4366704af4d82c2b6303609b29402641f861fdcb19Chong Zhang virtual void onFlush(); 447137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onShutdown(bool notifyComplete); 453b032b3865fd93173aadca0591eeea32853206f9Chong Zhang virtual bool doRequestBuffers(); 467137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 47bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprivate: 48bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia enum { 49bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatBufferConsumed = 'bufC', 50bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia }; 51bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 52c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia sp<Source> mSource; 53c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia sp<Renderer> mRenderer; 54c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia int64_t mSkipRenderingUntilMediaTimeUs; 55f1828910d48bbd22e1392e6ab0ce31298d1f115cRonghua Wu bool mPaused; 56c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia 57c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk bool mReachedEOS; 587137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 597137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // Used by feedDecoderInputData to aggregate small buffers into 607137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // one large buffer. 617137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ABuffer> mPendingAudioAccessUnit; 627137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t mPendingAudioErr; 637137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ABuffer> mAggregateBuffer; 647137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 657137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // mPendingBuffersToDrain are only for debugging. It can be removed 667137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // when the power investigation is done. 67c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk size_t mPendingBuffersToDrain; 68c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk size_t mCachedBytes; 69bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia AString mComponentName; 70bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 717137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool isStaleReply(const sp<AMessage> &msg); 72f1828910d48bbd22e1392e6ab0ce31298d1f115cRonghua Wu bool isDoneFetching() const; 737137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 747137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t dequeueAccessUnit(sp<ABuffer> *accessUnit); 757137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ABuffer> aggregateBuffer(const sp<ABuffer> &accessUnit); 767137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t fetchInputData(sp<AMessage> &reply); 7766704af4d82c2b6303609b29402641f861fdcb19Chong Zhang void doFlush(bool notifyComplete); 787137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 797137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void onInputBufferFetched(const sp<AMessage> &msg); 807137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void onBufferConsumed(int32_t size); 817137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 82bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough); 83bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}; 84bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 85bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia} // namespace android 86bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 87bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#endif // NUPLAYER_DECODER_PASS_THROUGH_H_ 88