From patchwork Fri Sep 15 13:16:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43743 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bca2:b0:149:dfde:5c0a with SMTP id fx34csp309344pzb; Fri, 15 Sep 2023 06:17:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IENt7+6VuBkxyfE0+LCcOVA6nN+FJsZfjRGdES2ubEAHx7mB6yCGuIQTF5igbDoA/QjAFtc X-Received: by 2002:a17:907:75fb:b0:9ad:b046:bc50 with SMTP id jz27-20020a17090775fb00b009adb046bc50mr2226304ejc.10.1694783852118; Fri, 15 Sep 2023 06:17:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694783852; cv=none; d=google.com; s=arc-20160816; b=fq1Ai3BokyBKYYtiBs6PlfH4JX6pReP1FihpQAHAUiVM0hKNvYt0sPReRkx6GMWSXf hTl2+dQOdWKMI13ZDJ8Nb+RCP6E/LqdGMufduD+62Sno/Em3lUX47MCAB5sY8TZCjClR 28tQhb9AqSjk0z+u1BeDsuuUWHxr9/Nvo48uKUumxpI6drjIAq2A0GRWa289g/hzD5U6 JM9ZmnxIRdtdyYoM6bv2WIA2rFYZ/64HRRKzqknuqIVgms7KQRHBGLFJSbuRUawwpUnb 45Xcc5xDFR+J7gqt1uTvhGIPxPvmIY+B+54xU5y+vZs10jYjKBLXTP7vjkANzqjYmv/R VDnA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=b/mUrHuvz//EvNlPq0G6oeTT3IaXJZaFEyccsVAMvbU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=C575fsW/Y/v2+x9UVG6ibo04C+2aj9L/NAa2XmwQCAGotKt6Um6080xm+IKCl0B1Z+ mWEZNOgTCvoME77p5uq44ByxwnaClhTqXf8jgNVL8SRFTAt7FCkPIHH2ci+4dOSu+N0l mT0U9Ty+3bwTk1nayPEUiysAwIvIZSAObQ9rsBMNBPUfHrC+iFQKxDzOLUjpFO2YgE6y PaoH4UkEhzM9bMcB6insfrH/ZIQbifRnZK2FeCtWWQPxy9I+bk79QVcAFrF49DSyJykd rnb5UtpedI7ygkluSNBcVf2qsiSdSPg5UvAZFPEu8trZfCHYXwWDGnZSDeqaAClNHjH5 qPgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=SJRrJdYE; 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 lc20-20020a170906dff400b009a0f9f9d779si3417092ejc.436.2023.09.15.06.17.30; Fri, 15 Sep 2023 06: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=20230601 header.b=SJRrJdYE; 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 02B2368C77C; Fri, 15 Sep 2023 16:17:19 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7661968C69F for ; Fri, 15 Sep 2023 16:17:11 +0300 (EEST) Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-2be5e2a3c86so38782891fa.0 for ; Fri, 15 Sep 2023 06:17:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694783830; x=1695388630; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=fejj0JwkiKSgCPo9ki2iTaLGNGfrgkA8OSKVFAXbYW4=; b=SJRrJdYEIiUGdKZGllzxlGXFSAMve2WkyGcJC71pf6kzS9zjvmZ4iPzas7/wUJn7pK GOiDzGJ+i/oqPNB2EkdRba5MwC39G46utCpgjUEaIzdWcYfgiisz/nHXOG9Rde6uT5Ik MWgLmJa3PKXI2ROzj7nCwW79P1NhaYY1ySlnhEQKi+a/LQLwyjbxS4U8WhGwRt7NbRzo xXT03S2brJom2F5QLjgozQ7mgyUv7ovjthm8c1GjJfKDVJ9BcR3Ddf7pGo+lZQ/2M7jV Kwb+JBsd7DiSpkN2BcFFEqssWaMSK1VFFz+wpzNmMaGu1/WVUCaKvMlGBp2F2tIpNQGA JAeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694783830; x=1695388630; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fejj0JwkiKSgCPo9ki2iTaLGNGfrgkA8OSKVFAXbYW4=; b=b58OY4+CWPQlgAj3DBCAq42o7kQaeED4OBrqnLNNy/tvc2GYmFeFcCfsH3tNgzxFG8 qGEaf+/H3m1OeJFnaFoHlyZtw62cT2Y13nDYvKWazft+eOcLCF+/7D6YW5+TCxaqWf4W q97NQaZgaUWMXTmNeiT0dp0bcyuy2Kjo1JZYPMlKfDD7TT0XT49alsHEgFaFCmxfIo0h OkGiDIXDWUPWCyvR9vJ1uMyd8mjYwFcM65XpLMwYkRiIXWGTGAlzQYxedBwr90WjucQH zQJgyRDvaUSO5Vn2ijmqiDIZHZzUfl99rsCSt81Y7uVA3/Ifo7TuKv3xs3lrqgjMb6wL AfLg== X-Gm-Message-State: AOJu0YzNG3Obf6rcEZ9q8HehgPy/3nL8bQsuWliDTpUy8Qnhgt0FHbYY UGFWIDVV8U2w70KkyJ3JDG6UIdgYfPs= X-Received: by 2002:a2e:b5a4:0:b0:2bc:cee7:7a1d with SMTP id f4-20020a2eb5a4000000b002bccee77a1dmr1665960ljn.23.1694783830472; Fri, 15 Sep 2023 06:17:10 -0700 (PDT) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id k22-20020a2e8896000000b002b9ccbe074bsm715869lji.73.2023.09.15.06.17.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Sep 2023 06:17:10 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Sep 2023 16:16:58 +0300 Message-ID: <20230915131704.45235-2-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230915131704.45235-1-jeebjp@gmail.com> References: <20230915131704.45235-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/3] tests/fate-run: add support for specifying the final encode muxer in `transcode` 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: EgCCEFchSSJI From: Jan Ekström This allows for direct dumping of the packets' contents (useful for text based formats), while getting the timestamps/sizes etc from ffprobe. If used via TRANSCODE, the actually utilized muxer should be added within the last argument as an additional dependency, as that is not done automatically. Signed-off-by: Jan Ekström --- tests/fate-run.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/fate-run.sh b/tests/fate-run.sh index 743d9b3620..9ef1d9b23a 100755 --- a/tests/fate-run.sh +++ b/tests/fate-run.sh @@ -257,7 +257,9 @@ transcode(){ additional_input=$7 final_decode=$8 enc_opt_in=$9 + final_encode_muxer="${10}" test -z "$additional_input" || additional_input="$DEC_OPTS $additional_input" + test -z "$final_encode_muxer" && final_encode_muxer="framecrc" encfile="${outdir}/${test}.${enc_fmt}" test $keep -ge 1 || cleanfiles="$cleanfiles $encfile" tsrcfile=$(target_path $srcfile) @@ -267,7 +269,7 @@ transcode(){ do_md5sum $encfile echo $(wc -c $encfile) ffmpeg $DEC_OPTS $final_decode -i $tencfile $ENC_OPTS $FLAGS $final_encode \ - -f framecrc - || return + -f $final_encode_muxer - || return test -z $ffprobe_opts || \ run ffprobe${PROGSUF}${EXECSUF} -bitexact $ffprobe_opts $tencfile || return } From patchwork Fri Sep 15 13:16:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43748 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bca2:b0:149:dfde:5c0a with SMTP id fx34csp309419pzb; Fri, 15 Sep 2023 06:17:39 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGBOLWKVc5R+tj2nKGl7gNGFHbWuYW5kuAFsFtR0VVZ0YLeDqxTSd1EocXjmFBiy+RF/wxO X-Received: by 2002:a17:906:32cc:b0:9a1:c495:66bb with SMTP id k12-20020a17090632cc00b009a1c49566bbmr1584550ejk.60.1694783859337; Fri, 15 Sep 2023 06:17:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694783859; cv=none; d=google.com; s=arc-20160816; b=gurspfhQDn9rLFTYsSvUVY2c6RWcmsNjUgBEUNTg578pw0DzV2mUO03OcsSzfw1d+o hDZq72db/2ssslPvAbFvmTBRy582t39vn2cH7TXoV/X19uSQ6nNVGZCShMUaggkgh2Ut 4hmLiGYeHGLmuyJsW1HSrUUymP346xC5vvW1k+GWnd16o7iS4yZq0PrT+lwGSOvq05lj 7Nlmj5VrvN5BhT754h3gv5d8Jo/YCqNkjgoCmw9JkVrMjML4VEF8/dB/+ghEsJMU0fei egJETqh7lSEPGxj3r7Z7KPrQNSDVxWbDhncvMF2fYXSEtEFJ7Ic73mb9Y0gPNCnMuK+d aafg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=0/1KoOoYQ7ElnNuNdNXcr/Xe2VEL9YjegcfOrOvfPis=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=OaphBRLapMxcf63z/RNhywJfA/+e8mGd6qY91f7JvMTHnoVB9ABJVRsamLsNqfbTm0 r8vrLOOEeoSHanaWK+Qgh1+ncUqM8nXAZoJmxKJ95EzXuL9hLmfDW9tnp8QY3+UXumSm 9JA4xvSp3+no5/q0xIIYW7MYib5jIj1fdUxDpvXSPPLjU3jXB32vKQ7wvRfHx3n2ljD3 Rv+eOut/kNhN7OsyNUxyx0qVlxy2uQQnqMCuuQ6ZOYiFGI2vJZkvTw3uVJQj7Dq0EMva AqvTnzc75ncKqDkOCng2cJJ+EO0SoX+OTHDAQfVVAYCTcTZkbVgyF++8v3nWcULJesIr 46Xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=lpQp5afG; 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 mh11-20020a170906eb8b00b009ad8acac02fsi3295949ejb.29.2023.09.15.06.17.38; Fri, 15 Sep 2023 06:17:39 -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=20230601 header.b=lpQp5afG; 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 4AD4A68C7F4; Fri, 15 Sep 2023 16:17:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ED8D168C69F for ; Fri, 15 Sep 2023 16:17:11 +0300 (EEST) Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2bceca8a41aso34573021fa.0 for ; Fri, 15 Sep 2023 06:17:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694783831; x=1695388631; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=6UtUbfR8NOudEMi6YQH1T87lzTkrjbC96kzPEb9OwEE=; b=lpQp5afGF6Evk/zdhXq8Os5hfLGCxd3nCh0/6eyqb0xyCCJ3+RA4g40ysf8NxiyJ9C TCIgA5CgK8Vif8xoZkINbaK0GrFNqswBMdZE9NGv7fEYvSQbWmN5il8jl/vhslg4UoqR Vl8b0egpstt3eoN++QpEvpmDaIbY1PT+edVxFTpLCFl4j8wtRi96jnve2c7OcqHqgjHS dN2zVlQN97oTeJC/37LwoGBzKOgpSC42NYaOdPsRwQb53ndwN65R9u7eeJz/H0cv08SF fMeq6MLs9kw9c0VQVbbpVY3qEfLPPmnXAh38vzis/xCR+O683fRzhnKVlDoAdXAoHeCE G2lQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694783831; x=1695388631; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6UtUbfR8NOudEMi6YQH1T87lzTkrjbC96kzPEb9OwEE=; b=kkwYTAX8UZm0GckLrEpHIx7bXbW+21L4tEXYsRIG/lH3K1/VK9mb00UuNlHGGWoKnO GYEpreCi8b6+MGHG8WUntEx8H/YpmWocSRR4zFdL5wq3VcCB1wGR48xC42Ps9Yl6b4yL HvsS+leZAK0RqqbyBDMkilZKWJviWf7SPHhmCovLys9s3P5j7YTzDMXJ3l+45tcABNsd 4+7IZxOHW3wNsEYBu4pivlSyWFdJnAbItNMSPyBB5lxWS3ultW14gRJHw+fdO+NmuU1y pG9fQSzHS2SY6Gj5mu+otjm1F43B77dDLov7mDMwDFeWjtC0fP7zLTles3BDLtJvsduL B5wQ== X-Gm-Message-State: AOJu0YzUBngxf61FHZrwsn3Oz2ay/GA/MIwikab7kf59Mnce82eTtyZl eZIyuq3eM+1dtlv2vNgXOAHDTP9TEnw= X-Received: by 2002:a2e:a0cb:0:b0:2bc:b6b0:1c4d with SMTP id f11-20020a2ea0cb000000b002bcb6b01c4dmr1528182ljm.10.1694783830909; Fri, 15 Sep 2023 06:17:10 -0700 (PDT) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id k22-20020a2e8896000000b002b9ccbe074bsm715869lji.73.2023.09.15.06.17.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Sep 2023 06:17:10 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Sep 2023 16:16:59 +0300 Message-ID: <20230915131704.45235-3-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230915131704.45235-1-jeebjp@gmail.com> References: <20230915131704.45235-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/3] avcodec/avpacket: add functionality to prepend to AVPacketLists 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: zeT2ZKiUNPFv From: Jan Ekström Signed-off-by: Jan Ekström --- libavcodec/avpacket.c | 20 +++++++++++++++----- libavcodec/packet_internal.h | 2 ++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 9ec1feb068..21e80416de 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -540,6 +540,7 @@ int avpriv_packet_list_put(PacketList *packet_buffer, int flags) { PacketListEntry *pktl = av_malloc(sizeof(*pktl)); + unsigned int update_end_point = 1; int ret; if (!pktl) @@ -563,13 +564,22 @@ int avpriv_packet_list_put(PacketList *packet_buffer, pktl->next = NULL; - if (packet_buffer->head) - packet_buffer->tail->next = pktl; - else + if (packet_buffer->head) { + if (flags & FF_PACKETLIST_FLAG_PREPEND) { + pktl->next = packet_buffer->head; + packet_buffer->head = pktl; + update_end_point = 0; + } else { + packet_buffer->tail->next = pktl; + } + } else packet_buffer->head = pktl; - /* Add the packet in the buffered packet list. */ - packet_buffer->tail = pktl; + if (update_end_point) { + /* Add the packet in the buffered packet list. */ + packet_buffer->tail = pktl; + } + return 0; } diff --git a/libavcodec/packet_internal.h b/libavcodec/packet_internal.h index 52fa6d9be9..9c0f4fead5 100644 --- a/libavcodec/packet_internal.h +++ b/libavcodec/packet_internal.h @@ -34,6 +34,8 @@ typedef struct PacketList { PacketListEntry *head, *tail; } PacketList; +#define FF_PACKETLIST_FLAG_PREPEND (1 << 0) /**< Prepend created AVPacketList instead of appending */ + /** * Append an AVPacket to the list. * From patchwork Fri Sep 15 13:17:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 43749 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:bca2:b0:149:dfde:5c0a with SMTP id fx34csp309580pzb; Fri, 15 Sep 2023 06:17:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF8bBuYsO/3LkahrGrsUYCjffB4LQfvbVtJIa7JlXsukgP5sJOgeJ2KmmaI94p8XKEPfMmn X-Received: by 2002:adf:f4c4:0:b0:317:58e4:e941 with SMTP id h4-20020adff4c4000000b0031758e4e941mr1424515wrp.33.1694783871500; Fri, 15 Sep 2023 06:17:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694783871; cv=none; d=google.com; s=arc-20160816; b=V6ai+ZyD9J7S7t59h7fYI/1qEdy2VeEw3xRKrpOuBBDh40wv9SfCvuFBCKG/3gDELx V4MWhxBJQw0dPLjW+b5AR0CS+efYbJB2gGHqYUF85BHuQDXSKqoFs3LivJD2g5+EPsv4 Fn6CHYdeGidsDKuVH06qGdM9oDgjZ7uR8aIppXxVq8rcg52yetaKdGws5XIqbnmevlmh s2FYAOlOzDHlftxirmJ545zz30cDGDHYiUcLBSsZ6EiMQVSb1EigB4QHw1IDfjbX8cRL wmEPKEULtT0YXuBf9DQPLxkdd1x0vJJ0VxCazr7K2YgGe1RRpbpV5o96jRY5VXPTsD4A dlsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=4rl55+jXcd8dnW48nkxoEpe5ui83Dn5VDCkYIUHFPrI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Ldakfo53BKrRffZapqslzvib5CIgmWB2RYxewZDXlDg+7xSA6FwjEk+gnMHq3oK196 LhChTgHuzG+jf+zPZcE2KiTG4kM+YRSs3rq38G0Zh5wquAaMEbLRrectfrQ8My5t89bz aZ5W17ob6vndVdVw5pbaLEsJdOCA/FH46kgqa4ZgQ4XGZbrYcvjP9aNFLdVcv88j71MP BunowK8XVFZYVxFluLQ+FXnq5WPJMoDotNkU83JqZqPwWBfRjugWuj/jplmrP8Ws22J6 2AhRVt7mmFHKNsVwEhNoApQ1yjJpBin+XlSYe/lCD2CF1gyNI6TRolYQH7DrWfwnQ+bb Nc3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=WtFvkLva; 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 u5-20020aa7d985000000b0052db7745cbbsi3226085eds.214.2023.09.15.06.17.49; Fri, 15 Sep 2023 06:17:51 -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=20230601 header.b=WtFvkLva; 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 85A8D68C82C; Fri, 15 Sep 2023 16:17:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0361568C7B8 for ; Fri, 15 Sep 2023 16:17:12 +0300 (EEST) Received: by mail-lj1-f175.google.com with SMTP id 38308e7fff4ca-2bcde83ce9fso33834811fa.1 for ; Fri, 15 Sep 2023 06:17:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694783832; x=1695388632; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Jf3oWENpX9yKJcVXqz6ETE9WcLlu9c9XG229R0yQND8=; b=WtFvkLvaY0ojpWMpSrsxLL0T0IJubI8o4YhpL1OnzJ6rk7N6PAonTMM1hbYXJEU9hT T6UDIduyxGU95EClHadJWnzPr/hzA46BkLNcecFgmjQWXXhEvtT/yEJTTKh5tp9fk27n 4c1oX8vATdgNJtEWpN1/JvOS7loq1S0PWCay7sh/Fek28GE8A6virZkrd/28UXwfN9Km 5iMCHgr3vx4wXLeAczJukDN4XRagxRlx2DFoZ66QGAgSQ4mnoZa5xU9sKDfX3C4CRbmm +6bUb1Tf7th1hKijYnpSSdggu0bWYONZEiYEEA8meq3Rl7wlw4MUy0KrdFqQpbm/WyCV bm3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694783832; x=1695388632; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Jf3oWENpX9yKJcVXqz6ETE9WcLlu9c9XG229R0yQND8=; b=DGI9WSKYO6ww8vLNbCdMZdQv5cObkzvp9fs3uhiDmjCiLG3dGnYbgqM+/N2uriQODZ J/2Gp0yvTJ0b5VV2DF05AUY8DKAlRrMBmgAPxsF9kPL8RFHwqUn7wg1BRbINV3Ws4Nf5 /NSvW1pWp31x+797BK2SB9+o2wWG75tkORqwHDIEHRpIE8lycK71jo/VQYaDO+SSgB98 T0bXb0DCkrTsEJoVky0pVcg/7+VJGpu2Dxe82crDHN3HHjOJWg8KfR6rAzxW1s7iW7En BPTmpkGZVkF6yyZUNkod4h/11gx2cGlMTf6tQA6nJ855mTbnubA7AMedVdAIUwuFCDEY UOXQ== X-Gm-Message-State: AOJu0Yzr53DvSy8KWpXHt42Sfj4p262FdkasmKnxbBxIVRVAXVFWlySL 9zqKAuse9aLrgXYxDzrx5LUaJTXN2gk= X-Received: by 2002:a2e:92d0:0:b0:2b5:80e0:f18e with SMTP id k16-20020a2e92d0000000b002b580e0f18emr1566898ljh.3.1694783831524; Fri, 15 Sep 2023 06:17:11 -0700 (PDT) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id k22-20020a2e8896000000b002b9ccbe074bsm715869lji.73.2023.09.15.06.17.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Sep 2023 06:17:11 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 15 Sep 2023 16:17:00 +0300 Message-ID: <20230915131704.45235-4-jeebjp@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230915131704.45235-1-jeebjp@gmail.com> References: <20230915131704.45235-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/3] avformat/movenc: add support for fragmented TTML muxing 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: e13/oPqX7cqf From: Jan Ekström Attempts to base the fragmentation timing on other streams as most receivers expect media fragments to be more or less aligned. Currently does not support fragmentation on subtitle track only, as the subtitle packet queue timings would have to be checked in addition to the current fragmentation timing logic. Signed-off-by: Jan Ekström --- libavformat/movenc.c | 9 - libavformat/movenc_ttml.c | 157 ++- tests/fate/mov.mak | 21 + tests/ref/fate/mov-mp4-fragmented-ttml-dfxp | 1197 +++++++++++++++++++ tests/ref/fate/mov-mp4-fragmented-ttml-stpp | 1197 +++++++++++++++++++ 5 files changed, 2568 insertions(+), 13 deletions(-) create mode 100644 tests/ref/fate/mov-mp4-fragmented-ttml-dfxp create mode 100644 tests/ref/fate/mov-mp4-fragmented-ttml-stpp diff --git a/libavformat/movenc.c b/libavformat/movenc.c index ab92263cd7..aac9a588dd 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -7312,15 +7312,6 @@ static int mov_init(AVFormatContext *s) track->squash_fragment_samples_to_one = ff_is_ttml_stream_paragraph_based(track->par); - if (mov->flags & FF_MOV_FLAG_FRAGMENT && - track->squash_fragment_samples_to_one) { - av_log(s, AV_LOG_ERROR, - "Fragmentation is not currently supported for " - "TTML in MP4/ISMV (track synchronization between " - "subtitles and other media is not yet implemented)!\n"); - return AVERROR_PATCHWELCOME; - } - if (track->mode != MODE_ISM && track->par->codec_tag == MOV_ISMV_TTML_TAG && s->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL) { diff --git a/libavformat/movenc_ttml.c b/libavformat/movenc_ttml.c index 6deae49657..2aefb0b6c3 100644 --- a/libavformat/movenc_ttml.c +++ b/libavformat/movenc_ttml.c @@ -54,6 +54,50 @@ static int mov_init_ttml_writer(MOVTrack *track, AVFormatContext **out_ctx) return 0; } +static void mov_calculate_start_and_end_of_other_tracks( + AVFormatContext *s, MOVTrack *track, int64_t *start_pts, int64_t *end_pts) +{ + MOVMuxContext *mov = s->priv_data; + + // Initialize at the end of the previous document/fragment, which is NOPTS + // until the first fragment is created. + int64_t max_track_end_dts = *start_pts = track->end_pts; + + for (unsigned int i = 0; i < s->nb_streams; i++) { + MOVTrack *other_track = &mov->tracks[i]; + + // Skip our own track, any other track that needs squashing, + // or any track which still has its start_dts at NOPTS or + // any track that did not yet get any packets. + if (track == other_track || + other_track->squash_fragment_samples_to_one || + other_track->start_dts == AV_NOPTS_VALUE || + !other_track->entry) { + continue; + } + + { + int64_t picked_start = av_rescale_q_rnd(other_track->cluster[0].dts + other_track->cluster[0].cts, + other_track->st->time_base, + track->st->time_base, + AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX); + int64_t picked_end = av_rescale_q_rnd(other_track->end_pts, + other_track->st->time_base, + track->st->time_base, + AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX); + + if (*start_pts == AV_NOPTS_VALUE) + *start_pts = picked_start; + else if (picked_start >= track->end_pts) + *start_pts = FFMIN(*start_pts, picked_start); + + max_track_end_dts = FFMAX(max_track_end_dts, picked_end); + } + } + + *end_pts = max_track_end_dts; +} + static int mov_write_ttml_document_from_queue(AVFormatContext *s, AVFormatContext *ttml_ctx, MOVTrack *track, @@ -65,13 +109,85 @@ static int mov_write_ttml_document_from_queue(AVFormatContext *s, int64_t start_ts = track->start_dts == AV_NOPTS_VALUE ? 0 : (track->start_dts + track->track_duration); int64_t end_ts = start_ts; + unsigned int time_limited = 0; + PacketList back_to_queue_list = { 0 }; + + if (*out_start_ts != AV_NOPTS_VALUE) { + // we have non-nopts values here, thus we have been given a time range + time_limited = 1; + start_ts = *out_start_ts; + end_ts = *out_start_ts + *out_duration; + } if ((ret = avformat_write_header(ttml_ctx, NULL)) < 0) { return ret; } while (!avpriv_packet_list_get(&track->squashed_packet_queue, pkt)) { - end_ts = FFMAX(end_ts, pkt->pts + pkt->duration); + int64_t pts_before = pkt->pts; + int64_t duration_before = pkt->duration; + + if (time_limited) { + // special cases first: + if (pkt->pts + pkt->duration < start_ts) { + // too late for our fragment, unfortunately + // unref and proceed to next packet in queue. + av_log(s, AV_LOG_WARNING, + "Very late TTML packet in queue, dropping packet with " + "pts: %"PRId64", duration: %"PRId64"\n", + pkt->pts, pkt->duration); + av_packet_unref(pkt); + continue; + } else if (pkt->pts >= end_ts) { + // starts after this fragment, put back to original queue + ret = avpriv_packet_list_put(&track->squashed_packet_queue, + pkt, av_packet_ref, + FF_PACKETLIST_FLAG_PREPEND); + if (ret < 0) + goto cleanup; + + break; + } + + // limit packet pts to start_ts + if (pkt->pts < start_ts) { + pkt->duration -= start_ts - pkt->pts; + pkt->pts = start_ts; + } + + if (pkt->pts + pkt->duration > end_ts) { + // goes over our current fragment, create duplicate and + // put it back to list after iteration has finished in + // order to handle multiple subtitles at the same time. + int64_t offset = end_ts - pkt->pts; + + ret = avpriv_packet_list_put(&back_to_queue_list, + pkt, av_packet_ref, + FF_PACKETLIST_FLAG_PREPEND); + if (ret < 0) + goto cleanup; + + back_to_queue_list.head->pkt.pts = + back_to_queue_list.head->pkt.dts = + back_to_queue_list.head->pkt.pts + offset; + back_to_queue_list.head->pkt.duration -= offset; + + // and for our normal packet we just set duration to offset + pkt->duration = offset; + } + } else { + end_ts = FFMAX(end_ts, pkt->pts + pkt->duration); + } + + av_log(s, AV_LOG_TRACE, + "TTML packet writeout: pts: %"PRId64" (%"PRId64"), " + "duration: %"PRId64"\n", + pkt->pts, pkt->pts - start_ts, pkt->duration); + if (pkt->pts != pts_before || pkt->duration != duration_before) { + av_log(s, AV_LOG_TRACE, + "Adjustments: pts: %"PRId64", duration: %"PRId64"\n", + pkt->pts - pts_before, pkt->duration - duration_before); + } // in case of the 'dfxp' muxing mode, each written document is offset // to its containing sample's beginning. @@ -100,15 +216,30 @@ static int mov_write_ttml_document_from_queue(AVFormatContext *s, ret = 0; cleanup: + while (!avpriv_packet_list_get(&back_to_queue_list, pkt)) { + ret = avpriv_packet_list_put(&track->squashed_packet_queue, + pkt, av_packet_ref, + FF_PACKETLIST_FLAG_PREPEND); + + // unrelated to whether we succeed or not, we unref the packet + // received from the temporary list. + av_packet_unref(pkt); + + if (ret < 0) { + avpriv_packet_list_free(&back_to_queue_list); + break; + } + } return ret; } int ff_mov_generate_squashed_ttml_packet(AVFormatContext *s, MOVTrack *track, AVPacket *pkt) { + MOVMuxContext *mov = s->priv_data; AVFormatContext *ttml_ctx = NULL; // values for the generated AVPacket - int64_t start_ts = 0; + int64_t start_ts = AV_NOPTS_VALUE; int64_t duration = 0; int ret = AVERROR_BUG; @@ -119,12 +250,30 @@ int ff_mov_generate_squashed_ttml_packet(AVFormatContext *s, goto cleanup; } + if (mov->flags & FF_MOV_FLAG_FRAGMENT) { + int64_t calculated_start = AV_NOPTS_VALUE; + int64_t calculated_end = AV_NOPTS_VALUE; + + mov_calculate_start_and_end_of_other_tracks(s, track, &calculated_start, &calculated_end); + + if (calculated_start != AV_NOPTS_VALUE) { + start_ts = calculated_start; + duration = calculated_end - calculated_start; + av_log(s, AV_LOG_VERBOSE, + "Calculated subtitle fragment start: %"PRId64", " + "duration: %"PRId64"\n", + start_ts, duration); + } + } + if (!track->squashed_packet_queue.head) { // empty queue, write minimal empty document with zero duration avio_write(ttml_ctx->pb, empty_ttml_document, sizeof(empty_ttml_document) - 1); - start_ts = 0; - duration = 0; + if (start_ts == AV_NOPTS_VALUE) { + start_ts = 0; + duration = 0; + } goto generate_packet; } diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak index 6cb493ceab..5c44299196 100644 --- a/tests/fate/mov.mak +++ b/tests/fate/mov.mak @@ -143,6 +143,27 @@ FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, TTML SUBRIP, MP4 MOV, SRT_DEMUXER TTML fate-mov-mp4-ttml-stpp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 "-map 0:s -c:s ttml -time_base:s 1:1000" "-map 0 -c copy" "-of json -show_entries packet:stream=index,codec_type,codec_tag_string,codec_tag,codec_name,time_base,start_time,duration_ts,duration,nb_frames,nb_read_packets:stream_tags" fate-mov-mp4-ttml-dfxp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 "-map 0:s -c:s ttml -time_base:s 1:1000 -tag:s dfxp -strict unofficial" "-map 0 -c copy" "-of json -show_entries packet:stream=index,codec_type,codec_tag_string,codec_tag,codec_name,time_base,start_time,duration_ts,duration,nb_frames,nb_read_packets:stream_tags" +FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, TTML SUBRIP, MP4 MOV, LAVFI_INDEV SMPTEHDBARS_FILTER SRT_DEMUXER MPEG2VIDEO_ENCODER TTML_MUXER RAWVIDEO_MUXER) += fate-mov-mp4-fragmented-ttml-stpp +fate-mov-mp4-fragmented-ttml-stpp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt mp4 \ + "-map 1:v -map 0:s \ + -c:v mpeg2video -b:v 2M -g 48 -sc_threshold 1000000000 \ + -c:s ttml -time_base:s 1:1000 \ + -movflags +cmaf" \ + "-map 0:s -c copy" \ + "-select_streams s -of csv -show_packets -show_data_hash crc32" \ + "-f lavfi -i smptehdbars=duration=70:size=320x180:rate=24000/1001,format=yuv420p" \ + "" "" "rawvideo" + +FATE_MOV_FFMPEG_FFPROBE-$(call TRANSCODE, TTML SUBRIP, ISMV MOV, LAVFI_INDEV SMPTEHDBARS_FILTER SRT_DEMUXER MPEG2VIDEO_ENCODER TTML_MUXER RAWVIDEO_MUXER) += fate-mov-mp4-fragmented-ttml-dfxp +fate-mov-mp4-fragmented-ttml-dfxp: CMD = transcode srt $(TARGET_SAMPLES)/sub/SubRip_capability_tester.srt ismv \ + "-map 1:v -map 0:s \ + -c:v mpeg2video -b:v 2M -g 48 -sc_threshold 1000000000 \ + -c:s ttml -tag:s dfxp -time_base:s 1:1000" \ + "-map 0:s -c copy" \ + "-select_streams s -of csv -show_packets -show_data_hash crc32" \ + "-f lavfi -i smptehdbars=duration=70:size=320x180:rate=24000/1001,format=yuv420p" \ + "" "" "rawvideo" + # FIXME: Uncomment these two tests once the test files are uploaded to the fate # server. # avif demuxing - still image with 1 item. diff --git a/tests/ref/fate/mov-mp4-fragmented-ttml-dfxp b/tests/ref/fate/mov-mp4-fragmented-ttml-dfxp new file mode 100644 index 0000000000..45da22814a --- /dev/null +++ b/tests/ref/fate/mov-mp4-fragmented-ttml-dfxp @@ -0,0 +1,1197 @@ +14998bfa7c79edf90c4280cd957bf47e *tests/data/fate/mov-mp4-fragmented-ttml-dfxp.ismv +518859 tests/data/fate/mov-mp4-fragmented-ttml-dfxp.ismv + + + + + + + + +
+

