Skip to content

Commit a371d0a

Browse files
committed
Fix recent YUV<->RGB with quality=true at 10-14 bit sources
1 parent 7b21d00 commit a371d0a

3 files changed

Lines changed: 12 additions & 12 deletions

File tree

avs_core/convert/convert_planar.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -896,16 +896,16 @@ void convert_yuv_to_planarrgb_c(BYTE* dstp[3], int dstPitch[3], const BYTE* srcp
896896
// Handle forced float or float input
897897
if (force_float || std::is_floating_point<pixel_t_src>::value) {
898898
if (bits_per_pixel_target == 8) {
899-
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, false, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
899+
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
900900
}
901901
else if (bits_per_pixel_target < 16) {
902-
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, false, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
902+
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
903903
}
904904
else if (bits_per_pixel_target == 16) {
905-
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, false, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
905+
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
906906
}
907907
else {
908-
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, false, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
908+
convert_yuv_to_planarrgb_c_internal<direction, pixel_t_src, lessthan16bit, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
909909
}
910910
return;
911911
}

avs_core/convert/intel/convert_planar_avx2.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1351,19 +1351,19 @@ void convert_yuv_to_planarrgb_avx2(BYTE* (&dstp)[3], int(&dstPitch)[3], const BY
13511351
// limited/full is handled automatically through scaling and offsets
13521352
// lessthan16bit_target is still important due to clamping
13531353
if (bits_per_pixel_target == 8) {
1354-
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, false /*lessthan16bit for input is n/a in forced float mode*/, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
1354+
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
13551355
}
13561356
else if (bits_per_pixel_target < 16) {
13571357
// lessthan16bit_target is false. Need signed pack and clamping
1358-
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, false /*lessthan16bit for input is n/a in forced float mode*/, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
1358+
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
13591359
}
13601360
else if (bits_per_pixel_target == 16) { // == 16
1361-
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, false /*lessthan16bit for input is n/a in forced float mode*/, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
1361+
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
13621362
}
13631363
else { // 32 bit float target
13641364
// limited/full is handled automatically through scaling and offsets
13651365
// lessthan16bit_target doesn't matter since float output has no clamping
1366-
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, false /*lessthan16bit for input is n/a in forced float mode*/, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
1366+
convert_yuv_to_planarrgb_avx2_internal<direction, pixel_t_src, lessthan16bit, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
13671367
}
13681368
return;
13691369
}

avs_core/convert/intel/convert_planar_sse.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -636,16 +636,16 @@ void convert_yuv_to_planarrgb_sse2(BYTE* (&dstp)[3], int(&dstPitch)[3], const BY
636636
// Accuracy forever: forced float or float input
637637
if (force_float || std::is_floating_point<pixel_t_src>::value) {
638638
if (bits_per_pixel_target == 8) {
639-
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, false, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
639+
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, lessthan16bit, true, uint8_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
640640
}
641641
else if (bits_per_pixel_target < 16) {
642-
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, false, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
642+
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, lessthan16bit, true, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
643643
}
644644
else if (bits_per_pixel_target == 16) {
645-
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, false, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
645+
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, lessthan16bit, false, uint16_t, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
646646
}
647647
else { // 32 bit float target
648-
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, false, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
648+
convert_yuv_to_planarrgb_sse2_internal<direction, pixel_t_src, lessthan16bit, false, float, YuvRgbConversionType::FORCE_FLOAT>(dstp, dstPitch, srcp, srcPitch, width, height, m, bits_per_pixel, bits_per_pixel_target);
649649
}
650650
return;
651651
}

0 commit comments

Comments
 (0)