From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <ffmpeg-devel-bounces@ffmpeg.org>
Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100])
	by master.gitmailbox.com (Postfix) with ESMTPS id B00B24C674
	for <ffmpegdev@gitmailbox.com>; Tue,  8 Apr 2025 20:50:46 +0000 (UTC)
Received: from [127.0.1.1] (localhost [127.0.0.1])
	by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B36A6687DE3;
	Tue,  8 Apr 2025 23:50:41 +0300 (EEST)
Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com
 [209.85.128.53])
 by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2D7CE687C43
 for <ffmpeg-devel@ffmpeg.org>; Tue,  8 Apr 2025 23:50:35 +0300 (EEST)
Received: by mail-wm1-f53.google.com with SMTP id
 5b1f17b1804b1-43cf680d351so518995e9.0
 for <ffmpeg-devel@ffmpeg.org>; Tue, 08 Apr 2025 13:50:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1744145434; x=1744750234; darn=ffmpeg.org;
 h=cc:to:message-id:content-transfer-encoding:mime-version:subject
 :date:from:from:to:cc:subject:date:message-id:reply-to;
 bh=FlvTfriJ20lb15DpCWZ/RefBW/KUsF0epbbFjq7xWTI=;
 b=YebLtIXIpEGSxd/PvpHWQSGXPZqO2INCW5f1D49h06Ov8cvYHdh3h6p+fSxVTGHnNj
 Sc54wIXY5c3MHMN4yQnw7BbI4cDBDrAxmWydbgnk4F7UDTjJccLDQYLrEtEnx2w3EaRm
 /q0NhaYowGyo1V2ZrwdDg+P/z3qe+Nb+LrfMi8AYNOzhe+9vM4zXdfq3k05T9KeT0WPu
 mUt/qigg+WPCWygj7W/cuW3J34zaXsqHwobHPHiIEyKJlIoGDKVgu1tcdaaa/bBUS4Uq
 EkyEsK5N210KGLmofGlZYP9P+tF3BIqwYrsc/82A7zoi/Yo4/1XSWQ99nPt2l0ibcqnT
 Fwrw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1744145434; x=1744750234;
 h=cc:to:message-id:content-transfer-encoding:mime-version:subject
 :date:from:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=FlvTfriJ20lb15DpCWZ/RefBW/KUsF0epbbFjq7xWTI=;
 b=XeDKVILs5kOKFoWt3Ta5Xr/RsawAPlBxuSSt0Qh5I1Zb5SMs4B5k9B9gtsA8cG+iWI
 ZHbBYwk3K5407b2vTYkaF0V61hO/jh8nKPXopihIL3a3gaY3Z380kz1ZzrvCq2Lsl52q
 9C+lokWxQUHSbeohzLpkr+Ml3KdFOZjOBLdmQuRtGVLZHVZ1dy6ekPvQV9guBm4tQ3yX
 r4GzFbhq9a8YfmaSKFPDBBfA38o6sybmJiBR1pHQ2lRRavo1DmXjQdTAP5lpBIq/aq0v
 JOEhVqpE53ogrzl3/BlREnyeuwITJyYNOD6lb4xwtIzWnezzI5emEDNmlnSwI0vsT4xo
 60Gg==
X-Gm-Message-State: AOJu0Yx5k8RLTefhPMtof1NWcv2GPCVtQTLi4NMreWCTlob/n2auJH42
 YNl53vtTxXV3GQ7iEStLVx/oA3dC3YOKHLF2P79LhY5/UM4QXEyQ
