diff mbox

[FFmpeg-devel] avcodec/cbs_av1: fix range of values for Mastering Display Color Volume Metadata OBUs

Message ID 20190323173019.7924-1-jamrial@gmail.com
State Accepted
Commit 40490b3a63368bdc2403bf7415b214e6dc0a9a3a
Headers show

Commit Message

James Almer March 23, 2019, 5:30 p.m. UTC
Signed-off-by: James Almer <jamrial@gmail.com>
---
> Does something like
> FFMIN(((uint64_t)current->luminance_max << 6) - 1, MAX_UINT_BITS(32))
> do the right thing?

Yes. Fixed and a comment added.

 libavcodec/cbs_av1_syntax_template.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

Comments

James Almer March 25, 2019, 2:27 p.m. UTC | #1
On 3/23/2019 2:30 PM, James Almer wrote:
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>> Does something like
>> FFMIN(((uint64_t)current->luminance_max << 6) - 1, MAX_UINT_BITS(32))
>> do the right thing?
> 
> Yes. Fixed and a comment added.
> 
>  libavcodec/cbs_av1_syntax_template.c | 13 ++++++++-----
>  1 file changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
> index 48f4fab514..76eb90b279 100644
> --- a/libavcodec/cbs_av1_syntax_template.c
> +++ b/libavcodec/cbs_av1_syntax_template.c
> @@ -1637,15 +1637,18 @@ static int FUNC(metadata_hdr_mdcv)(CodedBitstreamContext *ctx, RWContext *rw,
>      int err, i;
>  
>      for (i = 0; i < 3; i++) {
> -        fcs(16, primary_chromaticity_x[i], 0, 50000, 1, i);
> -        fcs(16, primary_chromaticity_y[i], 0, 50000, 1, i);
> +        fbs(16, primary_chromaticity_x[i], 1, i);
> +        fbs(16, primary_chromaticity_y[i], 1, i);
>      }
>  
> -    fc(16, white_point_chromaticity_x, 0, 50000);
> -    fc(16, white_point_chromaticity_y, 0, 50000);
> +    fb(16, white_point_chromaticity_x);
> +    fb(16, white_point_chromaticity_y);
>  
>      fc(32, luminance_max, 1, MAX_UINT_BITS(32));
> -    fc(32, luminance_min, 0, current->luminance_max >> 6);
> +    // luminance_min must be lower than luminance_max. Convert luminance_max from
> +    // 24.8 fixed point to 18.14 fixed point in order to compare them.
> +    fc(32, luminance_min, 0, FFMIN(((uint64_t)current->luminance_max << 6) - 1,
> +                                   MAX_UINT_BITS(32)));
>  
>      return 0;
>  }

Pushed.
diff mbox

Patch

diff --git a/libavcodec/cbs_av1_syntax_template.c b/libavcodec/cbs_av1_syntax_template.c
index 48f4fab514..76eb90b279 100644
--- a/libavcodec/cbs_av1_syntax_template.c
+++ b/libavcodec/cbs_av1_syntax_template.c
@@ -1637,15 +1637,18 @@  static int FUNC(metadata_hdr_mdcv)(CodedBitstreamContext *ctx, RWContext *rw,
     int err, i;
 
     for (i = 0; i < 3; i++) {
-        fcs(16, primary_chromaticity_x[i], 0, 50000, 1, i);
-        fcs(16, primary_chromaticity_y[i], 0, 50000, 1, i);
+        fbs(16, primary_chromaticity_x[i], 1, i);
+        fbs(16, primary_chromaticity_y[i], 1, i);
     }
 
-    fc(16, white_point_chromaticity_x, 0, 50000);
-    fc(16, white_point_chromaticity_y, 0, 50000);
+    fb(16, white_point_chromaticity_x);
+    fb(16, white_point_chromaticity_y);
 
     fc(32, luminance_max, 1, MAX_UINT_BITS(32));
-    fc(32, luminance_min, 0, current->luminance_max >> 6);
+    // luminance_min must be lower than luminance_max. Convert luminance_max from
+    // 24.8 fixed point to 18.14 fixed point in order to compare them.
+    fc(32, luminance_min, 0, FFMIN(((uint64_t)current->luminance_max << 6) - 1,
+                                   MAX_UINT_BITS(32)));
 
     return 0;
 }