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,
|