Don't show this text it may be used to insert hidden data

+

SubRip subtitles capability tester 1.3o by ale5000
Use VLC 1.1 or higher as reference for most things and MPC Home Cinema for others
This text should be blue
This text should be red
This text should be black
If you see this with the normal font, the player don't (fully) support font face

+
+ +
+ + + + + + + + +
+

SubRip subtitles capability tester 1.3o by ale5000
Use VLC 1.1 or higher as reference for most things and MPC Home Cinema for others
This text should be blue
This text should be red
This text should be black
If you see this with the normal font, the player don't (fully) support font face

+
+ +
+ + + + + + + + +
+

SubRip subtitles capability tester 1.3o by ale5000
Use VLC 1.1 or higher as reference for most things and MPC Home Cinema for others
This text should be blue
This text should be red
This text should be black
If you see this with the normal font, the player don't (fully) support font face

+

Hidden

+

This text should be small
This text should be normal
This text should be big

+
+ +
+ + + + + + + + +
+

This text should be small
This text should be normal
This text should be big

+

This should be an E with an accent: È
日本語
This text should be bold, italics and underline
This text should be small and green
This text should be small and red
This text should be big and brown

+
+ +
+ + + + + + + + +
+

This should be an E with an accent: È
日本語
This text should be bold, italics and underline
This text should be small and green
This text should be small and red
This text should be big and brown