X-Gm-Gg: ASbGncsbAmoXwvDvzk1Jsuiq+yja79u1kge4lajfUakKKZyYsi3lU3a6ZoLFHM5DjLD
 Pw3CQlgZ33zvtrYiCDXgRl8x6uX3ZjnO+6cViWvnRaFBoPLbjqEGX2UkCzzZLqnvudvcZAYn0UY
 VS5RKJy4vjC0Hy7W3UBNOxUPMlJ05Q6g2/nwZlcxUVWh+sOL2HTL9O0oQmf3+dAxCtAdWcalg9X
 lVBq4hW9T9ElU6xwWbLV4NKvZo+U6UZP6pGm8dlkfpDjYdTIcauJhAFBKSgC6c2zZbnWcmOnko1
 SipKQdP1NYtSQBeCfMR7IMoCV/mf/MMUUjYWbCMD1a6+I5LBqNIAGIOwZKXM8dVNDO1V/PE1p0c
 vgxRik5CcznSnGZa/mV1DzUtxyCwWKRgK8Q==
X-Google-Smtp-Source: AGHT+IH/8/RqkxsB8I4f9YETJlqUOlA69Ug5655lPV+6+0FavXDtXDXKF/UWx4PrsNdZ/GUNCVz3Hw==
X-Received: by 2002:a05:6000:178c:b0:390:ec6e:43ea with SMTP id
 ffacd0b85a97d-39d820b4812mr4509632f8f.15.1744145433947; 
 Tue, 08 Apr 2025 13:50:33 -0700 (PDT)
Received: from [192.168.122.137] (lfbn-rei-1-167-132.w86-225.abo.wanadoo.fr.
 [86.225.132.132]) by smtp.gmail.com with ESMTPSA id
 ffacd0b85a97d-39c30226b23sm15734168f8f.86.2025.04.08.13.50.33
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 08 Apr 2025 13:50:33 -0700 (PDT)
From: averne <averne381@gmail.com>
Date: Tue, 08 Apr 2025 22:50:16 +0200
MIME-Version: 1.0
Message-Id: <20250408-nvdec-vc1-fix-v2-1-f9edc32f5d92@gmail.com>
X-B4-Tracking: v=1; b=H4sIAAeM9WcC/x2MQQqAMAzAviI9W1inQ/Er4kG3qr1M2WAIw79bP
 CaQVMichDNMTYXERbJcUcG2DfhzjQejBGWwxjrTmxFjCeyxeMJdHhz2jWhw1I2OQJs7ser/Ny/
 v+wE+m6KCXwAAAA==
X-Change-ID: 20250408-nvdec-vc1-fix-7fb117513851
To: ffmpeg-devel@ffmpeg.org
X-Mailer: b4 0.14.2
Subject: [FFmpeg-devel] [PATCH v2] nvdec/vc1: add marker insertion logic
X-BeenThere: ffmpeg-devel@ffmpeg.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: FFmpeg development discussions and patches <ffmpeg-devel.ffmpeg.org>
List-Unsubscribe: <https://ffmpeg.org/mailman/options/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=unsubscribe>
List-Archive: <https://ffmpeg.org/pipermail/ffmpeg-devel>
List-Post: <mailto:ffmpeg-devel@ffmpeg.org>
List-Help: <mailto:ffmpeg-devel-request@ffmpeg.org?subject=help>
List-Subscribe: <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>,
 <mailto:ffmpeg-devel-request@ffmpeg.org?subject=subscribe>
Reply-To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Cc: averne <averne381@gmail.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: ffmpeg-devel-bounces@ffmpeg.org
Sender: "ffmpeg-devel" <ffmpeg-devel-bounces@ffmpeg.org>
Archived-At: <https://master.gitmailbox.com/ffmpegdev/20250408-nvdec-vc1-fix-v2-1-f9edc32f5d92@gmail.com/>
List-Archive: <https://master.gitmailbox.com/ffmpegdev/>
List-Post: <mailto:ffmpegdev@gitmailbox.com>

This mirrors existing code in d3dxx and dxva hwaccels

---
Changes since v1: use the codec-specific handler 
for wmv3.

Insert the relevant marker into the bitstream on
slice submission.
This is analogous to the logic found in DXVA and
D3D hwaccels.

