From patchwork Thu Oct 24 17:59:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: South East <8billion.people@gmail.com> X-Patchwork-Id: 52480 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:1c41:b0:48e:c0f8:d0de with SMTP id im1csp572637vqb; Thu, 24 Oct 2024 11:19:06 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCXrYGreF/OLs+KYwpnCvM3ljDYYEsPQ4oqmYwi4WYIdD2PGrcxUeH54O2itkPawF5CxM8nmvseSoUe+XotmgFTH@gmail.com X-Google-Smtp-Source: AGHT+IGbop1p5Yx6Q6j54g03KrpUsTcmBvPLm3CTUMxY1xnepVeAv6A548VRsLXD2WppFtbIx8mm X-Received: by 2002:a05:6402:280a:b0:5c9:5ac1:df6c with SMTP id 4fb4d7f45d1cf-5cb8af97d96mr5361109a12.33.1729793946457; Thu, 24 Oct 2024 11:19:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1729793946; cv=none; d=google.com; s=arc-20240605; b=gmd8xmgPMBHiILHe871EeKMpsIWwIJb2pZjoCSAbzP754DHSJOVznwa38mmtUU1BsY kmki4FbYQ/PJp7qs9fTf6MXLjnB2BO53CiF+psSaDtmVe7WRxDZHNDD1zY/V/0ew1IMq H6SPKkydwMP+ie0odYEyHIawxBVh2qPKaBX+FL+Wn3MPK54HQTYKIApcLE9CkoElMdpE UBuEHTxNGW4Momljin5ylyRHoy9NoHm9oipDfb7aOul+jmTO6l3z/8S9cX6VQ2ZrdGY4 vqnR6WNBkFl4+n2aboKgQ/entZe/eYMl1ChTZiZG6NRSl+7LtX9x3g9gw4gwt9K2+4wy Z57A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject:to :message-id:date:from:mime-version:dkim-signature:delivered-to; bh=KWpevru/rfcwRevJkydTJ39Yum3t6E3gB/SEv7WdS1g=; fh=e5zN9xSzcxLA6bGo3lF+CqTbY/oLwzApV03EO/RBfgQ=; b=SaZ3fDlMaLOHqgfSwAEjS9DrcXJYsbYjhdygjQ02lA5AAoTyE7LNU9Xkg/hXEEZ758 PThdXeRx45tGg21OxKts5IapFAcU0RQ+MKMKKB6uOHcQz13S5xuew/GZ0TD4+vfhZ5lQ 065S7F8PF+pApiq9rCjurUiKXh2YGtjQJHGSO0QzgKvANdB7Y7R8U2Kn94T1HaJMD/OP WnVHBgFovlM7wGtLmkqd673FtUisAmf3ja64DCEpuB36ju8jXZX/bX0Wx95jM5mkjQ5A sHVtQrOzuATPOMd/Z5+TTMJ9uCvkUrFr6RkUpGYMn7eZIgehPIou/V7An5MPzN6JRKkx xd3A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=lZ6H219h; 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; dara=fail header.i=@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 4fb4d7f45d1cf-5cb66c7e1dasi7521790a12.466.2024.10.24.11.19.06; Thu, 24 Oct 2024 11:19:06 -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=lZ6H219h; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0756B68DBEC; Thu, 24 Oct 2024 21:00:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 30B9468D7DB for ; Thu, 24 Oct 2024 21:00:10 +0300 (EEST) Received: by mail-qt1-f172.google.com with SMTP id d75a77b69052e-4609967ab7eso7885461cf.3 for ; Thu, 24 Oct 2024 11:00:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1729792809; x=1730397609; darn=ffmpeg.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Il7XBlKNPJrCcmnvBb+KEn0QtJeekNiOJOrH2rmb4zU=; b=lZ6H219hQPvt4gH+mZveiTL8dUpmqoUmAUHVzMDsXQSiRsXkRDE3FctAvqIwnozhWm UWWGaCpOYrSR8yfVclV11beZaaPrBfUCFQsNS4Us5+nggGdHHu2L20Hd+5hYLDsWcRjc XmNV2nDOp02HDG1srJTaowJy+CqDdK0kk/LqWZPYdsUK0Fkrxclc+3z97nJEK7SlIzVC N/hMqMfmv+i2/J5f+5hLHFVqjMQMfZpGHNUg+loWSI3y1+YO28hAMN/pRtCbUI+RdXoD 4p6B6kOXJzzHSPAYNyYxiWK5L7ZomylHFfNqfBHbBBPrlsqf641FeqM34y6rgNdeS3tC 4OXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729792809; x=1730397609; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Il7XBlKNPJrCcmnvBb+KEn0QtJeekNiOJOrH2rmb4zU=; b=Qd2CTPGzKCxk5Lnz9iAU+B23KrSrpxi/tM/ixKJxg3Zsw3nDuRS4vJA2VnlMSdtpuj De9DY3jJGecjakVvWXIrpyW5aJrqgyezb7Q44IUgz2M4ofPERKP8YJskMHJIzaN3I8iW 0FIBzlhPeoBLNZBixEQdepHswAIy7Kl5dkOPU26qg+QNXcZ9aPdo8aEuCOqcJvVvOa2S oQiT6NaQielXBY6j1nRoXD1x95wXW10U3PzlT/uzSVT83M76ra8bl4klenubON0Wn/wQ 6WJ8PZUwM3R3V7VDs4WfrtYy+7hMFG/0JRsc/fRIndTAeLVe/lRIh+uAbpqJBCEZBFIr GaKQ== X-Gm-Message-State: AOJu0YyPCqkFn/2aOl1/W1tJg84cqecDnaj5AlbZzLDxrNZhrA6aubxw cLI0PhgmssER8EQjem694bSkuXugdtdR0L8U4gsXcsYHPZhjUG77mBX7awcRY2v7w6AYOJnPUXn 9Hdvm7lAC5CWIKg6h9Nt61CYPAobTCUUU X-Received: by 2002:ac8:7d0f:0:b0:460:a8c9:faa6 with SMTP id d75a77b69052e-461258e60b9mr39881811cf.22.1729792808156; Thu, 24 Oct 2024 11:00:08 -0700 (PDT) MIME-Version: 1.0 From: South East <8billion.people@gmail.com> Date: Thu, 24 Oct 2024 18:59:57 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] Add support for LJ92 compressed MLV files, attempt 02 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: EsdmEKmLLhhR ffmpeg has existing support for MLV raw video files; libavformat/mlvdec.c. Since this was added, MLV has been extended to support LJ92 compressed image data. These patches build on lossless DNG support in 7.2-dev to enable handling LJ92 MLV via existing libavcodec/mjpegdec.c code. Sample LJ92 MLV file: https://0x0.st/XlFm.mlv FATE tests pass locally. It was not obvious from the Developer guide how to get this working. The claim is "Running ’make fate’ accomplishes [running local FATE tests]", but this of course does not work until you rsync the samples, build FATE etc, which is not mentioned: https://www.ffmpeg.org/developer.html#Regression-tests-1 I suggest adding something like "but WILL NOT work until it is configured", before "please see fate.html for details". This would make it clearer that you NEED to follow the link, rather than it existing as reference material should you want it in the future. Simply running "make fate" fails, but in a way that looked like a normal test failure to me; I assumed upstream was broken since the failure was repeatable and occured without my changes. There is a long comment in patch 0001 that I don't expect to survive review, but provides context for the code change. As an ffmpeg noob I can't make a good judgement on what level of commenting is appropriate. For reference, attempt 1 can be seen in the archives, here: https://ffmpeg.org//pipermail/ffmpeg-devel/2024-October/335245.html From db0f076e8f724deee604af7a1a85c1d130f1f87d Mon Sep 17 00:00:00 2001 From: stephen-e <33672591+reticulatedpines@users.noreply.github.com> Date: Mon, 21 Oct 2024 16:35:49 +0100 Subject: [PATCH 2/2] avformat/mlvdec: add LJ92 support MLV files can contain LJ92 compressed raw video data. MJPEG codec can be used to handle these. --- libavformat/mlvdec.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libavformat/mlvdec.c b/libavformat/mlvdec.c index 1a6d38f37c..2eb21a3aab 100644 --- a/libavformat/mlvdec.c +++ b/libavformat/mlvdec.c @@ -44,8 +44,9 @@ #define MLV_AUDIO_CLASS_WAV 1 -#define MLV_CLASS_FLAG_DELTA 0x40 #define MLV_CLASS_FLAG_LZMA 0x80 +#define MLV_CLASS_FLAG_DELTA 0x40 +#define MLV_CLASS_FLAG_LJ92 0x20 typedef struct { AVIOContext *pb[101]; @@ -298,9 +299,12 @@ static int read_header(AVFormatContext *avctx) if ((mlv->class[0] & (MLV_CLASS_FLAG_DELTA|MLV_CLASS_FLAG_LZMA))) avpriv_request_sample(avctx, "compression"); vst->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; - switch (mlv->class[0] & ~(MLV_CLASS_FLAG_DELTA|MLV_CLASS_FLAG_LZMA)) { + switch (mlv->class[0] & ~(MLV_CLASS_FLAG_DELTA|MLV_CLASS_FLAG_LZMA|MLV_CLASS_FLAG_LJ92)) { case MLV_VIDEO_CLASS_RAW: - vst->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; + if (mlv->class[0] & MLV_CLASS_FLAG_LJ92) + vst->codecpar->codec_id = AV_CODEC_ID_MJPEG; + else + vst->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; break; case MLV_VIDEO_CLASS_YUV: vst->codecpar->format = AV_PIX_FMT_YUV420P; -- 2.45.2