Update to reflect api changes and small patch for alternate audio
[groove] / mpgplayer.cpp
diff --git a/mpgplayer.cpp b/mpgplayer.cpp
new file mode 100644 (file)
index 0000000..dd81394
--- /dev/null
@@ -0,0 +1,139 @@
+#include "mpgplayer.h"
+#include "pulse/simple.h"
+#include <QFile>
+mpgplayer::mpgplayer(QObject *parent) :
+    QThread(parent)
+{
+    net = TWait;
+    playing=false;
+
+
+}
+void mpgplayer::run()
+{
+    if(mpg123_init() != MPG123_OK)
+        qDebug("Error initilizing mpg123");
+    const char **test = mpg123_supported_decoders();
+    int error;
+    mpg123_handle *mh = mpg123_new(test[0],&error);
+    if(!mpg123_feature(MPG123_FEATURE_DECODE_LAYER3))
+    {
+        qDebug("You do not seem to have mp3 decoding support");
+        return;
+    }
+    mpg123_format_none(mh);
+    if(mpg123_format(mh,samplerate,MPG123_STEREO,MPG123_ENC_SIGNED_16)!=MPG123_OK)
+        qDebug("Error in initilizing format decoder");
+    qDebug(test[0]);
+    mpg123_open(mh,"/home/eli/Projects/groove-evan/Animal.mp3");
+    net = TData;
+    pa_simple *s;
+    pa_sample_spec ss;
+    ss.format = PA_SAMPLE_S16NE;
+    ss.rate = samplerate;
+    ss.channels = 2;
+    s =pa_simple_new(NULL,"Groove",PA_STREAM_PLAYBACK ,NULL,"Music",&ss,NULL,NULL,NULL);
+
+    unsigned char bytes[1024];
+    size_t bsize = 1024;
+    size_t done = 0;
+    bool stop = false;
+    playing=true;
+    while(!stop)
+    {
+        switch(net)
+        {
+        case TWait: usleep(100); break;
+        case TData:
+            if(mpg123_read(mh,bytes,bsize,&done)==MPG123_DONE)
+            {
+                net=TFinish;
+            }
+            pa_simple_write(s,bytes,done,&error);
+            break;
+        case TAbort:
+            stop = true;
+            break;
+        case TFinish:
+            pa_simple_drain(s,&error);
+            stop = true;
+            break;
+        default: break;
+        }
+    }
+    qDebug("Finsihed playback");
+    pa_simple_free(s);
+
+    mpg123_exit();
+}
+
+void mpgplayer::setPlaylist(playlist *playList)
+{
+    this->pl = playList;
+    connect(pl,SIGNAL(bufferReady(int)),this,SLOT(start(int)));
+    connect(pl,SIGNAL(downloadProgress(int,qint64,qint64)),this,SLOT(putb(int,qint64,qint64)));
+    //connect(pl,SIGNAL(downloadComplete(int)),this,SLOT(start(int)));
+
+}
+void mpgplayer::markComplete()
+{
+
+}
+void mpgplayer::updatePlayPosition(qint64 time)
+{
+    //qDebug() << time << ":" << media->totalTime();
+}
+
+void mpgplayer::pause()
+{
+    if(playing)
+        net = TWait;
+    else
+        net = TData;
+    playing = !playing;
+}
+void mpgplayer::playNext()
+{
+
+}
+
+mpgplayer::~mpgplayer()
+{
+
+}
+void mpgplayer::back()
+{
+
+}
+
+void mpgplayer::abortDownload()
+{
+    //pd->hide();
+    //reply->abort();
+}
+
+void mpgplayer::play()
+{
+
+}
+void mpgplayer::play(int p)
+{
+
+}
+
+void mpgplayer::stop()
+{
+
+
+}
+
+void mpgplayer::putb(int p, qint64 b, qint64 t)
+{
+    //qDebug() << "Download: " << b << "Total: " << t;
+    if(p == pl->currentplaying())
+    {
+        if(pl->bReady(p))
+        {
+        }
+    }
+}