summaryrefslogtreecommitdiff
blob: d8eb0a54016b634a20385000c78caf28e45b8804 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
https://bugs.gentoo.org/836205
https://github.com/strukturag/libheif/commit/0f8496f22d284e1a69df12fe0b72f375aed31315

From 0f8496f22d284e1a69df12fe0b72f375aed31315 Mon Sep 17 00:00:00 2001
From: Dirk Farin <dirk.farin@gmail.com>
Date: Tue, 5 Apr 2022 12:17:59 +0200
Subject: [PATCH] fix dav1d decoding: input stream must be flushed with dav1d
 1.0.0

---
 libheif/heif_decoder_dav1d.cc | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/libheif/heif_decoder_dav1d.cc b/libheif/heif_decoder_dav1d.cc
index a6c42e4f..ecf7382e 100644
--- a/libheif/heif_decoder_dav1d.cc
+++ b/libheif/heif_decoder_dav1d.cc
@@ -163,7 +163,10 @@ struct heif_error dav1d_decode_image(void* decoder_raw, struct heif_image** out_
   Dav1dPicture frame;
   memset(&frame, 0, sizeof(Dav1dPicture));
 
+  bool flushed = false;
+
   for (;;) {
+
     int res = dav1d_send_data(decoder->context, &decoder->data);
     if ((res < 0) && (res != DAV1D_ERR(EAGAIN))) {
       err = {heif_error_Decoder_plugin_error,
@@ -173,11 +176,11 @@ struct heif_error dav1d_decode_image(void* decoder_raw, struct heif_image** out_
     }
 
     res = dav1d_get_picture(decoder->context, &frame);
-    if (res == DAV1D_ERR(EAGAIN)) {
-      err = {heif_error_Decoder_plugin_error,
-             heif_suberror_Unspecified,
-             kEmptyString};
-      return err;
+    if (!flushed && res == DAV1D_ERR(EAGAIN)) {
+      if (decoder->data.sz == 0) {
+        flushed = true;
+      }
+      continue;
     }
     else if (res < 0) {
       err = {heif_error_Decoder_plugin_error,