+
+ +
+ + + + + + + + +
+

This should be an E with an accent: È
日本語
This text should be bold, italics and underline
This text should be small and green
This text should be small and red
This text should be big and brown

+

This line should be bold
This line should be italics
This line should be underline
This line should be strikethrough
Both lines
should be underline

+
+ +
+ + + + + + + + +
+

This line should be bold
This line should be italics
This line should be underline
This line should be strikethrough
Both lines
should be underline

+
+ +
+ + + + + + + + +
+

This line should be bold
This line should be italics
This line should be underline
This line should be strikethrough
Both lines
should be underline

+

>
It would be a good thing to
hide invalid html tags that are closed and show the text in them
but show un-closed invalid html tags
Show not opened tags
<

+
+ +
+ + + + + + + + +
+

>
It would be a good thing to
hide invalid html tags that are closed and show the text in them
but show un-closed invalid html tags
Show not opened tags
<

+

and also
hide invalid html tags with parameters that are closed and show the text in them
but show un-closed invalid html tags
This text should be showed underlined without problems also: 2<3,5>1,4<6
This shouldn't be underlined

+
+ +
+ + + + + + + + +
+

and also
hide invalid html tags with parameters that are closed and show the text in them
but show un-closed invalid html tags
This text should be showed underlined without problems also: 2<3,5>1,4<6
This shouldn't be underlined

