/* * Copyright (c) 2021 Amlogic, Inc. All rights reserved. * * This source code is subject to the terms and conditions defined in the * file 'LICENSE' which is part of this source code package. * * Description: */ #define LOG_NDEBUG 1 #define VTCON_LOGD(fmt,...) MESON_LOGD("[%s] [%s] " fmt, mName, __func__, ##__VA_ARGS__) #define VTCON_LOGW(fmt,...) MESON_LOGW("[%s] [%s] " fmt, mName, __func__, ##__VA_ARGS__) #define VTCON_LOGE(fmt,...) MESON_LOGE("[%s] [%s] " fmt, mName, __func__, ##__VA_ARGS__) #include "VtConsumer.h" #include VtConsumer::VtConsumer(int tunnelId, uint32_t dispId, uint32_t layerId) { mTunnelId = tunnelId; mReleaseListener = nullptr; mContentListener = nullptr; snprintf(mName, 64, "VtConsumer-%u-%d-%u", dispId, tunnelId, layerId); } VtConsumer::~VtConsumer() { mContentListener.reset(); } int32_t VtConsumer::setReleaseListener(VtReleaseListener *listener) { if (!listener) VTCON_LOGD("set release listener is null"); mReleaseListener = listener; return 0; } int32_t VtConsumer::setVtContentListener( const std::shared_ptr & listener) { if (!listener || !listener.get()) { VTCON_LOGE("set content listener is null"); return -1; } if (mContentListener && mContentListener.get()) { mContentListener.reset(); } mContentListener = listener; return 0; } int32_t VtConsumer::onVtCmds(vt_cmd_t & cmd, vt_cmd_data_t & cmdData) { if (!mContentListener || !mContentListener.get()) { VTCON_LOGE("not found content listener"); return -1; } switch (cmd) { case VT_CMD_SET_VIDEO_STATUS: { vt_video_status_t statusType = (vt_video_status_t)cmdData.data; mContentListener->onVideoStatus(statusType); } break; case VT_CMD_SET_GAME_MODE: VTCON_LOGD("cmd VT_CMD_SET_GAME_MODE %d", cmdData.data); mContentListener->onVideoGameMode(cmdData.data); break; case VT_CMD_SET_DISPLAY_FRAME: VTCON_LOGD("cmd VT_CMD_SET_DISPLAY_FRAME(%d %d %d %d)", cmdData.rect.left, cmdData.rect.top, cmdData.rect.right, cmdData.rect.bottom); mContentListener->onDisplayFrameChange(cmdData.rect); break; case VT_CMD_SET_VIDEO_TRANSFORM: VTCON_LOGD("received cmd VT_CMD_SET_VIDEO_TRANSFORM %d", cmdData.transform); mContentListener->onVideoTransform(cmdData.transform); break; default: VTCON_LOGW("received an invalid CMD %d", (int)cmd); return -1; } return 0; } int32_t VtConsumer::onVtFrameDisplayed(std::shared_ptr & item) { if (mReleaseListener) { return mReleaseListener->onFrameDisplayed(item); } else { return -1; } } int32_t VtConsumer::onFrameAvailable( std::vector> & items) { if (mContentListener && mContentListener.get()) { return mContentListener->onFrameAvailable(items); } else { return -1; } } void VtConsumer::onClearAlwaysVRRMode() { if (mReleaseListener) mReleaseListener->onClearAlwaysVRRMode(); }