NuPlayer.h revision c5cc2e21602182c7ab4df1d7eba40f18037c1818
15778822d86b0337407514b9372562b86edfa91cdAndreas Huber/*
25778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Copyright (C) 2010 The Android Open Source Project
35778822d86b0337407514b9372562b86edfa91cdAndreas Huber *
45778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
55778822d86b0337407514b9372562b86edfa91cdAndreas Huber * you may not use this file except in compliance with the License.
65778822d86b0337407514b9372562b86edfa91cdAndreas Huber * You may obtain a copy of the License at
75778822d86b0337407514b9372562b86edfa91cdAndreas Huber *
85778822d86b0337407514b9372562b86edfa91cdAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
95778822d86b0337407514b9372562b86edfa91cdAndreas Huber *
105778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Unless required by applicable law or agreed to in writing, software
115778822d86b0337407514b9372562b86edfa91cdAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
125778822d86b0337407514b9372562b86edfa91cdAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135778822d86b0337407514b9372562b86edfa91cdAndreas Huber * See the License for the specific language governing permissions and
145778822d86b0337407514b9372562b86edfa91cdAndreas Huber * limitations under the License.
155778822d86b0337407514b9372562b86edfa91cdAndreas Huber */
165778822d86b0337407514b9372562b86edfa91cdAndreas Huber
175778822d86b0337407514b9372562b86edfa91cdAndreas Huber#ifndef NU_PLAYER_H_
185778822d86b0337407514b9372562b86edfa91cdAndreas Huber
195778822d86b0337407514b9372562b86edfa91cdAndreas Huber#define NU_PLAYER_H_
205778822d86b0337407514b9372562b86edfa91cdAndreas Huber
215778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <media/MediaPlayerInterface.h>
225778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <media/stagefright/foundation/AHandler.h>
235778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <media/stagefright/NativeWindowWrapper.h>
24a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
251608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Hubernamespace android {
265778822d86b0337407514b9372562b86edfa91cdAndreas Huber
275778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct ABuffer;
285778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct AMessage;
295778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct MetaData;
305778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct NuPlayerDriver;
31918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber
325778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct NuPlayer : public AHandler {
335778822d86b0337407514b9372562b86edfa91cdAndreas Huber    NuPlayer();
345778822d86b0337407514b9372562b86edfa91cdAndreas Huber
355778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void setUID(uid_t uid);
365778822d86b0337407514b9372562b86edfa91cdAndreas Huber
375778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void setDriver(const wp<NuPlayerDriver> &driver);
385778822d86b0337407514b9372562b86edfa91cdAndreas Huber
395778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void setDataSourceAsync(const sp<IStreamSource> &source);
405778822d86b0337407514b9372562b86edfa91cdAndreas Huber
415778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void setDataSourceAsync(
42a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber            const sp<IMediaHTTPService> &httpService,
43a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber            const char *url,
44a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber            const KeyedVector<String8, String8> *headers);
45a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
465778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void setDataSourceAsync(int fd, int64_t offset, int64_t length);
475778822d86b0337407514b9372562b86edfa91cdAndreas Huber
485778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void prepareAsync();
495778822d86b0337407514b9372562b86edfa91cdAndreas Huber
505778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void setVideoSurfaceTextureAsync(
515778822d86b0337407514b9372562b86edfa91cdAndreas Huber            const sp<IGraphicBufferProducer> &bufferProducer);
525778822d86b0337407514b9372562b86edfa91cdAndreas Huber
535778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink);
545778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void start();
555778822d86b0337407514b9372562b86edfa91cdAndreas Huber
565778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void pause();
575778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void resume();
585778822d86b0337407514b9372562b86edfa91cdAndreas Huber
595778822d86b0337407514b9372562b86edfa91cdAndreas Huber    // Will notify the driver through "notifyResetComplete" once finished.
60918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    void resetAsync();
61918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber
62dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber    // Will notify the driver through "notifySeekComplete" once finished.
63dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber    void seekToAsync(int64_t seekTimeUs);
64918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber
65918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    status_t setVideoScalingMode(int32_t mode);
66918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    status_t getTrackInfo(Parcel* reply) const;
67918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    status_t getSelectedTrack(int32_t type, Parcel* reply) const;
681608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    status_t selectTrack(size_t trackIndex, bool select);
691608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber
705778822d86b0337407514b9372562b86edfa91cdAndreas Huber    static const size_t kAggregateBufferSizeBytes;
715778822d86b0337407514b9372562b86edfa91cdAndreas Huber
725778822d86b0337407514b9372562b86edfa91cdAndreas Huberprotected:
735778822d86b0337407514b9372562b86edfa91cdAndreas Huber    virtual ~NuPlayer();
745778822d86b0337407514b9372562b86edfa91cdAndreas Huber
75a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    virtual void onMessageReceived(const sp<AMessage> &msg);
761608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber
771608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huberpublic:
781608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct NuPlayerStreamListener;
791608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct Source;
801608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber
811608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huberprivate:
821608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct Decoder;
831608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct DecoderPassThrough;
841608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct CCDecoder;
851608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct GenericSource;
861608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct HTTPLiveSource;
871608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct Renderer;
881608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct RTSPSource;
891608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct StreamingSource;
901608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct Action;
911608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct SeekAction;
92a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    struct SetSurfaceAction;
931608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct ShutdownDecoderAction;
941608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct PostMessageAction;
951608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7Andreas Huber    struct SimpleAction;
965778822d86b0337407514b9372562b86edfa91cdAndreas Huber
975778822d86b0337407514b9372562b86edfa91cdAndreas Huber    enum {
985778822d86b0337407514b9372562b86edfa91cdAndreas Huber        kWhatSetDataSource              = '=DaS',
995778822d86b0337407514b9372562b86edfa91cdAndreas Huber        kWhatPrepare                    = 'prep',
1005778822d86b0337407514b9372562b86edfa91cdAndreas Huber        kWhatSetVideoNativeWindow       = '=NaW',
10194c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatSetAudioSink               = '=AuS',
10294c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatMoreDataQueued             = 'more',
10394c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatStart                      = 'strt',
10494c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatScanSources                = 'scan',
10594c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatVideoNotify                = 'vidN',
10694c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatAudioNotify                = 'audN',
10794c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatClosedCaptionNotify        = 'capN',
10894c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatRendererNotify             = 'renN',
10994c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatReset                      = 'rset',
11094c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatSeek                       = 'seek',
11194c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatPause                      = 'paus',
11294c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatResume                     = 'rsme',
11394c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatPollDuration               = 'polD',
11494c1c8c99b70f2fdab87e131812eb253271e5500Andreas Huber        kWhatSourceNotify               = 'srcN',
115a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        kWhatGetTrackInfo               = 'gTrI',
116a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        kWhatGetSelectedTrack           = 'gSel',
117a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        kWhatSelectTrack                = 'selT',
118a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    };
1195778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1205778822d86b0337407514b9372562b86edfa91cdAndreas Huber    wp<NuPlayerDriver> mDriver;
1215778822d86b0337407514b9372562b86edfa91cdAndreas Huber    bool mUIDValid;
122918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    uid_t mUID;
123dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber    sp<Source> mSource;
124dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber    uint32_t mSourceFlags;
125918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    sp<NativeWindowWrapper> mNativeWindow;
126918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    int64_t mCurrentPositionUs;
127918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    sp<MediaPlayerBase::AudioSink> mAudioSink;
128918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    sp<Decoder> mVideoDecoder;
129918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    bool mVideoIsAVC;
130918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    bool mOffloadAudio;
131918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    audio_offload_info_t mCurrentOffloadInfo;
132918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    sp<Decoder> mAudioDecoder;
133918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    sp<CCDecoder> mCCDecoder;
134918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    sp<Renderer> mRenderer;
135918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    sp<ALooper> mRendererLooper;
136918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    int32_t mAudioDecoderGeneration;
137918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    int32_t mVideoDecoderGeneration;
138918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber
139918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    List<sp<Action> > mDeferredActions;
140918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber
141918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    bool mAudioEOS;
142a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    bool mVideoEOS;
143a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
144a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    bool mScanSourcesPending;
145a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    int32_t mScanSourcesGeneration;
146918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber
147918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    int32_t mPollDurationGeneration;
148918c7652b9a38c02e26c0c46541cea82070c0e43Andreas Huber    int32_t mTimedTextGeneration;
149a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
150a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    enum FlushStatus {
151a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        NONE,
152a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        FLUSHING_DECODER,
153a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        FLUSHING_DECODER_SHUTDOWN,
154a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        SHUTTING_DOWN_DECODER,
155a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        FLUSHED,
156a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber        SHUT_DOWN,
157a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    };
158a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
159a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    // Once the current flush is complete this indicates whether the
160a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    // notion of time has changed.
161a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    bool mTimeDiscontinuityPending;
162a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
163a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    // Used by feedDecoderInputData to aggregate small buffers into
164a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    // one large buffer.
165a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    sp<ABuffer> mPendingAudioAccessUnit;
166a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    status_t    mPendingAudioErr;
167a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    sp<ABuffer> mAggregateBuffer;
168a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
169a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    FlushStatus mFlushingAudio;
170a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    FlushStatus mFlushingVideo;
171a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
172a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    int64_t mSkipRenderingAudioUntilMediaTimeUs;
173a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber    int64_t mSkipRenderingVideoUntilMediaTimeUs;
174a53d87c7b1428fe02f535c31dafd64cb1362fde9Andreas Huber
1755778822d86b0337407514b9372562b86edfa91cdAndreas Huber    int64_t mVideoLateByUs;
176dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber    int64_t mNumFramesTotal, mNumFramesDropped;
177dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber
1785778822d86b0337407514b9372562b86edfa91cdAndreas Huber    int32_t mVideoScalingMode;
1795778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1805778822d86b0337407514b9372562b86edfa91cdAndreas Huber    bool mStarted;
1815778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1825778822d86b0337407514b9372562b86edfa91cdAndreas Huber    inline const sp<Decoder> &getDecoder(bool audio) {
183dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber        return audio ? mAudioDecoder : mVideoDecoder;
184dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber    }
1855778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1865778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void openAudioSink(const sp<AMessage> &format, bool offloadOnly);
1875778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void closeAudioSink();
1885778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1895778822d86b0337407514b9372562b86edfa91cdAndreas Huber    status_t instantiateDecoder(bool audio, sp<Decoder> *decoder);
1905778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1915778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void updateVideoSize(
1925778822d86b0337407514b9372562b86edfa91cdAndreas Huber            const sp<AMessage> &inputFormat,
1935778822d86b0337407514b9372562b86edfa91cdAndreas Huber            const sp<AMessage> &outputFormat = NULL);
1945778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1955778822d86b0337407514b9372562b86edfa91cdAndreas Huber    status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg);
1969806555d3930be43e11106281dee354820ac1c88Andreas Huber    void renderBuffer(bool audio, const sp<AMessage> &msg);
1975778822d86b0337407514b9372562b86edfa91cdAndreas Huber
1985778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void notifyListener(int msg, int ext1, int ext2, const Parcel *in = NULL);
1995778822d86b0337407514b9372562b86edfa91cdAndreas Huber
200dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber    void finishFlushIfPossible();
201dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2Andreas Huber
2025778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void flushDecoder(
2035778822d86b0337407514b9372562b86edfa91cdAndreas Huber            bool audio, bool needShutdown, const sp<AMessage> &newFormat = NULL);
2045778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void updateDecoderFormatWithoutFlush(bool audio, const sp<AMessage> &format);
2055778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2065778822d86b0337407514b9372562b86edfa91cdAndreas Huber    static bool IsFlushingState(FlushStatus state, bool *needShutdown = NULL);
2075778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2085778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void postScanSources();
2095778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2105778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void schedulePollDuration();
2115778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void cancelPollDuration();
2125778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2135778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void processDeferredActions();
2145778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2155778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void performSeek(int64_t seekTimeUs);
2165778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void performDecoderFlush();
2175778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void performDecoderShutdown(bool audio, bool video);
2185778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void performReset();
2195778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void performScanSources();
2205778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void performSetSurface(const sp<NativeWindowWrapper> &wrapper);
2215778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2225778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void onSourceNotify(const sp<AMessage> &msg);
2235778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void onClosedCaptionNotify(const sp<AMessage> &msg);
2245778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2255778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void queueDecoderShutdown(
2265778822d86b0337407514b9372562b86edfa91cdAndreas Huber            bool audio, bool video, const sp<AMessage> &reply);
2275778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2285778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void sendSubtitleData(const sp<ABuffer> &buffer, int32_t baseIndex);
2295778822d86b0337407514b9372562b86edfa91cdAndreas Huber    void sendTimedTextData(const sp<ABuffer> &buffer);
2305778822d86b0337407514b9372562b86edfa91cdAndreas Huber
231ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber    void writeTrackInfo(Parcel* reply, const sp<AMessage> format) const;
2325778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2335778822d86b0337407514b9372562b86edfa91cdAndreas Huber    DISALLOW_EVIL_CONSTRUCTORS(NuPlayer);
2345778822d86b0337407514b9372562b86edfa91cdAndreas Huber};
2355778822d86b0337407514b9372562b86edfa91cdAndreas Huber
2365778822d86b0337407514b9372562b86edfa91cdAndreas Huber}  // namespace android
237ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber
2385778822d86b0337407514b9372562b86edfa91cdAndreas Huber#endif  // NU_PLAYER_H_
2395778822d86b0337407514b9372562b86edfa91cdAndreas Huber