*/
shared_ptr<Image>
Image::crop_scale_window (
- Crop crop, dcp::Size inter_size, dcp::Size out_size, dcp::YUVToRGB yuv_to_rgb, AVPixelFormat out_format, bool out_aligned, bool fast
+ Crop crop, dcp::Size inter_size, dcp::Size out_size, dcp::YUVToRGB yuv_to_rgb, VideoRange video_range, AVPixelFormat out_format, bool out_aligned, bool fast
) const
{
/* Empirical testing suggests that sws_scale() will crash if
0 -> destination range MPEG (i.e. "video", 16-235)
1 -> destination range JPEG (i.e. "full", 0-255)
- But remember: sws_setColorspaceDetails ignores
- these parameters unless the image isYUV or isGray
- (if it's neither, it uses video range for source
- and destination).
+ But remember: sws_setColorspaceDetails ignores these
+ parameters unless the corresponding image isYUV or isGray.
+ (If it's neither, it uses video range).
*/
sws_setColorspaceDetails (
scale_context,
- sws_getCoefficients (lut[yuv_to_rgb]), 0,
- sws_getCoefficients (lut[yuv_to_rgb]), 0,
+ sws_getCoefficients (lut[yuv_to_rgb]), video_range == VIDEO_RANGE_VIDEO ? 0 : 1,
+ sws_getCoefficients (lut[yuv_to_rgb]), 1,
0, 1 << 16, 1 << 16
);
0 -> destination range MPEG (i.e. "video", 16-235)
1 -> destination range JPEG (i.e. "full", 0-255)
- But remember: sws_setColorspaceDetails ignores
- these parameters unless the image isYUV or isGray
- (if it's neither, it uses video range for source
- and destination).
+ But remember: sws_setColorspaceDetails ignores these
+ parameters unless the corresponding image isYUV or isGray.
+ (If it's neither, it uses video range).
*/
sws_setColorspaceDetails (
scale_context,
void
Image::make_transparent ()
{
- if (_pixel_format != AV_PIX_FMT_BGRA) {
+ if (_pixel_format != AV_PIX_FMT_BGRA && _pixel_format != AV_PIX_FMT_RGBA) {
throw PixelFormatError ("make_transparent()", _pixel_format);
}