Skip to content

Commit 5360b82

Browse files
authored
Refactor transcode (#88)
1 parent dca13d8 commit 5360b82

File tree

1 file changed

+22
-20
lines changed

1 file changed

+22
-20
lines changed

src/transcode.jl

+22-20
Original file line numberDiff line numberDiff line change
@@ -85,32 +85,34 @@ function Base.transcode(codec::Codec, data::ByteData)
8585
@goto error
8686
end
8787
n = minoutsize(codec, buffermem(input))
88-
while code !== :end || buffersize(input) > 0
89-
makemargin!(output, n)
90-
Δin, Δout, code = process(codec, buffermem(input), marginmem(output), error)
91-
@debug(
92-
"called process()",
93-
code = code,
94-
input_size = buffersize(input),
95-
output_size = marginsize(output),
96-
input_delta = Δin,
97-
output_delta = Δout,
98-
)
99-
consumed!(input, Δin)
100-
supplied!(output, Δout)
101-
if code === :error
102-
@goto error
103-
elseif code === :end && buffersize(input) > 0
88+
@label process
89+
makemargin!(output, n)
90+
Δin, Δout, code = process(codec, buffermem(input), marginmem(output), error)
91+
@debug(
92+
"called process()",
93+
code = code,
94+
input_size = buffersize(input),
95+
output_size = marginsize(output),
96+
input_delta = Δin,
97+
output_delta = Δout,
98+
)
99+
consumed!(input, Δin)
100+
supplied!(output, Δout)
101+
if code === :error
102+
@goto error
103+
elseif code === :end
104+
if buffersize(input) > 0
104105
if startproc(codec, :write, error) === :error
105106
@goto error
106107
end
108+
n = minoutsize(codec, buffermem(input))
109+
@goto process
107110
end
108-
n = max(Δout, minoutsize(codec, buffermem(input)))
109-
end
110-
if marginsize(output) == 0
111+
resize!(output.data, output.marginpos - 1)
111112
return output.data
112113
else
113-
return output.data[1:output.marginpos-1]
114+
n = max(Δout, minoutsize(codec, buffermem(input)))
115+
@goto process
114116
end
115117
@label error
116118
if !haserror(error)

0 commit comments

Comments
 (0)