Skip to content

Commit

Permalink
vout-macosx: use color primaries provided by decoder or demuxer
Browse files Browse the repository at this point in the history
  • Loading branch information
fkuehne committed Apr 16, 2016
1 parent 86b164e commit f880a0c
Showing 1 changed file with 37 additions and 11 deletions.
48 changes: 37 additions & 11 deletions modules/video_output/macosx.m
Original file line number Diff line number Diff line change
Expand Up @@ -167,17 +167,43 @@ static int Open (vlc_object_t *this)
/* support for BT.709 and BT.2020 color spaces was introduced with OS X 10.11
* on older OS versions, we can't show correct colors, so we fallback on linear RGB */
if (OSX_EL_CAPITAN) {
msg_Warn(vd, "Guessing color space based on video dimensions (height: %i", vd->fmt.i_height);

if (vd->fmt.i_height >= 2000 || vd->fmt.i_width >= 3800) {
msg_Dbg(vd, "Should use BT.2020 color space, but in reality it's BT.709");
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);
} else if (vd->fmt.i_height > 576) {
msg_Dbg(vd, "Using BT.709 color space");
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);
} else {
msg_Dbg(vd, "SD content, using linear RGB color space");
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
switch (vd->fmt.primaries) {
case COLOR_PRIMARIES_BT601_525:
case COLOR_PRIMARIES_BT601_625:
{
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
break;
}
case COLOR_PRIMARIES_BT709:
{
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);
break;
}
case COLOR_PRIMARIES_BT2020:
{
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);
break;
}
case COLOR_PRIMARIES_DCI_P3:
{
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceDCIP3);
break;
}
default:
{
msg_Dbg(vd, "Guessing color space based on video dimensions (%ix%i)", vd->fmt.i_visible_width, vd->fmt.i_visible_height);
if (vd->fmt.i_visible_height >= 2000 || vd->fmt.i_visible_width >= 3800) {
msg_Dbg(vd, "Using BT.2020 color space");
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_2020);
} else if (vd->fmt.i_height > 576) {
msg_Dbg(vd, "Using BT.709 color space");
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);
} else {
msg_Dbg(vd, "SD content, using linear RGB color space");
sys->cgColorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
}
break;
}
}
} else {
msg_Dbg(vd, "OS does not support BT.709 or BT.2020 color spaces, output may vary");
Expand Down

0 comments on commit f880a0c

Please sign in to comment.