NuPlayerDecoderBase.h revision 202bce11a7f66f27e6dbb6d154ddc123aa62513d
17137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang/* 27137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * Copyright (C) 2010 The Android Open Source Project 37137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * 47137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 57137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * you may not use this file except in compliance with the License. 67137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * You may obtain a copy of the License at 77137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * 87137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * http://www.apache.org/licenses/LICENSE-2.0 97137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * 107137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * Unless required by applicable law or agreed to in writing, software 117137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * distributed under the License is distributed on an "AS IS" BASIS, 127137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * See the License for the specific language governing permissions and 147137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang * limitations under the License. 157137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang */ 167137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 177137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#ifndef NUPLAYER_DECODER_BASE_H_ 187137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 197137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#define NUPLAYER_DECODER_BASE_H_ 207137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 217137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#include "NuPlayer.h" 227137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 237137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#include <media/stagefright/foundation/AHandler.h> 247137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 257137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangnamespace android { 267137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 277137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangstruct ABuffer; 287137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangstruct MediaCodec; 297137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangstruct MediaBuffer; 307137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 317137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangstruct NuPlayer::DecoderBase : public AHandler { 32202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung DecoderBase(const sp<AMessage> ¬ify); 337137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 347137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void configure(const sp<AMessage> &format); 357137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void init(); 367137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 377137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void setRenderer(const sp<Renderer> &renderer); 387137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 397137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang status_t getInputBuffers(Vector<sp<ABuffer> > *dstBuffers) const; 407137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void signalFlush(); 41f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang void signalResume(bool notifyComplete); 427137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void initiateShutdown(); 437137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 447137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void getStats( 457137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang int64_t *mNumFramesTotal, 467137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang int64_t *mNumFramesDropped) const = 0; 477137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 487137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang enum { 497137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatInputDiscontinuity = 'inDi', 507137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatVideoSizeChanged = 'viSC', 517137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatFlushCompleted = 'flsC', 527137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatShutdownCompleted = 'shDC', 53f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang kWhatResumeCompleted = 'resC', 547137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatEOS = 'eos ', 557137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatError = 'err ', 567137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang }; 577137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 587137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangprotected: 597137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 607137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual ~DecoderBase(); 617137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 627137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onMessageReceived(const sp<AMessage> &msg); 637137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 647137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onConfigure(const sp<AMessage> &format) = 0; 657137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onSetRenderer(const sp<Renderer> &renderer) = 0; 667137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onGetInputBuffers(Vector<sp<ABuffer> > *dstBuffers) = 0; 67f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang virtual void onResume(bool notifyComplete) = 0; 687137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onFlush(bool notifyComplete) = 0; 697137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onShutdown(bool notifyComplete) = 0; 707137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 717137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void onRequestInputBuffers(); 727137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void scheduleRequestBuffers(); 737137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void doRequestBuffers() = 0; 74202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung virtual void handleError(int32_t err); 75202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung 76202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung sp<AMessage> mNotify; 77202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung int32_t mBufferGeneration; 787137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 797137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangprivate: 807137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang enum { 817137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatConfigure = 'conf', 827137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatSetRenderer = 'setR', 837137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatGetInputBuffers = 'gInB', 847137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatRequestInputBuffers = 'reqB', 857137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatFlush = 'flus', 867137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatShutdown = 'shuD', 877137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang }; 887137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 897137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ALooper> mDecoderLooper; 907137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool mRequestInputBuffersPending; 917137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 927137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang DISALLOW_EVIL_CONSTRUCTORS(DecoderBase); 937137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang}; 947137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 957137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang} // namespace android 967137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 977137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#endif // NUPLAYER_DECODER_BASE_H_ 98