mirror of
https://github.com/jojo61/vdr-plugin-softhdcuvid.git
synced 2023-10-10 13:37:41 +02:00
More changes for HDR with softhddrm
Monitor Type now required in Konfig
This commit is contained in:
parent
fde863adaf
commit
a4fe3aa31c
18
README.md
18
README.md
@ -82,9 +82,9 @@ You have to adapt the Makefile. There are 3 possible Version that you can build:
|
|||||||
softhddrm (DRM=1)
|
softhddrm (DRM=1)
|
||||||
This is for INTEL cards and also uses Vaapi as decoder. It uses the DRM API for output and
|
This is for INTEL cards and also uses Vaapi as decoder. It uses the DRM API for output and
|
||||||
runs without X Server. There are several commandline options to select the resolution and refresh rate.
|
runs without X Server. There are several commandline options to select the resolution and refresh rate.
|
||||||
I recommend to use libplacebo and set LIBPLCEBO_GL=1 in the Makefile.
|
I recommend to use libplacebo and set LIBPLACEBO_GL=1 in the Makefile.
|
||||||
|
|
||||||
Libplacebo API Version >= 107 is needed.
|
Libplacebo API Version >= 113 is needed.
|
||||||
|
|
||||||
|
|
||||||
Install:
|
Install:
|
||||||
@ -116,8 +116,10 @@ Beginners Guide for libplacebo:
|
|||||||
Resolution setting. There is as small black line between the halfs to remaind you that Scaler Test
|
Resolution setting. There is as small black line between the halfs to remaind you that Scaler Test
|
||||||
is activ.
|
is activ.
|
||||||
|
|
||||||
Then you should set the Monitor Colorspace to "sRGB". This guarantees you the best colors on your screen.
|
Then you should set the Monitor Type to "sRGB". This guarantees you the best colors on your screen.
|
||||||
At the moment all calculations internaly are done in RGB space and all cards output also RGB.
|
At the moment all calculations internaly are done in RGB space and all cards output also RGB.
|
||||||
|
If you use the softhddrm Version then you should set the Monitor Type to HD TV or UHD-HDR TV if you have
|
||||||
|
connected one of those.
|
||||||
|
|
||||||
If you are colorblind you could try to remedy this with the Colorblind Settings. Realy only needed
|
If you are colorblind you could try to remedy this with the Colorblind Settings. Realy only needed
|
||||||
in rare cases.
|
in rare cases.
|
||||||
@ -128,8 +130,16 @@ Beginners Guide for libplacebo:
|
|||||||
The plugins searches the shaders in $ConfigDir/plugins/shaders for the shaders. One example shader is
|
The plugins searches the shaders in $ConfigDir/plugins/shaders for the shaders. One example shader is
|
||||||
provided in the shader subdirectory. Copy it to e.g.: /etc/vdr/plugins/shaders and then start
|
provided in the shader subdirectory. Copy it to e.g.: /etc/vdr/plugins/shaders and then start
|
||||||
vdr -P 'softhdcuvid -S filmgrain.glsl ...'
|
vdr -P 'softhdcuvid -S filmgrain.glsl ...'
|
||||||
I use KrigBilateral for UV scaling and then adaptive-sharpen for sharpening. This results in a perfect picture for me.
|
I use KrigBilateral for UV scaling and then adaptive-sharpen for sharpening. This results in a perfect
|
||||||
|
picture for me.
|
||||||
|
|
||||||
|
You can also use a custon LUT File. It is located in $ConfigDir/shaders/lut/lut.cube. If you provide there
|
||||||
|
a lut file it will be automaticly used. In the Mainmenue you can switch LUT on and off.
|
||||||
|
|
||||||
|
Konfig Guide for softhddrm Version
|
||||||
|
----------------------------------
|
||||||
|
You should set the Monitor Type to HD TV or UHD-HDR TV depending on your TV Set
|
||||||
|
With softhddrm and a HDR TV Set you can view HDR-HLG content. This is tested with Kernel 5.12 and a Intel NUC.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
18
hdr.c
18
hdr.c
@ -335,17 +335,12 @@ static void set_hdr_metadata(int color,int trc, AVFrameSideData *sd1, AVFrameSid
|
|||||||
struct AVMasteringDisplayMetadata *md = NULL;
|
struct AVMasteringDisplayMetadata *md = NULL;
|
||||||
struct AVContentLightMetadata *ld = NULL;
|
struct AVContentLightMetadata *ld = NULL;
|
||||||
|
|
||||||
if (render->hdr_metadata == -1) { // Metadata not supported
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// clean up FFMEPG stuff
|
// clean up FFMEPG stuff
|
||||||
if (trc == AVCOL_TRC_BT2020_10)
|
if (trc == AVCOL_TRC_BT2020_10)
|
||||||
trc = AVCOL_TRC_ARIB_STD_B67;
|
trc = AVCOL_TRC_ARIB_STD_B67;
|
||||||
if (trc == AVCOL_TRC_UNSPECIFIED)
|
|
||||||
trc = AVCOL_TRC_BT709;
|
|
||||||
if (color == AVCOL_PRI_UNSPECIFIED)
|
|
||||||
color = AVCOL_PRI_BT709;
|
|
||||||
|
|
||||||
if ((old_color == color && old_trc == trc && !sd1 && !sd2) || !render->hdr_metadata)
|
if ((old_color == color && old_trc == trc && !sd1 && !sd2) || !render->hdr_metadata)
|
||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
@ -371,12 +366,15 @@ static void set_hdr_metadata(int color,int trc, AVFrameSideData *sd1, AVFrameSid
|
|||||||
|
|
||||||
Debug(3,"Update HDR to TRC %d color %d\n",trc,color);
|
Debug(3,"Update HDR to TRC %d color %d\n",trc,color);
|
||||||
|
|
||||||
if (trc == AVCOL_TRC_BT2020_10)
|
|
||||||
trc = AVCOL_TRC_ARIB_STD_B67;
|
|
||||||
|
|
||||||
old_color = color;
|
old_color = color;
|
||||||
old_trc = trc;
|
old_trc = trc;
|
||||||
|
|
||||||
|
|
||||||
|
if (VulkanTargetColorSpace != 3) { // no HDR TV
|
||||||
|
m_need_modeset = 1; // change in colorsettings
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (render->hdr_blob_id)
|
if (render->hdr_blob_id)
|
||||||
drmModeDestroyPropertyBlob(render->fd_drm, render->hdr_blob_id);
|
drmModeDestroyPropertyBlob(render->fd_drm, render->hdr_blob_id);
|
||||||
|
|
||||||
|
@ -280,6 +280,7 @@ static GLuint sc_generate(GLuint gl_prog, enum AVColorSpace colorspace)
|
|||||||
|
|
||||||
switch (colorspace) {
|
switch (colorspace) {
|
||||||
case AVCOL_SPC_RGB:
|
case AVCOL_SPC_RGB:
|
||||||
|
case AVCOL_SPC_BT470BG:
|
||||||
m = &yuv_bt601.m[0][0];
|
m = &yuv_bt601.m[0][0];
|
||||||
c = &yuv_bt601.c[0];
|
c = &yuv_bt601.c[0];
|
||||||
Debug(3, "BT601 Colorspace used\n");
|
Debug(3, "BT601 Colorspace used\n");
|
||||||
@ -341,6 +342,7 @@ static GLuint sc_generate(GLuint gl_prog, enum AVColorSpace colorspace)
|
|||||||
// GLSL("color.rgb = pow(color.rgb, vec3(2.4)); \n");
|
// GLSL("color.rgb = pow(color.rgb, vec3(2.4)); \n");
|
||||||
// GLSL("color.rgb = mix(vec3(4.0) * color.rgb * color.rgb,exp((color.rgb - vec3(%f)) * vec3(1.0/%f)) + vec3(%f) , bvec3(lessThan(vec3(0.5), color.rgb)));\n",HLG_C, HLG_A, HLG_B);
|
// GLSL("color.rgb = mix(vec3(4.0) * color.rgb * color.rgb,exp((color.rgb - vec3(%f)) * vec3(1.0/%f)) + vec3(%f) , bvec3(lessThan(vec3(0.5), color.rgb)));\n",HLG_C, HLG_A, HLG_B);
|
||||||
GLSL("color.rgb = mix(vec3(4.0) * color.rgb * color.rgb,exp((color.rgb - vec3(0.55991073)) * vec3(1.0/0.17883277)) + vec3(0.28466892), bvec3(lessThan(vec3(0.5), color.rgb)));\n");
|
GLSL("color.rgb = mix(vec3(4.0) * color.rgb * color.rgb,exp((color.rgb - vec3(0.55991073)) * vec3(1.0/0.17883277)) + vec3(0.28466892), bvec3(lessThan(vec3(0.5), color.rgb)));\n");
|
||||||
|
GLSL("color.rgb *= vec3(1.0/3.17955); \n"); // PL_COLOR_SDR_WHITE_HLG
|
||||||
GLSL("// color mapping \n");
|
GLSL("// color mapping \n");
|
||||||
GLSL("color.rgb = cms_matrix * color.rgb; \n");
|
GLSL("color.rgb = cms_matrix * color.rgb; \n");
|
||||||
#ifndef GAMMA
|
#ifndef GAMMA
|
||||||
@ -348,6 +350,7 @@ static GLuint sc_generate(GLuint gl_prog, enum AVColorSpace colorspace)
|
|||||||
GLSL("color.rgb = max(color.rgb, 0.0); \n");
|
GLSL("color.rgb = max(color.rgb, 0.0); \n");
|
||||||
// GLSL("color.rgb = clamp(color.rgb, 0.0, 1.0); \n");
|
// GLSL("color.rgb = clamp(color.rgb, 0.0, 1.0); \n");
|
||||||
// GLSL("color.rgb = pow(color.rgb, vec3(1.0/2.4)); \n");
|
// GLSL("color.rgb = pow(color.rgb, vec3(1.0/2.4)); \n");
|
||||||
|
GLSL("color.rgb *= vec3(3.17955); \n"); // PL_COLOR_SDR_WHITE_HLG
|
||||||
GLSL("color.rgb = mix(vec3(0.5) * sqrt(color.rgb), vec3(0.17883277) * log(color.rgb - vec3(0.28466892)) + vec3(0.55991073), bvec3(lessThan(vec3(1.0), color.rgb))); \n");
|
GLSL("color.rgb = mix(vec3(0.5) * sqrt(color.rgb), vec3(0.17883277) * log(color.rgb - vec3(0.28466892)) + vec3(0.55991073), bvec3(lessThan(vec3(1.0), color.rgb))); \n");
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -63,7 +63,7 @@ extern void ToggleLUT();
|
|||||||
/// vdr-plugin version number.
|
/// vdr-plugin version number.
|
||||||
/// Makefile extracts the version number for generating the file name
|
/// Makefile extracts the version number for generating the file name
|
||||||
/// for the distribution archive.
|
/// for the distribution archive.
|
||||||
static const char *const VERSION = "3.4"
|
static const char *const VERSION = "3.4.1"
|
||||||
#ifdef GIT_REV
|
#ifdef GIT_REV
|
||||||
"-GIT" GIT_REV
|
"-GIT" GIT_REV
|
||||||
#endif
|
#endif
|
||||||
@ -1109,10 +1109,11 @@ void cMenuSetupSoft::Create(void)
|
|||||||
static const char *const resolution[RESOLUTIONS] = {
|
static const char *const resolution[RESOLUTIONS] = {
|
||||||
"576i", "720p", "fake 1080", "1080", "2160p"
|
"576i", "720p", "fake 1080", "1080", "2160p"
|
||||||
};
|
};
|
||||||
#ifdef PLACEBO
|
|
||||||
static const char *const target_colorspace[] = {
|
static const char *const target_colorspace[] = {
|
||||||
"Monitor", "sRGB", "BT709", "HDR-HLG", "HDR10",
|
"default Monitor", "sRGB Monitor", "HD TV (BT.709)", "UHD-HDR TV (BT.2020)",
|
||||||
};
|
};
|
||||||
|
#ifdef PLACEBO
|
||||||
static const char *const target_colorblindness[] = {
|
static const char *const target_colorblindness[] = {
|
||||||
"None", "Protanomaly", "Deuteranomaly", "Tritanomaly", "Monochromacy",
|
"None", "Protanomaly", "Deuteranomaly", "Tritanomaly", "Monochromacy",
|
||||||
};
|
};
|
||||||
@ -1201,12 +1202,12 @@ void cMenuSetupSoft::Create(void)
|
|||||||
Add(new cMenuEditIntItem(tr("Saturation (0..100)"), &Saturation, 0, 100, tr("min"), tr("max")));
|
Add(new cMenuEditIntItem(tr("Saturation (0..100)"), &Saturation, 0, 100, tr("min"), tr("max")));
|
||||||
Add(new cMenuEditIntItem(tr("Gamma (0..100)"), &Gamma, 0, 100, tr("min"), tr("max")));
|
Add(new cMenuEditIntItem(tr("Gamma (0..100)"), &Gamma, 0, 100, tr("min"), tr("max")));
|
||||||
Add(new cMenuEditIntItem(tr("Hue (-314..314) "), &Hue, -314, 314, tr("min"), tr("max")));
|
Add(new cMenuEditIntItem(tr("Hue (-314..314) "), &Hue, -314, 314, tr("min"), tr("max")));
|
||||||
Add(new cMenuEditStraItem(tr("Monitor Colorspace"), &TargetColorSpace, 5, target_colorspace));
|
|
||||||
Add(new cMenuEditStraItem(tr("Color Blindness"), &ColorBlindness, 5, target_colorblindness));
|
Add(new cMenuEditStraItem(tr("Color Blindness"), &ColorBlindness, 5, target_colorblindness));
|
||||||
Add(new cMenuEditIntItem(tr("Color Correction (-100..100) "), &ColorBlindnessFaktor, -100, 100, tr("min"),
|
Add(new cMenuEditIntItem(tr("Color Correction (-100..100) "), &ColorBlindnessFaktor, -100, 100, tr("min"),
|
||||||
tr("max")));
|
tr("max")));
|
||||||
#endif
|
#endif
|
||||||
|
Add(new cMenuEditStraItem(tr("Monitor Type"), &TargetColorSpace, 4, target_colorspace));
|
||||||
for (i = 0; i < RESOLUTIONS; ++i) {
|
for (i = 0; i < RESOLUTIONS; ++i) {
|
||||||
cString msg;
|
cString msg;
|
||||||
|
|
||||||
|
142
video.c
142
video.c
@ -3469,18 +3469,39 @@ static void CuvidRenderFrame(CuvidDecoder * decoder, const AVCodecContext * vide
|
|||||||
CuvidUpdateOutput(decoder);
|
CuvidUpdateOutput(decoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
color = frame->colorspace;
|
|
||||||
if (color == AVCOL_SPC_UNSPECIFIED) // if unknown
|
|
||||||
color = AVCOL_SPC_BT709;
|
|
||||||
if (color == AVCOL_SPC_RGB)
|
|
||||||
color = AVCOL_SPC_BT470BG; // fix ffmpeg libav failure
|
|
||||||
frame->colorspace = color;
|
|
||||||
// more libav fixes
|
|
||||||
if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED)
|
|
||||||
frame->color_primaries = AVCOL_PRI_BT709;
|
|
||||||
if (frame->color_trc == AVCOL_TRC_UNSPECIFIED)
|
|
||||||
frame->color_trc = AVCOL_TRC_BT709;
|
|
||||||
|
|
||||||
|
// printf("Orig colorspace %d Primaries %d TRC %d ------- ",frame->colorspace,frame->color_primaries,frame->color_trc);
|
||||||
|
|
||||||
|
// Fix libav colorspace failure
|
||||||
|
color = frame->colorspace;
|
||||||
|
if (color == AVCOL_SPC_UNSPECIFIED) // failure with RTL HD and all SD channels with vaapi
|
||||||
|
if (frame->width > 720)
|
||||||
|
color = AVCOL_SPC_BT709;
|
||||||
|
else
|
||||||
|
color = AVCOL_SPC_BT470BG;
|
||||||
|
if (color == AVCOL_SPC_RGB) // Cuvid decoder failure with SD channels
|
||||||
|
color = AVCOL_SPC_BT470BG;
|
||||||
|
frame->colorspace = color;
|
||||||
|
|
||||||
|
// Fix libav Color primaries failures
|
||||||
|
if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED) // failure with RTL HD and all SD channels with vaapi
|
||||||
|
if (frame->width > 720)
|
||||||
|
frame->color_primaries = AVCOL_PRI_BT709;
|
||||||
|
else
|
||||||
|
frame->color_primaries = AVCOL_PRI_BT470BG;
|
||||||
|
if (frame->color_primaries == AVCOL_PRI_RESERVED0) // cuvid decoder failure with SD channels
|
||||||
|
frame->color_primaries = AVCOL_PRI_BT470BG;
|
||||||
|
|
||||||
|
// Fix libav Color TRC failures
|
||||||
|
if (frame->color_trc == AVCOL_TRC_UNSPECIFIED) // failure with RTL HD and all SD channels with vaapi
|
||||||
|
if (frame->width > 720)
|
||||||
|
frame->color_trc = AVCOL_TRC_BT709;
|
||||||
|
else
|
||||||
|
frame->color_trc = AVCOL_TRC_SMPTE170M;
|
||||||
|
if (frame->color_trc == AVCOL_TRC_RESERVED0) // cuvid decoder failure with SD channels
|
||||||
|
frame->color_trc = AVCOL_TRC_SMPTE170M;
|
||||||
|
|
||||||
|
// printf("Patched colorspace %d Primaries %d TRC %d\n",frame->colorspace,frame->color_primaries,frame->color_trc);
|
||||||
#ifdef RASPI
|
#ifdef RASPI
|
||||||
//
|
//
|
||||||
// Check image, format, size
|
// Check image, format, size
|
||||||
@ -3751,7 +3772,7 @@ static void CuvidMixVideo(CuvidDecoder * decoder, __attribute__((unused))
|
|||||||
float xcropf, ycropf;
|
float xcropf, ycropf;
|
||||||
GLint texLoc;
|
GLint texLoc;
|
||||||
AVFrame *frame;
|
AVFrame *frame;
|
||||||
AVFrameSideData *sd,*sd1,*sd2;
|
AVFrameSideData *sd,*sd1=NULL,*sd2=NULL;
|
||||||
|
|
||||||
#ifdef PLACEBO
|
#ifdef PLACEBO
|
||||||
if (level) {
|
if (level) {
|
||||||
@ -3888,9 +3909,7 @@ static void CuvidMixVideo(CuvidDecoder * decoder, __attribute__((unused))
|
|||||||
// Make sure this value is more or less legal
|
// Make sure this value is more or less legal
|
||||||
if (img->color.sig_peak < 1.0 || img->color.sig_peak > 50.0)
|
if (img->color.sig_peak < 1.0 || img->color.sig_peak > 50.0)
|
||||||
img->color.sig_peak = 0.0;
|
img->color.sig_peak = 0.0;
|
||||||
#ifdef USE_DRM
|
|
||||||
set_hdr_metadata(frame->color_primaries, frame->color_trc, sd1, sd2);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined VAAPI || defined USE_DRM
|
#if defined VAAPI || defined USE_DRM
|
||||||
render_params.peak_detect_params = NULL;
|
render_params.peak_detect_params = NULL;
|
||||||
@ -3907,6 +3926,69 @@ static void CuvidMixVideo(CuvidDecoder * decoder, __attribute__((unused))
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
target->repr.sys = PL_COLOR_SYSTEM_RGB;
|
||||||
|
if (VideoStudioLevels)
|
||||||
|
target->repr.levels = PL_COLOR_LEVELS_PC;
|
||||||
|
else
|
||||||
|
target->repr.levels = PL_COLOR_LEVELS_TV;
|
||||||
|
target->repr.alpha = PL_ALPHA_UNKNOWN;
|
||||||
|
|
||||||
|
// target.repr.bits.sample_depth = 16;
|
||||||
|
// target.repr.bits.color_depth = 16;
|
||||||
|
// target.repr.bits.bit_shift =0;
|
||||||
|
|
||||||
|
#if USE_DRM
|
||||||
|
switch (VulkanTargetColorSpace) {
|
||||||
|
case 0: // Monitor
|
||||||
|
memcpy(&target->color, &pl_color_space_monitor, sizeof(struct pl_color_space));
|
||||||
|
break;
|
||||||
|
case 1: // sRGB
|
||||||
|
memcpy(&target->color, &pl_color_space_srgb, sizeof(struct pl_color_space));
|
||||||
|
break;
|
||||||
|
case 2: // HD TV
|
||||||
|
set_hdr_metadata(frame->color_primaries, frame->color_trc, sd1, sd2);
|
||||||
|
if (decoder->ColorSpace == AVCOL_SPC_BT470BG) {
|
||||||
|
target->color.primaries = PL_COLOR_PRIM_BT_601_625;
|
||||||
|
target->color.transfer = PL_COLOR_TRC_BT_1886;
|
||||||
|
target->color.light = PL_COLOR_LIGHT_DISPLAY;
|
||||||
|
} else {
|
||||||
|
memcpy(&target->color, &pl_color_space_bt709, sizeof(struct pl_color_space));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3: // HDR TV
|
||||||
|
set_hdr_metadata(frame->color_primaries, frame->color_trc, sd1, sd2);
|
||||||
|
if (decoder->ColorSpace == AVCOL_SPC_BT2020_NCL) {
|
||||||
|
memcpy(&target->color, &pl_color_space_bt2020_hlg, sizeof(struct pl_color_space));
|
||||||
|
} else if (decoder->ColorSpace == AVCOL_SPC_BT470BG) {
|
||||||
|
target->color.primaries = PL_COLOR_PRIM_BT_601_625;
|
||||||
|
target->color.transfer = PL_COLOR_TRC_BT_1886;
|
||||||
|
target->color.light = PL_COLOR_LIGHT_DISPLAY;;
|
||||||
|
} else {
|
||||||
|
memcpy(&target->color, &pl_color_space_bt709, sizeof(struct pl_color_space));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
memcpy(&target->color, &pl_color_space_monitor, sizeof(struct pl_color_space));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
switch (VulkanTargetColorSpace) {
|
||||||
|
case 0: // Monitor
|
||||||
|
memcpy(&target->color, &pl_color_space_monitor, sizeof(struct pl_color_space));
|
||||||
|
break;
|
||||||
|
case 1: // sRGB
|
||||||
|
memcpy(&target->color, &pl_color_space_srgb, sizeof(struct pl_color_space));
|
||||||
|
break;
|
||||||
|
case 2: // HD TV
|
||||||
|
case 3: // UHD HDR TV
|
||||||
|
memcpy(&target->color, &pl_color_space_bt709, sizeof(struct pl_color_space));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
memcpy(&target->color, &pl_color_space_monitor, sizeof(struct pl_color_space));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//printf("sys %d prim %d trc %d light %d\n",img->repr.sys,img->color.primaries,img->color.transfer,img->color.light);
|
//printf("sys %d prim %d trc %d light %d\n",img->repr.sys,img->color.primaries,img->color.transfer,img->color.light);
|
||||||
// Source crop
|
// Source crop
|
||||||
if (VideoScalerTest) { // right side defined scaler
|
if (VideoScalerTest) { // right side defined scaler
|
||||||
@ -4258,37 +4340,9 @@ static void CuvidDisplayFrame(void)
|
|||||||
VideoSurfaceModesChanged = 0;
|
VideoSurfaceModesChanged = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
target.repr.sys = PL_COLOR_SYSTEM_RGB;
|
|
||||||
if (VideoStudioLevels)
|
|
||||||
target.repr.levels = PL_COLOR_LEVELS_PC;
|
|
||||||
else
|
|
||||||
target.repr.levels = PL_COLOR_LEVELS_TV;
|
|
||||||
target.repr.alpha = PL_ALPHA_UNKNOWN;
|
|
||||||
|
|
||||||
// target.repr.bits.sample_depth = 16;
|
|
||||||
// target.repr.bits.color_depth = 16;
|
|
||||||
// target.repr.bits.bit_shift =0;
|
|
||||||
|
|
||||||
switch (VulkanTargetColorSpace) {
|
|
||||||
case 0:
|
|
||||||
memcpy(&target.color, &pl_color_space_monitor, sizeof(struct pl_color_space));
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
memcpy(&target.color, &pl_color_space_srgb, sizeof(struct pl_color_space));
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
memcpy(&target.color, &pl_color_space_bt709, sizeof(struct pl_color_space));
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
memcpy(&target.color, &pl_color_space_bt2020_hlg, sizeof(struct pl_color_space));
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
memcpy(&target.color, &pl_color_space_hdr10, sizeof(struct pl_color_space));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
memcpy(&target.color, &pl_color_space_monitor, sizeof(struct pl_color_space));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#ifdef GAMMA
|
#ifdef GAMMA
|
||||||
// target.color.transfer = PL_COLOR_TRC_LINEAR;
|
// target.color.transfer = PL_COLOR_TRC_LINEAR;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user