NuPlayerDecoderPassThrough.h revision c6cfd70f24a11b946859485ce398a189c301a4e2
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
23bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#include "NuPlayerDecoder.h"
24bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
25bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jianamespace android {
26bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
27bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiastruct NuPlayer::DecoderPassThrough : public Decoder {
28c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia    DecoderPassThrough(const sp<AMessage> &notify,
29c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia                       const sp<Source> &source,
30c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia                       const sp<Renderer> &renderer);
31bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
32bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual void configure(const sp<AMessage> &format);
33bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual void init();
34bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
35bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual void signalFlush();
36bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual void signalResume();
37bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual void initiateShutdown();
38bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
39bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    bool supportsSeamlessFormatChange(const sp<AMessage> &to) const;
40bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
41bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprotected:
42bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
43bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual ~DecoderPassThrough();
44bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
45bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    virtual void onMessageReceived(const sp<AMessage> &msg);
46bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
47bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jiaprivate:
48bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    enum {
49bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        kWhatRequestABuffer     = 'reqB',
50bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia        kWhatBufferConsumed     = 'bufC',
51bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    };
52bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
53bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<AMessage> mNotify;
54bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    sp<ALooper> mDecoderLooper;
55bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
56c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia    sp<Source> mSource;
57c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia    sp<Renderer> mRenderer;
58c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia
59c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    /** Returns true if a buffer was requested.
60c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk     * Returns false if at EOS or cache already full.
61c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk     */
62c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    bool requestABuffer();
63bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    bool isStaleReply(const sp<AMessage> &msg);
64bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
65bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    void onConfigure(const sp<AMessage> &format);
66bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    void onFlush();
67bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    void onInputBufferFilled(const sp<AMessage> &msg);
68de01afbbc55ac9c5c23ec66154603f34217aed2cChong Zhang    void onBufferConsumed(int32_t size);
69c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    void requestMaxBuffers();
70bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    void onShutdown();
71bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
72c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia    int64_t mSkipRenderingUntilMediaTimeUs;
73c6cfd70f24a11b946859485ce398a189c301a4e2Wei Jia
74bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    int32_t mBufferGeneration;
75c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    bool    mReachedEOS;
76c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    // TODO mPendingBuffersToFill and mPendingBuffersToDrain are only for
77c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    // debugging. They can be removed when the power investigation is done.
78c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    size_t  mPendingBuffersToFill;
79c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    size_t  mPendingBuffersToDrain;
80c5cc2e21602182c7ab4df1d7eba40f18037c1818Phil Burk    size_t  mCachedBytes;
81bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    AString mComponentName;
82bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
83bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia    DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough);
84bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia};
85bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
86bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia}  // namespace android
87bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia
88bc2fb720bbd0acd122bacc67e844e982d068f6f9Wei Jia#endif  // NUPLAYER_DECODER_PASS_THROUGH_H_
89