+
+ +
+ + + + + + + + +
+

and also
hide invalid html tags with parameters that are closed and show the text in them
but show un-closed invalid html tags
This text should be showed underlined without problems also: 2<3,5>1,4<6
This shouldn't be underlined

+

This text should be in the normal position...

+

This text should NOT be in the normal position

+
+ +
+ + + + + + + + +
+

This text should NOT be in the normal position

+

Implementation is the same of the ASS tag
This text should be at the
top and horizontally centered

+

This text should be at the
middle and horizontally centered

+

This text should be at the
bottom and horizontally centered

+
+ +
+ + + + + + + + +
+

Implementation is the same of the ASS tag
This text should be at the
top and horizontally centered

+

This text should be at the
middle and horizontally centered

+

This text should be at the
bottom and horizontally centered

+

This text should be at the
top and horizontally at the left

+

This text should be at the
middle and horizontally at the left
(The second position must be ignored)

+

This text should be at the
bottom and horizontally at the left

+
+ +
+ + + + + + + + +
+

This text should be at the
top and horizontally at the left

+

This text should be at the
middle and horizontally at the left
(The second position must be ignored)

+

This text should be at the
bottom and horizontally at the left

+

This text should be at the
top and horizontally at the right

+

This text should be at the
middle and horizontally at the right

