Files
2026-08-24 10:03:24 +08:00

110 lines
3.2 KiB
C++

/*
* 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 <cstring>
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<VtContentListener> & 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<VtBufferItem> & item) {
if (mReleaseListener) {
return mReleaseListener->onFrameDisplayed(item);
} else {
return -1;
}
}
int32_t VtConsumer::onFrameAvailable(
std::vector<std::shared_ptr<VtBufferItem>> & items) {
if (mContentListener && mContentListener.get()) {
return mContentListener->onFrameAvailable(items);
} else {
return -1;
}
}
void VtConsumer::onClearAlwaysVRRMode() {
if (mReleaseListener)
mReleaseListener->onClearAlwaysVRRMode();
}