[FFmpeg-devel] [PATCH 1/2] avcodec/dpxenc: write framerate to header

Paul B Mahol onemda at gmail.com
Sat Feb 20 18:37:18 EET 2021


Signed-off-by: Paul B Mahol <onemda at gmail.com>
---
 libavcodec/dpxenc.c           | 21 ++++++++++++++++++---
 tests/ref/lavf/gbrp10le.dpx   |  4 ++--
 tests/ref/lavf/gbrp12le.dpx   |  4 ++--
 tests/ref/lavf/rgb48le.dpx    |  4 ++--
 tests/ref/lavf/rgb48le_10.dpx |  4 ++--
 tests/ref/lavf/rgba64le.dpx   |  4 ++--
 6 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/libavcodec/dpxenc.c b/libavcodec/dpxenc.c
index a5960334d5..b296f9f22e 100644
--- a/libavcodec/dpxenc.c
+++ b/libavcodec/dpxenc.c
@@ -173,14 +173,25 @@ static void encode_gbrp12(AVCodecContext *avctx, const AVFrame *pic, uint16_t *d
     }
 }
 
+#define FILE_HEADER_SIZE 768
+#define IMAGE_HEADER_SIZE 640
+#define ORIENTATION_HEADER_SIZE 256
+#define FILM_INFO_HEADER_SIZE 256
+#define TV_INFO_HEADER_SIZE 128
+#define HEADER_SIZE (FILE_HEADER_SIZE + \
+                     IMAGE_HEADER_SIZE + \
+                     ORIENTATION_HEADER_SIZE + \
+                     FILM_INFO_HEADER_SIZE + \
+                     TV_INFO_HEADER_SIZE)
+
 static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
                         const AVFrame *frame, int *got_packet)
 {
     DPXContext *s = avctx->priv_data;
-    int size, ret, need_align, len;
+    int ret, need_align, len;
+    int64_t size;
     uint8_t *buf;
 
-#define HEADER_SIZE 1664  /* DPX Generic header */
     if (s->bits_per_component == 10)
         size = avctx->height * avctx->width * 4;
     else if (s->bits_per_component == 12) {
@@ -196,7 +207,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
         need_align = size - len;
         size *= avctx->height;
     }
-    if ((ret = ff_alloc_packet2(avctx, pkt, size + HEADER_SIZE, 0)) < 0)
+    if ((ret = ff_alloc_packet2(avctx, pkt, HEADER_SIZE + size, 0)) < 0)
         return ret;
     buf = pkt->data;
 
@@ -229,6 +240,10 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     write32(buf + 1628, avctx->sample_aspect_ratio.num);
     write32(buf + 1632, avctx->sample_aspect_ratio.den);
 
+    /* Film information header */
+    if (avctx->framerate.num && avctx->framerate.den)
+        write32(buf + 1724, av_float2int(av_q2d(avctx->framerate)));
+
     switch(s->bits_per_component) {
     case 8:
     case 16:
diff --git a/tests/ref/lavf/gbrp10le.dpx b/tests/ref/lavf/gbrp10le.dpx
index b33da34e20..7c03dc0779 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
+c7c8ecd9d8c8a2c4dce6d92bfb9877d7 *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
+407552 tests/data/images/gbrp10le.dpx/02.gbrp10le.dpx
diff --git a/tests/ref/lavf/gbrp12le.dpx b/tests/ref/lavf/gbrp12le.dpx
index e2e794ecc6..5ca855b004 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
+79dcf3b32ed8e627a68bba19bf625ca5 *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
+610304 tests/data/images/gbrp12le.dpx/02.gbrp12le.dpx
diff --git a/tests/ref/lavf/rgb48le.dpx b/tests/ref/lavf/rgb48le.dpx
index 073153898a..33817d95a9 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
+51c703863c9df1db5ef78a77dd5fbd0f *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
+610304 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..3c934168b7 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
+a0ca7132c33a5c0eb25dd4a2b6117743 *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
+407552 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..85974bbc98 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
+cb5fe2ad9c1119a33916a838cb586c45 *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
+813056 tests/data/images/rgba64le.dpx/02.rgba64le.dpx
-- 
2.17.1



More information about the ffmpeg-devel mailing list