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> &notify,
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)