summaryrefslogtreecommitdiff
path: root/music.cpp
diff options
context:
space:
mode:
authorVegard Storheil Eriksen <zyp@jvnv.net>2011-01-06 05:29:39 +0100
committerVegard Storheil Eriksen <zyp@jvnv.net>2011-01-06 05:29:47 +0100
commit6f2fefdd9ff5f8561b3538efb5eb0765a9b4a141 (patch)
treede37cd2d500a777344b611321ac45bce66ad5c26 /music.cpp
parentffd8b5976af7e80425c7cf043528212528877b16 (diff)
Replaced iostream-based decoder-encoder chain with direct chain.
Diffstat (limited to 'music.cpp')
-rw-r--r--music.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/music.cpp b/music.cpp
index 3e0ac14..3faa10b 100644
--- a/music.cpp
+++ b/music.cpp
@@ -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);