1033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim/* 2033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * Copyright (C) 2018 The Android Open Source Project 3033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * 4033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * Licensed under the Apache License, Version 2.0 (the "License"); 5033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * you may not use this file except in compliance with the License. 6033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * You may obtain a copy of the License at 7033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * 8033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * http://www.apache.org/licenses/LICENSE-2.0 9033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * 10033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * Unless required by applicable law or agreed to in writing, software 11033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * distributed under the License is distributed on an "AS IS" BASIS, 12033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * See the License for the specific language governing permissions and 14033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim * limitations under the License. 15033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim */ 16033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 1772dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#ifndef ANDROID_C2_SOFT_VPX_DEC_H_ 1872dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#define ANDROID_C2_SOFT_VPX_DEC_H_ 19033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 20033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim#include <SimpleC2Component.h> 21033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 22033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 23033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim#include "vpx/vpx_decoder.h" 24033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim#include "vpx/vp8dx.h" 25033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 26033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kimnamespace android { 27033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 28aa9c743015a71323b4204320a44cc1f7802a1055Lajos Molnarstruct C2SoftVpxDec : public SimpleC2Component { 296f709d0299c4b7b77fc06a5423122fb9859d62afManisha Jajoo class IntfImpl; 306f709d0299c4b7b77fc06a5423122fb9859d62afManisha Jajoo 31aa9c743015a71323b4204320a44cc1f7802a1055Lajos Molnar C2SoftVpxDec(const char* name, c2_node_id_t id, 326f709d0299c4b7b77fc06a5423122fb9859d62afManisha Jajoo const std::shared_ptr<IntfImpl>& intfImpl); 33aa9c743015a71323b4204320a44cc1f7802a1055Lajos Molnar virtual ~C2SoftVpxDec(); 34033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 35033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim // From SimpleC2Component 36033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim c2_status_t onInit() override; 37033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim c2_status_t onStop() override; 38033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim void onReset() override; 39033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim void onRelease() override; 40033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim c2_status_t onFlush_sm() override; 41033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim void process( 42033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::unique_ptr<C2Work> &work, 43033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::shared_ptr<C2BlockPool> &pool) override; 44033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim c2_status_t drain( 45033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim uint32_t drainMode, 46033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::shared_ptr<C2BlockPool> &pool) override; 47033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim private: 48033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim enum { 49033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim MODE_VP8, 50033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim MODE_VP9, 51033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim } mMode; 52033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 536f709d0299c4b7b77fc06a5423122fb9859d62afManisha Jajoo std::shared_ptr<IntfImpl> mIntf; 54033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim vpx_codec_ctx_t *mCodecCtx; 55033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim bool mFrameParallelMode; // Frame parallel is only supported by VP9 decoder. 56033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 57033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim uint32_t mWidth; 58033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim uint32_t mHeight; 59033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim bool mSignalledOutputEos; 60033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim bool mSignalledError; 61033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 62033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim status_t initDecoder(); 63033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim status_t destroyDecoder(); 64033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim void finishWork(uint64_t index, const std::unique_ptr<C2Work> &work, 65033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::shared_ptr<C2GraphicBlock> &block); 66033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim bool outputBuffer( 67033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::shared_ptr<C2BlockPool> &pool, 68033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::unique_ptr<C2Work> &work); 69033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim c2_status_t drainInternal( 70033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim uint32_t drainMode, 71033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::shared_ptr<C2BlockPool> &pool, 72033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim const std::unique_ptr<C2Work> &work); 73033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 74aa9c743015a71323b4204320a44cc1f7802a1055Lajos Molnar C2_DO_NOT_COPY(C2SoftVpxDec); 75033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim}; 76033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 77033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim} // namespace android 78033ea548eec7ec220082ea6b199bf6e77f67a40dWonsik Kim 7972dc0b6eea5a305d58537dcd2ee28e23c72b6e44Lajos Molnar#endif // ANDROID_C2_SOFT_VPX_DEC_H_ 80