@@ -85,32 +85,34 @@ function Base.transcode(codec::Codec, data::ByteData)
85
85
@goto error
86
86
end
87
87
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
104
105
if startproc (codec, :write , error) === :error
105
106
@goto error
106
107
end
108
+ n = minoutsize (codec, buffermem (input))
109
+ @goto process
107
110
end
108
- n = max (Δout, minoutsize (codec, buffermem (input)))
109
- end
110
- if marginsize (output) == 0
111
+ resize! (output. data, output. marginpos - 1 )
111
112
return output. data
112
113
else
113
- return output. data[1 : output. marginpos- 1 ]
114
+ n = max (Δout, minoutsize (codec, buffermem (input)))
115
+ @goto process
114
116
end
115
117
@label error
116
118
if ! haserror (error)
0 commit comments