58 ris::Frame::BufferIterator rBuff;
59 ris::Frame::BufferIterator wBuff;
66 ris::FramePtr newFrame = this->reqFrame(frame->getPayload(),
true);
74 if ((ret = BZ2_bzDecompressInit(&strm, 0, 0)) != BZ_OK)
76 "Error initializing decompressor. ret=%" PRIi32,
80 rBuff = frame->beginBuffer();
81 strm.next_in =
reinterpret_cast<char*
>((*rBuff)->begin());
82 strm.avail_in = (*rBuff)->getPayload();
84 wBuff = newFrame->beginBuffer();
85 strm.next_out =
reinterpret_cast<char*
>((*wBuff)->begin());
86 strm.avail_out = (*wBuff)->getAvailable();
90 ret = BZ2_bzDecompress(&strm);
92 if ((ret != BZ_STREAM_END) && (ret != BZ_OK))
95 if (ret == BZ_STREAM_END)
break;
98 if (strm.avail_in == 0) {
100 strm.next_in =
reinterpret_cast<char*
>((*rBuff)->begin());
101 strm.avail_in = (*rBuff)->getPayload();
105 if (strm.avail_out == 0) {
107 if ((wBuff + 1) == newFrame->endBuffer()) {
108 ris::FramePtr tmpFrame = this->reqFrame(frame->getPayload(),
true);
109 wBuff = newFrame->appendFrame(tmpFrame);
113 strm.next_out =
reinterpret_cast<char*
>((*wBuff)->begin());
114 strm.avail_out = (*wBuff)->getAvailable();
118 newFrame->setPayload(strm.total_out_lo32);
119 newFrame->setError(frame->getError());
120 newFrame->setChannel(frame->getChannel());
121 newFrame->setFlags(frame->getFlags());
123 BZ2_bzDecompressEnd(&strm);
125 this->sendFrame(newFrame);
133void ru::StreamUnZip::setup_python() {
136 bp::class_<ru::StreamUnZip, ru::StreamUnZipPtr, bp::bases<ris::Master, ris::Slave>, boost::noncopyable>(
140 bp::implicitly_convertible<ru::StreamUnZipPtr, ris::SlavePtr>();
141 bp::implicitly_convertible<ru::StreamUnZipPtr, ris::MasterPtr>();