]> granicus.if.org Git - imagemagick/commitdiff
Fixed AVCC to AnnexB conversion in HEIC
authorAnton Kortunov <toshik@yandex-team.ru>
Wed, 31 Jan 2018 19:07:36 +0000 (22:07 +0300)
committerDirk Lemstra <dlemstra@users.noreply.github.com>
Thu, 8 Feb 2018 21:27:41 +0000 (22:27 +0100)
coders/heic.c

index 84de3ffca46bf8ddb0c20164d388b340404414e6..4753fdbb4707467fcecdad15ef4265c27c6a62b5 100644 (file)
@@ -825,8 +825,11 @@ static MagickBooleanType decodeH265Image(Image *image, HEICImageContext *ctx, un
   unsigned char
     *buffer = NULL;
 
+  unsigned char
+    *p;
+
   size_t
-    count, pos;
+    count, pos, nal_unit_size;
 
   int
     more, i;
@@ -895,10 +898,14 @@ static MagickBooleanType decodeH265Image(Image *image, HEICImageContext *ctx, un
   /*
    * AVCC to AnnexB
    */
-  buffer[0] = 0;
-  buffer[1] = 0;
-  buffer[2] = 0;
-  buffer[3] = 1;
+  for (p = buffer; p < buffer + ctx->itemInfo[id].size; /* void */) {
+    nal_unit_size = readInt(p);
+    p[0] = 0;
+    p[1] = 0;
+    p[2] = 0;
+    p[3] = 1;
+    p += nal_unit_size + 4;
+  }
 
   err = de265_push_data(ctx->h265Ctx, buffer, ctx->itemInfo[id].size, pos, (void*)2);
   if (err != DE265_OK) {