From patchwork Thu Apr 8 23:29:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 26822 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 D00F644A393 for ; Fri, 9 Apr 2021 02:30:09 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A8F27689972; Fri, 9 Apr 2021 02:30:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR06-VI1-obe.outbound.protection.outlook.com (mail-vi1eur06olkn2019.outbound.protection.outlook.com [40.92.17.19]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 25AAB689972 for ; Fri, 9 Apr 2021 02:30:03 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=j3v5K5TWYoQq07fE1FH0hwosjenJQYU4UppHIUpb9+3Y5oe6Jt+O0k/Pj+NU/PZuQ9flA//FuB3kunzGJUL2vQTcRJC04wLJLfo1j0OVNyKD6cV5K1K43pvHOq5yZbR+ZtqbDz2AtPEiFABWMMDd44/TxCiYmIY2+0iDMl051iIOXFl9/bTH1faPKjkyAR06MM4dZVn2OLHtPEph48J/5JzHDChK5rYFZKBpez3tWMcQuqw7UdcPuGB8ILgWi4lSSh47XkFyGCZ6lgSTNcIeZaLtIAnQrBwtO4ZCRCQ/6TMjLeYOETHQ8mzeex6oYarWJLeXn5cYqbO6ZOupGQIyAQ== 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-SenderADCheck; bh=tu6BjwN3ULxzDIYA4ADjTrIp7n8ZQorTHNj2q2iUxA8=; b=CzRzItQG/dfgOQVj7rnlxE6Ij+w44aFAjMbQ2h2yEXsJV8c7qL0EwRDWK/TYRq/q6FxIe1M5KKmrclkMLEcP/IfRoPupPrdwqOFjJVsAnfNSbyJgdM89R3Q4h7QKVdOkjOrKm3NJWRjoYGabukZLN1C/7FU18GuPNyMRcId/IG7f2G903DVe/PA2JZMq89MvVwAlo48xDiqb6m1kzQip8JNuVHeG5i2M1Hz4Ktblw6hm+GTgGzt2yynL+2WT4H8gcieAosSQHETixVlLWYJVF/k/xASzYfLentzlTBjonq5FG3sguJLqJ4jwyjLQMHXvWZaS89z+Y/tLl4/rYiJvFA== 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=tu6BjwN3ULxzDIYA4ADjTrIp7n8ZQorTHNj2q2iUxA8=; b=TwbnXK2vO0J4hDDEWNVJIO/pP/WZ5EXoxZ9OBJYGLfLMdhWoekzgzzl6Tlxif5/QMCDtny9P5WemOdulxgFopBqPoyEG5d+x8eFcunwfp7hECO5BMzl6ObD9vQY6uEu5Up5KBP4/yfh8qDAMirNcVPEljDxZohZQXAwyFpExHX23CoKVfUZIVYYqhndbtwbcwu4Msy8MqZFdC+K5NmI/ZyiP7EtJHjosxqzt819WwK11uVEVt82mm0C6p3iIRg2pgg2y0wtXKRKWjPxduKxoNdq1WQEO6n2xRCnf7eaET0D3Nzs5DJEnR3QrBsHv6U4/ZeBpuMWweshIwf7iXvBhuw== Received: from DB8EUR06FT015.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc35::4f) by DB8EUR06HT243.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc35::284) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.17; Thu, 8 Apr 2021 23:30:02 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:fc35::4d) by DB8EUR06FT015.mail.protection.outlook.com (2a01:111:e400:fc35::156) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.17 via Frontend Transport; Thu, 8 Apr 2021 23:30:02 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:3791692F448610D4BBE0B17FF314013887DB6D5D2A88931F21C16A5980804AE4; UpperCasedChecksum:15A855F60F7E7652BA9E5678C341489F1F18EADE4C970F948E5E9862A7AA2C66; SizeAsReceived:7560; Count:47 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::8128:5de5:4e94:9a21]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::8128:5de5:4e94:9a21%3]) with mapi id 15.20.4020.018; Thu, 8 Apr 2021 23:29:55 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Apr 2021 01:29:47 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [5S4I48WHYXsJwhMQc6m6F1tW9wmod2W7] X-ClientProxiedBy: AM0PR03CA0056.eurprd03.prod.outlook.com (2603:10a6:208::33) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210408232947.1333713-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.137.96) by AM0PR03CA0056.eurprd03.prod.outlook.com (2603:10a6:208::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.16 via Frontend Transport; Thu, 8 Apr 2021 23:29:55 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 47 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 4e079225-6398-4b3c-6f61-08d8fae6377e X-MS-Exchange-SLBlob-MailProps: +LiGfBxqLEvTZdiKx5OEHV33ImH+9b3M1/DahkVefHk4AifvvUGi7ED89YbmMsrDm+vETaEy74BRMXyJaiI6GH1yGJZ1oVNWwbpHTyFsZ8lReqOhTAa9dUNluzh+wHduKXmrVa3Przg4zWdqaXK+O5MhICY6LpNCaMLz3URv7o9YM7ki54RBJ/2+VPEMunpEs/H0DIqq8/0w4HVs5gu2ylxibcm2YvAfZa4mQlDzO7Hc2juzE5IVr5mp2pDWFYv7iAvIOF3mUufPhkWpnYHlto/vN/UN8sOZ7pO/FjjX6+S4mOtSFKzB5SxiOizF/URryf5lUdBzkKAbQMZL9YT8Vds2AxQ4znUhbI2njFMSsvvh/+Co6i/Z8mjPzkXQ5S0FJkymT4DP3h8qI2KPAyvxQebf1F0jcUjHkhWTREiWTztXdV01KWsc7l9VdmkRCve3/ea2gK2UY3p/gP15IUxFHAbVeEe0LEqTWV3PzQQW2j389Zd7sbREL899llOdbzE5KHOf/tHGIVwTYtu1eA0NGZF12MQZmxmPfj3JIDmaylvHiAyuBZAnENYaVSwWdDlk4HLDvm6p6h0qJECtlgsx4bGxaylby6IG/nfS+gwhumGBiPw1dqV+1rsqUOs1VjxxG/Wm/wTMnQ1LSSSyk/FA5cB0iMGcnSFIO/nnayDtxYwf0mDEIIdxr0yo17uvPkzD3zCElUhzATWtyZh827VIUc/opzyuMi2RFQqbRTBJh0WoZ2RHpSajqEqdCDv+jGQYXJYXwxZq88v+hAdPgwG/q+IsIs3MbKr7 X-MS-TrafficTypeDiagnostic: DB8EUR06HT243: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1brbmY7vLdICLXi7vq6QqLPrPn2j/4Cy6lpgsYSzBtvJ43cJ/HvVjmjxo2I9xt4aRHL81w688VnE6cRkJRKzmn82yEmOT8r6rMZeSG1bukIovbSSrPMjV96y+p5GJ6cTMaoLk2tOTCfyV+CDSdAsG5ee2vo2+3CPHpckYb5nZ2eCTJSEtSrojHz8/g6xhkirCqdcoHsLQIudXQkNGJJanad9buNjdJCqxP7GFnjbDddurhrkalL1KC11PPV+1aP6qRV5tbfTL5LjPSEGgNrQsQ0znMVZK/TONnU+lAqZChVKWshjQaJed1LpyzUYBhD/Q7kjE7OJxB1bWBeS0LTQip/3IVd/tRRPNo/hraMQauaRoiU9wDdtk4VB8Z9g4VyY X-MS-Exchange-AntiSpam-MessageData: LULazPocluZwXjRwbsfS/X3jfUT4GIcEtsVE6P/8KAfYy3dZTF0ufjUzbb9KjYYG6OzDE1xlL6LkjzMat0bYYQsIvmETMrkWyZvhG/fwkVepzfAzGWufvpBkSvxthXwqqHBIlgfWaeB/Vk5TNJB1DA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e079225-6398-4b3c-6f61-08d8fae6377e X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2021 23:29:55.5869 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: DB8EUR06FT015.eop-eur06.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8EUR06HT243 Subject: [FFmpeg-devel] [PATCH 2/2] avformat/matroskaenc: Put subtitles without duration into SimpleBlocks 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The value zero for AVPacket.duration means that the duration is unknown, which in practice means "play this subtitle until overridden by the next subtitle". Yet for Matroska a BlockGroup with duration zero means that the subtitle really has a duration zero. "Display until overridden" is achieved by not setting a duration on the container level at all and this is achieved by using a SimpleBlock or a BlockGroup without duration. This commit implements this. Signed-off-by: Andreas Rheinhardt --- libavformat/matroskaenc.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index a4ddf1fa6a..725e44c962 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -585,7 +585,7 @@ static int mkv_assemble_cues(AVStream **streams, AVIOContext *dyn_cp, put_ebml_uint(cuepoint, MATROSKA_ID_CUETRACK , tracks[idx].track_num); put_ebml_uint(cuepoint, MATROSKA_ID_CUECLUSTERPOSITION , entry->cluster_pos); put_ebml_uint(cuepoint, MATROSKA_ID_CUERELATIVEPOSITION, entry->relative_pos); - if (entry->duration != -1) + if (entry->duration > 0) put_ebml_uint(cuepoint, MATROSKA_ID_CUEDURATION , entry->duration); end_ebml_master(cuepoint, track_positions); } while (++entry < end && entry->pts == pts); @@ -2307,7 +2307,7 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; mkv_track *track = &mkv->tracks[pkt->stream_index]; int keyframe = !!(pkt->flags & AV_PKT_FLAG_KEY); - int duration = pkt->duration; + int64_t duration = pkt->duration; int ret; int64_t ts = track->write_dts ? pkt->dts : pkt->pts; int64_t relative_packet_pos; @@ -2344,14 +2344,17 @@ static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt) relative_packet_pos = avio_tell(pb); - if (par->codec_type != AVMEDIA_TYPE_SUBTITLE) { + if (par->codec_type != AVMEDIA_TYPE_SUBTITLE || + (par->codec_id != AV_CODEC_ID_WEBVTT && duration <= 0)) { ret = mkv_write_block(s, pb, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe); if (ret < 0) return ret; if (keyframe && IS_SEEKABLE(s->pb, mkv) && - (par->codec_type == AVMEDIA_TYPE_VIDEO || !mkv->have_video && !track->has_cue)) { + (par->codec_type == AVMEDIA_TYPE_VIDEO || + par->codec_type == AVMEDIA_TYPE_SUBTITLE || + !mkv->have_video && !track->has_cue)) { ret = mkv_add_cuepoint(mkv, pkt->stream_index, ts, - mkv->cluster_pos, relative_packet_pos, -1); + mkv->cluster_pos, relative_packet_pos, 0); if (ret < 0) return ret; track->has_cue = 1;