lavu: add support for Panasonic V-Gamut

This commit is contained in:
Lynne
2025-10-28 14:18:19 +01:00
parent aeb9b19ebc
commit 92a688cabd
5 changed files with 39 additions and 10 deletions

View File

@@ -1665,6 +1665,7 @@ static const AVOption libplacebo_options[] = {
{"smpte432", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_SMPTE432}, INT_MIN, INT_MAX, STATIC, .unit = "color_primaries"},
{"jedec-p22", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_JEDEC_P22}, INT_MIN, INT_MAX, STATIC, .unit = "color_primaries"},
{"ebu3213", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_EBU3213}, INT_MIN, INT_MAX, STATIC, .unit = "color_primaries"},
{"vgamut", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_V_GAMUT}, INT_MIN, INT_MAX, STATIC, .unit = "color_primaries"},
{"color_trc", "select color transfer", OFFSET(color_trc), AV_OPT_TYPE_INT, {.i64=-1}, -1, AVCOL_TRC_NB-1, DYNAMIC, .unit = "color_trc"},
{"auto", "keep the same color transfer", 0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, STATIC, .unit = "color_trc"},

View File

@@ -66,7 +66,7 @@ static const AVOption setparams_options[] = {
{"pc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, FLAGS, .unit = "range"},
{"jpeg", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, FLAGS, .unit = "range"},
{"color_primaries", "select color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64=-1}, -1, AVCOL_PRI_NB-1, FLAGS, .unit = "color_primaries"},
{"color_primaries", "select color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64=-1}, -1, AVCOL_PRI_EXT_NB-1, FLAGS, .unit = "color_primaries"},
{"auto", "keep the same color primaries", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, FLAGS, .unit = "color_primaries"},
{"bt709", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_BT709}, 0, 0, FLAGS, .unit = "color_primaries"},
{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_UNSPECIFIED}, 0, 0, FLAGS, .unit = "color_primaries"},
@@ -81,6 +81,7 @@ static const AVOption setparams_options[] = {
{"smpte432", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_SMPTE432}, 0, 0, FLAGS, .unit = "color_primaries"},
{"jedec-p22", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_JEDEC_P22}, 0, 0, FLAGS, .unit = "color_primaries"},
{"ebu3213", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_EBU3213}, 0, 0, FLAGS, .unit = "color_primaries"},
{"vgamut", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_PRI_V_GAMUT}, 0, 0, FLAGS, .unit = "color_primaries"},
{"color_trc", "select color transfer", OFFSET(color_trc), AV_OPT_TYPE_INT, {.i64=-1}, -1, AVCOL_TRC_EXT_NB-1, FLAGS, .unit = "color_trc"},
{"auto", "keep the same color transfer", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, FLAGS, .unit = "color_trc"},

View File

@@ -87,16 +87,21 @@ static const AVColorPrimariesDesc color_primaries[AVCOL_PRI_NB] = {
[AVCOL_PRI_JEDEC_P22] = { WP_D65, { { AVR(0.630), AVR(0.340) }, { AVR(0.295), AVR(0.605) }, { AVR(0.155), AVR(0.077) } } },
};
static const AVColorPrimariesDesc color_primaries_ext[AVCOL_PRI_EXT_NB -
AVCOL_PRI_EXT_BASE] = {
[AVCOL_PRI_V_GAMUT - AVCOL_PRI_EXT_BASE] = { WP_D65, { { AVR(0.730), AVR(0.280) }, { AVR(0.165), AVR(0.840) }, { AVR(0.100), AVR(-0.030) } } },
};
const AVColorPrimariesDesc *av_csp_primaries_desc_from_id(enum AVColorPrimaries prm)
{
const AVColorPrimariesDesc *p;
if ((unsigned)prm >= AVCOL_PRI_NB)
return NULL;
p = &color_primaries[prm];
const AVColorPrimariesDesc *p = NULL;
if ((unsigned)prm < AVCOL_PRI_NB)
p = &color_primaries[prm];
else if (((unsigned)prm >= AVCOL_PRI_EXT_BASE) &&
((unsigned)prm < AVCOL_PRI_EXT_NB))
p = &color_primaries_ext[prm - AVCOL_PRI_EXT_BASE];
if (!p->prim.r.x.num)
return NULL;
return p;
}

View File

@@ -3430,6 +3430,11 @@ static const char * const color_primaries_names[AVCOL_PRI_NB] = {
[AVCOL_PRI_EBU3213] = "ebu3213",
};
static const char * const color_primaries_names_ext[AVCOL_PRI_EXT_NB -
AVCOL_PRI_EXT_BASE] = {
[AVCOL_PRI_V_GAMUT - AVCOL_PRI_EXT_BASE] = "vgamut",
};
static const char * const color_transfer_names[] = {
[AVCOL_TRC_RESERVED0] = "reserved",
[AVCOL_TRC_BT709] = "bt709",
@@ -3922,8 +3927,12 @@ int av_color_range_from_name(const char *name)
const char *av_color_primaries_name(enum AVColorPrimaries primaries)
{
return (unsigned) primaries < AVCOL_PRI_NB ?
color_primaries_names[primaries] : NULL;
if ((unsigned)primaries < AVCOL_PRI_NB)
return color_primaries_names[primaries];
else if (((unsigned)primaries >= AVCOL_PRI_EXT_BASE) &&
((unsigned)primaries < AVCOL_PRI_EXT_NB))
return color_primaries_names_ext[primaries - AVCOL_TRC_EXT_BASE];
return NULL;
}
int av_color_primaries_from_name(const char *name)
@@ -3938,6 +3947,14 @@ int av_color_primaries_from_name(const char *name)
return i;
}
for (i = 0; i < FF_ARRAY_ELEMS(color_primaries_names_ext); i++) {
if (!color_primaries_names_ext[i])
continue;
if (av_strstart(name, color_primaries_names_ext[i], NULL))
return AVCOL_PRI_EXT_BASE + i;
}
return AVERROR(EINVAL);
}

View File

@@ -670,7 +670,12 @@ enum AVColorPrimaries {
AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3
AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC P22 group phosphors
AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213,
AVCOL_PRI_NB ///< Not part of ABI
AVCOL_PRI_NB, ///< Not part of ABI
/* The following entries are not part of H.273, but custom extensions */
AVCOL_PRI_EXT_BASE = 256,
AVCOL_PRI_V_GAMUT = AVCOL_PRI_EXT_BASE,
AVCOL_PRI_EXT_NB ///< Not part of ABI
};
/**