diff options
author | Kacper Michajłow <kasper93@gmail.com> | 2025-07-22 21:04:35 +0200 |
---|---|---|
committer | Kacper Michajłow <kasper93@gmail.com> | 2025-07-25 21:10:16 +0200 |
commit | 7d9b21601ca3080cf63c55c435311de5f93f573f (patch) | |
tree | 6b2629519526fa066365d59e4f3b73213f5c0b5f | |
parent | a1588c875a511d4a05c9faa1c902736016c1d29b (diff) | |
download | ffmpeg-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.c | 25 |
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]; |