NuPlayer2DecoderBase.h revision 53692fa54d0bf1d69184035a4c05ea0601a09c14
153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia/* 253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * Copyright 2017 The Android Open Source Project 353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * 453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * Licensed under the Apache License, Version 2.0 (the "License"); 553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * you may not use this file except in compliance with the License. 653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * You may obtain a copy of the License at 753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * 853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * http://www.apache.org/licenses/LICENSE-2.0 953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * 1053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * Unless required by applicable law or agreed to in writing, software 1153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * distributed under the License is distributed on an "AS IS" BASIS, 1253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * See the License for the specific language governing permissions and 1453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia * limitations under the License. 1553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia */ 1653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 1753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#ifndef NUPLAYER2_DECODER_BASE_H_ 1853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 1953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#define NUPLAYER2_DECODER_BASE_H_ 2053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#include "NuPlayer2.h" 2253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#include <media/stagefright/foundation/AHandler.h> 2453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jianamespace android { 2653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 2753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct ABuffer; 2853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct MediaCodec; 2953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaclass MediaBuffer; 3053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaclass MediaCodecBuffer; 3153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaclass Surface; 3253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 3353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiastruct NuPlayer2::DecoderBase : public AHandler { 3453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia explicit DecoderBase(const sp<AMessage> ¬ify); 3553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 3653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void configure(const sp<AMessage> &format); 3753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void init(); 3853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void setParameters(const sp<AMessage> ¶ms); 3953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 4053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia // Synchronous call to ensure decoder will not request or send out data. 4153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void pause(); 4253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 4353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void setRenderer(const sp<Renderer> &renderer); 4453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t setVideoSurface(const sp<Surface> &) { return INVALID_OPERATION; } 4553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 4653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void signalFlush(); 4753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void signalResume(bool notifyComplete); 4853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void initiateShutdown(); 4953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 5053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual sp<AMessage> getStats() const { 5153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia return mStats; 5253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia } 5353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 5453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual status_t releaseCrypto() { 5553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia return INVALID_OPERATION; 5653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia } 5753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 5853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia enum { 5953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatInputDiscontinuity = 'inDi', 6053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatVideoSizeChanged = 'viSC', 6153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatFlushCompleted = 'flsC', 6253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatShutdownCompleted = 'shDC', 6353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatResumeCompleted = 'resC', 6453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatEOS = 'eos ', 6553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatError = 'err ', 6653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia }; 6753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 6853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaprotected: 6953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual ~DecoderBase(); 7153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void stopLooper(); 7353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onMessageReceived(const sp<AMessage> &msg); 7553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 7653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onConfigure(const sp<AMessage> &format) = 0; 7753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onSetParameters(const sp<AMessage> ¶ms) = 0; 7853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onSetRenderer(const sp<Renderer> &renderer) = 0; 7953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onResume(bool notifyComplete) = 0; 8053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onFlush() = 0; 8153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void onShutdown(bool notifyComplete) = 0; 8253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 8353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia void onRequestInputBuffers(); 8453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual bool doRequestBuffers() = 0; 8553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia virtual void handleError(int32_t err); 8653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 8753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<AMessage> mNotify; 8853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia int32_t mBufferGeneration; 8953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mPaused; 9053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<AMessage> mStats; 9153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 9253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jiaprivate: 9353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia enum { 9453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatConfigure = 'conf', 9553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatSetParameters = 'setP', 9653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatSetRenderer = 'setR', 9753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatPause = 'paus', 9853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatRequestInputBuffers = 'reqB', 9953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatFlush = 'flus', 10053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia kWhatShutdown = 'shuD', 10153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia }; 10253692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 10353692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia sp<ALooper> mDecoderLooper; 10453692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia bool mRequestInputBuffersPending; 10553692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 10653692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia DISALLOW_EVIL_CONSTRUCTORS(DecoderBase); 10753692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia}; 10853692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 10953692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia} // namespace android 11053692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia 11153692fa54d0bf1d69184035a4c05ea0601a09c14Wei Jia#endif // NUPLAYER2_DECODER_BASE_H_ 112