From patchwork Fri Jun 19 14:26:49 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: 20500 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 8E6C144BB6D for ; Fri, 19 Jun 2020 17:27:08 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 748CC68B6B6; Fri, 19 Jun 2020 17:27:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f66.google.com (mail-ej1-f66.google.com [209.85.218.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8262968B54F for ; Fri, 19 Jun 2020 17:27:01 +0300 (EEST) Received: by mail-ej1-f66.google.com with SMTP id dp18so10394686ejc.8 for ; Fri, 19 Jun 2020 07:27: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:in-reply-to:references; bh=pa/NlwW7U1IiZ7HNyqdep3/Q9byuhGnoQuVfeobhVxg=; b=AgCF1shqnguWwdWGKr8aRhhobjk0Y+Rk/fCzJYki265YW2shlxTaENsiFEWbg005kZ FngCHwshMPbN1rzVO41ag6z2V1iCRJCwVJOb8wPkSJL/BPg0VKRXT15rYE1z3uwPXzmV tiR7bqn0O2LVy3FeWxAbgKxmETYqF+KQGEnrqq1uphYbIcSoNKwk9THS5RtnoLjeMbax XroOCs/z1hsQWKK7JTK/gK/0A6J/BevTsalXJb3rSZ+fN8ATm99XbDPWqkWw4cT9hmQj AAKTAHtw/Ya8Jo5BHElbELTRGJE860JuTlv5Qbg+EL/ta7nTo0b2Lz/3nPKrg36bbUFu JBOQ== 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:in-reply-to :references; bh=pa/NlwW7U1IiZ7HNyqdep3/Q9byuhGnoQuVfeobhVxg=; b=BmnOifwM7Qmg+lwELzhZ84ihPYO/kkVEqNSqJkYnYwZqjVONgrnPeEzmkRQa6HR7pA G32CJLaMxd1dmfLWjNTHCalausJAF0YunNc5RqzmQ4LNTzTy/aha+JUkFHho0pzp0+wY EOVe5njL4q954dWl51GLfb/EjogS0tNhYu2j3tlXTf5Zi4PpHucG2M7MVeFgszVlcFTS NRBy48TNDl3BiPwFQapE8UAtRWqj0/zWA95NAQ945m6J1Xxbl90UHwAPqweShF3mlbr/ 6PR7eFviH/5EUfAhKHEG07tiZjqYP2pP1Cw7y3wY0VdGnv3qV9RuxEkun8S+ErtQ9prK LthA== X-Gm-Message-State: AOAM5326NG2hbkRjACMTHe2e8vN0Slnr1iIuTRfFM6NfbGfp8G11IMvO ewAqjwx+nFTHZRMbDwS27HxRxgcL X-Google-Smtp-Source: ABdhPJyMP2nH4/oRmtqYnRoAgR9KyVSU23R/41XtLA5dFQM2qJfyYEDxW78o+m4XPar930pr2+imkw== X-Received: by 2002:a17:906:5617:: with SMTP id f23mr3734977ejq.331.1592576820723; Fri, 19 Jun 2020 07:27:00 -0700 (PDT) Received: from localhost.localdomain ([37.244.249.74]) by smtp.gmail.com with ESMTPSA id a13sm4650212edk.58.2020.06.19.07.26.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Jun 2020 07:27:00 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Fri, 19 Jun 2020 16:26:49 +0200 Message-Id: <20200619142650.16870-2-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200619142650.16870-1-onemda@gmail.com> References: <20200619142650.16870-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/3] avcodec/ccaption_dec: allow selection of second field captions 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 --- libavcodec/ccaption_dec.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/libavcodec/ccaption_dec.c b/libavcodec/ccaption_dec.c index e67a47508c..fe6933ab5c 100644 --- a/libavcodec/ccaption_dec.c +++ b/libavcodec/ccaption_dec.c @@ -224,6 +224,7 @@ struct Screen { typedef struct CCaptionSubContext { AVClass *class; int real_time; + int data_field; struct Screen screen[2]; int active_screen; uint8_t cursor_row; @@ -789,11 +790,15 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp bptr = avpkt->data; for (i = 0; i < len; i += 3) { - uint8_t cc_type = *(bptr + i) & 3; + uint8_t cc_type = bptr[i] & 1; + if (validate_cc_data_pair(bptr + i)) continue; - /* ignoring data field 1 */ - if (cc_type == 1) + + if (ctx->data_field < 0) + ctx->data_field = cc_type; + + if (cc_type != ctx->data_field) continue; ret = process_cc608(ctx, bptr[i + 1] & 0x7f, bptr[i + 2] & 0x7f); @@ -861,6 +866,10 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub, AVPacket *avp #define SD AV_OPT_FLAG_SUBTITLE_PARAM | AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { { "real_time", "emit subtitle events as they are decoded for real-time display", OFFSET(real_time), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, SD }, + { "data_field", "select data field", OFFSET(data_field), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, SD, "data_field" }, + { "auto", "pick first one that appears", 0, AV_OPT_TYPE_CONST, { .i64 =-1 }, 0, 0, SD, "data_field" }, + { "first", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, SD, "data_field" }, + { "second", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, SD, "data_field" }, {NULL} };