NuPlayerDecoderPassThrough.h revision f1828910d48bbd22e1392e6ab0ce31298d1f115c
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2014 The Android Open Source Project 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * you may not use this file except in compliance with the License. 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * You may obtain a copy of the License at 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * See the License for the specific language governing permissions and 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * limitations under the License. 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NUPLAYER_DECODER_PASS_THROUGH_H_ 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define NUPLAYER_DECODER_PASS_THROUGH_H_ 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "NuPlayer.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "NuPlayerDecoderBase.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct NuPlayer::DecoderPassThrough : public DecoderBase { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DecoderPassThrough(const sp<AMessage> ¬ify, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const sp<Source> &source, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const sp<Renderer> &renderer); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void getStats( 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t *mNumFramesTotal, 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t *mNumFramesDropped) const; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)protected: 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~DecoderPassThrough(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onMessageReceived(const sp<AMessage> &msg); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onConfigure(const sp<AMessage> &format); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onSetRenderer(const sp<Renderer> &renderer); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onGetInputBuffers(Vector<sp<ABuffer> > *dstBuffers); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onResume(bool notifyComplete); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onFlush(bool notifyComplete); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void onShutdown(bool notifyComplete); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void doRequestBuffers(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private: 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) kWhatBufferConsumed = 'bufC', 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<AMessage> mNotify; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<Source> mSource; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<Renderer> mRenderer; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64_t mSkipRenderingUntilMediaTimeUs; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool mPaused; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32_t mBufferGeneration; 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool mReachedEOS; 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Used by feedDecoderInputData to aggregate small buffers into 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // one large buffer. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sp<ABuffer> mPendingAudioAccessUnit; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status_t mPendingAudioErr; 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sp<ABuffer> mAggregateBuffer; 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // mPendingBuffersToDrain are only for debugging. It can be removed 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // when the power investigation is done. 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t mPendingBuffersToDrain; 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) size_t mCachedBytes; 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AString mComponentName; 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool isStaleReply(const sp<AMessage> &msg); 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool isDoneFetching() const; 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) status_t dequeueAccessUnit(sp<ABuffer> *accessUnit); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) sp<ABuffer> aggregateBuffer(const sp<ABuffer> &accessUnit); 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) status_t fetchInputData(sp<AMessage> &reply); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void onInputBufferFetched(const sp<AMessage> &msg); 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void onBufferConsumed(int32_t size); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} // namespace android 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif // NUPLAYER_DECODER_PASS_THROUGH_H_ 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)