<pre style='margin:0'>
Christopher Nielsen (mascguy) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/dc6f621d96a1b14996f09a907e48d05ef13d5826">https://github.com/macports/macports-ports/commit/dc6f621d96a1b14996f09a907e48d05ef13d5826</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new dc6f621d96a ffmpeg{,-devel}: add pixeldensity feature for retina displays (#26520)
</span>dc6f621d96a is described below

<span style='display:block; white-space:pre;color:#808000;'>commit dc6f621d96a1b14996f09a907e48d05ef13d5826
</span>Author: gagan sidhu <gagan@hotmail.com>
AuthorDate: Tue Nov 26 11:31:51 2024 -0700

<span style='display:block; white-space:pre;color:#404040;'>    ffmpeg{,-devel}: add pixeldensity feature for retina displays (#26520)
</span>---
 multimedia/ffmpeg-devel/Portfile                   | 10 ++-
 .../ffmpeg-devel/files/patch-add-pixeldensity.diff | 91 ++++++++++++++++++++++
 multimedia/ffmpeg/Portfile                         | 10 ++-
 .../ffmpeg/files/patch-add-pixeldensity.diff       | 91 ++++++++++++++++++++++
 4 files changed, 200 insertions(+), 2 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/multimedia/ffmpeg-devel/Portfile b/multimedia/ffmpeg-devel/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 27cf32ba121..f1f4bda46a6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/multimedia/ffmpeg-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/multimedia/ffmpeg-devel/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -18,7 +18,7 @@ set my_name         ffmpeg
</span> conflicts           ffmpeg7
 
 version             7.0.2
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            2
</span> epoch               2
 
 license             LGPL-2.1+
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -119,6 +119,14 @@ patchfiles-append   patch-libavcodec-librsvgdec.diff
</span> # https://trac.macports.org/ticket/69678
 # patchfiles-append   patch-fix-vulkan.diff
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# add retina resolution capabilities via -movflags write_pixeldensity flag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# this patch is by daniel kaiser who posted on the ffmpeg bugtracker:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://fftrac-bg.ffmpeg.org/ticket/7045
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# but he never formally submitted it to the FFMpeg mailing list, which i did
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://ffmpeg.org/pipermail/ffmpeg-devel/2024-July/331470.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# so the FFMpeg team does not seem to care to include this functionality
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   patch-add-pixeldensity.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # enable auto configure of asm optimizations
 # requires Xcode 3.1 or better on Leopard
 minimum_xcodeversions {9 3.1}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/multimedia/ffmpeg-devel/files/patch-add-pixeldensity.diff b/multimedia/ffmpeg-devel/files/patch-add-pixeldensity.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a8bc1e8f9bd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/multimedia/ffmpeg-devel/files/patch-add-pixeldensity.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,91 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git libavformat/movenc.c libavformat/movenc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a961390..c5eb12d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libavformat/movenc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libavformat/movenc.c   2024-11-08 18:08:40.000000000 -0700
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -109,6 +109,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       { "skip_sidx", "Skip writing of sidx atom", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_SKIP_SIDX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       { "skip_trailer", "Skip writing the mfra/tfra/mfro trailer for fragmented files", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_SKIP_TRAILER}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       { "use_metadata_tags", "Use mdta atom for metadata.", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_USE_MDTA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { "write_pixeldensity", "Write pixeldensity metdata for HiDPI videos in QT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_PIXELDENSITY}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       { "write_colr", "Write colr atom even if the color info is unspecified (Experimental, may be renamed or changed, do not use from scripts)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_WRITE_COLR}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       { "write_gama", "Write deprecated gama atom", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_WRITE_GAMA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, .unit = "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { "min_frag_duration", "Minimum fragment duration", offsetof(MOVMuxContext, min_fragment_duration), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM},
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4008,6 +4009,56 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int mov_write_pixeldensity_meta_tag(AVIOContext *pb, MOVMuxContext *mov, MOVTrack *track, AVFormatContext *s)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int64_t pos = avio_tell(pb);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* meta atom size */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "meta");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* Metadata atom information as described in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     * https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 33); /* hdlr atom size: size (4) + 'hdlr' (4) + version/flags (4) + predefined (4) + 'mdta' (4) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          reserved (3*4) + name (1) = 33 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "hdlr");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* version (1 Byte) and flags (3 Bytes), must be zero */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* "predefined", must be zero */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "mdta");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* Reseverved, uint32_t[3] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_w8(pb, 0); /* Empty name (NULL-terminated) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 56); /* keys atom size: size (4) + 'keys' (4) + version/flasgs (4) + entry_count (4) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          keys (32+8) = 56 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "keys");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);      /* version (1 Byte) and flags (3 Bytes), must be zero */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 1);      /* entry count */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 32 + 8); /* key size: size (4) + 'mdta' (4) + strlen(key) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "mdta");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_write(pb, "com.apple.quicktime.pixeldensity", 32);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 48); /* ilst atom size: size (4) + 'ilst' (4) + value atom size (40) = 48 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "ilst");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 40); /* value atom size: size (4) + key (4) + data atom (32) = 40 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 1);  /* metadata key index */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 32); /* data atom size: size (4) + 'data' (4) + data_type (4) + locale (4) + value (4 * 4) = 32 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "data");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0x1e); /* data type */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);    /* locale */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* actual data (value): consisting of 4 uint32_t: pixel width, pixel height, display width, display height */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->width);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->width / 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->height / 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    size = update_size(pb, pos);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int mov_write_trak_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext *mov,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               MOVTrack *track, AVStream *st)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -4067,6 +4118,9 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if (mov->flags & FF_MOV_FLAG_PIXELDENSITY) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+          mov_write_pixeldensity_meta_tag(pb, mov, track, st);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (mov->flags & FF_MOV_FLAG_PIXELDENSITY) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         mov_write_pixeldensity_meta_tag(pb, mov, track, st);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     mov_write_track_udta_tag(pb, mov, st);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     track->entry = entry_backup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     track->chunkCount = chunk_backup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git libavformat/movenc.h libavformat/movenc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 68d6f23..ed7ea41 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libavformat/movenc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libavformat/movenc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -265,6 +265,7 @@ typedef struct MOVMuxContext {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FF_MOV_FLAG_SKIP_SIDX             (1 << 21)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FF_MOV_FLAG_CMAF                  (1 << 22)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FF_MOV_FLAG_PREFER_ICC            (1 << 23)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FF_MOV_FLAG_PIXELDENSITY          (1 << 24)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/multimedia/ffmpeg/Portfile b/multimedia/ffmpeg/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index d3fb1e8acb2..0cd2120f8fd 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/multimedia/ffmpeg/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/multimedia/ffmpeg/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -18,7 +18,7 @@ set my_name         ffmpeg
</span> 
 # Please increase the revision of mpv whenever ffmpeg's version is updated.
 version             4.4.5
<span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            1
</span> epoch               1
 
 license             LGPL-2.1+
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -112,6 +112,14 @@ patchfiles-append   patch-libavcodec-videotoolboxenc.c.diff
</span> # Fixed via upstream commit: b786bc7433dfe082441a57c1ba9ae9ea47904b78
 patchfiles-append   patch-issue-9439-non-b-frame-encoding.diff
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# add retina resolution capabilities via -movflags write_pixeldensity flag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# this patch is by daniel kaiser who posted on the ffmpeg bugtracker:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://fftrac-bg.ffmpeg.org/ticket/7045
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# but he never formally submitted it to the FFMpeg mailing list, which i did
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://ffmpeg.org/pipermail/ffmpeg-devel/2024-July/331470.html
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# so the FFMpeg team does not seem to care to include this functionality
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   patch-add-pixeldensity.diff 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # enable auto configure of asm optimizations
 # requires Xcode 3.1 or better on Leopard
 minimum_xcodeversions {9 3.1}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/multimedia/ffmpeg/files/patch-add-pixeldensity.diff b/multimedia/ffmpeg/files/patch-add-pixeldensity.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..cba9c7c0395
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/multimedia/ffmpeg/files/patch-add-pixeldensity.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,91 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git libavformat/movenc.c libavformat/movenc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index a961390..c5eb12d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libavformat/movenc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libavformat/movenc.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -78,6 +78,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { "delay_moov", "Delay writing the initial moov until the first fragment is cut, or until the first fragment flush", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_DELAY_MOOV}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { "global_sidx", "Write a global sidx index at the start of the file", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_GLOBAL_SIDX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { "skip_sidx", "Skip writing of sidx atom", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_SKIP_SIDX}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    { "write_pixeldensity", "Write pixeldensity metdata for HiDPI videos in QT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_PIXELDENSITY}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { "write_colr", "Write colr atom even if the color info is unspecified (Experimental, may be renamed or changed, do not use from scripts)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_WRITE_COLR}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { "prefer_icc", "If writing colr atom prioritise usage of ICC profile if it exists in stream packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_PREFER_ICC}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     { "write_gama", "Write deprecated gama atom", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_WRITE_GAMA}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3413,6 +3414,56 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static int mov_write_pixeldensity_meta_tag(AVIOContext *pb, MOVMuxContext *mov, MOVTrack *track, AVFormatContext *s)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int size = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    int64_t pos = avio_tell(pb);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* meta atom size */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "meta");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* Metadata atom information as described in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     * https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW9
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++     */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 33); /* hdlr atom size: size (4) + 'hdlr' (4) + version/flags (4) + predefined (4) + 'mdta' (4) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          reserved (3*4) + name (1) = 33 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "hdlr");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* version (1 Byte) and flags (3 Bytes), must be zero */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* "predefined", must be zero */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "mdta");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0); /* Reseverved, uint32_t[3] */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_w8(pb, 0); /* Empty name (NULL-terminated) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 56); /* keys atom size: size (4) + 'keys' (4) + version/flasgs (4) + entry_count (4) +
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                          keys (32+8) = 56 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "keys");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);      /* version (1 Byte) and flags (3 Bytes), must be zero */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 1);      /* entry count */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 32 + 8); /* key size: size (4) + 'mdta' (4) + strlen(key) */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "mdta");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_write(pb, "com.apple.quicktime.pixeldensity", 32);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 48); /* ilst atom size: size (4) + 'ilst' (4) + value atom size (40) = 48 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "ilst");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 40); /* value atom size: size (4) + key (4) + data atom (32) = 40 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 1);  /* metadata key index */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 32); /* data atom size: size (4) + 'data' (4) + data_type (4) + locale (4) + value (4 * 4) = 32 */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    ffio_wfourcc(pb, "data");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0x1e); /* data type */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, 0);    /* locale */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    /* actual data (value): consisting of 4 uint32_t: pixel width, pixel height, display width, display height */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->width);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->height);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->width / 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    avio_wb32(pb, track->par->height / 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    size = update_size(pb, pos);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static int mov_write_trak_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext *mov,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               MOVTrack *track, AVStream *st)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3460,6 +3511,9 @@ static int mov_write_trak_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             mov_write_tapt_tag(pb, track);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (mov->flags & FF_MOV_FLAG_PIXELDENSITY) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++         mov_write_pixeldensity_meta_tag(pb, mov, track, st);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     mov_write_track_udta_tag(pb, mov, st);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     track->entry = entry_backup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     track->chunkCount = chunk_backup;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git libavformat/movenc.h libavformat/movenc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 68d6f23..ed7ea41 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- libavformat/movenc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ libavformat/movenc.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -265,6 +265,7 @@ typedef struct MOVMuxContext {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FF_MOV_FLAG_SKIP_SIDX             (1 << 21)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FF_MOV_FLAG_CMAF                  (1 << 22)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define FF_MOV_FLAG_PREFER_ICC            (1 << 23)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define FF_MOV_FLAG_PIXELDENSITY          (1 << 24)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span></pre><pre style='margin:0'>

</pre>