aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2025-07-22 21:04:35 +0200
committerKacper Michajłow <kasper93@gmail.com>2025-07-25 21:10:16 +0200
commit7d9b21601ca3080cf63c55c435311de5f93f573f (patch)
tree6b2629519526fa066365d59e4f3b73213f5c0b5f
parenta1588c875a511d4a05c9faa1c902736016c1d29b (diff)
downloadffmpeg-7d9b21601ca3080cf63c55c435311de5f93f573f.tar.gz
avcodec/d3d12va_encode: don't write garbage when there is no header
When codec->write_sequence_header is not defined, bit_len was undefined, and while data bufer was zeroed we could just overread it. Do nothing when we don't have anything to write. Signed-off-by: Kacper Michajłow <kasper93@gmail.com>
-rw-r--r--libavcodec/d3d12va_encode.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/libavcodec/d3d12va_encode.c b/libavcodec/d3d12va_encode.c
index d99e960db6..64821da5f5 100644
--- a/libavcodec/d3d12va_encode.c
+++ b/libavcodec/d3d12va_encode.c
@@ -299,21 +299,20 @@ static int d3d12va_encode_issue(AVCodecContext *avctx,
"header: %d.\n", err);
goto fail;
}
- }
-
- pic->header_size = (int)bit_len / 8;
- pic->aligned_header_size = pic->header_size % ctx->req.CompressedBitstreamBufferAccessAlignment ?
- FFALIGN(pic->header_size, ctx->req.CompressedBitstreamBufferAccessAlignment) :
- pic->header_size;
+ pic->header_size = (int)bit_len / 8;
+ pic->aligned_header_size = pic->header_size % ctx->req.CompressedBitstreamBufferAccessAlignment ?
+ FFALIGN(pic->header_size, ctx->req.CompressedBitstreamBufferAccessAlignment) :
+ pic->header_size;
+
+ hr = ID3D12Resource_Map(pic->output_buffer, 0, NULL, (void **)&ptr);
+ if (FAILED(hr)) {
+ err = AVERROR_UNKNOWN;
+ goto fail;
+ }
- hr = ID3D12Resource_Map(pic->output_buffer, 0, NULL, (void **)&ptr);
- if (FAILED(hr)) {
- err = AVERROR_UNKNOWN;
- goto fail;
+ memcpy(ptr, data, pic->aligned_header_size);
+ ID3D12Resource_Unmap(pic->output_buffer, 0, NULL);
}
-
- memcpy(ptr, data, pic->aligned_header_size);
- ID3D12Resource_Unmap(pic->output_buffer, 0, NULL);
}
d3d12_refs.NumTexture2Ds = base_pic->nb_refs[0] + base_pic->nb_refs[1];