Skip to content

Commit 1844494

Browse files
committed
allocate more buffer margin (fix #1)
This patch allocates more output margin before calling `process`, which is important to avoid performance degradation when using `transcode`. Specifically, the size of output margin is now at least 1/4 of the current buffer size. The upper bound is DEFAULT_BUFFER_SIZE * 8 (=128KiB) to avoid buffer size explosion.
1 parent 9323ec1 commit 1844494

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/stream.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ function fillbuffer(stream::TranscodingStream)
357357
end
358358
makemargin!(buffer2, 1)
359359
readdata!(stream.stream, buffer2)
360-
makemargin!(buffer1, 1)
360+
makemargin!(buffer1, clamp(div(length(buffer1), 4), 1, DEFAULT_BUFFER_SIZE * 8))
361361
Δin, Δout, stream.state.code = process(stream.codec, buffermem(buffer2), marginmem(buffer1))
362362
buffer2.bufferpos += Δin
363363
buffer1.marginpos += Δout
@@ -405,7 +405,7 @@ function process_to_write(stream::TranscodingStream)
405405
end
406406
buffer2 = stream.state.buffer2
407407
writebuffer!(stream.stream, buffer2)
408-
makemargin!(buffer2, 1)
408+
makemargin!(buffer2, clamp(div(length(buffer2), 4), 1, DEFAULT_BUFFER_SIZE * 8))
409409
Δin, Δout, stream.state.code = process(stream.codec, buffermem(buffer1), marginmem(buffer2))
410410
buffer1.bufferpos += Δin
411411
buffer2.marginpos += Δout

0 commit comments

Comments
 (0)