X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fimage.cc;h=ab9159d5e42a21a83e90e7ee81a02807c63dfa2f;hb=8fe6c275038d381a51189e678f3fcafc3fca7200;hp=ac59622661d42909710dbeb933c470ff7947f6fd;hpb=e70fff45bcf1de7765252f0a881d7035d022bba9;p=dcpomatic.git diff --git a/src/lib/image.cc b/src/lib/image.cc index ac5962266..ab9159d5e 100644 --- a/src/lib/image.cc +++ b/src/lib/image.cc @@ -59,6 +59,7 @@ Image::lines (int n) const break; case PIX_FMT_RGB24: case PIX_FMT_RGBA: + case PIX_FMT_YUV422P10LE: return size().height; default: assert (false); @@ -73,6 +74,7 @@ Image::components () const { switch (_pixel_format) { case PIX_FMT_YUV420P: + case PIX_FMT_YUV422P10LE: return 3; case PIX_FMT_RGB24: case PIX_FMT_RGBA: @@ -171,10 +173,22 @@ Image::scale_and_convert_to_rgb (Size out_size, int padding, Scaler const * scal shared_ptr Image::post_process (string pp) const { - shared_ptr out (new AlignedImage (PIX_FMT_YUV420P, size ())); - + shared_ptr out (new AlignedImage (pixel_format(), size ())); + + int pp_format = 0; + switch (pixel_format()) { + case PIX_FMT_YUV420P: + pp_format = PP_FORMAT_420; + break; + case PIX_FMT_YUV422P10LE: + pp_format = PP_FORMAT_422; + break; + default: + assert (false); + } + pp_mode* mode = pp_get_mode_by_name_and_quality (pp.c_str (), PP_QUALITY_MAX); - pp_context* context = pp_get_context (size().width, size().height, PP_FORMAT_420 | PP_CPU_CAPS_MMX2); + pp_context* context = pp_get_context (size().width, size().height, pp_format | PP_CPU_CAPS_MMX2); pp_postprocess ( (const uint8_t **) data(), stride(), @@ -194,6 +208,7 @@ Image::make_black () { switch (_pixel_format) { case PIX_FMT_YUV420P: + case PIX_FMT_YUV422P10LE: memset (data()[0], 0, lines(0) * stride()[0]); memset (data()[1], 0x80, lines(1) * stride()[1]); memset (data()[2], 0x80, lines(2) * stride()[2]); @@ -299,6 +314,10 @@ SimpleImage::SimpleImage (PixelFormat p, Size s, function rounder) _line_size[1] = s.width / 2; _line_size[2] = s.width / 2; break; + case PIX_FMT_YUV422P10LE: + _line_size[0] = s.width * 2; + _line_size[1] = s.width; + _line_size[2] = s.width; default: assert (false); }