1b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin/* 2b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * Copyright (C) 2013 The Android Open Source Project 3b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * 4b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * Licensed under the Apache License, Version 2.0 (the "License"); 5b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * you may not use this file except in compliance with the License. 6b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * You may obtain a copy of the License at 7b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * 8b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * http://www.apache.org/licenses/LICENSE-2.0 9b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * 10b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * Unless required by applicable law or agreed to in writing, software 11b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * distributed under the License is distributed on an "AS IS" BASIS, 12b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * See the License for the specific language governing permissions and 14b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin * limitations under the License. 15b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin */ 16b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 17b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#ifndef SOFT_VPX_ENCODER_H_ 18b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 19b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#define SOFT_VPX_ENCODER_H_ 20b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 21255735a38b9d5c3755c7b819bdc8fdaf4357d860Pawin Vongmasa#include <media/stagefright/omx/SoftVideoEncoderOMXComponent.h> 22b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 23b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#include <OMX_VideoExt.h> 24b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#include <OMX_IndexExt.h> 25b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 26a0a63e13788a77bc502da0c72269d82c4779ac91Andreas Huber#include <hardware/gralloc.h> 27a0a63e13788a77bc502da0c72269d82c4779ac91Andreas Huber 28b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#include "vpx/vpx_encoder.h" 29b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#include "vpx/vpx_codec.h" 30b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#include "vpx/vp8cx.h" 31b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 32b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekinnamespace android { 33b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 34d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian// Base class for a VPX Encoder OMX Component 35b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// 36b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// Boilerplate for callback bindings are taken care 37b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// by the base class SimpleSoftOMXComponent and its 38b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// parent SoftOMXComponent. 39b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// 40d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian// Only following encoder settings are available (codec specific settings might 41d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian// be available in the sub-classes): 42b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - target bitrate 43b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - rate control (constant / variable) 44b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - frame rate 45b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - error resilience 46b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - reconstruction & loop filters (g_profile) 47b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// 48b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// Only following color formats are recognized 49b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - YUV420Planar 50b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - YUV420SemiPlanar 51b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - AndroidOpaque 52b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// 53b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// Following settings are not configurable by the client 54b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - encoding deadline is realtime 55b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - multithreaded encoding utilizes a number of threads equal 56b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// to online cpu's available 57d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian// - the algorithm interface for encoder is decided by the sub-class in use 58b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - fractional bits of frame rate is discarded 59b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// - OMX timestamps are in microseconds, therefore 60b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin// encoder timebase is fixed to 1/1000000 61b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 622edda09a2ad1d112c52acd37d323f63f0a492d67Lajos Molnarstruct SoftVPXEncoder : public SoftVideoEncoderOMXComponent { 63b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin SoftVPXEncoder(const char *name, 64b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin const OMX_CALLBACKTYPE *callbacks, 65b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin OMX_PTR appData, 66d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian OMX_COMPONENTTYPE **component, 67d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian const char* role, 68d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian OMX_VIDEO_CODINGTYPE codingType, 69d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian const char* mimeType, 70d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian int32_t minCompressionRatio, 71d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian const CodecProfileLevel *profileLevels, 72d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian size_t numProfileLevels); 73b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 74a0a63e13788a77bc502da0c72269d82c4779ac91Andreas Huberprotected: 75b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin virtual ~SoftVPXEncoder(); 76b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 77b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Returns current values for requested OMX 78b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // parameters 79b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin virtual OMX_ERRORTYPE internalGetParameter( 80b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin OMX_INDEXTYPE index, OMX_PTR param); 81b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 82b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Validates, extracts and stores relevant OMX 83b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // parameters 84b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin virtual OMX_ERRORTYPE internalSetParameter( 85b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin OMX_INDEXTYPE index, const OMX_PTR param); 86b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 87336da16a12423c496efba6ca9813d5d42a1f70f6Andreas Huber virtual OMX_ERRORTYPE setConfig( 88336da16a12423c496efba6ca9813d5d42a1f70f6Andreas Huber OMX_INDEXTYPE index, const OMX_PTR params); 89336da16a12423c496efba6ca9813d5d42a1f70f6Andreas Huber 90b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // OMX callback when buffers available 91b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Note that both an input and output buffer 92b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // is expected to be available to carry out 93b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // encoding of the frame 94b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin virtual void onQueueFilled(OMX_U32 portIndex); 95b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 965443b57cc54f2e46b35246637be26a69e9f493e1Wonsik Kim virtual void onReset(); 975443b57cc54f2e46b35246637be26a69e9f493e1Wonsik Kim 98d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // Initializes vpx encoder with available settings. 99d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian status_t initEncoder(); 100d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian 101d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // Populates mCodecInterface with codec specific settings. 102d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian virtual void setCodecSpecificInterface() = 0; 103d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian 1044f61e52d32f05db3cb04a0e29f9a2507ceffaf99Vignesh Venkatasubramanian // Sets codec specific configuration. 105328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian virtual void setCodecSpecificConfiguration() = 0; 1064f61e52d32f05db3cb04a0e29f9a2507ceffaf99Vignesh Venkatasubramanian 107d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // Sets codec specific encoder controls. 108d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian virtual vpx_codec_err_t setCodecSpecificControls() = 0; 109d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian 1104f61e52d32f05db3cb04a0e29f9a2507ceffaf99Vignesh Venkatasubramanian // Get current encode flags. 1114f61e52d32f05db3cb04a0e29f9a2507ceffaf99Vignesh Venkatasubramanian virtual vpx_enc_frame_flags_t getEncodeFlags(); 1124f61e52d32f05db3cb04a0e29f9a2507ceffaf99Vignesh Venkatasubramanian 113d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // Releases vpx encoder instance, with it's associated 114d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // data structures. 115d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // 116d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // Unless called earlier, this is handled by the 117d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // dtor. 118d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian status_t releaseEncoder(); 119d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian 120d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // Get bitrate parameters. 121d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian virtual OMX_ERRORTYPE internalGetBitrateParams( 122d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian OMX_VIDEO_PARAM_BITRATETYPE* bitrate); 123d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian 124d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian // Updates bitrate to reflect port settings. 125d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian virtual OMX_ERRORTYPE internalSetBitrateParams( 126d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian const OMX_VIDEO_PARAM_BITRATETYPE* bitrate); 127d8274ce8759faa21b10e9c027745774fefc9d993Vignesh Venkatasubramanian 128328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian // Gets Android vpx specific parameters. 129328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian OMX_ERRORTYPE internalGetAndroidVpxParams( 130328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE *vpxAndroidParams); 131328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian 132328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian // Handles Android vpx specific parameters. 133328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian OMX_ERRORTYPE internalSetAndroidVpxParams( 134328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian const OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE *vpxAndroidParams); 135328597abaecff9722dcfb4bb4c67964bd82a072aVignesh Venkatasubramanian 1364154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev enum TemporalReferences { 1374154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // For 1 layer case: reference all (last, golden, and alt ref), but only 1384154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // update last. 1394154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateLastRefAll = 12, 1404154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // First base layer frame for 3 temporal layers, which updates last and 1414154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // golden with alt ref dependency. 1424154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateLastAndGoldenRefAltRef = 11, 1434154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // First enhancement layer with alt ref dependency. 1444154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateGoldenRefAltRef = 10, 1454154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // First enhancement layer with alt ref dependency. 1464154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateGoldenWithoutDependencyRefAltRef = 9, 1474154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Base layer with alt ref dependency. 1484154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateLastRefAltRef = 8, 1494154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Highest enhacement layer without dependency on golden with alt ref 1504154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // dependency. 1514154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateNoneNoRefGoldenRefAltRef = 7, 1524154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Second layer and last frame in cycle, for 2 layers. 1534154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateNoneNoRefAltref = 6, 1544154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Highest enhancement layer. 1554154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateNone = 5, 1564154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Second enhancement layer. 1574154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateAltref = 4, 1584154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Second enhancement layer without dependency on previous frames in 1594154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // the second enhancement layer. 1604154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateAltrefWithoutDependency = 3, 1614154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // First enhancement layer. 1624154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateGolden = 2, 1634154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // First enhancement layer without dependency on previous frames in 1644154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // the first enhancement layer. 1654154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateGoldenWithoutDependency = 1, 1664154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Base layer. 1674154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kTemporalUpdateLast = 0, 1684154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev }; 1694154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev enum { 1704154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev kMaxTemporalPattern = 8 1714154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev }; 1724154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 173b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // number of buffers allocated per port 174b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin static const uint32_t kNumBuffers = 4; 175b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 176b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // OMX port indexes that refer to input and 177b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // output ports respectively 178b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin static const uint32_t kInputPortIndex = 0; 179b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin static const uint32_t kOutputPortIndex = 1; 180b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 181b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Byte-alignment required for buffers 182b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin static const uint32_t kInputBufferAlignment = 1; 183b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin static const uint32_t kOutputBufferAlignment = 2; 184b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 185b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Number of supported input color formats 186b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin static const uint32_t kNumberOfSupportedColorFormats = 3; 187b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 188b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // vpx specific opaque data structure that 189b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // stores encoder state 190b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin vpx_codec_ctx_t* mCodecContext; 191b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 192b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // vpx specific data structure that 193b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // stores encoder configuration 194b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin vpx_codec_enc_cfg_t* mCodecConfiguration; 195b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 196b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // vpx specific read-only data structure 197b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // that specifies algorithm interface (e.g. vp8) 198b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin vpx_codec_iface_t* mCodecInterface; 199b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 20030c08634416a99a0f627e4de3a5f49dcf0a72fd3Johann // If a request for a change it bitrate has been received. 20130c08634416a99a0f627e4de3a5f49dcf0a72fd3Johann bool mBitrateUpdated; 202b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 203b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Bitrate control mode, either constant or variable 204b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin vpx_rc_mode mBitrateControlMode; 205b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 206b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Parameter that denotes whether error resilience 207b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // is enabled in encoder 208b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin OMX_BOOL mErrorResilience; 209b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 2104154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Key frame interval in frames 2114154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev uint32_t mKeyFrameInterval; 2124154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2134154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Minimum (best quality) quantizer 2144154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev uint32_t mMinQuantizer; 2154154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2164154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Maximum (worst quality) quantizer 2174154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev uint32_t mMaxQuantizer; 2184154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2194154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Number of coding temporal layers to be used. 2204154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev size_t mTemporalLayers; 2214154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2224154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Temporal layer bitrare ratio in percentage 2234154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev uint32_t mTemporalLayerBitrateRatio[OMX_VIDEO_ANDROID_MAXVP8TEMPORALLAYERS]; 2244154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2254154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Temporal pattern type 2264154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE mTemporalPatternType; 2274154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2284154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Temporal pattern length 2294154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev size_t mTemporalPatternLength; 2304154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2314154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Temporal pattern current index 2324154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev size_t mTemporalPatternIdx; 2334154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2344154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Frame type temporal pattern 2354154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev TemporalReferences mTemporalPattern[kMaxTemporalPattern]; 2364154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 2374154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev // Last input buffer timestamp 2384154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev OMX_TICKS mLastTimestamp; 2394154795d5526750b7aec5f774831a9e1ba0a3f15Alex Glaznev 240b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // Conversion buffer is needed to convert semi 241b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // planar yuv420 to planar format 242b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // It is only allocated if input format is 243b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin // indeed YUV420SemiPlanar. 244b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin uint8_t* mConversionBuffer; 245b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 246336da16a12423c496efba6ca9813d5d42a1f70f6Andreas Huber bool mKeyFrameRequested; 247336da16a12423c496efba6ca9813d5d42a1f70f6Andreas Huber 248b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin DISALLOW_EVIL_CONSTRUCTORS(SoftVPXEncoder); 249b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin}; 250b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 251b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin} // namespace android 252b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin 253b4698f79230bbee15936641d951d49655f9e6da5Kunter Gultekin#endif // SOFT_VPX_ENCODER_H_ 254