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".