From patchwork Fri Jun 12 18:04:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 20314 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id C12E34489E0 for ; Fri, 12 Jun 2020 21:05:08 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8BD5F68B636; Fri, 12 Jun 2020 21:05:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7A5B968AE4C for ; Fri, 12 Jun 2020 21:05:01 +0300 (EEST) Received: by mail-wm1-f65.google.com with SMTP id q25so9116809wmj.0 for ; Fri, 12 Jun 2020 11:05:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=v1YGANcF90iEUF/5RDdJRBB4APJuUplqOW888ypn2/0=; b=aQJQGLmQtk5Fl8IaWIdAHTNk78YY6RGfZ1ZKYB4j5lzDcTWgwDTjoxtx+o7ToqLApH 2gKUz5F1jv0zCEEHuu5jc5UwOARMgpS8AN5rwmUqKPqfWXiOB9e6TIYCvqTdsnHvHzuW WHXdsXuk0/rprK911ZH7bVIkCirxwbc+BeViA32DVX2mUlnnc9+xRTGdm9coaYNIxUaA 8sDpbOdyOHB+JN/ceo7QKgkgzFrR1QhnC4QTyLSoEB8j2cT3SUyPsmLx8j+qLLKOEo08 Belczu/z10BOZgJbgcLjRyCKQ9JjoEja7O2s2CQ9PH0d7wFj9Av0exBgt2BRXudilzGi Dq1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=v1YGANcF90iEUF/5RDdJRBB4APJuUplqOW888ypn2/0=; b=KJP+m2LRdUbJxzgsPmzFcRwrwIhEc2xh55KOhdD87QRSlJoI4dy9tjc9n6t7ajoWHw 46g7HZ0azPhG4dVS8iS6oNArwmolUxZsNiE1oXsaB92vPWJjCw5b9jYOou6t5LtUR4VM SH/mvyaiuOl7UPwum4ZyeINpfwoQ6x3z7bJKlCMEDuIB2iac+FQWSngwtBM6sNOGvz4X +YPhyf7BT/pLH3sEb7Cz8oMlPutRl7mW3cm7TVzykoRetPfwMXRn+njb/J40XabfZppt vPpLLXSjwKYC8/C/Fb1XqZrmiEL1LnHxsjY8o0IyrUHtys0LAxk5sP/jsRNUkVY4/AOA IHyQ== X-Gm-Message-State: AOAM530z0dXk+y8khfMYQVfBrixm1oh02+g3048//vC7YKp4rbxBTL+j SWODSyXoAAGjsSjXhdtWBADXY1BeSt4= X-Google-Smtp-Source: ABdhPJyjLqsxWAVF6z9hgFt9oMb7DFXHGEq/MS6xP8PoQRhu5k8etSPJrCicfcxUFZvYjdEjwgvaRQ== X-Received: by 2002:a05:600c:4401:: with SMTP id u1mr168165wmn.36.1591985100675; Fri, 12 Jun 2020 11:05:00 -0700 (PDT) Received: from localhost.localdomain ([37.244.249.74]) by smtp.gmail.com with ESMTPSA id i15sm4266600wre.93.2020.06.12.11.04.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 Jun 2020 11:05:00 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Fri, 12 Jun 2020 20:04:52 +0200 Message-Id: <20200612180452.16966-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] avformat/sccdec: split line with multiple subs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Paul B Mahol --- libavformat/sccdec.c | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/libavformat/sccdec.c b/libavformat/sccdec.c index b9042b39ac..bf0e6c2688 100644 --- a/libavformat/sccdec.c +++ b/libavformat/sccdec.c @@ -83,6 +83,7 @@ static int scc_read_header(AVFormatContext *s) char *saveptr = NULL, *lline; int hh1, mm1, ss1, fs1, i; int hh2, mm2, ss2, fs2; + int po1, po2, ppo1, ppo2; AVPacket *sub; if (count == 0) { @@ -117,21 +118,51 @@ try_again: lline = (char *)&line; lline += 12; + po1 = -1, po2 = -1, ppo1 = -1, ppo2 = -1; 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); + + if (o1 == 0x94 && o2 == 0x2f && + po1 == 0x94 && po2 == 0x2c && + ppo1 == 0x94 && ppo2 == 0x20) { + int64_t duration; + + out[i] = 0; + duration = i * 11; + + sub = ff_subtitles_queue_insert(&scc->q, out, i, 0); + if (!sub) + return AVERROR(ENOMEM); + + sub->pos = current_pos + i; + sub->pts = ts_start; + sub->duration = duration; + + ts_start += duration; + i = 0; + } 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; + + ppo1 = po1; + ppo2 = po2; + po1 = o1; + po2 = o2; } + out[i] = 0; sub = ff_subtitles_queue_insert(&scc->q, out, i, 0);