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