diff mbox series

[FFmpeg-devel,2/3] avutil/mastering_display_metadata: set a sane default value for AVRational fields

Message ID 20240618192034.5027-2-jamrial@gmail.com
State New
Headers show
Series [FFmpeg-devel,1/3] avutil/ambient_viewing_environment: set a sane default value for AVRational fields | expand

Checks

Context Check Description
yinshiyou/commit_msg_loongarch64 warning The first line of the commit message must start with a context terminated by a colon and a space, for example "lavu/opt: " or "doc: ".
andriy/commit_msg_x86 warning The first line of the commit message must start with a context terminated by a colon and a space, for example "lavu/opt: " or "doc: ".
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

James Almer June 18, 2024, 7:20 p.m. UTC
Prevent potential divisions by 0 when using them immediately after allocation.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavutil/mastering_display_metadata.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)
diff mbox series

Patch

diff --git a/libavutil/mastering_display_metadata.c b/libavutil/mastering_display_metadata.c
index ea41f13f9d..73a36c661e 100644
--- a/libavutil/mastering_display_metadata.c
+++ b/libavutil/mastering_display_metadata.c
@@ -25,9 +25,15 @@ 
 #include "mastering_display_metadata.h"
 #include "mem.h"
 
-AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void)
+static void get_defaults(AVMasteringDisplayMetadata *mastering)
 {
-    return av_mallocz(sizeof(AVMasteringDisplayMetadata));
+    for (int i = 0; i < 3; i++)
+        for (int j = 0; j < 2; j++)
+            mastering->display_primaries[i][j] = (AVRational) { 0, 1 };
+    mastering->white_point[0] =
+    mastering->white_point[1] =
+    mastering->min_luminance  =
+    mastering->max_luminance  = (AVRational) { 0, 1 };
 }
 
 AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc_size(size_t *size)
@@ -36,12 +42,19 @@  AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc_size(size_t *siz
     if (!mastering)
         return NULL;
 
+    get_defaults(mastering);
+
     if (size)
         *size = sizeof(*mastering);
 
     return mastering;
 }
 
+AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void)
+{
+    return av_mastering_display_metadata_alloc_size(NULL);
+}
+
 AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame)
 {
     AVFrameSideData *side_data = av_frame_new_side_data(frame,
@@ -51,6 +64,7 @@  AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFra
         return NULL;
 
     memset(side_data->data, 0, sizeof(AVMasteringDisplayMetadata));
+    get_defaults((AVMasteringDisplayMetadata *)side_data->data);
 
     return (AVMasteringDisplayMetadata *)side_data->data;
 }