]> git.sesse.net Git - ffmpeg/commitdiff
avformat/sccdec: split line with multiple subs
authorPaul B Mahol <onemda@gmail.com>
Fri, 12 Jun 2020 18:03:42 +0000 (20:03 +0200)
committerPaul B Mahol <onemda@gmail.com>
Fri, 12 Jun 2020 22:20:55 +0000 (00:20 +0200)
libavformat/sccdec.c

index b9042b39ac934ca571621ccaff973c6746957999..955e39f74ce40cdac2dd74462851858875c45e15 100644 (file)
@@ -120,18 +120,41 @@ try_again:
         for (i = 0; i < 4095; i += 3) {
             char *ptr = av_strtok(lline, " ", &saveptr);
             char c1, c2, c3, c4;
+            uint8_t o1, o2;
 
             if (!ptr)
                 break;
 
             if (av_sscanf(ptr, "%c%c%c%c", &c1, &c2, &c3, &c4) != 4)
                 break;
+            o1 = convert(c2) | (convert(c1) << 4);
+            o2 = convert(c4) | (convert(c3) << 4);
 
             lline = NULL;
             out[i+0] = 0xfc;
-            out[i+1] = convert(c2) | (convert(c1) << 4);
-            out[i+2] = convert(c4) | (convert(c3) << 4);
+            out[i+1] = o1;
+            out[i+2] = o2;
+
+            if (o1 == 0x94 && o2 == 0x2f && saveptr && av_strcasecmp(saveptr, "942f")) {
+                int64_t duration;
+
+                i += 3;
+                out[i] = 0;
+                duration = i * 11;
+
+                sub = ff_subtitles_queue_insert(&scc->q, out, i, 0);
+                if (!sub)
+                    return AVERROR(ENOMEM);
+
+                current_pos += i;
+                sub->pos = current_pos;
+                sub->pts = ts_start;
+                sub->duration = duration;
+                ts_start += duration;
+                i = 0;
+            }
         }
+
         out[i] = 0;
 
         sub = ff_subtitles_queue_insert(&scc->q, out, i, 0);