X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fstreamer.cpp;h=bca08a2f06ea02c6ff357e90e42ba40ded4c02a7;hb=6cc0f1735a00e8f9eb80ff0c9468fb67205f6d20;hp=99503b9b70a013e9a3266dda1e95ba7f56d76e68;hpb=97dae493948466867b9f661f45e451711dd6b41b;p=libs%2Fal.git diff --git a/source/streamer.cpp b/source/streamer.cpp index 99503b9..bca08a2 100644 --- a/source/streamer.cpp +++ b/source/streamer.cpp @@ -1,12 +1,5 @@ -/* $Id$ - -This file is part of libmspal -Copyright © 2008 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include "buffer.h" -#include "sound.h" +#include "sounddecoder.h" #include "streamer.h" using namespace std; @@ -16,7 +9,7 @@ namespace AL { Streamer::Streamer(Source &s): src(s), - snd(0) + decoder(0) { } Streamer::~Streamer() @@ -27,22 +20,22 @@ Streamer::~Streamer() delete *i; } -void Streamer::play(Sound &s) +void Streamer::play(SoundDecoder &s) { - snd=&s; + decoder = &s; tick(); src.play(); } void Streamer::stop() { - snd=0; + decoder = 0; src.stop(); } void Streamer::tick() { - if(unsigned n=src.get_buffers_processed()) + if(unsigned n = src.get_buffers_processed()) { for(unsigned i=0; iget_frequency(); - unsigned chunk_size=freq&~0xF; - unsigned queued=src.get_buffers_queued(); + if(src.get_state()!=PLAYING && src.get_state()!=PAUSED) + src.play(); + + unsigned freq = decoder->get_frequency(); + unsigned chunk_size = freq&~0xF; + unsigned queued = src.get_buffers_queued(); + vector data(chunk_size); for(unsigned i=queued; i<4; ++i) { - char data[chunk_size]; - unsigned pos=0; + unsigned pos = 0; while(posread(data+pos, chunk_size-pos); + unsigned len = decoder->read(&data[0]+pos, chunk_size-pos); if(len==0) break; - pos+=len; + pos += len; } if(pos) { - Buffer *buf=new Buffer; - buf->data(snd->get_format(), data, pos, freq); + Buffer *buf = new Buffer; + buf->data(decoder->get_format(), &data[0], pos, freq); src.queue_buffer(*buf); buffers.push_back(buf); } } - if(snd->eof()) - snd=0; + if(decoder->eof()) + decoder = 0; } } // namespace AL