1
0
Fork 0

hevcdec: scale HDRPlus window coordinates

This commit is contained in:
Hendrik Leppkes 2021-02-26 09:25:45 +01:00
parent 4562c4e9b1
commit 3c798bdfd4
Signed by: hendrik
GPG Key ID: 846079A4B0A7C1B5
1 changed files with 25 additions and 1 deletions

View File

@ -29,6 +29,7 @@
#include "libavutil/avstring.h"
#include "libavutil/common.h"
#include "libavutil/film_grain_params.h"
#include "libavutil/hdr_dynamic_metadata.h"
#include "libavutil/internal.h"
#include "libavutil/md5.h"
#include "libavutil/opt.h"
@ -2817,7 +2818,30 @@ static int set_side_data(HEVCContext *s)
}
if (s->sei.common.dynamic_hdr_plus.info) {
AVBufferRef *info_ref = av_buffer_ref(s->sei.common.dynamic_hdr_plus.info);
AVBufferRef *info_ref;
AVDynamicHDRPlus *metadata = (AVDynamicHDRPlus*)s->sei.common.dynamic_hdr_plus.info->data;
// fill in window 0 (full frame) and convert to relative coordinates
if (metadata->params[0].window_lower_right_corner_x.num == 0)
{
// ensure the buffer is writable
av_buffer_make_writable(&s->sei.common.dynamic_hdr_plus.info);
metadata = (AVDynamicHDRPlus*)s->sei.common.dynamic_hdr_plus.info->data;
// Convert coordinates to relative coordinate in [0, 1].
metadata->params[0].window_upper_left_corner_x.num = 0;
metadata->params[0].window_upper_left_corner_y.num = 0;
metadata->params[0].window_lower_right_corner_x.num = out->width - 1;
metadata->params[0].window_lower_right_corner_y.num = out->height - 1;
for (int w = 0; w < metadata->num_windows; w++) {
metadata->params[w].window_upper_left_corner_x.den = out->width - 1;
metadata->params[w].window_upper_left_corner_y.den = out->height - 1;
metadata->params[w].window_lower_right_corner_x.den = out->width - 1;
metadata->params[w].window_lower_right_corner_y.den = out->height - 1;
}
}
info_ref = av_buffer_ref(s->sei.common.dynamic_hdr_plus.info);
if (!info_ref)
return AVERROR(ENOMEM);