From patchwork Sun May 8 07:17:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 35698 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp2441774pzb; Sun, 8 May 2022 00:17:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzqs9xvq+1U9eNNfx3tNRdNblUPverznj5av/dUMjvjo7luZqNJT6f7HFzbog14tEW8yqyv X-Received: by 2002:a17:907:7f91:b0:6f3:d6bc:cd5b with SMTP id qk17-20020a1709077f9100b006f3d6bccd5bmr10171707ejc.460.1651994241953; Sun, 08 May 2022 00:17:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651994241; cv=none; d=google.com; s=arc-20160816; b=o4jEVZ99tJxRb8R9LyflmLQqQUWxRvRgt+TONDmhZzyHjegDGLdw9YIeh47rEGcPL9 sj5jjO3/wrzul20YQp4nJZxd7bKfKGuhvosJ+FmYalbtud0+VsLhNWR4hmyO/0t7DZhY iczZZvbqtFQHnb5cbVSRV2ojaBUsOvl55jeGWEytr+D6nFAiA06PvWtrtrfOX2G0YpzF XxNxAsdqaOna6HVRrNm0qTLr4jNGMb8rYcbvHvvRSE3PWmv6AufNXA0+z4XxUlV8dliq Jee4rA8flYE+KTZA3cx18mDt5L82l+3VEciuMvnvj1+nvrNVKIPt/a+4WS6jlsdeU65l i+7Q== 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; bh=Jq7h6JaUbGMkmsYi4mQDF51E4321iylXQ4vCwc9fU8A=; b=gVRYjecKFYldQT5xiqVSFMvuZWIte6CbhItirivXoJc5MYSn07b9aze6b6x0Gb3AlZ VAFQcLdhD4kmHAFA3fQvLHyqs4DzlzzZH2fOQOueoIsqypuV7bUIMZCQplv/a4K8wfLv CUmlR55Kmvij87Jz7QFslBzlrNMUEN6SRGIi7MGBmIMwaBOdJ4qFwehAJUYlBdtZcVAZ RRcGr51VYpFNy6m0dDHJqWhQRqm2zzrHPymYSiHy+BRQSSdx0zAJ4AROr4IZ7zOCuQCj sCKXAQpCKcsRnQfScI4oLIsHWWPKyVN7NCMyrduk7374Y1PlhgofN6MXiZeAoHvbSsKq LGYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ePrSok8Q; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w23-20020a056402129700b00425f7237b06si8062068edv.73.2022.05.08.00.17.21; Sun, 08 May 2022 00:17:21 -0700 (PDT) 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=@gmail.com header.s=20210112 header.b=ePrSok8Q; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2955568B1AC; Sun, 8 May 2022 10:17:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EEE1D6881B1 for ; Sun, 8 May 2022 10:17:10 +0300 (EEST) Received: by mail-pj1-f44.google.com with SMTP id e24so10595104pjt.2 for ; Sun, 08 May 2022 00:17:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id; bh=NfljcRiteH3OTQFzZ6mHvyMOAPGGHOL96cR1lVTwwRk=; b=ePrSok8QYPggVWqWhxlrs2hilW0w9cWaDjqPa4T8DcdikXqecMERXpMSLWJF4ylCY5 FtOtZRazyBMcCVNvw+YnoK0cklX9/Q9LYIeV8RZ1kdAtf5m3gjagc/ejtg9TWHuNaTjt BeIVSsRmt5+elh7Ad24HbLQZRXlC8l1b04vVRpB6r2NHTgjAYrpJ5ZyV1CgOgrSefoow Y/NvqNsHpfWQre592J+s2dpsWF6Hy1SagixmkgmWDLflXAUfUmo0POCCf4aH1exYcbF1 0Y72MGDLkPCHGwv+P/xTwhtmwPgWaWy89kMjtH6XjjEIBlIV1KAhaBOTj4ZkwrfjjhLc bdbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=NfljcRiteH3OTQFzZ6mHvyMOAPGGHOL96cR1lVTwwRk=; b=kAD5r+S7Drj90GaBw0yUWA+YuJlUxpC6OrTviVejJDYtbzueNfqymTfTHZTBKME5CI zktW69tqOsVYd312CHYKW3Ni2wC+xqLu7eurK3vABMmOdLGzK7Fm8rxBr9loFNRPqaIm WAJBYo9UeXxWWIDHyy1I4aXrbq2sVFGDfctPLqgj8zpdE5dgJQ4LzmXUiKpLUTf1uXSZ j1rzqln9nU+Ggesj9uj9PeH/PCWBkR0iBFuxJlWOXDLvYwYq3uTQorNT4IrGZDP3g1NL dyQalkWzBq4tHOShgFQ2dXQuqLyN8XPg6Ggsqv0Y9w7B399qbbS6/9U/O14I4MGwhmgz ivtA== X-Gm-Message-State: AOAM530kRF6RqXRzj3nc1CGfI9Hja7VDmhhdkJnrd+RE04g96A3YBB2k bxsMoq98fp6pQHa2TqbEfLNBu+EQdlU= X-Received: by 2002:a17:902:7e06:b0:159:6c1:ea2b with SMTP id b6-20020a1709027e0600b0015906c1ea2bmr10744781plm.105.1651994228049; Sun, 08 May 2022 00:17:08 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id c3-20020a170902b68300b0015eee3ab203sm4239607pls.49.2022.05.08.00.17.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 May 2022 00:17:07 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Sun, 8 May 2022 15:17:00 +0800 Message-Id: <1651994221-11660-1-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 Subject: [FFmpeg-devel] [PATCH 1/2] avfilter/src_movie: add dec_opts for the opened file X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: g/mJGxJh56/A From: Limin Wang Signed-off-by: Limin Wang --- doc/filters.texi | 9 +++++++++ libavfilter/src_movie.c | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/filters.texi b/doc/filters.texi index 367614d2f8..6775cf43ba 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -29652,6 +29652,15 @@ shows how to add protocol_whitelist and protocol_blacklist options: ffplay -f lavfi "movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'" @end example + +@item dec_opts +Specify decode options for the opened file. Format options can be specified +as a list of @var{key}=@var{value} pairs separated by ':'. The following example +shows how to add export_side_data options: +@example +./ffmpeg -y -f lavfi +-i "movie=./input.ts:dec_opts=export_side_data=scte20cc[out0+subcc]" out.srt +@end example @end table It allows overlaying a second video on top of the main input of diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index 711854c23c..c7dbd90aa9 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -70,6 +70,7 @@ typedef struct MovieContext { int64_t discontinuity_threshold; int64_t ts_offset; int dec_threads; + AVDictionary *dec_opts; AVFormatContext *format_ctx; @@ -96,6 +97,7 @@ static const AVOption movie_options[]= { { "discontinuity", "set discontinuity threshold", OFFSET(discontinuity_threshold), AV_OPT_TYPE_DURATION, {.i64 = 0}, 0, INT64_MAX, FLAGS }, { "dec_threads", "set the number of threads for decoding", OFFSET(dec_threads), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS }, { "format_opts", "set format options for the opened file", OFFSET(format_opts), AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, FLAGS}, + { "dec_opts", "set decode options for the opened file", OFFSET(dec_opts), AV_OPT_TYPE_DICT, {.str = NULL}, 0, 0, FLAGS}, { NULL }, }; @@ -158,6 +160,7 @@ static AVStream *find_stream(void *log, AVFormatContext *avf, const char *spec) static int open_stream(AVFilterContext *ctx, MovieStream *st, int dec_threads) { + MovieContext *movie = ctx->priv; const AVCodec *codec; int ret; @@ -179,7 +182,7 @@ static int open_stream(AVFilterContext *ctx, MovieStream *st, int dec_threads) dec_threads = ff_filter_get_nb_threads(ctx); st->codec_ctx->thread_count = dec_threads; - if ((ret = avcodec_open2(st->codec_ctx, codec, NULL)) < 0) { + if ((ret = avcodec_open2(st->codec_ctx, codec, &movie->dec_opts)) < 0) { av_log(ctx, AV_LOG_ERROR, "Failed to open codec\n"); return ret; } From patchwork Sun May 8 07:17:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Wang X-Patchwork-Id: 35699 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp2441805pzb; Sun, 8 May 2022 00:17:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwaZRwWDPmFyAFADMC5gjl0pblSv+G+AmYSBFR+KQF4Vq8m8caFQCXgqHhONV1D0gmx/0+H X-Received: by 2002:a05:6402:948:b0:425:ea37:96b8 with SMTP id h8-20020a056402094800b00425ea3796b8mr11505391edz.90.1651994252804; Sun, 08 May 2022 00:17:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651994252; cv=none; d=google.com; s=arc-20160816; b=e48PJroYG7d1CXJS4WCKCi8QlYV0PL/X7qwmx6JiPHYfAegsWMHla0J57xtRIaSU2Z +2QhZKOrVFyt1DdJjJOTWpwhQdj92Bkk1Jczdq2szc4GqiKpCVSGMjpDFhUHyYJGyCru hZiPAos4Pfd9IQI2ssIOjYQ+OO7ERhwhVc3lJb88qsgEBHrVAX4m+J9bjEr+LTcJPYGg YeJyJmGHM+x8NwDJct8vUakLwBNtzPXpGOMynqo5RlEq/Y7ciQvtFHr4zsYIU3T6+3sW kIKjckWN5ku3PaeWQTClLu91h0o8SSioipk168vHw8ssczr7OVL55Jvpto1u4hXMETqZ RnOw== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=degSEhZ+QTezlry33r2chAq4I94zCQbj8NZh6A8j+Og=; b=tfPsDzXMunfMOFG0qeFm7CK3Gwj2sk8JEiatHDdbVGyxwz2q9Df8lE4ZZ/bum2CfUw n+JgMtTF7+OqS66DZ/0zSbMopCkY/ZyDwd2kXnefQ8pa67ukjJ6borOdGaV4YDDxQuYi +mxhklH1gtRmPUp7fvkco2VHdSHG0tPJO/mqhH70k0Jz3XyPX7iq32HzY7DWgFbZ2Ky8 TGKT6mWCmU0x89uN2WI7kFpoV13Fvm+HGtTNJXBK0zmQrN0cOvruUcdEoFbFoejjkxiA apPl1kK0hUnqnPW1AfaBJqDFXJUMxQ1cN8g6hyE6TKrgBMOzfUurEdGnxWrrZiitsSJ4 xrNw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=iQcyd7CR; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b13-20020a170906150d00b006f3b9995f9bsi8903775ejd.448.2022.05.08.00.17.31; Sun, 08 May 2022 00:17:32 -0700 (PDT) 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=@gmail.com header.s=20210112 header.b=iQcyd7CR; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 52AE668B2D5; Sun, 8 May 2022 10:17:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f54.google.com (mail-pj1-f54.google.com [209.85.216.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 34FAB6881B1 for ; Sun, 8 May 2022 10:17:11 +0300 (EEST) Received: by mail-pj1-f54.google.com with SMTP id w17-20020a17090a529100b001db302efed6so10291510pjh.4 for ; Sun, 08 May 2022 00:17:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=95AOTwW+yvbGkwqCEfs52mVlmD0j+gXrTvaP1KAKths=; b=iQcyd7CRDveru9YKAeTZWto/I4byFckz6cI6Qg1GwX4aHmT8gNJnNZUw8Ov23WnouD ixeGMwvlXUvTR7szGjElVvvj3quN42GFyBP9Fjl9tvDbw4tHLiphKy6xmmHfkhFND2C1 0jJMKY1ptWHhHsGf0xrwHLot12lceIJdaewvPvR0D0RxJWC2RShLyGr6N+eImiJTWhHw EByI7DjLtrYavWl1BX7dCCBqsQ0ZyaM+0DR8LILU/pZhb302H802SFYow6iQRPt/IYnd 6GuPrqVf9pS3CdbcyIXL6Qe330Ru9C02dJsXc7AeVGBderYm0t4Rdy3MRZmDJ59aBK9P IVaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=95AOTwW+yvbGkwqCEfs52mVlmD0j+gXrTvaP1KAKths=; b=c4+mdOuPaShCfmqWvxx+QanbPYFu6BeC18VDECJY3V+ukKexXzArFI/eA5RiD/K3Dr bh4IiX1lZWzxvEX7z9unzNJDtmSPIs6UFPWNjS/eI+nNh6C7UBl55jbikXfpCNfStigg Je06dcLIcZuuBgAx188cAQIJKZP+vqtYom6UPDJZzlHLJ6Ddldt9ib8mSYa8g9zd0kc7 o7+v0oXLW6QzjBLOIE9qledHMkld94hD1emLwKHhY9aMQeWnWbjyovIi6dz7flLFJq8D Qr0Y60eBxu6MZ4QP4nvSnPetog0qwez9kfOctzybQyR7U5X+FH3DuLgV0kjY4InVCGmt q9mQ== X-Gm-Message-State: AOAM533UGDlT9D3u4KP3sjz6yoY4LZHljvV0IoHecV025rLxkNtxOT2R b972jurbwZklGQiq8bdwP40+txCfvkM= X-Received: by 2002:a17:902:e851:b0:15e:d129:fb20 with SMTP id t17-20020a170902e85100b0015ed129fb20mr10715315plg.140.1651994229433; Sun, 08 May 2022 00:17:09 -0700 (PDT) Received: from vpn2.localdomain ([161.117.202.209]) by smtp.gmail.com with ESMTPSA id c3-20020a170902b68300b0015eee3ab203sm4239607pls.49.2022.05.08.00.17.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 08 May 2022 00:17:09 -0700 (PDT) From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Date: Sun, 8 May 2022 15:17:01 +0800 Message-Id: <1651994221-11660-2-git-send-email-lance.lmwang@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1651994221-11660-1-git-send-email-lance.lmwang@gmail.com> References: <1651994221-11660-1-git-send-email-lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] avcodec: add an AVCodecContext flag to export A53/SCTE20/DVD CC side data on demand X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Limin Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 3jcoqASwKye7 From: Limin Wang some samples include both A53 and SCTE20 data. Before the commit, both of the will be exported, so the CC data will be repeated or garbarge as they're using the same frame side data. If you know your samples include only one of them, You can export by +a53cc+scte20. After the commit, the default will not export MPEG2 A53/SCTE20/DVD CC side data, please export on demand. Signed-off-by: Limin Wang --- doc/codecs.texi | 10 ++++++++++ libavcodec/avcodec.h | 16 +++++++++++++++- libavcodec/mpeg12dec.c | 6 +++--- libavcodec/options_table.h | 3 +++ libavcodec/version.h | 2 +- tests/fate/ffmpeg.mak | 2 +- tests/fate/subtitles.mak | 6 +++--- 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/doc/codecs.texi b/doc/codecs.texi index 5e10020900..4cced983b9 100644 --- a/doc/codecs.texi +++ b/doc/codecs.texi @@ -662,6 +662,16 @@ for codecs that support it. At present, those are H.264 and VP9. @item film_grain Export film grain parameters through frame side data (see @code{AV_FRAME_DATA_FILM_GRAIN_PARAMS}). Supported at present by AV1 decoders. +@item a53cc +Export A53 CC through frame side data (see @code{AV_FRAME_DATA_A53_CC}) +for codecs that support it. +@item scte20cc +Export SCTE20 CC through frame side data (see @code{AV_FRAME_DATA_A53_CC}) +for codecs that support it. +@item dvdcc +Export DVD CC through frame side data (see @code{AV_FRAME_DATA_A53_CC}) +for codecs that support it. + @end table @item threads @var{integer} (@emph{decoding/encoding,video}) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 4dae23d06e..25fd4de2fe 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -360,7 +360,21 @@ typedef struct RcOverride{ * Do not apply film grain, export it instead. */ #define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) - +/** + * Decoding only. + * Export A53 CC through frame side data + */ +#define AV_CODEC_EXPORT_DATA_A53_CC (1 << 4) +/** + * Decoding only. + * Export SCTE20 CC through frame side data + */ +#define AV_CODEC_EXPORT_DATA_SCTE20_CC (1 << 5) +/** + * Decoding only. + * Export DVD CC through frame side data + */ +#define AV_CODEC_EXPORT_DATA_DVD_CC (1 << 6) /** * The decoder will keep a reference to the frame and may reuse it later. */ diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index e9bde48f7a..032cb8f9b1 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -2203,7 +2203,7 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx, { Mpeg1Context *s1 = avctx->priv_data; - if (buf_size >= 6 && + if (buf_size >= 6 && (avctx->export_side_data & AV_CODEC_EXPORT_DATA_A53_CC) && p[0] == 'G' && p[1] == 'A' && p[2] == '9' && p[3] == '4' && p[4] == 3 && (p[5] & 0x40)) { /* extract A53 Part 4 CC data */ @@ -2224,7 +2224,7 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx, avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; } return 1; - } else if (buf_size >= 2 && + } else if (buf_size >= 2 && (avctx->export_side_data & AV_CODEC_EXPORT_DATA_SCTE20_CC) && p[0] == 0x03 && (p[1]&0x7f) == 0x01) { /* extract SCTE-20 CC data */ GetBitContext gb; @@ -2269,7 +2269,7 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx, avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; } return 1; - } else if (buf_size >= 11 && + } else if (buf_size >= 11 && (avctx->export_side_data & AV_CODEC_EXPORT_DATA_DVD_CC) && p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) { /* extract DVD CC data * diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h index e72b4d12b6..3c6db07459 100644 --- a/libavcodec/options_table.h +++ b/libavcodec/options_table.h @@ -88,6 +88,9 @@ static const AVOption avcodec_options[] = { {"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, "export_side_data"}, {"venc_params", "export video encoding parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS}, INT_MIN, INT_MAX, V|D, "export_side_data"}, {"film_grain", "export film grain parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_FILM_GRAIN}, INT_MIN, INT_MAX, V|D, "export_side_data"}, +{"a53cc", "export A53 CC through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_A53_CC}, INT_MIN, INT_MAX, V|D, "export_side_data"}, +{"scte20cc", "export SCTE20 CC through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_SCTE20_CC}, INT_MIN, INT_MAX, V|D, "export_side_data"}, +{"dvdcc", "export DVD CC through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_DVD_CC}, INT_MIN, INT_MAX, V|D, "export_side_data"}, {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, INT_MAX}, {"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E}, {"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, diff --git a/libavcodec/version.h b/libavcodec/version.h index 735c8b813c..87b7284a95 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 27 +#define LIBAVCODEC_VERSION_MINOR 28 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/tests/fate/ffmpeg.mak b/tests/fate/ffmpeg.mak index 9d14a96e13..a403aa27a1 100644 --- a/tests/fate/ffmpeg.mak +++ b/tests/fate/ffmpeg.mak @@ -109,7 +109,7 @@ FATE_SAMPLES_FFMPEG-$(call ALLYES, LAVFI_INDEV MOVIE_FILTER FILE_PROTOCOL \ += fate-ffmpeg-fix_sub_duration fate-ffmpeg-fix_sub_duration: CMD = fmtstdout srt -fix_sub_duration \ -real_time 1 -f lavfi \ - -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v[out0+subcc]" + -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v:dec_opts=export_side_data=a53cc[out0+subcc]" FATE_STREAMCOPY-$(call ALLYES, EAC3_DEMUXER MOV_MUXER) += fate-copy-trac3074 fate-copy-trac3074: $(SAMPLES)/eac3/csi_miami_stereo_128_spx.eac3 diff --git a/tests/fate/subtitles.mak b/tests/fate/subtitles.mak index bc464edce6..bb1dc7434e 100644 --- a/tests/fate/subtitles.mak +++ b/tests/fate/subtitles.mak @@ -2,13 +2,13 @@ FATE_SUBTITLES_ASS-$(call ALLYES, AQTITLE_DEMUXER TEXT_DECODER ICONV) += fate-su fate-sub-aqtitle: CMD = fmtstdout ass -sub_charenc windows-1250 -i $(TARGET_SAMPLES)/sub/AQTitle_capability_tester.aqt FATE_SUBTITLES_ASS-$(call ALLYES, AVDEVICE LAVFI_INDEV CCAPTION_DECODER MOVIE_FILTER MPEGTS_DEMUXER) += fate-sub-cc -fate-sub-cc: CMD = fmtstdout ass -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v[out0+subcc]" +fate-sub-cc: CMD = fmtstdout ass -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v:dec_opts=export_side_data=a53cc[out0+subcc]" 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-sub-cc-realtime: CMD = fmtstdout ass -real_time 1 -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v:dec_opts=export_side_data=a53cc[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-sub-cc-scte20: CMD = fmtstdout ass -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/scte20.ts:dec_opts=export_side_data=scte20cc[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