From patchwork Thu May 5 10:20:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35597 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp974593pzb; Thu, 5 May 2022 03:21:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwe8zYCvQPpxwW3hREv5ja+ju5qTAuDpIcqG2KwI1WkV1qfKlGlpd27CYR9utSuMHOOm/i5 X-Received: by 2002:a05:6402:2793:b0:428:1303:1b43 with SMTP id b19-20020a056402279300b0042813031b43mr8482250ede.226.1651746060537; Thu, 05 May 2022 03:21:00 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dk14-20020a0564021d8e00b00427d0b09929si1393341edb.443.2022.05.05.03.20.59; Thu, 05 May 2022 03:21:00 -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=@outlook.com header.s=selector1 header.b=GlwRa9gs; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F09B568B3AE; Thu, 5 May 2022 13:20:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-oln040092069022.outbound.protection.outlook.com [40.92.69.22]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE2E668A6B0 for ; Thu, 5 May 2022 13:20:48 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M4zn+n27UevX72oDfxZSxj92a7PJ3FYmw9nVvZSyzkUOFv+PDZFJ48ey0XElJOla/jN3W7XUAmjZ4f70qFdk/4PkTV6GbcpswRUAYumd1h55XHMXIbCfPdfUsRJjc5YNUovFX1XpqHtP4J36v3LwN9yFNv3xdWiaWgPBI1x5ExK0gSLmvELIVv5Ejqpx9ExrjrJG5xF5ZX6fSHSmQUo7thzdi3hNvXcGFJQp7GSWVrgAJ4yNR6WRr/K0ZR+gLR++2CQv0yQ6iSH8IMG5riyBXJxZEFOataV5zVAOjtHZU/v9HksF48UZNl2GIyc0FMaPQspW3IWn/qxqvl2Zgs9yLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MPDnOKkdVgetCkMYYDpsT1dPqWdKGkhlAyEq6KcV5WE=; b=oH16rfxvy2CgymY+++DthzRjBSkWNtJl1z0z16qeyRjb8jHJaoJUjEo57LepOxha+vQnlxzqVdkvltvPOBxR0cVRoNIBEaOAHOQhP46WajiC0wa97b8rMMCyZ+50OXUJQ1EmggFJ7lvQeqlOEMtrQxAhMeLbvn6YRxLrHoItlYRCSoGpCSx+EZuXXfYzcey39Px8ZJLL0s6x4cqZr0jS/9QXYgcZNDJMdEHYyPqehiC/pQgffDOVxkhYWFHCXpdWwvHLq5Sj2qcIzSo8aHAxApNAClkUUaxHYEAPyr1HY3W8MXinFf8Ta3vFWHvJvVYjsPkKf/bkGI81jQ8VXDxrUw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MPDnOKkdVgetCkMYYDpsT1dPqWdKGkhlAyEq6KcV5WE=; b=GlwRa9gsYr8gXF3fkz/39/rLrXiDASmfLwRzn2kDmtofdrl8M5FlXZPE98w4AWDMCZrNXLB8tjg8dd7xR9qdBXVmN++fJ3zFfPFigcTfYVQ6vAjKlUjAQ9VDqK1unFLb0w7oXqRRfvJr834d/wd2x1B2z2zc/dgwOrMgptG2fhphgc/HXjW1/TQ7x2YYh6jCagdO1KoX3BUyczgL3U2Ce+oxL7CAZSJVZgBnl6oO+oN/9occJvkaWnRZvptOjVlbokAX3ZcmCF8iMX0G+knmrpKZssJMsfWlx0OqOSiXQVkvFDb/L2Czj6pVzlKD2QYdjz/TZrSGsRKUD43fe70VSw== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by AM8PR01MB7897.eurprd01.prod.exchangelabs.com (2603:10a6:20b:3d8::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Thu, 5 May 2022 10:20:47 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Thu, 5 May 2022 10:20:45 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 May 2022 12:20:30 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 X-TMN: [kfeFcsrQwATXu/1+3hYiZJVJ5SrSayi4] X-ClientProxiedBy: ZR0P278CA0049.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1d::18) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220505102032.3924749-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 96ca4750-aeeb-4b68-b5ef-08da2e80e955 X-MS-Exchange-SLBlob-MailProps: CaK+F7me6Cl3MOXgrK6r/gaKOjVsZQHVTwOKnrWqbjigkLOpCPtAW2IK+yq2/8ddhyruicPrs/mXFs9kn/yEX+WvFzOV0fSXPEp1XVtxSwCCwaCSwPCzq1qfWGFDOYqHUE5So8o0Kru6lnV+rL9p4VPTKHcsp/JBI5UOsQm2nvAOvwe7EyzA+I89aNNtORUteFcRiJyYaii4SxQa2OkvA3U7FsWjckNIYUpyyzQOAYX0iI70akIxdbUCsKRKs0PB7CuNMoGEW6rspnledFwgJ3/YdQFwe82UXeym++M58xcacmlRCz+kDJQ7BGo6FjONLAbk5OyDuUKToizQc+/QVadeP4xPOIFr2ZobQ+Sm+0mEP+FpnVgMeMTPaNDWLcZosmoRvLx45ybckeRyK9OBZIO/69bNX6ebkxryGld+3vVBvSCcj4Gekn7JvdShzED4H1eBKPTFlge+9f4VnMDiC5cc2PR9zLPdRJJAQ+++c6u7G6oXW6vA7Ftsabekj3KyRcl7C0qvuJmu5UiaHsQwWCkW7OthhhNrSO8uX5p76XN+aG+glc72p8Y5aoMng7wOvYmU3sTb63+YHZ1ip4eurRKgDeOpWrSFgVxJCYFU4S73jYmabOzPtMBhmzHoR9uQJ0ZEfRll+HX5gZMzrwAzX7Xvjceyr8ItMvkjryE0OFOoUeajhVdyzYDfk2lKUR0DAPV/7SK76Vqbd9qC7bnERoVCblWuP2J68sKFIBzxUpo9MVWX02fEhA== X-MS-TrafficTypeDiagnostic: AM8PR01MB7897:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: I0IN1urGAbMOtJbBs44QUcDrGWi5h0SrajrXmm9W+mLh1P9V8vud5geJ9cWgOGBr62hM2rknHmtUHiI0DxcLMiktXqE1FnubNsMucE4UGJqQRIVRzDXH84UaNh39ZMpt8UvOOrQnhd3YJWADwygjKI7m51KwJsOe0LsFvLQovswTcadAmK9/cdxFKh/pFwr4PuZdbQPvqaLVuaZBialouXx4RpOlYV42AKsfE3LUcn3jl0roT5U21PlU1LmmNZjRmSVbzz/qd9ibhgsN7FgbHrtPYK2ApR42IZuD/0RVelPKxcaTogBq7z4q8C8U09RdPscqVGaG4EoKRzk+vMr2iCo2QaALdBTdigoeBMuD2FWiwcUf2AOMEVb2eWN6sXhRzb0B2kGiGfpQBzrzdgrjP/An1vGz/1I8m9l1EMUumpmd0V4LRjnCXvV1qGzbb1oqJ+Z6h1+nPOsxRRF9drVPei9qe6XH/BIv/khtjepVPrreh4NydISE75nOFOu9G5sQTja1n3m5OJsDP9JJSeSBOL7KCUZqJxjQAPa4bddSUPSdfDd1xl64CmQ1YyyH41WYlLgB+0J2wS5AEyJdfzys28HOgNyGcnIbTLJNkL834XU/rdvz6QwhPdnTBybV2iFzKYHSYyT8Zb46zhPw7z8ZsA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: g2FBi+my3uM+TX93LFKNzfTo31BOzGXkt43cAnl2/JRYulVUXLnZg/GN8c0KsXeGQTREmNhimosOb4BqrB56FNXON21gpAPY5KL2iRkbMTEAUqeevB0pJMve+AqlbrhRfMmI+raeIV010EbugDiXkH/QNUGFlPRpS2tq1sIJlz1+YgVDhhfsd4adQqGYZS7RxmWtlenK/mPap7CrNdVISjwHdIXOMWToQyz1WTtuq9qqky9zo8PFeiANsAjsqxt/fjfpkY706bfoGq2d6SsrGSskqz3kfHTu7HePU9e9Gn04wRz0xLl4/cBiCkA6agphwzEFXYu2UsiizihAdHhU2jb7WGncSBIWpAOg0NeoapIbodG0En4+DN8Lr9sRBdf7cWIEoHInL5dcOXTbF+kSljS5iDKFfUp59pobyP+kQrwIS05oRsHtUujCZ8IFTGD8csla+8SS/K/O1+bBRmu4QzZpejWduwlS7VXTRfHVq5fvGZV8m1s97NtsJsr52xR2qHAx2VQMfpozXU3byjtWwc7kub0i4isMmfceciWkopQbR1fX6hWk9y4sxFtg7PnYNaOY2gzJB8ht16B0692i56GiL2IjFIGjYQ9URmCsbX8VhEDDxKZx+RHZw4CO3eazN4QOA+L+kC56FELUBlUeToK3BF1KW3bxIzT6oGLuL0RtL9TjAmtNBd800Du72OQhWK5B96X0a8ep0NweUl8yfiE0wDqv6zX8ZgtG8fEnF/kJ04peDHurxPv13QQ3o1BN0kadRotjBxzTqvZSO55QLuZo2jAtZQw0oofwJ7LdXOHGTMTpPTFgGJuZhR9VcPA/3oOdDgdIsxKXeFNiOmxXBY3THfa7YFZJoDt+S9lKM/z8aLc1FWOl4jW6SumnlHOAatpn1sPURfi9gAJGiqGltVoXRoxT8FuIyE6jFeGArgjWrn5U3IVnGtMEZ1fl7MD0XO8wcwjT+btf4BOgYP5+gPQM6vVtpthH25OJCSV4XUdbMHN/H/rqDvEXBJm5poGG4AZn6zKDu3D+m8TiyeQYp7SgC8/0kr4OQZP9hgKs5Aq52cNnhxeqnFSW4qYRHK8lO5KLnBS8fV16izGO2Xf/D1Hhs57qYR+g9dBkXB8oD4n14RlQGOQQxGprebbuGNsk8CPB19BQx8ZYmlXjBxH765FIE+S7ReOhV1zTyeXhZo/v3gg/a6ous7S+iXEjawYkAGOPrOynUiYJQ1xVLAlcrpV3Yj6wZlppUdQbaaH/LWRamTxkyc7llnZLqdGyHKqiggAT5Xov3bjSrX5Z9vyvHqo3Bdd6xviFU9atInUxnl5+50YnEOa6Xt1GUbN5syxksEX7iCnWQWmHhXB8z5Cdmsrjh8OxP5uXdmPchvNUrhAork/1P7tauRjP14lrupr4FY7bcBgkIu4Q22iBEH8ZSDhe7U2Vk+mpHkqxMNlg96H3kSWlCx1TPVg4gr5pn+pd0jDNxDNFhXf4JpJfDp2YuA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 96ca4750-aeeb-4b68-b5ef-08da2e80e955 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2022 10:20:45.2547 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR01MB7897 Subject: [FFmpeg-devel] [PATCH 1/3] lavc/pgs_frame_merge_bsf: add bsf to merge PGS segments 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: John Stebbins , Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: A3MZKtwDdomh From: John Stebbins Required to remux m2ts to mkv Minor changes and porting to FFBitStreamFilter done by the committer. Signed-off-by: Andreas Rheinhardt --- Changelog | 1 + doc/bitstream_filters.texi | 8 ++ libavcodec/Makefile | 1 + libavcodec/bitstream_filters.c | 1 + libavcodec/pgs_frame_merge_bsf.c | 191 +++++++++++++++++++++++++++++++ libavcodec/version.h | 2 +- 6 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 libavcodec/pgs_frame_merge_bsf.c diff --git a/Changelog b/Changelog index 4d467eb741..1bae64075e 100644 --- a/Changelog +++ b/Changelog @@ -14,6 +14,7 @@ version 5.1: - colormap video filter - colorchart video source filter - blurdetect filter +- PGS subtitle frame merge bitstream filter version 5.0: diff --git a/doc/bitstream_filters.texi b/doc/bitstream_filters.texi index fc2c71fc12..50c95f035d 100644 --- a/doc/bitstream_filters.texi +++ b/doc/bitstream_filters.texi @@ -695,6 +695,14 @@ for NTSC frame rate using the @option{frame_rate} option. ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc - @end example +@section pgs_frame_merge + +Merge a sequence of PGS Subtitle segments ending with an "end of display set" +segment into a single packet. + +This is required by some containers that support PGS subtitles +(muxer @code{matroska}). + @section prores_metadata Modify color property metadata embedded in prores stream. diff --git a/libavcodec/Makefile b/libavcodec/Makefile index cfaa6f196a..3c0ff2dc58 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -1195,6 +1195,7 @@ OBJS-$(CONFIG_NOISE_BSF) += noise_bsf.o OBJS-$(CONFIG_NULL_BSF) += null_bsf.o OBJS-$(CONFIG_OPUS_METADATA_BSF) += opus_metadata_bsf.o OBJS-$(CONFIG_PCM_RECHUNK_BSF) += pcm_rechunk_bsf.o +OBJS-$(CONFIG_PGS_FRAME_MERGE_BSF) += pgs_frame_merge_bsf.o OBJS-$(CONFIG_PRORES_METADATA_BSF) += prores_metadata_bsf.o OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF) += remove_extradata_bsf.o av1_parse.o OBJS-$(CONFIG_SETTS_BSF) += setts_bsf.o diff --git a/libavcodec/bitstream_filters.c b/libavcodec/bitstream_filters.c index f117bc0e17..444423ae93 100644 --- a/libavcodec/bitstream_filters.c +++ b/libavcodec/bitstream_filters.c @@ -52,6 +52,7 @@ extern const FFBitStreamFilter ff_noise_bsf; extern const FFBitStreamFilter ff_null_bsf; extern const FFBitStreamFilter ff_opus_metadata_bsf; extern const FFBitStreamFilter ff_pcm_rechunk_bsf; +extern const FFBitStreamFilter ff_pgs_frame_merge_bsf; extern const FFBitStreamFilter ff_prores_metadata_bsf; extern const FFBitStreamFilter ff_remove_extradata_bsf; extern const FFBitStreamFilter ff_setts_bsf; diff --git a/libavcodec/pgs_frame_merge_bsf.c b/libavcodec/pgs_frame_merge_bsf.c new file mode 100644 index 0000000000..bcd8945335 --- /dev/null +++ b/libavcodec/pgs_frame_merge_bsf.c @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2020 John Stebbins + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * This bitstream filter merges PGS subtitle packets containing incomplete + * set of segments into a single packet + * + * Packets already containing a complete set of segments will be passed through + * unchanged. + */ + +#include "libavutil/attributes.h" +#include "libavutil/intreadwrite.h" +#include "libavutil/log.h" +#include "bsf.h" +#include "bsf_internal.h" + +enum PGSSegmentType { + PALETTE_SEGMENT = 0x14, + OBJECT_SEGMENT = 0x15, + PRESENTATION_SEGMENT = 0x16, + WINDOW_SEGMENT = 0x17, + END_DISPLAY_SET_SEGMENT = 0x80, +}; + +typedef struct PGSMergeContext { + AVPacket *buffer_pkt, *in; + int presentation_found; + int pkt_flags; +} PGSMergeContext; + +static av_cold void frame_merge_flush(AVBSFContext *bsf) +{ + PGSMergeContext *ctx = bsf->priv_data; + + ctx->presentation_found = ctx->pkt_flags = 0; + av_packet_unref(ctx->in); + av_packet_unref(ctx->buffer_pkt); +} + +static int frame_merge_output(PGSMergeContext *ctx, AVPacket *dst, AVPacket *src) +{ + if (!ctx->presentation_found) + ctx->pkt_flags |= AV_PKT_FLAG_CORRUPT; + ctx->presentation_found = 0; + src->flags |= ctx->pkt_flags; + ctx->pkt_flags = 0; + av_packet_move_ref(dst, src); + return 0; +} + +static int frame_merge_filter(AVBSFContext *bsf, AVPacket *out) +{ + PGSMergeContext *ctx = bsf->priv_data; + AVPacket *in = ctx->in, *pkt = ctx->buffer_pkt; + int ret, size, pos, display = 0, presentation = 0; + unsigned int i; + + if (!in->data) { + ret = ff_bsf_get_packet_ref(bsf, in); + if (ret == AVERROR_EOF && pkt->data) { + // Output remaining data + ctx->pkt_flags |= AV_PKT_FLAG_CORRUPT; + return frame_merge_output(ctx, out, pkt); + } + if (ret < 0) + return ret; + } + if (!in->size) { + av_packet_unref(in); + return AVERROR(EAGAIN); + } + in->flags &= ~AV_PKT_FLAG_KEY; // Will be detected in the stream + + // Validate packet data and find display_end segment + size = in->size; + i = 0; + while (i + 3 <= in->size) { + uint8_t segment_type = in->data[i]; + int segment_len = AV_RB16(in->data + i + 1) + 3; + + if (i + segment_len > in->size) + break; // Invalid, segments can't span packets + if (segment_type == PRESENTATION_SEGMENT && ctx->presentation_found) + break; // Invalid, there can be only one + if (segment_type == PRESENTATION_SEGMENT) { + uint8_t state; + if (segment_len < 11) + break; // Invalid presentation segment length + ctx->presentation_found = presentation = 1; + state = in->data[i + 10] & 0xc0; + if (state) + ctx->pkt_flags |= AV_PKT_FLAG_KEY; + else + ctx->pkt_flags &= ~AV_PKT_FLAG_KEY; + } + i += segment_len; + if (segment_type == END_DISPLAY_SET_SEGMENT) { + size = i; + display = 1; + break; + } + } + if (display && pkt->size == 0 && size == in->size) // passthrough + return frame_merge_output(ctx, out, in); + if (!display && i != in->size) { + av_log(bsf, AV_LOG_WARNING, "Failed to parse PGS segments.\n"); + // force output what we have + size = in->size; + display = 1; + ctx->pkt_flags |= AV_PKT_FLAG_CORRUPT; + } + + if (presentation) { + ret = av_packet_copy_props(pkt, in); + if (ret < 0) + goto fail; + } + pos = pkt->size; + ret = av_grow_packet(pkt, size); + if (ret < 0) + goto fail; + memcpy(pkt->data + pos, in->data, size); + + if (size == in->size) + av_packet_unref(in); + else { + in->data += size; + in->size -= size; + } + + if (display) + return frame_merge_output(ctx, out, pkt); + return AVERROR(EAGAIN); + +fail: + frame_merge_flush(bsf); + return ret; +} + +static av_cold int frame_merge_init(AVBSFContext *bsf) +{ + PGSMergeContext *ctx = bsf->priv_data; + + ctx->in = av_packet_alloc(); + ctx->buffer_pkt = av_packet_alloc(); + if (!ctx->in || !ctx->buffer_pkt) + return AVERROR(ENOMEM); + + return 0; +} + +static av_cold void frame_merge_close(AVBSFContext *bsf) +{ + PGSMergeContext *ctx = bsf->priv_data; + + av_packet_free(&ctx->in); + av_packet_free(&ctx->buffer_pkt); +} + +static const enum AVCodecID frame_merge_codec_ids[] = { + AV_CODEC_ID_HDMV_PGS_SUBTITLE, AV_CODEC_ID_NONE, +}; + +const FFBitStreamFilter ff_pgs_frame_merge_bsf = { + .p.name = "pgs_frame_merge", + .p.codec_ids = frame_merge_codec_ids, + .priv_data_size = sizeof(PGSMergeContext), + .init = frame_merge_init, + .flush = frame_merge_flush, + .close = frame_merge_close, + .filter = frame_merge_filter, +}; 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, \ From patchwork Thu May 5 10:21:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35598 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp975007pzb; Thu, 5 May 2022 03:21:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmgCv9BBn5JyFs6v+DQgyjbVKnR4vc2IbkgSdbimq/ID6tnnr3m+BUy8UhJ1CvHiUPH8y6 X-Received: by 2002:a05:6402:520e:b0:428:22d0:e996 with SMTP id s14-20020a056402520e00b0042822d0e996mr6263697edd.250.1651746113628; Thu, 05 May 2022 03:21:53 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q10-20020a056402518a00b00418ed45e7ddsi1719227edd.38.2022.05.05.03.21.53; Thu, 05 May 2022 03:21:53 -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=@outlook.com header.s=selector1 header.b=rb3+GBDv; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1BCF068B3BA; Thu, 5 May 2022 13:21:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-oln040092074084.outbound.protection.outlook.com [40.92.74.84]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AA3F268B240 for ; Thu, 5 May 2022 13:21:43 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TvBw19Fjgz8e0V14IL4tbky92OyBe12WsZWHL/tKm5qXi+GldFfvDOTUozLt3JhOi08KhKNIyNfSH/ntntJKBludl2RyavvK8HRWKXKcx/N1OSp8+GEom5kjdGdOXSQcFw1DmsswrKfOaZZtUz1NTJJHBurh8aEDSLrXxSqYtHdzF1P/uo8Ff39rrd1sCd8uSFjPFtTdi11/GSwPeV+CRSouPK5+goHDLFqOFsUclshc3i0NXpjuRzkz97Koq3YwGbIATUIQ4FPa4cqnz+al/lhaNYLs/dFCCvtC462HSy/8aR30nbaw35Az6GOteR9bQuPBP1qGgDUbVeTXY6cKvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XjX3oPkS+GICyTiv2dZpGaKIAYWQaNNs4thypSVmoDQ=; b=iJQ9NXSjr7TkTG6ylS8W6F/r1cn0RKOzFh2AT3+1JHyqLN14nHxi54+KqZ4VKoOCR0+tgqMozxglvIraGqZ58ZQLgu/dTLt6W83mII3akMOfz2d8LfwsGDtSRSLzZJR4DHKuay2OfUDPXIM+cnrf9Km74EvkmPUAHwsKZMfPFAyiAm0sBZQOnkl7XinPBKICmvpzV5dsX+7PC0FsGE07weH4hgv1oXp/1GPcimGlsfzuKHiOJmQ+Dxn7qyH2k7eAXUdxTJiwlKgdKsEnG6kupRvVYqrygtYVg6JZvDz2kmJky6M9SEchFVW2b5NMGHMMe23iUq1nr68FODEmFfzthQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XjX3oPkS+GICyTiv2dZpGaKIAYWQaNNs4thypSVmoDQ=; b=rb3+GBDvXWT8+tQsNnD8EKOUmpLEzuzQwwPPCiwTIuVIbm2jrghRD5nxrwfMdzqYDG1oJdVYtj6HIARos9l3z4jT7bo6dDzZHGnt29YCfCr29Q7OO4HgDkmr9N3WXmccPtaFsWWSIOniBYr4iqVPwRcLLiaFGoTiQTTczrfabvs0IYyxsxb6UpIvKpRLhXEbk9Dh966VwpzH/Q3UXualp/8r3moeYwEKNGCQzCTG08UzKL5jvPzfbqez9pqyEzIGjMSsZCq0GhIKxKEU7NWMAKlb3YHb9K4vo+pwpdT+YN6b0mcz+QhCwRQlh9IzRxYI526CyIdfdbJJvCQroejLtg== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by AM6PR01MB5158.eurprd01.prod.exchangelabs.com (2603:10a6:20b:95::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5206.24; Thu, 5 May 2022 10:21:41 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Thu, 5 May 2022 10:21:41 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 May 2022 12:21:28 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [RcLYDi4daYoTx2JmgrwuQwvOVKTqZX0b] X-ClientProxiedBy: ZR0P278CA0049.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1d::18) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220505102129.3924826-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 805d0391-0dbe-48c0-caf4-08da2e810b24 X-MS-Exchange-SLBlob-MailProps: zswcL9HXbeW6zILrs4w8QiGrWVLGSDAlhvavuQfGPIMEIF0yBOySMw8ctZeWDaA9BcirGE1s6kUJNq/uIv7TI5BLOjXwW1BoWDzFVz+LcnJ3Xr6UJqgG7xf1ewKi1KYID4HrFSLalzR84dk00BG2RQjZXfAPZgN6NcCAVBn38ezaeJIFvOCA7c95CikAa1J+RniPEubi0kU8I9a92pN4CWHkatvofSA029tFoRZlA17Ehyvdu0sy7Y5g8ygyz4fxhfZVTkJimU7g+0tmOLfAPap5V+I9SC0WVdS50m27u9gL6A0liwXHAnSBHX4DO9s2rbPiFc7cU6ZZ+j+EmJP3Dx1YTEPXKIB3y1LvoeBQhHSNpfo/NVIxeGSdWteSz5L0AQZ1k6AixaBu+hwpHG1s8hCUdLiIzXR1AvNoOwJZJ3KSshAzaiVy+Ji8HLq6jnBs12fPdDBdHVS858iFGmzQ/2Q21oEVufHi8lLl6OkcMWLB4sOyGsiE6doLkCuu2K7Z/TF+O2dCfYyhcEjS6oSY5ltV4EvSVpNS+4a6Oqj+WALzGwRkH10gYrfGaedAlGMRom22xYuezHQiG7ti5acrZcmN/ZWcRsXg9C91/4gkiLWYR7doQymStAbM7cSkg6rZgLBKBvQlK5ioPCXLYuNxBy/edfgZIZa5qUHc09LcHYKKJlb++Stq4Jr+IjJ4CtXK/XhanNxOGGYCNVNhHVNIgIFlt9NQh7RgqVrqfyVPYkO+paNBh0Ash+CztGRQ+tEc X-MS-TrafficTypeDiagnostic: AM6PR01MB5158:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BJya1NlNLHftohmwDuohRJ1IdZVXglrDazXKeZQAlnYbVSiagdbt/X/IDzh+udz8HHHdGEgiMzJmazjx4aeMRpmqRm27O4xrphhuytDIOKWRtA8qW7Fo7T1fx7pzVHmid7bZpx5Eusr/2OVkE6cBDUpZXyXZ67B31MrsE+wyJqykdbWtH6IbrXLBbDg+izb1c97fvbnk+UmYRwMn0YXco+UhgEyFYTQmGINrghf33GCTggslpI1Ln2JuQuq+rjMswHR9m4u7L0Pw5YYqq7J4mFMQ9WYtWxhDvyBnpG+KEEszR8BFZ0XBFZgXmB5No1DZ6M7T1n0h82MCSZ6HL6nqy3jjsk74tnLmhdOVMa0FbURahuMX0yDOQ6SvWFP7gL87JYed7lGmt2x+UtWVz74fIJShhanS0y/iE/U3Aw3zBJW4HYy8/8YbTMsQtxNfGHJHRNbCUcrRsJw+KSvyj2Prr/+40SRdaARNJtu1HTgQK1KpjsB/iGY8xckEj0JBOxQH4pd4wL1HIP4yE+yiATrce7W5E8q/HP9VrAPNBCCwNBXcWRPIFJv678ni8iMPBAHi6CB4vJbMuAJ3pjqe2maeqRiKSPQ0w0ipylIP4QhBlwEFuPyJzo5ypOlvkvuHKHmlzu2DYsKccLIFwtkIFQbhqw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cWjIJ69tOx2wMVGOA/4ZyKOutVFSantnKK+nLGSHLQ3lzk+vsj3QiZZFGL8jBDjnGg/qgzwVP5qQto1DMkPJnjjX03NNPvsHpySiNLgJ1Q1lBRnlkhpLkY9pn4L6Aq4SHBqdzYdSEVMffdTqZpAg84CO4xMgW6osi+NXZcTjl1dzQlQG0tuSSONyobk0K0O5wLPO0tbAG1VXRti0Nzgi2agQ+UNDXxyPbewVzsiqQqfyxMV5pIhQrfrqf/vsSQ9JWcq6/5FyVST2xPOMyxzLE/apNjKpSqhMp3S03TP1gEIsUu/9lhh97JxfO/jVYXUGvlOEMwvOLbbX+1tKgPRXZ2jic62T2IsErf1tne84CupGuw/Oscvrij5JcCatERbZTjzJ29PldAXbnW7+5/2prNFQ0dLO+9YJgYJnlHz9pAbwVWxLiNYEQoNo3dj+hujFgDPOWsKSVu4y+3LCTwhZ7vouNZQDMq7GFJ3UuUYHih9fbeRV3dnS/8kfHo1xfzcDtK6WmdoNBxlsGZb62T/055Ruy1HXn0FRzso7yzgWRYkBNznbm73pongfG3iYLrlcUr/MeauYFLHfn11oUNw9EppIFGfiXY2B2A3In95eCkjOIDgXHJQU9PiMmLs/ofvKOLiqtsHRHMsTP87QnP9RIBnpOjqkAEfG50Kig0oHfpnKts2OPux9sSJOrM9TH0whPjKuEFiY4zBRiLY7ieJfhgTOa+8ECuoV3gMOhYo/Bg8767JiP8W6Y4WzpgZH8k1prgeX0+2JlBXOAJ4rBMn0hOiVXkCzzG/Xo5bpVZocUYER7FNmuKGeJzlu2b3PAy5MeWeN30H51y7shv88LkPUiXlnli5DZfEj6kn1kQ19L2R7i3mUA4hgjDOkipZpfEjjhrb1mnQyGDYjEHDVv7oEnCstNHTuFY/+CUc4S7kFCS/ghIybxuzfSLoOtV8UJOW4GQv0Pw+9n4SivuBUA4oxsKS3ydMfpLqBm+FESRTdS43mEL709pFROXQbXMrlcuNmP+uNowzCOBIBpU5Mbek7rBSXssDTUiijrAD42++iP6X2Hhrcz6FFNoecEmU1TlyDzL9e2HATz93ArUvtptXr/8HYkD+jVZiNv7+MxrqXQ6oAfdh8D+/DBXZOOIdF8gLaO5hbjlNTZW6lIcKdQiAWmp3UQjjdg/ytSp10No2sr3OkWU6sULDUe6fnLvqbCcSpFC2Nf1DUV8R8Tq9ysFZ6q+C663ISuaNrrf/kaZ1E5bjLk1zyJaJQv66KMStfuUDrl2E46QvsyF1L6CbvlZbm3yalAT2tzcpZS0uYR6avBuNMuHc0mk1Gu8+y4ZvamrpvfErT9/t6KGVT+yXFi2fE6J5e1aCeFiDj+IJf3FWalIdKq6xtHup35nvkSr+DYipWZ7EH6VQKRtfXu5PZkvoed4DQPBPlq8sTumU1fF1ADZmShuTENXqb1cYBNAaYGCC4UusEJewmqvkDGbmRYwcYnA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 805d0391-0dbe-48c0-caf4-08da2e810b24 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2022 10:21:41.4716 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR01MB5158 Subject: [FFmpeg-devel] [PATCH 2/3] lavf/matroskaenc: enable PGS merge auto bsf 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: John Stebbins , Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9758KRUjW60T From: John Stebbins PGS segments must be merged to one packet for muxing to mkv Signed-off-by: Andreas Rheinhardt --- configure | 2 +- libavformat/matroskaenc.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 196873c4aa..4d2f4d9112 100755 --- a/configure +++ b/configure @@ -3435,7 +3435,7 @@ latm_muxer_select="aac_adtstoasc_bsf mpeg4audio" matroska_audio_muxer_select="matroska_muxer" matroska_demuxer_select="riffdec" matroska_demuxer_suggest="bzlib zlib" -matroska_muxer_select="mpeg4audio riffenc vp9_superframe_bsf aac_adtstoasc_bsf" +matroska_muxer_select="mpeg4audio riffenc aac_adtstoasc_bsf pgs_frame_merge_bsf vp9_superframe_bsf" mlp_demuxer_select="mlp_parser" mmf_muxer_select="riffenc" mov_demuxer_select="iso_media riffdec" diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 3b8ca11f28..fe296197b1 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -3172,6 +3172,9 @@ static int mkv_check_bitstream(AVFormatContext *s, AVStream *st, ret = ff_stream_add_bitstream_filter(st, "aac_adtstoasc", NULL); } else if (st->codecpar->codec_id == AV_CODEC_ID_VP9) { ret = ff_stream_add_bitstream_filter(st, "vp9_superframe", NULL); + } else if (CONFIG_MATROSKA_MUXER && + st->codecpar->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE) { + ret = ff_stream_add_bitstream_filter(st, "pgs_frame_merge", NULL); } return ret; From patchwork Thu May 5 10:21:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 35599 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp975085pzb; Thu, 5 May 2022 03:22:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx6l7TmdIk0NTvPE84wgdnsNfHKnjoiZ3B9P4fAuZVUxdlLBqLvjApP6BPBQRuJiZ/FMKaE X-Received: by 2002:a05:6402:1592:b0:425:edec:992d with SMTP id c18-20020a056402159200b00425edec992dmr28112450edv.283.1651746122934; Thu, 05 May 2022 03:22:02 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dz17-20020a0564021d5100b00425dfd4296esi1767384edb.48.2022.05.05.03.22.02; Thu, 05 May 2022 03:22:02 -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=@outlook.com header.s=selector1 header.b=rhhDXLX6; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 192E768B3BE; Thu, 5 May 2022 13:21:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2057.outbound.protection.outlook.com [40.92.90.57]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6625868B3BD for ; Thu, 5 May 2022 13:21:46 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eIetHdAxtHclwBgfknf/adZwyKl4mpDwlHE9yl18yK8UnvObjm1zfI3EMc/kbvhL7limoxj4aJKvwHDGXGrW+nehpk3QOwlTN2Rf3m/P18Fz0lQpGlJbpXcttF0koeiDh5mL+EO6dB//gCcTDBAkg3zeYncCl0oB7kiiF+FXoPjyKWOtRSDq5RNJglC58sHcP1zPtSveAmSH960faDBi13TPvaMWOH1IIKxnMwZczBCSV6dl+qK3wWsSXdAkT2L/2yvoe+aolAB43RfEdCINjeKRP1CkTFKp/H7c5L2uX04WUoWnq3t5KELZ66VDJH4NhVfeD/0zOGQL0WWqS4AvVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=L3Y5+djpkeYycqE0sCUKdX2zln5E7gr6LN5gOOi7CAE=; b=ZhCWvY25CTBgyb/J5z4E2p1ZjFjy4crqx4xGTvrDVvEETp677/ES42xsDITOCkzTmod95w64NtdWkFVIFI3Oa/mVxi3IIT92RfmrLkuiLHooMN7jMAuA+3Rmv40CtHBRcRGK7uit/15nfaeM+5zFPdVDqjKhrxMxSwfJDBe3p/N+NPTlC2PQ05PTAfQ9R2rf7f3uBptLxQV07jhGo8unWKl+n6E0fZn4+WNVuqpsAnEY84fGf58Gb3Zt3j6yLyxpmmaK7MehOMxKG7WUeXi80yshXLB5Go856Dvmujlb6irtbxmYVLgqezxAnsXa1dy8aqX7L0JmoPwlXUlzTIBZXA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=L3Y5+djpkeYycqE0sCUKdX2zln5E7gr6LN5gOOi7CAE=; b=rhhDXLX6LhZkonNQoq6Uk32apbjnmBQ/fAgW/J+Xu4Csi/sLX1BFT1LL3bLbLv7KmD5/4dSuLh5xiETbzRv2v9XlxaVGMUYcBc74MGEbdWaCuqEz8N8sGei9nkQK9LAETUWJLlMbsgAx/hxEzwqWmSogrvTfnlN02fIiboXpeLmJHyjrRC/Piktoi2hGVL2lnTL9dXBNbe9Uwc9z3rBnI+qfDQcTZlou4O0jTHcoGBtHSAmPaxFFLgc3lcuLiO7SxlajOHBRhl7ZYxzcWstz2ifD2Zjkwo0QiZBqKoRSl+qH3QB9u8qy9BFolSnM7mtXIc82HCqf9arEVgjS/v2Nug== Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) by AM8PR01MB8088.eurprd01.prod.exchangelabs.com (2603:10a6:20b:327::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.14; Thu, 5 May 2022 10:21:44 +0000 Received: from AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431]) by AS8PR01MB7944.eurprd01.prod.exchangelabs.com ([fe80::1854:2c30:7ba1:c431%6]) with mapi id 15.20.5206.024; Thu, 5 May 2022 10:21:44 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 5 May 2022 12:21:29 +0200 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [JEQrLhgfwS5eI1i9gKMPQyZq3tUqC4Tq] X-ClientProxiedBy: ZR0P278CA0049.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:1d::18) To AS8PR01MB7944.eurprd01.prod.exchangelabs.com (2603:10a6:20b:373::5) X-Microsoft-Original-Message-ID: <20220505102129.3924826-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a52b0e03-1f64-4448-416f-08da2e810dc0 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTwpFlTyQGqvVx4396NoooTq0dPBSAd5/Gg+WUoPvzJHiVC2GF7SHWeQoLwihB6x8uNav3Iuluq0PD9OJB8bsYBVJM+HOf5oWQehpvy45ZkD0d+8xW/JZPMoyBT7jEXkE3wfbAODnziHSAy4AdeX2x++roLYlE8x3/YeBmXTYrBSjtEDnHNvfh7Df3MR3IFft4EQ5k5/Y9VB4sc95oNpLw3+v7kgLkJKbjHkX4XLwvGh1TTiXOYKsChu83/UBVvKhEZzjcsk833Vkz2IfGVk+CzLad4yCat+9DvMIHkfE6N43qdT7c9Jjar2Na5r53HKyRHhJhjTiFi4/Bzu7zk6vYHuHr5qzex5eBXup0weUhcDC1YktlCTfZ3gnoXEzKPtoflO0TIpq+8RD9LzVQbp7Y3nvvMZ17A5jLcSTbkudkB8eBNLFXA1u/lh4V9J4y1UJvy48padrkuTwTvb6tIhweq7nxYTCHamFHtddapFweOsepj8Uvpw06La58qgeh/JoedzaSqgjn0kEr7prufrRS4S4H3MN1gx3jTop7ilxWG8CbGT1xf/0fZCtZaWVSwJB5ybfizAFeHaZjm189QtnQaDwggcBGJRq2+CVfydXxv0IKA/cThmzeY8xYw7jdSD4m+CTBmWT938iSRW+ZaBPbBpmXCilFh0A4+6tYZVrm1ET49FMbwLgomhTvRl2blufa4+IEjnhNVUucRtaEl5XjomgVNePjEeqsPTYaKGS79Ld9CRYyyKFBa/7vbI+1xCoU= X-MS-TrafficTypeDiagnostic: AM8PR01MB8088:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rQ7qbbA2JGEVnaOi0poxpQLLykJR8fIBdh3H5cu+h0QXZuFmAHAT/gFvKmPsOn/0Uy34g6HpZ9XzN5pNuTVFNhrMQgdEFJhKCRDueuluVSs7EBGESYBpq+BRYgd02pwF1tDA8S9XuL0f505rqoZv/MUX6j8TxH2Q6zgx8jJX2Mt6MS3PQ8fjjwtRk/e6wzrz98GA3zTgUxdoz+NT6YH5l7Lkn3DuujR2Ni+bkTMHvC3fjYHUQatI0paNgJy4MtetCkjtekWd8rT32/hqMO89x3BSyCI1H23GMM22jT7oDV/saE8ir6TbuTl87HTJB+d1jGA46ZzfYC2EfIQpXPPDUsXgY2wBCPW/TAdJlINuipnL+LRHp5Duo7Cl5KyIOkskZcc9wk0DZROGLQ2SqHfnpcy4tWqfPGGm+Ay7NAHLkm6gNITi+TeGduCv5wnATISES7/oI5JRBpclJIXR/ZZc7knh0vGZFqm1BU+BOYy9pae8Gjqap54Zp5PB2BBmBNBJqPigSkCGkZW/urhX0p5oFdWsA0atgTGWhfAaPvm8cEneIVxUbdjj0xIvq5vHXUZbDDAd5y0wxvc/MoX/IbYeJoVPeh5zmhRQ3nNKtdXO823ILinIONhx9mpigM4h0UKtQl0ZhFW0eB/fTYx5eI8uOw== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3OnPwKdluqzw4Fn/Y+kuYaWQ7lX20iPIRpZ39k4BdmsHhOEdUE1DwRtgO/y/sHIwTErn37Apd2Gqmbw24FcoduET55aLE6mRnDBjU9bTdEmBNbU84v4QFEGje5cKL+z09S+evWdQUEVO5eSY3faCBTkLfiBDePLOk76HMnIKUmRsxwZhU/jf6pRGbJHwilXuIH4y+FNgNiMHFry/77KYnV1MGbqQBfnzaAGgYFxcCsv39ECCNNQfqDSSTZHSkOWuQ4olq7k1vnHaJ8WTzCdywBSHDhnhc/wgy6GHzQ7xSDiJGuZVa6lDnt5+JmNIbxpazrDZfX/0eJrTKyHXliDdgbRch2XKAlv7xK2bkkmgdsbLswVepX7UeDMX6qvCVPdt6mZeRGKsq/Uj0esQ3Ky8/2JtrRRmxzjmQFc8pcC0EOjIu11oSDfORd2ZFEk43OGna2PtcpyHcAClYXS3xPkjFvU2usuq78PCpcCqmTJw8AEdgauS+D1ygfcCm3ivojCX1kYYfsN4iHkgPta8Qi9NLm5V4HeYhVwbiXqZZ54gTmgM/8CHzezZlkZLb7ncZXNy5UgVGGrUTK6oMt8YLBTuPle6QuwFmlMFRqjGoxlf7kUTbDkfFT1LZn/NAFSdzoAEzItt3fvf1W2nRZ3tfB2I/mxf6cOfstIE2AyHRzS5AP1NVTwPob3BwbACC7v1TjcBkVLhsPvPmZNnhuYch9XA1IRVnXHvGJx8iPLwvaCIfumCgIgLQ/Ve1jfwzYsM8vCqoM5FTR1bTsKe7DGbxtRTkAcLEWvvTr8SaxEH7wXahamqmFlaWwA9oNcxaKdNL6P/7y4YwpcXmb6Sf/j6u5rW1rXYP2h6FLQ3CqujQk3s0nN/nqx7B7xQsxNCXO633CeKnwib9UafJKJe5qMwMcm3BB0u6R3I2LH5j4TVJJT7YlL0DiaDJqyLuZKmrhyaVrJU4LWFhBXHqTRhYZ6AOI6N+rYrJeJy5Dj4J43UU2PEg73FauuES/cuXC39L1fZS6zYHel1Fb7HaHCD0YXEQzii8g3/P5O6QkSsInl1c3d2Wh9JlOsxUTNPhUTBVJQo6o7elJUXpv+LEsQo7quDd7Ath81X/ucxrcaR74GYvDV9lkHGvkOSGLcJnCR4BM/qn9kaxSyfGCjzopusterD6kTthPJEWdNtyTVGMiNa4/I4arJdNuBbjNrNd3+tUa2DbVYUP7mXlrP1CoMjuFfNNBvQEIVW66DljrdJO/6ohCLTxNF2fxOkv/b1QeaLMhXNui0VvCAm5GPVvkSMjcllnrKm6rgmvi8QOawTPHkYtbEl9C6zhFUUnFgb0npsWA+pxn5otkvGWLDJom/tbrjbtjpjP8oWl0BlHXq96WUH+4SyCE12x5g2yHtPXNFqIaQu/yq2Lxs/3c5rUuTZTbO2CDsAEOdFALZi8AAZ/kN3dwcrrb0eD5hk7+D69r9K4+ESUnZbeDX8lUeLHsZAmhM07cVblg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a52b0e03-1f64-4448-416f-08da2e810dc0 X-MS-Exchange-CrossTenant-AuthSource: AS8PR01MB7944.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 May 2022 10:21:44.7083 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR01MB8088 Subject: [FFmpeg-devel] [PATCH 3/3] fate/matroska: Add tests for muxing PGS into Matroska 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +xhx1/noXuLK They test the new pgs_frame_merge BSF. Signed-off-by: Andreas Rheinhardt --- tests/fate/matroska.mak | 8 ++++++++ tests/ref/fate/matroska-pgs-remux | 7 +++++++ tests/ref/fate/matroska-pgs-remux-durations | 7 +++++++ 3 files changed, 22 insertions(+) create mode 100644 tests/ref/fate/matroska-pgs-remux create mode 100644 tests/ref/fate/matroska-pgs-remux-durations diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index c9d88975ca..7baf85f29e 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -163,6 +163,14 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call REMUX, MATROSKA, MPEGTS_DEMUXER AC3_DECODER) += fate-matroska-mpegts-remux fate-matroska-mpegts-remux: CMD = transcode mpegts $(TARGET_SAMPLES)/mpegts/pmtchange.ts matroska "-map 0:2 -map 0:2 -c copy -disposition:a:1 -visual_impaired+hearing_impaired -default_mode infer" "-map 0 -c copy" "" "-show_entries stream_disposition:stream=index" +FATE_MATROSKA-$(call REMUX, MATROSKA, SUP_DEMUXER) += fate-matroska-pgs-remux +fate-matroska-pgs-remux: CMD = transcode sup $(TARGET_SAMPLES)/sub/pgs_sub.sup matroska "-copyts -c:s copy" "-copyts -c:s copy" + +# This test uses the setts bsf to derive the duration of every packet +# except the last from the next packet's pts. +FATE_MATROSKA-$(call REMUX, MATROSKA, SUP_DEMUXER PGS_FRAME_MERGE_BSF SETTS_BSF) += fate-matroska-pgs-remux-durations +fate-matroska-pgs-remux-durations: CMD = transcode sup $(TARGET_SAMPLES)/sub/pgs_sub.sup matroska "-copyts -c:s copy -bsf pgs_frame_merge,setts=duration=if(gt(DURATION\,0)\,DURATION\,if(eq(PTS\,NOPTS)\,0\,if(eq(NEXT_PTS\,NOPTS)\,0\,NEXT_PTS-PTS))):pts=PTS" "-copyts -c:s copy" + FATE_MATROSKA_FFPROBE-$(call ALLYES, MATROSKA_DEMUXER) += fate-matroska-spherical-mono fate-matroska-spherical-mono: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream_side_data_list -select_streams v -v 0 $(TARGET_SAMPLES)/mkv/spherical.mkv diff --git a/tests/ref/fate/matroska-pgs-remux b/tests/ref/fate/matroska-pgs-remux new file mode 100644 index 0000000000..4fab0ffdd8 --- /dev/null +++ b/tests/ref/fate/matroska-pgs-remux @@ -0,0 +1,7 @@ +9aa538611b5f3bd0455b2afd3dafe08d *tests/data/fate/matroska-pgs-remux.matroska +49751 tests/data/fate/matroska-pgs-remux.matroska +#tb 0: 1/1000 +#media_type 0: subtitle +#codec_id 0: hdmv_pgs_subtitle +0, 67, 67, 0, 26127, 0x02389441 +0, 401, 401, 0, 23155, 0x1de74712 diff --git a/tests/ref/fate/matroska-pgs-remux-durations b/tests/ref/fate/matroska-pgs-remux-durations new file mode 100644 index 0000000000..ba649d0ddf --- /dev/null +++ b/tests/ref/fate/matroska-pgs-remux-durations @@ -0,0 +1,7 @@ +20fa9d515b08718c42d3e3a8a4a8bf5d *tests/data/fate/matroska-pgs-remux-durations.matroska +49763 tests/data/fate/matroska-pgs-remux-durations.matroska +#tb 0: 1/1000 +#media_type 0: subtitle +#codec_id 0: hdmv_pgs_subtitle +0, 67, 67, 334, 26127, 0x02389441 +0, 401, 401, 0, 23155, 0x1de74712