+ if (flags & 0x80)
+ avio_skip(pb, 3 * (1 << ((flags & 0x07) + 1)));
+
+ while ((type = avio_r8(pb)) != GIF_TRAILER) {
+ if (avio_feof(pb))
+ break;
+ if (type == GIF_EXTENSION_INTRODUCER) {
+ int subtype = avio_r8(pb);
+ if (subtype == GIF_COM_EXT_LABEL) {
+ AVBPrint bp;
+ int block_size;
+
+ av_bprint_init(&bp, 0, -1);
+ while ((block_size = avio_r8(pb)) != 0) {
+ avio_read_to_bprint(pb, &bp, block_size);
+ }
+ av_dict_set(&s->metadata, "comment", bp.str, 0);
+ av_bprint_finalize(&bp, NULL);
+ } else if (subtype == GIF_GCE_EXT_LABEL) {
+ int block_size = avio_r8(pb);
+
+ if (block_size == 4) {
+ int delay;
+
+ avio_skip(pb, 1);
+ delay = avio_rl16(pb);
+ if (delay < gdc->min_delay)
+ delay = gdc->default_delay;
+ delay = FFMIN(delay, gdc->max_delay);
+ duration += delay;
+ avio_skip(pb, 1);
+ } else {
+ avio_skip(pb, block_size);
+ }
+ gif_skip_subblocks(pb);
+ } else {
+ gif_skip_subblocks(pb);
+ }
+ } else if (type == GIF_IMAGE_SEPARATOR) {
+ avio_skip(pb, 8);
+ flags = avio_r8(pb);
+ if (flags & 0x80)
+ avio_skip(pb, 3 * (1 << ((flags & 0x07) + 1)));
+ avio_skip(pb, 1);
+ gif_skip_subblocks(pb);
+ nb_frames++;
+ } else {
+ break;
+ }
+ }
+