18b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol/* 28b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Copyright (c) 2014 Intel Corporation 38b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 48b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Licensed under the Apache License, Version 2.0 (the "License"); 58b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// you may not use this file except in compliance with the License. 68b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// You may obtain a copy of the License at 78b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 88b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// http://www.apache.org/licenses/LICENSE-2.0 98b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// 108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// Unless required by applicable law or agreed to in writing, software 118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// distributed under the License is distributed on an "AS IS" BASIS, 128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// See the License for the specific language governing permissions and 148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol// limitations under the License. 158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol*/ 168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#ifndef VIRTUAL_DEVICE_H 178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#define VIRTUAL_DEVICE_H 188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <IDisplayDevice.h> 208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <SimpleThread.h> 218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <IVideoPayloadManager.h> 228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <utils/Condition.h> 238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <utils/Mutex.h> 248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <utils/Vector.h> 25040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#include <utils/List.h> 26040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#ifdef INTEL_WIDI 278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include "IFrameServer.h" 28040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#endif 298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <va/va.h> 308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#include <va/va_vpp.h> 318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace android { 338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolnamespace intel { 348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass Hwcomposer; 368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass DisplayPlaneManager; 378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass IVideoPayloadManager; 388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass SoftVsyncObserver; 398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 40040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#ifdef INTEL_WIDI 418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolclass VirtualDevice : public IDisplayDevice, public BnFrameServer { 42040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#else 43040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalemclass VirtualDevice : public IDisplayDevice, public RefBase{ 44040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#endif 458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprotected: 468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol class VAMappedHandle; 478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol class VAMappedHandleObject; 488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct CachedBuffer : public android::RefBase { 498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol CachedBuffer(BufferManager *mgr, buffer_handle_t handle); 508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ~CachedBuffer(); 518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol BufferManager *manager; 528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol BufferMapper *mapper; 538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VAMappedHandle *vaMappedHandle; 548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol buffer_handle_t cachedKhandle; 558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct HeldDecoderBuffer : public android::RefBase { 578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol HeldDecoderBuffer(const sp<VirtualDevice>& vd, const android::sp<CachedBuffer>& cachedBuffer); 588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual ~HeldDecoderBuffer(); 598b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::sp<VirtualDevice> vd; 608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::sp<CachedBuffer> cachedBuffer; 618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 62040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#ifdef INTEL_WIDI 638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct Configuration { 648b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol sp<IFrameTypeChangeListener> typeChangeListener; 658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol sp<IFrameListener> frameListener; 668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol FrameProcessingPolicy policy; 678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool frameServerActive; 688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool extendedModeEnabled; 698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool forceNotifyFrameType; 708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool forceNotifyBufferInfo; 718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 72040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#endif 738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol class BufferList { 748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol public: 758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol BufferList(VirtualDevice& vd, const char* name, uint32_t limit, uint32_t format, uint32_t usage); 768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol buffer_handle_t get(uint32_t width, uint32_t height, sp<RefBase>* heldBuffer); 778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void clear(); 788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol private: 798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct HeldBuffer; 808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VirtualDevice& mVd; 818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const char* mName; 828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::List<buffer_handle_t> mAvailableBuffers; 838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const uint32_t mLimit; 848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const uint32_t mFormat; 858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const uint32_t mUsage; 868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mBuffersToCreate; 878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mWidth; 888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mHeight; 898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol }; 908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct Task; 918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct RenderTask; 928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct ComposeTask; 938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct EnableVspTask; 948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct DisableVspTask; 958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct BlitTask; 968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct FrameTypeChangedTask; 978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct BufferInfoChangedTask; 988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol struct OnFrameReadyTask; 998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Mutex mConfigLock; 101040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#ifdef INTEL_WIDI 1028b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Configuration mCurrentConfig; 1038b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Configuration mNextConfig; 104040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#endif 1058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ssize_t mRgbLayer; 1068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol ssize_t mYuvLayer; 1078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mProtectedMode; 1088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol buffer_handle_t mExtLastKhandle; 1108b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int64_t mExtLastTimestamp; 1118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int64_t mRenderTimestamp; 1138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Mutex mTaskLock; // for task queue and buffer lists 1158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol BufferList mCscBuffers; 1168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol BufferList mRgbUpscaleBuffers; 1178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol DECLARE_THREAD(WidiBlitThread, VirtualDevice); 1188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Condition mRequestQueued; 1198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Condition mRequestDequeued; 1208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Vector< sp<Task> > mTasks; 1218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // fence info 1238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int mSyncTimelineFd; 1248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol unsigned mNextSyncPoint; 1258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mExpectAcquireFences; 126040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#ifdef INTEL_WIDI 1278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol FrameInfo mLastInputFrameInfo; 1288b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol FrameInfo mLastOutputFrameInfo; 129040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#endif 1308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int32_t mVideoFramerate; 1318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::KeyedVector<buffer_handle_t, android::sp<CachedBuffer> > mMappedBufferCache; 1338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::Mutex mHeldBuffersLock; 1348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::KeyedVector<buffer_handle_t, android::sp<android::RefBase> > mHeldBuffers; 1358b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1368b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // VSP 1378b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mVspInUse; 1388b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mVspEnabled; 1398b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mVspWidth; 1408b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mVspHeight; 1418b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VADisplay va_dpy; 1428b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VAConfigID va_config; 1438b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VAContextID va_context; 1448b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VASurfaceID va_blank_yuv_in; 1458b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VASurfaceID va_blank_rgb_in; 1468b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::KeyedVector<buffer_handle_t, android::sp<VAMappedHandleObject> > mVaMapCache; 1478b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1488b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mVspUpscale; 1498b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mDebugVspClear; 1508b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mDebugVspDump; 1518b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mDebugCounter; 1528b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1538b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprivate: 1548b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol android::sp<CachedBuffer> getMappedBuffer(buffer_handle_t handle); 1558b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1568b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool sendToWidi(hwc_display_contents_1_t *display); 1578b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool queueCompose(hwc_display_contents_1_t *display); 1588b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool queueColorConvert(hwc_display_contents_1_t *display); 159040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#ifdef INTEL_WIDI 1608b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool handleExtendedMode(hwc_display_contents_1_t *display); 1618b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1628b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void queueFrameTypeInfo(const FrameInfo& inputFrameInfo); 1638b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void queueBufferInfo(const FrameInfo& outputFrameInfo); 164040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#endif 1658b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void colorSwap(buffer_handle_t src, buffer_handle_t dest, uint32_t pixelCount); 1668b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void vspPrepare(uint32_t width, uint32_t height); 1678b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void vspEnable(uint32_t width, uint32_t height); 1688b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void vspDisable(); 1698b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void vspCompose(VASurfaceID videoIn, VASurfaceID rgbIn, VASurfaceID videoOut, 1708b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const VARectangle* surface_region, const VARectangle* output_region); 1718b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1728b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool getFrameOfSize(uint32_t width, uint32_t height, const IVideoPayloadManager::MetaData& metadata, IVideoPayloadManager::Buffer& info); 1738b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol void setMaxDecodeResolution(uint32_t width, uint32_t height); 1748b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1758b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 1768b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol VirtualDevice(Hwcomposer& hwc); 1778b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual ~VirtualDevice(); 1788b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool isFrameServerActive() const; 1798b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1808b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolpublic: 1818b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool prePrepare(hwc_display_contents_1_t *display); 1828b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool prepare(hwc_display_contents_1_t *display); 1838b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool commit(hwc_display_contents_1_t *display, 1848b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol IDisplayContext *context); 1858b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 1868b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool vsyncControl(bool enabled); 1878b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool blank(bool blank); 1888b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool getDisplaySize(int *width, int *height); 1898b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool getDisplayConfigs(uint32_t *configs, 1908b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol size_t *numConfigs); 1918b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool getDisplayAttributes(uint32_t config, 1928b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol const uint32_t *attributes, 1938b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol int32_t *values); 1948b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool compositionComplete(); 1958b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool initialize(); 1968b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void deinitialize(); 1978b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool isConnected() const; 1988b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual const char* getName() const; 1998b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual int getType() const; 2008b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void onVsync(int64_t timestamp); 2018b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual void dump(Dump& d); 2028b55c41553ee026c299578b158c4b85de50aaee1Victor Tasayco Loarte virtual uint32_t getFpsDivider(); 203040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#ifdef INTEL_WIDI 2048b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol // IFrameServer methods 2058b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual android::status_t start(sp<IFrameTypeChangeListener> frameTypeChangeListener); 2068b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual android::status_t stop(bool isConnected); 2078b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol /* TODO: 64-bit - this handle of size 32-bit is a problem for 64-bit */ 2088b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual android::status_t notifyBufferReturned(int handle); 2098b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual android::status_t setResolution(const FrameProcessingPolicy& policy, android::sp<IFrameListener> listener); 210040739aeaee679e4a570d51d8c081c61b7da3271Saadi Maalem#endif 2118b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool setPowerMode(int mode); 2128b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual int getActiveConfig(); 2138b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol virtual bool setActiveConfig(int index); 2148b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2158b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujolprotected: 2168b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mInitialized; 2178b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol Hwcomposer& mHwc; 2188b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol IVideoPayloadManager *mPayloadManager; 2198b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol SoftVsyncObserver *mVsyncObserver; 2208b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mOrigContentWidth; 2218b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mOrigContentHeight; 2228b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mFirstVideoFrame; 2238b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mLastConnectionStatus; 2248b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mCachedBufferCapcity; 2258b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mDecWidth; 2268b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol uint32_t mDecHeight; 2278b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol bool mIsForceCloneMode; 2288b55c41553ee026c299578b158c4b85de50aaee1Victor Tasayco Loarte uint32_t mFpsDivider; 2298b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol}; 2308b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2318b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 2328b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol} 2338b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol 2348b0063f7f46289983bd1bf9ca61662b4a2ddf5b6Benjamin Pujol#endif /* VIRTUAL_DEVICE_H */ 235