[FFmpeg-trac] #3785(undetermined:new): SWSCALE: in_range, in_color_matrix, out_range, out_color_matrix incorrect

FFmpeg trac at avcodec.org
Sat Jul 19 02:08:15 CEST 2014


#3785: SWSCALE: in_range, in_color_matrix, out_range, out_color_matrix incorrect
-------------------------------------+-------------------------------------
             Reporter:  troy_s       |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:  git-
  undetermined                       |  master
             Keywords:               |               Blocked By:
  colormanagement colorspace 709     |  Reproduced by developer:  0
  601                                |
             Blocking:               |
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 '''Summary of the bug''':
 Seems that swscale is still sadly mangling RGB to YCbCr and vice versa
 transforms. Disabled all ASM speedups to avoid code path issues, as were
 previously hard coded to 601 coefficents etc.

 '''How to reproduce''':
 Encode a test chart and check values. Test chart available from http://www
 .belle-nuit.com/test-chart.

 '''Expected versus Results''':
 BT.709 and sRGB share identical luminance coefficients. An sRGB image,
 encoded at full range using BT.709 primaries should decode to a perfect
 1:1 regarding RGB values, compression notwithstanding.

 Sampling the upper row of colors using the provided test chart, we can see
 some issues with the encoding / decoding step, when using FFPLAY with the
 corresponding scale commands.

 For example, an encode using
 {{{
 ./ffmpeg -loop 1 -i ~/Downloads/testchart.tif -t 3 -c:v h264 -vf
 "scale=in_range=full:in_color_matrix=bt709:out_range=full:out_color_matrix=bt709"
 out709-full.mp4
 }}}

 Should produce a perfect 1:1 when played back with
 {{{
 ./ffplay -vf
 "scale=in_range=full:in_color_matrix=bt709:out_range=full:out_color_matrix=bt709"
 out709-full.mp4
 }}}

 When we sample the sRGB / 709 values using an image editor, the top row
 should result in RGB values as follows:
 {{{
 Name      R   G   B
 Yellow:   180 180 16
 Cyan:     16  180 180
 Magenta:  180 16  180
 Green:    16  180 16
 Red:      180 16  16
 Blue:     16  16  180
 }}}

 Given that 709 and sRGB share identical primaries, and broadcast scaling
 is set to full range, there should be a perfect 1:1 result with the
 values. However, what we find with playback via the ffmpeg command set
 with proper values is:
 {{{
 Name      R   G   B
 Yellow:   179 190 22
 Cyan:     31  197 180
 Magenta:  167 0   176
 Green:    30  209 21
 Red:      166 0   19
 Blue:     17  5   173
 }}}

 There appears to be breakage with regard to the application of the
 coefficients, as well as possibly misinterpretation of the full range
 settings.

 The are some transforms that yield vaguely close values. However, these
 suffer from quantization issues where no such should occur. It would seem
 that all transformations are likely being performed at the relative bit
 depth for performance. Sadly, this corrupts the values quite
 significantly.

 {{{
 ./ffmpeg -loop 1 -i ~/Downloads/testchart.tif -t 3 -c:v h264 -vf
 "scale=in_range=full:in_color_matrix=bt601:out_range=full:out_color_matrix=bt601"
 out601-full.mp4
 }}}

 The following, despite being 601 coefficients, should yield perfect 1:1
 with RGB values (RGB being a relative color space) but quantization issues
 again result.

 {{{
 ./ffplay -vf
 "scale=in_range=full:in_color_matrix=bt601:out_range=full:out_color_matrix=bt601"
 out601-full.mp4
 }}}

 Further testing of the in_range and out_range specifics will be conducted
 when the basic color coefficients issue is corrected.

 '''Conclusion''':
 Some mangling is still present in the color handling in FFMPEG.
 Quantization issues can likely be expected until a float (likely non-
 realtime) option is introduced for higher quality frame by frame encoding
 / decoding.

 However, even with quantization issues, the encoding / decoding
 coefficients are not responding / respected in correct fashion for 709 to
 709 (1:1 with sRGB content).

--
Ticket URL: <https://trac.ffmpeg.org/ticket/3785>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list