[FFmpeg-devel] [PATCH v2] avcodec/dpxenc: stop hardcoding color trc/primaries

Valerii Zapodovnikov val.zapod.vz at gmail.com
Tue Jun 1 22:18:28 EEST 2021


Updated FATE hashes and added gamma 2.8. Also please note that FATE
samples are useless. I also fixed gamma 2.2 to System M.
Also this does not do YCbCr stuff, so no matrices are here.
Fixes more or less #6023, except for printing density stuff.

Co-authored-by: Paul B Mahol <onemda at gmail.com>
---
 libavcodec/dpxenc.c           | 38 +++++++++++++++++++++++++++++++++--
 tests/ref/lavf/dpx            |  2 +-
 tests/ref/lavf/gbrp10le.dpx   |  2 +-
 tests/ref/lavf/gbrp12le.dpx   |  2 +-
 tests/ref/lavf/rgb48le.dpx    |  2 +-
 tests/ref/lavf/rgb48le_10.dpx |  2 +-
 tests/ref/lavf/rgba64le.dpx   |  2 +-
 7 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/libavcodec/dpxenc.c b/libavcodec/dpxenc.c
index fa8b7d5ddc..90a47dc21e 100644
--- a/libavcodec/dpxenc.c
+++ b/libavcodec/dpxenc.c
@@ -174,6 +174,40 @@ static void encode_gbrp12(AVCodecContext *avctx, const AVFrame *pic, uint8_t *ds
     }
 }
 
+static int get_dpx_pri(int color_pri)
+{
+    switch (color_pri) {
+    case AVCOL_PRI_BT709:
+        return 6;
+    case AVCOL_PRI_SMPTE240M:
+    case AVCOL_PRI_SMPTE170M:
+        return 9;
+    case AVCOL_PRI_BT470BG:
+        return 10;
+    default:
+        return 0;
+    }
+}
+
+static int get_dpx_trc(int color_trc)
+{
+    switch (color_trc) {
+    case AVCOL_TRC_LINEAR:
+        return 2;
+    case AVCOL_TRC_BT709:
+        return 6;
+    case AVCOL_TRC_SMPTE240M:
+    case AVCOL_TRC_SMPTE170M:
+        return 9;
+    case AVCOL_TRC_GAMMA22:
+        return 8;
+    case AVCOL_TRC_GAMMA28:
+        return 7;
+    default:
+        return 0;
+    }
+}
+
 static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
                         const AVFrame *frame, int *got_packet)
 {
@@ -219,8 +253,8 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     write32(buf + 772, avctx->width);
     write32(buf + 776, avctx->height);
     buf[800] = s->descriptor;
-    buf[801] = 2; /* linear transfer */
-    buf[802] = 2; /* linear colorimetric */
+    buf[801] = get_dpx_trc(avctx->color_trc);
+    buf[802] = get_dpx_pri(avctx->color_primaries);
     buf[803] = s->bits_per_component;
     write16(buf + 804, (s->bits_per_component == 10 || s->bits_per_component == 12) ?
                        1 : 0); /* packing method */
diff --git a/tests/ref/lavf/dpx b/tests/ref/lavf/dpx
index 68fe25afcd..39e513430a 100644
--- a/tests/ref/lavf/dpx
+++ b/tests/ref/lavf/dpx
@@ -1,3 +1,3 @@
-4c8880d5835ffb5fe37c1ed8c8d404de *tests/data/images/dpx/02.dpx
+233e219cbfa61e0b77f8e4fad05b2404 *tests/data/images/dpx/02.dpx
 tests/data/images/dpx/%02d.dpx CRC=0x6da01946
 305792 tests/data/images/dpx/02.dpx
diff --git a/tests/ref/lavf/gbrp10le.dpx b/tests/ref/lavf/gbrp10le.dpx
index b33da34e20..16ac9ebc66 100644
--- a/tests/ref/lavf/gbrp10le.dpx
+++ b/tests/ref/lavf/gbrp10le.dpx
@@ -1,3 +1,3 @@
-7ca935d5d5e00c54acbc85565d3039b6 *tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx
+69b9da05fa73a4495ea04ce5f45b51d6 *tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx
 tests/data/images/gbrp10le.dpx/%02d.gbrp10le.dpx CRC=0xe6663fba
 407168 tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx
diff --git a/tests/ref/lavf/gbrp12le.dpx b/tests/ref/lavf/gbrp12le.dpx
index e2e794ecc6..8b9dae4fbc 100644
--- a/tests/ref/lavf/gbrp12le.dpx
+++ b/tests/ref/lavf/gbrp12le.dpx
@@ -1,3 +1,3 @@
-a4cfea1797c928f2eff73573e559675d *tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx
+056a0852dcd8e4d8727114df4a247dd4 *tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx
 tests/data/images/gbrp12le.dpx/%02d.gbrp12le.dpx CRC=0x1c755633
 609920 tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx
diff --git a/tests/ref/lavf/rgb48le.dpx b/tests/ref/lavf/rgb48le.dpx
index 073153898a..803bb0f5e6 100644
--- a/tests/ref/lavf/rgb48le.dpx
+++ b/tests/ref/lavf/rgb48le.dpx
@@ -1,3 +1,3 @@
-075963c3c08978b6a20555ba09161434 *tests/data/images/rgb48le.dpx/02.rgb48le.dpx
+6e7d757279eaa914a92be107f8f01077 *tests/data/images/rgb48le.dpx/02.rgb48le.dpx
 tests/data/images/rgb48le.dpx/%02d.rgb48le.dpx CRC=0xe5b9c023
 609920 tests/data/images/rgb48le.dpx/02.rgb48le.dpx
diff --git a/tests/ref/lavf/rgb48le_10.dpx b/tests/ref/lavf/rgb48le_10.dpx
index ce36e5079f..dfeb059787 100644
--- a/tests/ref/lavf/rgb48le_10.dpx
+++ b/tests/ref/lavf/rgb48le_10.dpx
@@ -1,3 +1,3 @@
-b9f22728f8ff393bf30cf6cbd624fa95 *tests/data/images/rgb48le_10.dpx/02.rgb48le_10.dpx
+097c4ff8138d76bffa51c1e8c36ea90f *tests/data/images/rgb48le_10.dpx/02.rgb48le_10.dpx
 tests/data/images/rgb48le_10.dpx/%02d.rgb48le_10.dpx CRC=0xf38d5830
 407168 tests/data/images/rgb48le_10.dpx/02.rgb48le_10.dpx
diff --git a/tests/ref/lavf/rgba64le.dpx b/tests/ref/lavf/rgba64le.dpx
index b4092c9fd8..82771c41bd 100644
--- a/tests/ref/lavf/rgba64le.dpx
+++ b/tests/ref/lavf/rgba64le.dpx
@@ -1,3 +1,3 @@
-545603630f30dec2768c8ae8d12eb8ea *tests/data/images/rgba64le.dpx/02.rgba64le.dpx
+51ccad3d05c1cef9db958adf01c9b55f *tests/data/images/rgba64le.dpx/02.rgba64le.dpx
 tests/data/images/rgba64le.dpx/%02d.rgba64le.dpx CRC=0xe72ce131
 812672 tests/data/images/rgba64le.dpx/02.rgba64le.dpx
-- 
2.30.2



More information about the ffmpeg-devel mailing list