From patchwork Mon Mar 6 18:23:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aman Karmani X-Patchwork-Id: 2768 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.50.79 with SMTP id y76csp207096vsy; Mon, 6 Mar 2017 10:28:58 -0800 (PST) X-Received: by 10.28.132.20 with SMTP id g20mr14437568wmd.68.1488824938183; Mon, 06 Mar 2017 10:28:58 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 70si15629522wmm.11.2017.03.06.10.28.57; Mon, 06 Mar 2017 10:28:58 -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; 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 27B0F680A24; Mon, 6 Mar 2017 20:28:41 +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 B2735680465 for ; Mon, 6 Mar 2017 20:28:34 +0200 (EET) Received: by mail-pg0-f66.google.com with SMTP id 187so6764805pgb.2 for ; Mon, 06 Mar 2017 10:28:47 -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=QN+Qt3WSEp/t/26lzM9Ecl+Cf5rG+KCkoGcGIn50Uls=; b=iWoijs4EnUg60sJYrRth/JFJClnMi+5ALu1LztAP1uZLd1prAGvMulOgFtEZjWkQyV vFRWQtrQs0dOr15fonsxTMIzblDIY4spg1a4iywKsnqlrVN5tw+HXn+qRL4Qj+YsuJ+T vP8d566vWgcmv0CluhGd/KaG6co+gJi6++mZ7FtJUHUWTkk4Ic0rhzeB5i6QaeSM+l2u ahyKyv4bRsz2OD1a+qaMT6ccmvKE3CanXbH4jQjaF54BJ1GB9eJpgEGfh3YEXg6ESlmq fP1tkQlt7/SyDTX7cmnqBp5HsYzVkf2q4GQMSOwRy0i/y5e7qyseDYIObluClSs+bqZ+ F3Dg== 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=QN+Qt3WSEp/t/26lzM9Ecl+Cf5rG+KCkoGcGIn50Uls=; b=YfP6Vu1ZodFweFOT6PYxaCtNNYg3oLytBNHkOjmefJ3vZG9mLZPY6+sdI8RKFPv5rC bnBqiLplQANLULi8p9fmuuPEip9MjhBXVPBRiEeqOUyOvlSeIlAKkNbky/cSjYo6RKqe E3a9u6ohzVOg9obH7BD+JJao4f9cc9mB2NhkSoz9fiEUizO1iY++0SihoDkNMaNOvpgy HZ5HCh4kKsCheVfmtye7b2uh/Vm89qE7rLmumA7ZY6CrtDarg22iUQVw6Qn+fA86/sPd eGuDcUxITz13GDKJ4Zqf0IK7Es9uamwfgu2GBuCiponsHLofgslA04jFGM6u6R2xlgYI FcSA== X-Gm-Message-State: AMke39lFBa1maSYx7L5n888KaitcO16fYx32nnudc68FXxn1X/VE4+COxk/ofH3JV99KiA== X-Received: by 10.99.171.5 with SMTP id p5mr21821246pgf.182.1488824599170; Mon, 06 Mar 2017 10:23:19 -0800 (PST) Received: from tmm1-macbook.local.net (c-73-252-174-83.hsd1.ca.comcast.net. [73.252.174.83]) by smtp.gmail.com with ESMTPSA id h3sm40921909pfc.82.2017.03.06.10.23.17 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 06 Mar 2017 10:23:17 -0800 (PST) From: Aman Gupta To: ffmpeg-devel@ffmpeg.org Date: Mon, 6 Mar 2017 10:23:14 -0800 Message-Id: <20170306182314.50131-1-ffmpeg@tmm1.net> X-Mailer: git-send-email 2.10.1 (Apple Git-78) Subject: [FFmpeg-devel] [PATCH] 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 --- libavcodec/mpeg12dec.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 27db14c..8cafdb0 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -2260,6 +2260,44 @@ 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_malloc(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; 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; + } + } + } + return 1; } else if (buf_size >= 11 && p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) { /* extract DVD CC data