Fixes decoding of various VC-1 streams, eg.:
https://drive.google.com/file/d/1WJyiRhcdU4FHTW3sVMitS7UdrZM1NBy-/view?usp=sharing

This was investigated using my nvdec tracing tool:
https://github.com/averne/NvdecTrace

Signed-off-by: averne <averne381@gmail.com>
---
 libavcodec/nvdec_vc1.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/libavcodec/nvdec_vc1.c b/libavcodec/nvdec_vc1.c
index fbfba1ecb43421573ef8fea1e37a2425c272edc9..a88327833df55054a42e7ced8cdd4c99fa6b6584 100644
--- a/libavcodec/nvdec_vc1.c
+++ b/libavcodec/nvdec_vc1.c
@@ -22,6 +22,7 @@
 
 #include "config_components.h"
 
+#include "libavutil/mem.h"
 #include "avcodec.h"
 #include "hwaccel_internal.h"
 #include "internal.h"
@@ -107,6 +108,48 @@ static int nvdec_vc1_start_frame(AVCodecContext *avctx, const uint8_t *buffer, u
     return 0;
 }
 
+static int nvdec_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer,
+                                  uint32_t size)
+{
+    NVDECContext *ctx = avctx->internal->hwaccel_priv_data;
+    const VC1Context *v = avctx->priv_data;
+    uint32_t marker;
+    int marker_size;
+    void *tmp;
+
+    if (ctx->bitstream_len)
+        marker = VC1_CODE_SLICE;
+    else if (v->profile == PROFILE_ADVANCED && v->fcm == ILACE_FIELD && v->second_field)
+        marker = VC1_CODE_FIELD;
+    else
+        marker = VC1_CODE_FRAME;
+
+    /* Only insert the marker if not already present in the bitstream */
+    marker_size = (size >= sizeof(marker) && AV_RB32(buffer) != marker) ? sizeof(marker) : 0;
+
+    tmp = av_fast_realloc(ctx->bitstream_internal, &ctx->bitstream_allocated,
+                          ctx->bitstream_len + size + marker_size);
+    if (!tmp)
+        return AVERROR(ENOMEM);
+    ctx->bitstream = ctx->bitstream_internal = tmp;
+
+    tmp = av_fast_realloc(ctx->slice_offsets, &ctx->slice_offsets_allocated,
+                          (ctx->nb_slices + 1) * sizeof(*ctx->slice_offsets));
+    if (!tmp)
+        return AVERROR(ENOMEM);
+    ctx->slice_offsets = tmp;
+
+    if (marker_size)
+        AV_WB32(ctx->bitstream_internal + ctx->bitstream_len, marker);
+
+    memcpy(ctx->bitstream_internal + ctx->bitstream_len + marker_size, buffer, size);
+    ctx->slice_offsets[ctx->nb_slices] = ctx->bitstream_len ;
+    ctx->bitstream_len += size + marker_size;
+    ctx->nb_slices++;
+
+    return 0;
+}
+
 static int nvdec_vc1_frame_params(AVCodecContext *avctx,
                                   AVBufferRef *hw_frames_ctx)
 {
@@ -121,7 +164,7 @@ const FFHWAccel ff_vc1_nvdec_hwaccel = {
     .p.pix_fmt            = AV_PIX_FMT_CUDA,
     .start_frame          = nvdec_vc1_start_frame,
     .end_frame            = ff_nvdec_simple_end_frame,
-    .decode_slice         = ff_nvdec_simple_decode_slice,
+    .decode_slice         = nvdec_vc1_decode_slice,
     .frame_params         = nvdec_vc1_frame_params,
     .init                 = ff_nvdec_decode_init,
     .uninit               = ff_nvdec_decode_uninit,

---
base-commit: f76195ff656d6bea68feee783160652e2b3e3d60
change-id: 20250408-nvdec-vc1-fix-7fb117513851

Best regards,
-- 
averne <averne381@gmail.com>

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".