diff options
author | Vegard Storheil Eriksen <zyp@jvnv.net> | 2011-01-06 05:29:39 +0100 |
---|---|---|
committer | Vegard Storheil Eriksen <zyp@jvnv.net> | 2011-01-06 05:29:47 +0100 |
commit | 6f2fefdd9ff5f8561b3538efb5eb0765a9b4a141 (patch) | |
tree | de37cd2d500a777344b611321ac45bce66ad5c26 /music.cpp | |
parent | ffd8b5976af7e80425c7cf043528212528877b16 (diff) |
Replaced iostream-based decoder-encoder chain with direct chain.
Diffstat (limited to 'music.cpp')
-rw-r--r-- | music.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -1,7 +1,6 @@ #include "music.h" #include "decoder.h" #include "encoder.h" -#include "transcode.h" #include "tag.h" #include "config.h" @@ -238,10 +237,18 @@ void MusicTrack::render(HTTP::Connection::p req) { req->add_header("content-type", "application/octet-stream"); if(req->args.count("decoder") && req->args.count("encoder")) { - DecoderFilter::p d = decoder::get_decoder(req->args["decoder"]); - EncoderFilter::p e = encoder::get_encoder(req->args["encoder"]); - Transcoder t(path.string(), req, d, e); - t.run(); + Decoder::p decoder = Decoder::get(req->args["decoder"], path.string()); + Encoder::p encoder = Encoder::get(req->args["encoder"], decoder); + + // TODO: Make an encoder-to-istream adapter to get rid of this: + char data[0x1000]; + std::streamsize size = 1; + while(size) { + size = encoder->read(data, 0x1000); + if(size > 0) + req->send_data(data, size); + } + } else { fs::ifstream is(path, std::ios::in | std::ios::binary); is.seekg(0, std::ios::end); |