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> &notify,
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> &params);
407137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    virtual void onSetRenderer(const sp<Renderer> &renderer);
41f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang    virtual void onResume(bool notifyComplete);
4266704af4d82c2b6303609b29402641f861fdcb19Chong Zhang    virtual void onFlush();
437137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    virtual void onShutdown(bool notifyComplete);
443b032b3865fd93173aadca0591eeea32853206f9Chong Zhang    virtual bool doRequestBuffers();
457137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang
46bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprivate:
47bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    enum {
48bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        kWhatBufferConsumed     = 'bufC',
49bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    };
50bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
51c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia    sp<Source> mSource;
52c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia    sp<Renderer> mRenderer;
53c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia    int64_t mSkipRenderingUntilMediaTimeUs;
54c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia
55c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    bool    mReachedEOS;
567137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang
577137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    // Used by feedDecoderInputData to aggregate small buffers into
587137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    // one large buffer.
597137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    sp<ABuffer> mPendingAudioAccessUnit;
607137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    status_t    mPendingAudioErr;
617137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    sp<ABuffer> mAggregateBuffer;
627137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang
637137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    // mPendingBuffersToDrain are only for debugging. It can be removed
647137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    // when the power investigation is done.
65c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    size_t  mPendingBuffersToDrain;
66c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    size_t  mCachedBytes;
67bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    AString mComponentName;
68bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
697137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    bool isStaleReply(const sp<AMessage> &msg);
70f1828910d48bbd22e1392e6ab0ce31298d1f115cRonghua Wu    bool isDoneFetching() const;
717137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang
727137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    status_t dequeueAccessUnit(sp<ABuffer> *accessUnit);
737137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    sp<ABuffer> aggregateBuffer(const sp<ABuffer> &accessUnit);
747137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    status_t fetchInputData(sp<AMessage> &reply);
7566704af4d82c2b6303609b29402641f861fdcb19Chong Zhang    void doFlush(bool notifyComplete);
767137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang
777137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    void onInputBufferFetched(const sp<AMessage> &msg);
787137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang    void onBufferConsumed(int32_t size);
797137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang
80bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough);
81bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia};
82bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
83bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}  // namespace android
84bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
85bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#endif  // NUPLAYER_DECODER_PASS_THROUGH_H_
86