SimplePlayer.h revision 8ba01021b573889802e67e029225a96f0dfa471a
15778822d86b0337407514b9372562b86edfa91cdAndreas Huber/* 25778822d86b0337407514b9372562b86edfa91cdAndreas Huber * Copyright (C) 2012 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#include <media/stagefright/foundation/AHandler.h> 185778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <media/stagefright/foundation/AString.h> 195778822d86b0337407514b9372562b86edfa91cdAndreas Huber#include <utils/KeyedVector.h> 205778822d86b0337407514b9372562b86edfa91cdAndreas Huber 215778822d86b0337407514b9372562b86edfa91cdAndreas Hubernamespace android { 225778822d86b0337407514b9372562b86edfa91cdAndreas Huber 235778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct ABuffer; 245778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct ALooper; 255778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct AudioTrack; 268ba01021b573889802e67e029225a96f0dfa471aAndy McFaddenstruct IGraphicBufferProducer; 275778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct MediaCodec; 285778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct NativeWindowWrapper; 295778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct NuMediaExtractor; 305778822d86b0337407514b9372562b86edfa91cdAndreas Huber 315778822d86b0337407514b9372562b86edfa91cdAndreas Huberstruct SimplePlayer : public AHandler { 325778822d86b0337407514b9372562b86edfa91cdAndreas Huber SimplePlayer(); 335778822d86b0337407514b9372562b86edfa91cdAndreas Huber 345778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t setDataSource(const char *path); 358ba01021b573889802e67e029225a96f0dfa471aAndy McFadden status_t setSurface(const sp<IGraphicBufferProducer> &bufferProducer); 365778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t prepare(); 375778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t start(); 385778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t stop(); 395778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t reset(); 405778822d86b0337407514b9372562b86edfa91cdAndreas Huber 415778822d86b0337407514b9372562b86edfa91cdAndreas Huberprotected: 425778822d86b0337407514b9372562b86edfa91cdAndreas Huber virtual ~SimplePlayer(); 435778822d86b0337407514b9372562b86edfa91cdAndreas Huber 445778822d86b0337407514b9372562b86edfa91cdAndreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 455778822d86b0337407514b9372562b86edfa91cdAndreas Huber 465778822d86b0337407514b9372562b86edfa91cdAndreas Huberprivate: 475778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum State { 485778822d86b0337407514b9372562b86edfa91cdAndreas Huber UNINITIALIZED, 495778822d86b0337407514b9372562b86edfa91cdAndreas Huber UNPREPARED, 505778822d86b0337407514b9372562b86edfa91cdAndreas Huber STOPPED, 515778822d86b0337407514b9372562b86edfa91cdAndreas Huber STARTED 525778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 535778822d86b0337407514b9372562b86edfa91cdAndreas Huber 545778822d86b0337407514b9372562b86edfa91cdAndreas Huber enum { 555778822d86b0337407514b9372562b86edfa91cdAndreas Huber kWhatSetDataSource, 565778822d86b0337407514b9372562b86edfa91cdAndreas Huber kWhatSetSurface, 575778822d86b0337407514b9372562b86edfa91cdAndreas Huber kWhatPrepare, 585778822d86b0337407514b9372562b86edfa91cdAndreas Huber kWhatStart, 595778822d86b0337407514b9372562b86edfa91cdAndreas Huber kWhatStop, 605778822d86b0337407514b9372562b86edfa91cdAndreas Huber kWhatReset, 615778822d86b0337407514b9372562b86edfa91cdAndreas Huber kWhatDoMoreStuff, 625778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 635778822d86b0337407514b9372562b86edfa91cdAndreas Huber 645778822d86b0337407514b9372562b86edfa91cdAndreas Huber struct BufferInfo { 655778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t mIndex; 665778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t mOffset; 675778822d86b0337407514b9372562b86edfa91cdAndreas Huber size_t mSize; 685778822d86b0337407514b9372562b86edfa91cdAndreas Huber int64_t mPresentationTimeUs; 695778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t mFlags; 705778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 715778822d86b0337407514b9372562b86edfa91cdAndreas Huber 725778822d86b0337407514b9372562b86edfa91cdAndreas Huber struct CodecState 735778822d86b0337407514b9372562b86edfa91cdAndreas Huber { 745778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<MediaCodec> mCodec; 755778822d86b0337407514b9372562b86edfa91cdAndreas Huber Vector<sp<ABuffer> > mCSD; 765778822d86b0337407514b9372562b86edfa91cdAndreas Huber Vector<sp<ABuffer> > mBuffers[2]; 775778822d86b0337407514b9372562b86edfa91cdAndreas Huber 785778822d86b0337407514b9372562b86edfa91cdAndreas Huber List<size_t> mAvailInputBufferIndices; 795778822d86b0337407514b9372562b86edfa91cdAndreas Huber List<BufferInfo> mAvailOutputBufferInfos; 805778822d86b0337407514b9372562b86edfa91cdAndreas Huber 815778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<AudioTrack> mAudioTrack; 825778822d86b0337407514b9372562b86edfa91cdAndreas Huber uint32_t mNumFramesWritten; 835778822d86b0337407514b9372562b86edfa91cdAndreas Huber }; 845778822d86b0337407514b9372562b86edfa91cdAndreas Huber 855778822d86b0337407514b9372562b86edfa91cdAndreas Huber State mState; 865778822d86b0337407514b9372562b86edfa91cdAndreas Huber AString mPath; 875778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<NativeWindowWrapper> mNativeWindow; 885778822d86b0337407514b9372562b86edfa91cdAndreas Huber 895778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<NuMediaExtractor> mExtractor; 905778822d86b0337407514b9372562b86edfa91cdAndreas Huber sp<ALooper> mCodecLooper; 915778822d86b0337407514b9372562b86edfa91cdAndreas Huber KeyedVector<size_t, CodecState> mStateByTrackIndex; 925778822d86b0337407514b9372562b86edfa91cdAndreas Huber int32_t mDoMoreStuffGeneration; 935778822d86b0337407514b9372562b86edfa91cdAndreas Huber 945778822d86b0337407514b9372562b86edfa91cdAndreas Huber int64_t mStartTimeRealUs; 955778822d86b0337407514b9372562b86edfa91cdAndreas Huber 965778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onPrepare(); 975778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onStart(); 985778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onStop(); 995778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onReset(); 1005778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onDoMoreStuff(); 1015778822d86b0337407514b9372562b86edfa91cdAndreas Huber status_t onOutputFormatChanged(size_t trackIndex, CodecState *state); 1025778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1035778822d86b0337407514b9372562b86edfa91cdAndreas Huber void renderAudio( 1045778822d86b0337407514b9372562b86edfa91cdAndreas Huber CodecState *state, BufferInfo *info, const sp<ABuffer> &buffer); 1055778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1065778822d86b0337407514b9372562b86edfa91cdAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(SimplePlayer); 1075778822d86b0337407514b9372562b86edfa91cdAndreas Huber}; 1085778822d86b0337407514b9372562b86edfa91cdAndreas Huber 1095778822d86b0337407514b9372562b86edfa91cdAndreas Huber} // namespace android 110