26 return WvString::null;
32 return "unknown encoder error";
37 bool flush,
bool _finish)
42 success =
_encode(inbuf, outbuf, flush);
44 success =
finish(outbuf) && success;
71 seterror(
"reset not supported by encoder");
81 bool success =
encode(inbuf, outbuf,
true, finish);
91 bool success =
encode(inbuf, outbuf,
true, finish);
92 outstr.append(outbuf.
getstr());
98 bool flush,
bool finish)
101 bool success =
encode(inbuf, outbuf, flush, finish);
102 outstr.append(outbuf.
getstr());
124 WvBuf &outbuf,
bool finish)
127 bool success =
encode(inbuf, outbuf,
true, finish);
133 void *outmem,
size_t *outlen,
bool finish)
136 return encodebufmem(inbuf, outmem, outlen,
true, finish);
141 void *outmem,
size_t *outlen,
bool flush,
bool finish)
144 bool success =
encode(inbuf, outbuf,
true, finish);
145 *outlen = outbuf.
used();
151 void *outmem,
size_t *outlen,
bool finish)
183 WvPassthroughEncoder::WvPassthroughEncoder()
220 ChainElemList::Iter it(const_cast<ChainElemList&>(encoders));
221 for (it.rewind(); it.next(); )
222 if (!it->enc->isok())
230 ChainElemList::Iter it(const_cast<ChainElemList&>(encoders));
231 for (it.rewind(); it.next(); )
232 if (it->enc->isfinished())
240 ChainElemList::Iter it(const_cast<ChainElemList&>(encoders));
241 for (it.rewind(); it.next(); )
243 WvString message = it->enc->geterror();
244 if (!!message)
return message;
246 return WvString::null;
254 bool WvEncoderChain::do_encode(
WvBuf &in,
WvBuf &out, ChainElem *start_after,
255 bool flush,
bool finish)
259 ChainElemList::Iter it(encoders);
261 if (start_after) it.find(start_after);
262 last_run = start_after;
263 for (; it.cur() && it.next(); )
265 if (!it->enc->encode(*tmpin, it->out, flush))
267 if (finish && !it->enc->finish(it->out))
279 return do_encode(in, out, NULL, flush,
false);
286 return do_encode(empty, out, NULL,
true,
true);
294 return do_encode(in, out, last_run,
false,
false);
301 ChainElemList::Iter it(encoders);
302 for (it.rewind(); it.next(); )
305 if (!it->enc->reset())
314 encoders.append(
new ChainElem(enc, autofree),
true);
320 encoders.prepend(
new ChainElem(enc, autofree),
true);
326 ChainElemList::Iter i(encoders);
327 for (i.rewind(); i.next(); )
328 if (i->enc == enc && i.get_autofree())
336 ChainElemList::Iter i(encoders);
341 for (i.rewind(); i.next(); )
347 i.set_autofree(
true);
351 i.set_autofree(
false);
358 for (i.rewind(); i.next(); )
360 i.set_autofree(
false);
367 ChainElemList::Iter it(encoders);
368 for (it.rewind(); it.next(); )
383 ChainElemList::Iter it(encoders);
384 for (it.rewind(); it.next(); )
385 used += it().out.used();