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

106 lines
2.4 KiB
C++

/*
* Copyright (c) 2019 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_MODULE_TAG "TV"
#define LOG_CLASS_TAG "CVpp"
#include "CVpp.h"
#include <CTvLog.h>
#include <sys/ioctl.h>
#include "tvutils.h"
CVpp *CVpp::mInstance;
CVpp *CVpp::getInstance()
{
if (NULL == mInstance) mInstance = new CVpp();
return mInstance;
}
CVpp::CVpp()
{
mpAmVideo = new CAmVideo();
}
CVpp::~CVpp()
{
if (mpAmVideo != NULL) {
delete mpAmVideo;
mpAmVideo = NULL;
}
}
int CVpp::VPP_setVideoColor(bool needColor)
{
int ret = 0 ;
LOGD("VPP_setVideoColor %d\n", needColor);
if (needColor) {
ret = setVideoColor(1);//default blue
} else {
ret = setVideoColor(3);//set black test pattern and disable video
}
return ret;
}
int CVpp::setVideoColor(int color)
{
LOGD("%s: %d\n", __FUNCTION__, color);
int ret = 0;
int disable = 1;
switch (color) {
case VIDEO_LAYER_COLOR_BLACK:
mpAmVideo->AmVideoDeviceIOCtl(AMSTREAM_IOC_SET_VIDEO_DISABLE, &disable);
ret = setVideoColor(0, 16, 128, 128);
break;
case VIDEO_LAYER_COLOR_BLUE:
mpAmVideo->AmVideoDeviceIOCtl(AMSTREAM_IOC_SET_VIDEO_DISABLE, &disable);
ret = setVideoColor(0, 41, 240, 110);
break;
default:
disable = 2;
ret = setVideoColor(0, 16, 128, 128);
mpAmVideo->AmVideoDeviceIOCtl(AMSTREAM_IOC_SET_VIDEO_DISABLE, &disable);
break;
}
return ret;
}
int CVpp::setVideoColor (int vdin_blending_mask, int y, int u, int v )
{
int ret = 0;
unsigned long value = vdin_blending_mask << 24;
value |= ( unsigned int ) ( y << 16 ) | ( unsigned int ) ( u << 8 ) | ( unsigned int ) ( v );
char val[64] = {0};
sprintf(val, "0x%lx", ( unsigned long ) value);
ret = tvWriteSysfs(VIDEO_TEST_SCREEN, val);
return ret;
}
int CVpp::setVideoScreenMode ( int value )
{
mpAmVideo->AmVideoDeviceIOCtl(AMSTREAM_IOC_SET_SCREEN_MODE, &value);
return 0;
}
int CVpp::getVideoScreenMode()
{
int mode;
mpAmVideo->AmVideoDeviceIOCtl(AMSTREAM_IOC_GET_SCREEN_MODE, &mode);
return mode;
}
int CVpp::setVideoaxis ()
{
int axis[4] = {0, 0, 0, 0};
mpAmVideo->AmVideoDeviceIOCtl(AMSTREAM_IOC_SET_VIDEO_AXIS, &axis);
return 0;
}