summaryrefslogtreecommitdiff
path: root/transcode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'transcode.cpp')
-rw-r--r--transcode.cpp29
1 files changed, 17 insertions, 12 deletions
diff --git a/transcode.cpp b/transcode.cpp
index 249ffb3..5244627 100644
--- a/transcode.cpp
+++ b/transcode.cpp
@@ -1,20 +1,25 @@
#include "transcode.h"
-Transcoder::Transcoder(std::istream& i, HTTPResponse& r, DecoderBase& d, EncoderBase& e) : is(i), res(r), decoder(d), encoder(e) {
+#include <boost/iostreams/device/file.hpp>
+#include <boost/iostreams/filtering_stream.hpp>
+
+Transcoder::Transcoder(std::string p, HTTPResponse& r, DecoderBase& d, EncoderBase& e) : path(p), res(r), decoder(d), encoder(e) {
}
void Transcoder::run() {
+ const std::streamsize buffer_size = 0x1000;
+ boost::iostreams::file_source is(path, std::ios::in | std::ios::binary);
+ boost::iostreams::filtering_istream s;
+ s.push(EncoderFilter(encoder), buffer_size);
+ s.push(DecoderFilter(decoder), buffer_size);
+ s.push(is, buffer_size);
+
char data[0x1000];
- bool encoding_fone = false;
- while(!encoding_fone) {
- size_t decoded_size = 0;
- char decoded_data[0x1000];
- if(is.good()) {
- is.read(data, 0x1000);
- decoded_size = decoder.decode((uint8_t*)data, is.gcount(), (uint8_t*)decoded_data, 0x1000);
- }
- char encoded_data[0x1000];
- size_t encoded_size = encoder.encode((uint8_t*)decoded_data, decoded_size, (uint8_t*)encoded_data, 0x1000);
- res.write(encoded_data, encoded_size);
+ std::streamsize size = 1;
+ while(size) {
+ s.read(data, 0x1000);
+ size = s.gcount();
+ if(size > 0)
+ res.write(data, size);
}
}