ffmpeg | branch: master | Niklas Haas <g...@haasn.dev> | Sun Jun  9 14:43:11 
2024 +0200| [e1b91eb195734e3eeffdba39bccd6647e34f70f3] | committer: Niklas Haas

avdovi/dovi_rpudec: handle prev_vdr_rpu_id failures

According to the spec, missing previous VDR RPU IDs do not constitute an
error, but we should instead fallback first to VDR RPU with ID 0, and
failing that, synthesize "neutral" metadata.

That's nontrivial though as the resulting metadata will be dependent on
other properties of the RPU, and this case is not hit in practice so
I'll defer it to a rainy day.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e1b91eb195734e3eeffdba39bccd6647e34f70f3
---

 libavcodec/dovi_rpudec.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/libavcodec/dovi_rpudec.c b/libavcodec/dovi_rpudec.c
index 306efbb31f..109cef5742 100644
--- a/libavcodec/dovi_rpudec.c
+++ b/libavcodec/dovi_rpudec.c
@@ -456,7 +456,12 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, 
size_t rpu_size,
     if (use_prev_vdr_rpu) {
         int prev_vdr_rpu_id = get_ue_golomb_31(gb);
         VALIDATE(prev_vdr_rpu_id, 0, DOVI_MAX_DM_ID);
+        if (!s->vdr[prev_vdr_rpu_id])
+            prev_vdr_rpu_id = 0;
         if (!s->vdr[prev_vdr_rpu_id]) {
+            /* FIXME: Technically, the spec says that in this case we should
+             * synthesize "neutral" vdr metadata, but easier to just error
+             * out as this corner case is not hit in practice */
             av_log(s->logctx, AV_LOG_ERROR, "Unknown previous RPU ID: %u\n",
                    prev_vdr_rpu_id);
             goto fail;

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

To unsubscribe, visit link above, or email
ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to