[FFmpeg-cvslog] ffv1enc_vulkan: increase max outstanding byte count to 16bit
Lynne
git at videolan.org
Wed Nov 20 06:24:25 EET 2024
ffmpeg | branch: master | Lynne <dev at lynne.ee> | Wed Nov 20 05:11:49 2024 +0100| [9691ac6af29ba558de9ff900eb769c2b29473581] | committer: Lynne
ffv1enc_vulkan: increase max outstanding byte count to 16bit
The issue is that at higher resolutions, the outstanding byte counter
overflowed in case the image had a lot of blank areas.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9691ac6af29ba558de9ff900eb769c2b29473581
---
libavcodec/vulkan/rangecoder.comp | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/libavcodec/vulkan/rangecoder.comp b/libavcodec/vulkan/rangecoder.comp
index 13c135f913..848a056fb1 100644
--- a/libavcodec/vulkan/rangecoder.comp
+++ b/libavcodec/vulkan/rangecoder.comp
@@ -26,7 +26,7 @@ struct RangeCoder {
uint low;
uint16_t range;
- uint8_t outstanding_count;
+ uint16_t outstanding_count;
uint8_t outstanding_byte;
};
@@ -39,17 +39,17 @@ void renorm_encoder_full(inout RangeCoder c)
c.outstanding_byte = uint8_t(c.low >> 8);
} else if (c.low <= 0xFF00) {
c.bytestream[bs_cnt++].v = c.outstanding_byte;
- uint8_t cnt = c.outstanding_count;
+ uint16_t cnt = c.outstanding_count;
for (; cnt > 0; cnt--)
c.bytestream[bs_cnt++].v = uint8_t(0xFF);
- c.outstanding_count = uint8_t(0);
+ c.outstanding_count = uint16_t(0);
c.outstanding_byte = uint8_t(c.low >> 8);
} else if (c.low >= 0x10000) {
c.bytestream[bs_cnt++].v = c.outstanding_byte + uint8_t(1);
- uint8_t cnt = c.outstanding_count;
+ uint16_t cnt = c.outstanding_count;
for (; cnt > 0; cnt--)
c.bytestream[bs_cnt++].v = uint8_t(0x00);
- c.outstanding_count = uint8_t(0);
+ c.outstanding_count = uint16_t(0);
c.outstanding_byte = uint8_t(bitfieldExtract(c.low, 8, 8));
} else {
c.outstanding_count++;
@@ -63,7 +63,7 @@ void renorm_encoder_full(inout RangeCoder c)
/* Cannot deal with outstanding_byte == -1 in the name of speed */
void renorm_encoder(inout RangeCoder c)
{
- uint8_t oc = c.outstanding_count + uint8_t(1);
+ uint16_t oc = c.outstanding_count + uint16_t(1);
uint low = c.low;
c.range <<= 8;
@@ -78,7 +78,7 @@ void renorm_encoder(inout RangeCoder c)
uint8_t outstanding_byte = c.outstanding_byte;
c.bytestream = OFFBUF(u8buf, bs, oc);
- c.outstanding_count = uint8_t(0);
+ c.outstanding_count = uint16_t(0);
c.outstanding_byte = uint8_t(low >> 8);
uint8_t obs = uint8_t(low > 0xFF00);
@@ -185,6 +185,6 @@ void rac_init(out RangeCoder r, u8buf data, uint64_t buf_size)
r.bytestream = data;
r.low = 0;
r.range = uint16_t(0xFF00);
- r.outstanding_count = uint8_t(0);
+ r.outstanding_count = uint16_t(0);
r.outstanding_byte = uint8_t(0xFF);
}
More information about the ffmpeg-cvslog
mailing list