+

This text should be at the
bottom and horizontally at the right

+
+ +
+ + + + + + + + +
+

This text should be at the
top and horizontally at the right

+

This text should be at the
middle and horizontally at the right

+

This text should be at the
bottom and horizontally at the right

+

This could be the most difficult thing to implement

+
+ +
+ + + + + + + + +
+

This could be the most difficult thing to implement

+

First text

+
+ +
+ + + + + + + + +
+

First text

+

Second, it shouldn't overlap first

+
+ +
+ + + + + + + + +
+

First text

+

Second, it shouldn't overlap first

+

Third, it should replace second

+
+ +
+ + + + + + + + +
+

First text

+

Third, it should replace second

+

Fourth, it shouldn't overlap first and third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Fifth, it should replace third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Fifth, it should replace third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Fifth, it should replace third

+

Sixth, it shouldn't be
showed overlapped

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Sixth, it shouldn't be
showed overlapped

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Sixth, it shouldn't be
showed overlapped

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Sixth, it shouldn't be
showed overlapped

+

TEXT 1 (bottom)

+

text 2

+
+ +
+ + + + + + + + +
+

TEXT 1 (bottom)

+

text 2

+

Hide these tags:
also hide these tags:
but show this: {normal text}

+
+ +
+ + + + + + + + +
+

