From patchwork Tue Nov 14 19:18:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 6053 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp3695431jah; Tue, 14 Nov 2017 11:19:11 -0800 (PST) X-Google-Smtp-Source: AGs4zMYO2W5a2CG4znn5IWy1mFRB8FCqlPgZDL++OhCahaTwo+E/9prC1rCOEAr0G9yBiHY7ZGWa X-Received: by 10.223.142.208 with SMTP id q74mr12395456wrb.172.1510687151426; Tue, 14 Nov 2017 11:19:11 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510687151; cv=none; d=google.com; s=arc-20160816; b=s0ayeRQgWhPw+Hl7XVxf8TNoKQzw5nMLdjzLYVIDmkaUQHbIX5Oam2NKneDCu4so7u rsyV5f2Vb9lIouNL4ZEuFHXgiRfgYWrzbkO5gQgD95UuQaWtDKpQtl0tBiCiKbSCNrfc t2RLT5LVpQFTEP3oQB1gvho2YW9NhANuUpm+Hs4SL04KKq+OTICVEgXV9xVYFaODqSE/ I3n3vdvHgGVW/eZQgZNd87bH62cdqj6Du/FemExvb3Os/t/bP74RRxgrFxdfShh3wPOu j+4CgmDM36/2phf0OLfmSLtU72miFeuFs3H59IMDJg+G4t3PRASqRF+eYTyBiELuZieY mLdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=ZYdhVQJIs/1Nn4FGswdpwNWdLDkKxYnSZI1bUj6cx30=; b=n8u6KjX/EYlzwqSxs/g1zDMvKyicuFfO33+dAu2Sfj2nVGAZdpbHR22cPwKCRnjylh ImANfm9SXwFvTg2bpZw700f7MX6gzQHT6hIbX+6PBtVUiSziRCrqoHKUJ3wc9fcXqKlL OKpYbpIOvgjtZHgJjCNPioao16jy2glJKJP8FG00j0Le1b7WlLiNFRtX6yYjV+2+pWmj lE/WFWk7Kw9Fw7kvFZHJR+xAdwaNAV94Vbf3jeTkfWfIvZQ9u65Rtdd41C9GRsNNTPQG XAmDwtT0n+vMVAqWDs6OQvCBaGPXCSsQ9ddyNd35Sz01M0+BIJ6xPzVAWpUz7D4Hcx36 6eoA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@tmm1-net.20150623.gappssmtp.com header.s=20150623 header.b=u3Anvbry; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y63si7876698wmb.222.2017.11.14.11.19.10; Tue, 14 Nov 2017 11:19:11 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@tmm1-net.20150623.gappssmtp.com header.s=20150623 header.b=u3Anvbry; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0B2E368A0DB; Tue, 14 Nov 2017 21:18:55 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg0-f66.google.com (mail-pg0-f66.google.com [74.125.83.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B82C568A0B7 for ; Tue, 14 Nov 2017 21:18:48 +0200 (EET) Received: by mail-pg0-f66.google.com with SMTP id 70so3587911pgf.6 for ; Tue, 14 Nov 2017 11:19:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tmm1-net.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=5IYl8pibv0y8JmRrDsD12B0VCeRX3zwhzpCIfRuVqaE=; b=u3AnvbryqzOWiViFchBAc6xslUeyENKiFML7tg40i49LfvUTAsbj4QeuT3D+BLPImP H754jZY+nQG1A0aY6YQ3tDdoRAQrmBh7zNPItTtxakBlbMe9ZH7VhXb9l+6do0BJpLLF hfSRzfeCJ4YZMH9/pBRHXLfkbNZZo7fL3YlvhzwCIrgHD9Uqkcz1T7P8ArS0pt5mzHiV j9Oj/is+l1RtjckYjKgQkqymygqvTY4tALPXgeAp2WmUG/jOePrwoJcVhaYOggbg3Y7h zEXNn2FPw/rXnjkNrO38+Sur0Pvadei3SegU00BgbQZjOYClP7rwm2fGVOP6BDB3dEPT zsDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=5IYl8pibv0y8JmRrDsD12B0VCeRX3zwhzpCIfRuVqaE=; b=tai8s2Nmyxk340sIGxPtxpL62yXSV2t7fweco7qF4LMBkZlWe+PSZL/fYtQfGwO4i7 aEkT7+uVq+oAKd+/6nW8fVMaXF3Y2QkC7sZiXmFGNDo5yXyf4RkXi8vAQT74rgDgG8rN biEw5GFKrkBrzej+f/VGxu+DkMxAERgiL8oB4LgW/K4xaIinORFyVw47NUf2MOLxI/Kz yxp0MU1Fi9IPigvv/mxpU5VISLKEXwJrDXmvyrOAoQruxtptpBzzXFJMwzvneXpW4QBO Ohhk/FUDJfsdUkawe+R0JYlmcXuqUpChajRw5qeibZ81kSIU/EGi7N+Jg8t0OoQ4ZA6z yTMw== X-Gm-Message-State: AJaThX6x2Eqkck1jGLwe3GQvhdypmaYJKya3TFJeGbQUU614rFZ2iuto 1Bk/gdHo/ELisiOqW8nJkZXCcBCP X-Received: by 10.159.229.136 with SMTP id az8mr13377166plb.423.1510687142054; Tue, 14 Nov 2017 11:19:02 -0800 (PST) Received: from tmm1-imac.local.net (c-73-252-174-83.hsd1.ca.comcast.net. [73.252.174.83]) by smtp.gmail.com with ESMTPSA id j186sm43624960pfc.114.2017.11.14.11.19.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 14 Nov 2017 11:19:01 -0800 (PST) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Tue, 14 Nov 2017 11:18:57 -0800 Message-Id: <20171114191858.29205-1-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.14.2 Subject: [FFmpeg-devel] [PATCH v3 1/2] avcodec/mpeg12dec: parse A53 caption data embedded in SCTE-20 user data 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 Cc: Aman Gupta MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Aman Gupta Signed-off-by: Aman Gupta --- libavcodec/mpeg12dec.c | 39 +++++++++++++++++++++++++++++++++++++++ tests/fate/subtitles.mak | 3 +++ tests/ref/fate/sub-cc-scte20 | 15 +++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 tests/ref/fate/sub-cc-scte20 diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 82bb1286ff..e2a7c3f2e0 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -2240,6 +2240,45 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx, avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; } return 1; + } else if (buf_size >= 2 && + p[0] == 0x03 && (p[1]&0x7f) == 0x01) { + /* extract SCTE-20 CC data */ + GetBitContext gb; + int cc_count = 0; + int i; + + init_get_bits(&gb, p + 2, buf_size - 2); + cc_count = get_bits(&gb, 5); + if (cc_count > 0) { + av_freep(&s1->a53_caption); + s1->a53_caption_size = cc_count * 3; + s1->a53_caption = av_mallocz(s1->a53_caption_size); + if (s1->a53_caption) { + uint8_t field, cc1, cc2; + uint8_t *cap = s1->a53_caption; + for (i = 0; i < cc_count && get_bits_left(&gb) >= 26; i++) { + skip_bits(&gb, 2); // priority + field = get_bits(&gb, 2); + skip_bits(&gb, 5); // line_offset + cc1 = get_bits(&gb, 8); + cc2 = get_bits(&gb, 8); + skip_bits(&gb, 1); // marker + + if (!field) { // forbidden + cap[0] = cap[1] = cap[2] = 0x00; + } else { + field = (field == 2 ? 1 : 0); + if (!s1->mpeg_enc_ctx.top_field_first) field = !field; + cap[0] = 0x04 | field; + cap[1] = ff_reverse[cc1]; + cap[2] = ff_reverse[cc2]; + } + cap += 3; + } + } + avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; + } + return 1; } else if (buf_size >= 11 && p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) { /* extract DVD CC data diff --git a/tests/fate/subtitles.mak b/tests/fate/subtitles.mak index 8c310adeff..0042902161 100644 --- a/tests/fate/subtitles.mak +++ b/tests/fate/subtitles.mak @@ -7,6 +7,9 @@ fate-sub-cc: CMD = fmtstdout ass -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closed FATE_SUBTITLES_ASS-$(call ALLYES, AVDEVICE LAVFI_INDEV CCAPTION_DECODER MOVIE_FILTER MPEGTS_DEMUXER) += fate-sub-cc-realtime fate-sub-cc-realtime: CMD = fmtstdout ass -real_time 1 -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v[out0+subcc]" +FATE_SUBTITLES_ASS-$(call ALLYES, AVDEVICE LAVFI_INDEV CCAPTION_DECODER MOVIE_FILTER MPEGTS_DEMUXER) += fate-sub-cc-scte20 +fate-sub-cc-scte20: CMD = fmtstdout ass -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/scte20.ts[out0+subcc]" + FATE_SUBTITLES_ASS-$(call DEMDEC, ASS, ASS) += fate-sub-ass-to-ass-transcode fate-sub-ass-to-ass-transcode: CMD = fmtstdout ass -i $(TARGET_SAMPLES)/sub/1ededcbd7b.ass diff --git a/tests/ref/fate/sub-cc-scte20 b/tests/ref/fate/sub-cc-scte20 new file mode 100644 index 0000000000..bf581f226d --- /dev/null +++ b/tests/ref/fate/sub-cc-scte20 @@ -0,0 +1,15 @@ +[Script Info] +; Script generated by FFmpeg/Lavc +ScriptType: v4.00+ +PlayResX: 384 +PlayResY: 288 + +[V4+ Styles] +Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding +Style: Default,Monospace,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,3,1,0,2,10,10,10,0 + +[Events] +Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text +Dialogue: 0,0:00:00.00,0:00:01.44,Default,,0,0,0,,{\an7}{\pos(48,182)}BESIDES THE +Dialogue: 0,0:00:01.43,0:00:03.93,Default,,0,0,0,,{\an7}{\pos(38,166)}\hBESIDES THE \N{\an7}{\pos(38,197)}SPENDING AND THIS, IS THAT CAR +Dialogue: 0,0:00:03.94,0:00:06.31,Default,,0,0,0,,{\an7}{\pos(38,182)}SPENDING AND THIS, IS THAT CAR \N{\an7}{\pos(38,197)}MANUFACTURERS ARE ABOUT AS