-rw-r--r-- | hwc2/common/devices/PhysicalDevice.cpp | 46 | ||||
-rw-r--r-- | hwc2/common/utils/AmVideo.cpp | 44 | ||||
-rw-r--r-- | hwc2/include/AmVideo.h | 3 | ||||
-rw-r--r-- | hwc2/include/PhysicalDevice.h | 4 |
4 files changed, 95 insertions, 2 deletions
diff --git a/hwc2/common/utils/AmVideo.cpp b/hwc2/common/utils/AmVideo.cpp index 15db0c9..89e0fbc 100644 --- a/hwc2/common/utils/AmVideo.cpp +++ b/hwc2/common/utils/AmVideo.cpp @@ -33,6 +33,9 @@ using namespace android; #define AMSTREAM_IOC_MAGIC 'S' #define AMSTREAM_IOC_GLOBAL_GET_VIDEO_OUTPUT _IOR(AMSTREAM_IOC_MAGIC, 0x21, int) #define AMSTREAM_IOC_GLOBAL_SET_VIDEO_OUTPUT _IOW(AMSTREAM_IOC_MAGIC, 0x22, int) +#define AMSTREAM_IOC_GET_VIDEO_DISABLE _IOR((AMSTREAM_IOC_MAGIC), 0x48, int) +#define AMSTREAM_IOC_SET_VIDEO_DISABLE _IOW((AMSTREAM_IOC_MAGIC), 0x49, int) +#define AMSTREAM_IOC_GET_OMX_INFO _IOR((AMSTREAM_IOC_MAGIC), 0xb2, unsigned int) AmVideo* AmVideo::mInstance = NULL; Mutex AmVideo::mLock; @@ -107,3 +110,44 @@ int AmVideo::getVideoPresent(bool& output) { return 0; } +int AmVideo::getvideodisable(int* mode) { + if (mDevFd < 0) + return -EBADF; + + int ret = ioctl(mDevFd, AMSTREAM_IOC_GET_VIDEO_DISABLE, mode); + if (ret < 0) { + ALOGE("getvideodisable error, ret=%d", ret); + return ret; + } + return 0; +} + +int AmVideo::setvideodisable(int mode) { + if (mDevFd < 0) + return -EBADF; + int ret = ioctl(mDevFd, AMSTREAM_IOC_SET_VIDEO_DISABLE, &mode); + if (ret < 0) { + ALOGE("setvideodisable error, ret=%d", ret); + return ret; + } + return 0; +} + +int AmVideo::getOmxKeepLastFrame(unsigned int *keepLastFrame) { + if (mDevFd < 0) + return -EBADF; + + unsigned long omx_info = 0; + int ret = ioctl(mDevFd, AMSTREAM_IOC_GET_OMX_INFO, &omx_info); + if (ret < 0) { + ALOGE("get omx info error, ret =%d", ret); + *keepLastFrame = 0; + return ret; + } else { + *keepLastFrame = omx_info & 0x1; //omx_info bit0: keep last frmame + } + //ALOGV("video layer keepLastFrame %d", *keepLastFrame); + return 0; + +} + |