Hide these tags:
also hide these tags:
but show this: {normal text}

+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+


\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)

+
+ +
+ + + + + + + + +
+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+


\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)

+

\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
Show this: \TEST and this: \-)

+
+ +
+ + + + + + + + +
+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+

\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
Show this: \TEST and this: \-)

+


A letter followed by 05 hard spaces: A\h\h\h\h\h
A letter followed by normal spaces: A
A letter followed by no hard spaces: A
05 hard spaces between letters: A\h\h\h\h\hA
5 normal spaces between letters: A A

^--Forced line break

+
+ +
+ + + + + + + + +
+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+


A letter followed by 05 hard spaces: A\h\h\h\h\h
A letter followed by normal spaces: A
A letter followed by no hard spaces: A
05 hard spaces between letters: A\h\h\h\h\hA
5 normal spaces between letters: A A

^--Forced line break

+

Both line should be strikethrough,
yes.
Correctly closed tags
should be hidden.

+
+ +
+ + + + + + + + +
+

Both line should be strikethrough,
yes.
Correctly closed tags
should be hidden.

+

It shouldn't be strikethrough,
not opened tag showed as text.
Not opened tag showed as text.

+
+ +
+ + + + + + + + +
+

It shouldn't be strikethrough,
not opened tag showed as text.
Not opened tag showed as text.

+

Three lines should be strikethrough,
yes.
Not closed tags showed as text

+
+ +
+ + + + + + + + +
+

Three lines should be strikethrough,
yes.
Not closed tags showed as text

+

Both line should be strikethrough but
the wrong closing tag should be showed

+
+ +
+ + + + + + + + +
+

Both line should be strikethrough but
the wrong closing tag should be showed

+
+ +
+packet,subtitle,1,0,0.000000,0,0.000000,N/A,N/A,1172,14746,K__,CRC32:bde7afa1 +packet,subtitle,1,20020000,2.002000,20020000,2.002000,N/A,N/A,1015,29540,K__,CRC32:c1cb78f2 +packet,subtitle,1,40040000,4.004000,40040000,4.004000,N/A,N/A,1305,44177,K__,CRC32:267b17fe +packet,subtitle,1,60060000,6.006000,60060000,6.006000,N/A,N/A,1111,59104,K__,CRC32:d6aaf284 +packet,subtitle,1,80080000,8.008000,80080000,8.008000,N/A,N/A,927,73837,K__,CRC32:0ee24ad7 +packet,subtitle,1,100100000,10.010000,100100000,10.010000,N/A,N/A,1194,88386,K__,CRC32:a9816515 +packet,subtitle,1,120120000,12.012000,120120000,12.012000,N/A,N/A,874,103202,K__,CRC32:c47ebb4e +packet,subtitle,1,140140000,14.014000,140140000,14.014000,N/A,N/A,1154,117698,K__,CRC32:09b26179 +packet,subtitle,1,160160000,16.016000,160160000,16.016000,N/A,N/A,1240,132474,K__,CRC32:d7e3067e +packet,subtitle,1,180180000,18.018000,180180000,18.018000,N/A,N/A,960,147336,K__,CRC32:d2d99797 +packet,subtitle,1,200200000,20.020000,200200000,20.020000,N/A,N/A,1251,161918,K__,CRC32:1857892c +packet,subtitle,1,220220000,22.022000,220220000,22.022000,N/A,N/A,1285,176791,K__,CRC32:76bd9787 +packet,subtitle,1,240240000,24.024000,240240000,24.024000,N/A,N/A,1676,191698,K__,CRC32:1f7cdb75 +packet,subtitle,1,260260000,26.026000,260260000,26.026000,N/A,N/A,1642,206996,K__,CRC32:8fbd701c +packet,subtitle,1,280280000,28.028000,280280000,28.028000,N/A,N/A,1256,222260,K__,CRC32:2f4ea18e +packet,subtitle,1,300300000,30.030000,300300000,30.030000,N/A,N/A,868,237138,K__,CRC32:30e6b1f0 +packet,subtitle,1,320320000,32.032000,320320000,32.032000,N/A,N/A,851,251628,K__,CRC32:b806d7ef +packet,subtitle,1,340340000,34.034000,340340000,34.034000,N/A,N/A,982,266101,K__,CRC32:7f9ea9df +packet,subtitle,1,360360000,36.036000,360360000,36.036000,N/A,N/A,992,280705,K__,CRC32:024a8bf4 +packet,subtitle,1,380380000,38.038000,380380000,38.038000,N/A,N/A,861,295319,K__,CRC32:d8e3a883 +packet,subtitle,1,400400000,40.040000,400400000,40.040000,N/A,N/A,991,309802,K__,CRC32:cae99334 +packet,subtitle,1,420420000,42.042000,420420000,42.042000,N/A,N/A,991,324415,K__,CRC32:50c2ead7 +packet,subtitle,1,440440000,44.044000,440440000,44.044000,N/A,N/A,1135,339028,K__,CRC32:cc0850dc +packet,subtitle,1,460460000,46.046000,460460000,46.046000,N/A,N/A,1005,353785,K__,CRC32:807f794c +packet,subtitle,1,480480000,48.048000,480480000,48.048000,N/A,N/A,1005,368412,K__,CRC32:807f794c +packet,subtitle,1,500500000,50.050000,500500000,50.050000,N/A,N/A,1226,383039,K__,CRC32:805264b5 +packet,subtitle,1,520520000,52.052000,520520000,52.052000,N/A,N/A,1003,397887,K__,CRC32:79adb2a6 +packet,subtitle,1,540540000,54.054000,540540000,54.054000,N/A,N/A,1381,412512,K__,CRC32:ac83ebab +packet,subtitle,1,560560000,56.056000,560560000,56.056000,N/A,N/A,1478,427515,K__,CRC32:23a2eb37 +packet,subtitle,1,580580000,58.058000,580580000,58.058000,N/A,N/A,1600,442615,K__,CRC32:4e8548fa +packet,subtitle,1,600600000,60.060000,600600000,60.060000,N/A,N/A,1519,457837,K__,CRC32:1ee4bd57 +packet,subtitle,1,620620000,62.062000,620620000,62.062000,N/A,N/A,998,472978,K__,CRC32:5cabdc39 +packet,subtitle,1,640640000,64.064000,640640000,64.064000,N/A,N/A,987,487598,K__,CRC32:498ffc7d +packet,subtitle,1,660660000,66.066000,660660000,66.066000,N/A,N/A,967,502207,K__,CRC32:3c04c24d +packet,subtitle,1,680680000,68.068000,680680000,68.068000,N/A,N/A,787,516670,K__,CRC32:0896b651 diff --git a/tests/ref/fate/mov-mp4-fragmented-ttml-stpp b/tests/ref/fate/mov-mp4-fragmented-ttml-stpp new file mode 100644 index 0000000000..08f82851a9 --- /dev/null +++ b/tests/ref/fate/mov-mp4-fragmented-ttml-stpp @@ -0,0 +1,1197 @@ +7fe87826c79323c7c97a14021686bd54 *tests/data/fate/mov-mp4-fragmented-ttml-stpp.mp4 +503191 tests/data/fate/mov-mp4-fragmented-ttml-stpp.mp4 + + + + + + + + +
+

