NuPlayerDecoderPassThrough.h revision f8d717772f6d185cb07720cd5091df9b7d612e0b
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 327137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void getStats( 337137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang int64_t *mNumFramesTotal, 347137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang int64_t *mNumFramesDropped) const; 35bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 36bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprotected: 37bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 38bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual ~DecoderPassThrough(); 39bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 40bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia virtual void onMessageReceived(const sp<AMessage> &msg); 41bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 427137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onConfigure(const sp<AMessage> &format); 437137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onSetRenderer(const sp<Renderer> &renderer); 447137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onGetInputBuffers(Vector<sp<ABuffer> > *dstBuffers); 45f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang virtual void onResume(bool notifyComplete); 467137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onFlush(bool notifyComplete); 477137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onShutdown(bool notifyComplete); 487137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void doRequestBuffers(); 497137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 50bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprivate: 51bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia enum { 52bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia kWhatBufferConsumed = 'bufC', 53bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia }; 54bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 55bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia sp<AMessage> mNotify; 56c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia sp<Source> mSource; 57c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia sp<Renderer> mRenderer; 58c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia int64_t mSkipRenderingUntilMediaTimeUs; 59c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia 60bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia int32_t mBufferGeneration; 61c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk bool mReachedEOS; 627137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 637137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // Used by feedDecoderInputData to aggregate small buffers into 647137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // one large buffer. 657137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ABuffer> mPendingAudioAccessUnit; 667137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t mPendingAudioErr; 677137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ABuffer> mAggregateBuffer; 687137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 697137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // mPendingBuffersToDrain are only for debugging. It can be removed 707137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang // when the power investigation is done. 71c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk size_t mPendingBuffersToDrain; 72c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk size_t mCachedBytes; 73bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia AString mComponentName; 74bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 757137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool isStaleReply(const sp<AMessage> &msg); 767137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool isCacheFullOrEOS() const; 777137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 787137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t dequeueAccessUnit(sp<ABuffer> *accessUnit); 797137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ABuffer> aggregateBuffer(const sp<ABuffer> &accessUnit); 807137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t fetchInputData(sp<AMessage> &reply); 817137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 827137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void onInputBufferFetched(const sp<AMessage> &msg); 837137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void onBufferConsumed(int32_t size); 847137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 85bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough); 86bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}; 87bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 88bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia} // namespace android 89bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia 90bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#endif // NUPLAYER_DECODER_PASS_THROUGH_H_ 91