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