Don't show this text it may be used to insert hidden data

+

SubRip subtitles capability tester 1.3o by ale5000
Use VLC 1.1 or higher as reference for most things and MPC Home Cinema for others
This text should be blue
This text should be red
This text should be black
If you see this with the normal font, the player don't (fully) support font face

+
+ +
+ + + + + + + + +
+

SubRip subtitles capability tester 1.3o by ale5000
Use VLC 1.1 or higher as reference for most things and MPC Home Cinema for others
This text should be blue
This text should be red
This text should be black
If you see this with the normal font, the player don't (fully) support font face

+
+ +
+ + + + + + + + +
+

SubRip subtitles capability tester 1.3o by ale5000
Use VLC 1.1 or higher as reference for most things and MPC Home Cinema for others
This text should be blue
This text should be red
This text should be black
If you see this with the normal font, the player don't (fully) support font face

+

Hidden

+

This text should be small
This text should be normal
This text should be big

+
+ +
+ + + + + + + + +
+

This text should be small
This text should be normal
This text should be big

+

This should be an E with an accent: È
日本語
This text should be bold, italics and underline
This text should be small and green
This text should be small and red
This text should be big and brown

+
+ +
+ + + + + + + + +
+

This should be an E with an accent: È
日本語
This text should be bold, italics and underline
This text should be small and green
This text should be small and red
This text should be big and brown

+
+ +
+ + + + + + + + +
+

This should be an E with an accent: È
日本語
This text should be bold, italics and underline
This text should be small and green
This text should be small and red
This text should be big and brown

+

This line should be bold
This line should be italics
This line should be underline
This line should be strikethrough
Both lines
should be underline

+
+ +
+ + + + + + + + +
+

This line should be bold
This line should be italics
This line should be underline
This line should be strikethrough
Both lines
should be underline

+
+ +
+ + + + + + + + +
+

This line should be bold
This line should be italics
This line should be underline
This line should be strikethrough
Both lines
should be underline

+

>
It would be a good thing to
hide invalid html tags that are closed and show the text in them
but show un-closed invalid html tags
Show not opened tags
<

+
+ +
+ + + + + + + + +
+

>
It would be a good thing to
hide invalid html tags that are closed and show the text in them
but show un-closed invalid html tags
Show not opened tags
<

+

and also
hide invalid html tags with parameters that are closed and show the text in them
but show un-closed invalid html tags
This text should be showed underlined without problems also: 2<3,5>1,4<6
This shouldn't be underlined

+
+ +
+ + + + + + + + +
+

and also
hide invalid html tags with parameters that are closed and show the text in them
but show un-closed invalid html tags
This text should be showed underlined without problems also: 2<3,5>1,4<6
This shouldn't be underlined

+
+ +
+ + + + + + + + +
+

and also
hide invalid html tags with parameters that are closed and show the text in them
but show un-closed invalid html tags
This text should be showed underlined without problems also: 2<3,5>1,4<6
This shouldn't be underlined

+

This text should be in the normal position...

+

This text should NOT be in the normal position

+
+ +
+ + + + + + + + +
+

This text should NOT be in the normal position

+

Implementation is the same of the ASS tag
This text should be at the
top and horizontally centered

+

This text should be at the
middle and horizontally centered

+

This text should be at the
bottom and horizontally centered

+
+ +
+ + + + + + + + +
+

Implementation is the same of the ASS tag
This text should be at the
top and horizontally centered

+

This text should be at the
middle and horizontally centered

+

This text should be at the
bottom and horizontally centered

+

This text should be at the
top and horizontally at the left

+

This text should be at the
middle and horizontally at the left
(The second position must be ignored)

+

This text should be at the
bottom and horizontally at the left

+
+ +
+ + + + + + + + +
+

This text should be at the
top and horizontally at the left

+

This text should be at the
middle and horizontally at the left
(The second position must be ignored)

+

This text should be at the
bottom and horizontally at the left

+

This text should be at the
top and horizontally at the right

+

This text should be at the
middle and horizontally at the right

+

This text should be at the
bottom and horizontally at the right

+
+ +
+ + + + + + + + +
+

This text should be at the
top and horizontally at the right

+

This text should be at the
middle and horizontally at the right

+

This text should be at the
bottom and horizontally at the right

+

This could be the most difficult thing to implement

+
+ +
+ + + + + + + + +
+

This could be the most difficult thing to implement

+

First text

+
+ +
+ + + + + + + + +
+

First text

+

Second, it shouldn't overlap first

+
+ +
+ + + + + + + + +
+

First text

+

Second, it shouldn't overlap first

+

Third, it should replace second

+
+ +
+ + + + + + + + +
+

First text

+

Third, it should replace second

+

Fourth, it shouldn't overlap first and third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Fifth, it should replace third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Fifth, it should replace third

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Fifth, it should replace third

+

Sixth, it shouldn't be
showed overlapped

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Sixth, it shouldn't be
showed overlapped

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Sixth, it shouldn't be
showed overlapped

+
+ +
+ + + + + + + + +
+

