NuPlayerDecoderBase.h revision cefac14261a32fb856b0d1ab31541787112e306e
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; 29ee4e1b1a63758941460ae79a064249d3a5189443Lajos Molnarclass MediaBuffer; 307e34bf5af26f8752d4786d3098740cdf51e2438fWonsik Kimclass MediaCodecBuffer; 31a81c6229638a4db56752dd77a6610e0f0971e877Lajos Molnarclass Surface; 327137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 337137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangstruct NuPlayer::DecoderBase : public AHandler { 34e964d4e421e2d1ca937227a580c0c837091a11e3Chih-Hung Hsieh explicit DecoderBase(const sp<AMessage> ¬ify); 357137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 367137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void configure(const sp<AMessage> &format); 377137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void init(); 388db8813d39e3c8b5fbd580dfc3062830744afd63Ronghua Wu void setParameters(const sp<AMessage> ¶ms); 397137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 403bc667014875aba35102941b3997d242c303aa0dWei Jia // Synchronous call to ensure decoder will not request or send out data. 413bc667014875aba35102941b3997d242c303aa0dWei Jia void pause(); 423bc667014875aba35102941b3997d242c303aa0dWei Jia 437137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void setRenderer(const sp<Renderer> &renderer); 44a81c6229638a4db56752dd77a6610e0f0971e877Lajos Molnar virtual status_t setVideoSurface(const sp<Surface> &) { return INVALID_OPERATION; } 457137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 467137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void signalFlush(); 47f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang void signalResume(bool notifyComplete); 487137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void initiateShutdown(); 497137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 50e1e5d7a3d3d4d6d644e6c731f977422e004140d5Praveen Chavan virtual sp<AMessage> getStats() const { 51e1e5d7a3d3d4d6d644e6c731f977422e004140d5Praveen Chavan return mStats; 52e1e5d7a3d3d4d6d644e6c731f977422e004140d5Praveen Chavan } 537137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 54cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania virtual status_t releaseCrypto() { 55cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania return INVALID_OPERATION; 56cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania } 57cefac14261a32fb856b0d1ab31541787112e306eHassan Shojania 587137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang enum { 597137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatInputDiscontinuity = 'inDi', 607137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatVideoSizeChanged = 'viSC', 617137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatFlushCompleted = 'flsC', 627137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatShutdownCompleted = 'shDC', 63f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang kWhatResumeCompleted = 'resC', 647137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatEOS = 'eos ', 657137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatError = 'err ', 667137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang }; 677137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 687137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangprotected: 697137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 707137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual ~DecoderBase(); 717137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 727137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onMessageReceived(const sp<AMessage> &msg); 737137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 747137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onConfigure(const sp<AMessage> &format) = 0; 758db8813d39e3c8b5fbd580dfc3062830744afd63Ronghua Wu virtual void onSetParameters(const sp<AMessage> ¶ms) = 0; 767137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onSetRenderer(const sp<Renderer> &renderer) = 0; 77f8d717772f6d185cb07720cd5091df9b7d612e0bChong Zhang virtual void onResume(bool notifyComplete) = 0; 7866704af4d82c2b6303609b29402641f861fdcb19Chong Zhang virtual void onFlush() = 0; 797137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang virtual void onShutdown(bool notifyComplete) = 0; 807137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 817137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang void onRequestInputBuffers(); 823b032b3865fd93173aadca0591eeea32853206f9Chong Zhang virtual bool doRequestBuffers() = 0; 83202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung virtual void handleError(int32_t err); 84202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung 85202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung sp<AMessage> mNotify; 86202bce11a7f66f27e6dbb6d154ddc123aa62513dAndy Hung int32_t mBufferGeneration; 873bc667014875aba35102941b3997d242c303aa0dWei Jia bool mPaused; 88e1e5d7a3d3d4d6d644e6c731f977422e004140d5Praveen Chavan sp<AMessage> mStats; 897137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 907137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhangprivate: 917137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang enum { 927137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatConfigure = 'conf', 938db8813d39e3c8b5fbd580dfc3062830744afd63Ronghua Wu kWhatSetParameters = 'setP', 947137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatSetRenderer = 'setR', 953bc667014875aba35102941b3997d242c303aa0dWei Jia kWhatPause = 'paus', 967137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatRequestInputBuffers = 'reqB', 977137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatFlush = 'flus', 987137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang kWhatShutdown = 'shuD', 997137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang }; 1007137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 1017137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang sp<ALooper> mDecoderLooper; 1027137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang bool mRequestInputBuffersPending; 1037137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 1047137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang DISALLOW_EVIL_CONSTRUCTORS(DecoderBase); 1057137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang}; 1067137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 1077137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang} // namespace android 1087137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang 1097137ec7e005a5a6e3c0edb91cfacf16a31f4bf6aChong Zhang#endif // NUPLAYER_DECODER_BASE_H_ 110