First text

+

Fourth, it shouldn't overlap first and third

+

Sixth, it shouldn't be
showed overlapped

+

TEXT 1 (bottom)

+

text 2

+
+ +
+ + + + + + + + +
+

TEXT 1 (bottom)

+

text 2

+

Hide these tags:
also hide these tags:
but show this: {normal text}

+
+ +
+ + + + + + + + +
+

Hide these tags:
also hide these tags:
but show this: {normal text}

+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+


\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)

+
+ +
+ + + + + + + + +
+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+


\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)

+

\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
Show this: \TEST and this: \-)

+
+ +
+ + + + + + + + +
+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+

\h\h\h\h\hA (05 hard spaces followed by a letter)
A (Normal spaces followed by a letter)
A (No hard spaces followed by a letter)
Show this: \TEST and this: \-)

+


A letter followed by 05 hard spaces: A\h\h\h\h\h
A letter followed by normal spaces: A
A letter followed by no hard spaces: A
05 hard spaces between letters: A\h\h\h\h\hA
5 normal spaces between letters: A A

^--Forced line break

+
+ +
+ + + + + + + + +
+


\ N is a forced line break
\ h is a hard space
Normal spaces at the start and at the end of the line are trimmed while hard spaces are not trimmed.
The\hline\hwill\hnever\hbreak\hautomatically\hright\hbefore\hor\hafter\ha\hhard\hspace.\h:-D

+


A letter followed by 05 hard spaces: A\h\h\h\h\h
A letter followed by normal spaces: A
A letter followed by no hard spaces: A
05 hard spaces between letters: A\h\h\h\h\hA
5 normal spaces between letters: A A

^--Forced line break

+

Both line should be strikethrough,
yes.
Correctly closed tags
should be hidden.

+
+ +
+ + + + + + + + +
+

Both line should be strikethrough,
yes.
Correctly closed tags
should be hidden.

+

It shouldn't be strikethrough,
not opened tag showed as text.
Not opened tag showed as text.

+
+ +
+ + + + + + + + +
+

It shouldn't be strikethrough,
not opened tag showed as text.
Not opened tag showed as text.

+

Three lines should be strikethrough,
yes.
Not closed tags showed as text

+
+ +
+ + + + + + + + +
+

Three lines should be strikethrough,
yes.
Not closed tags showed as text

+

Both line should be strikethrough but
the wrong closing tag should be showed

+
+ +
+ + + + + + + + +
+

Both line should be strikethrough but
the wrong closing tag should be showed

+
+ +
+packet,subtitle,1,0,0.000000,0,0.000000,N/A,N/A,1172,14302,K__,CRC32:bde7afa1 +packet,subtitle,1,2002,2.002000,2002,2.002000,N/A,N/A,1015,28648,K__,CRC32:bd3bd4bc +packet,subtitle,1,4004,4.004000,4004,4.004000,N/A,N/A,1305,42837,K__,CRC32:c8ff5017 +packet,subtitle,1,6006,6.006000,6006,6.006000,N/A,N/A,1111,57316,K__,CRC32:f0b10da6 +packet,subtitle,1,8008,8.008000,8008,8.008000,N/A,N/A,927,71601,K__,CRC32:55a7bb1b +packet,subtitle,1,10010,10.010000,10010,10.010000,N/A,N/A,1194,85702,K__,CRC32:03dc4753 +packet,subtitle,1,12012,12.012000,12012,12.012000,N/A,N/A,874,100070,K__,CRC32:c7a092d4 +packet,subtitle,1,14014,14.014000,14014,14.014000,N/A,N/A,1154,114118,K__,CRC32:b476fe9c +packet,subtitle,1,16016,16.016000,16016,16.016000,N/A,N/A,1240,128446,K__,CRC32:912e694c +packet,subtitle,1,18018,18.018000,18018,18.018000,N/A,N/A,960,142860,K__,CRC32:bba73912 +packet,subtitle,1,20020,20.020000,20020,20.020000,N/A,N/A,1251,156994,K__,CRC32:4c7b87d8 +packet,subtitle,1,22022,22.022000,22022,22.022000,N/A,N/A,1285,171419,K__,CRC32:c0368927 +packet,subtitle,1,24024,24.024000,24024,24.024000,N/A,N/A,1676,185878,K__,CRC32:9811b98f +packet,subtitle,1,26026,26.026000,26026,26.026000,N/A,N/A,1642,200728,K__,CRC32:7965715d +packet,subtitle,1,28028,28.028000,28028,28.028000,N/A,N/A,1256,215544,K__,CRC32:433e322a +packet,subtitle,1,30030,30.030000,30030,30.030000,N/A,N/A,868,229974,K__,CRC32:20edc13a +packet,subtitle,1,32032,32.032000,32032,32.032000,N/A,N/A,851,244016,K__,CRC32:a850ce43 +packet,subtitle,1,34034,34.034000,34034,34.034000,N/A,N/A,982,258041,K__,CRC32:ffdc63b7 +packet,subtitle,1,36036,36.036000,36036,36.036000,N/A,N/A,992,272197,K__,CRC32:9189e069 +packet,subtitle,1,38038,38.038000,38038,38.038000,N/A,N/A,861,286363,K__,CRC32:b7df1508 +packet,subtitle,1,40040,40.040000,40040,40.040000,N/A,N/A,991,300398,K__,CRC32:16ace16f +packet,subtitle,1,42042,42.042000,42042,42.042000,N/A,N/A,991,314563,K__,CRC32:524854ca +packet,subtitle,1,44044,44.044000,44044,44.044000,N/A,N/A,1135,328728,K__,CRC32:c51f8b6e +packet,subtitle,1,46046,46.046000,46046,46.046000,N/A,N/A,1005,343037,K__,CRC32:e9b7c12f +packet,subtitle,1,48048,48.048000,48048,48.048000,N/A,N/A,1005,357216,K__,CRC32:82c319d0 +packet,subtitle,1,50050,50.050000,50050,50.050000,N/A,N/A,1226,371395,K__,CRC32:c73960aa +packet,subtitle,1,52052,52.052000,52052,52.052000,N/A,N/A,1003,385795,K__,CRC32:e435cc83 +packet,subtitle,1,54054,54.054000,54054,54.054000,N/A,N/A,1381,399972,K__,CRC32:99f63187 +packet,subtitle,1,56056,56.056000,56056,56.056000,N/A,N/A,1478,414527,K__,CRC32:4d110a91 +packet,subtitle,1,58058,58.058000,58058,58.058000,N/A,N/A,1600,429179,K__,CRC32:d3133412 +packet,subtitle,1,60060,60.060000,60060,60.060000,N/A,N/A,1519,443953,K__,CRC32:86713143 +packet,subtitle,1,62062,62.062000,62062,62.062000,N/A,N/A,998,458646,K__,CRC32:0badc63b +packet,subtitle,1,64064,64.064000,64064,64.064000,N/A,N/A,987,472818,K__,CRC32:1771dfd4 +packet,subtitle,1,66066,66.066000,66066,66.066000,N/A,N/A,967,486979,K__,CRC32:0cb5eddc +packet,subtitle,1,68068,68.068000,68068,68.068000,N/A,N/A,787,501002,K__,CRC32:2fe77499