Merge branch 'master' of https://vcs.maemo.org/git/groove
[groove] / mpgplayer.cpp
1 #include "mpgplayer.h"
2 #include "pulse/simple.h"
3 #include <QFile>
4 mpgplayer::mpgplayer(QObject *parent) :
5     QThread(parent)
6 {
7     net = TWait;
8     playing=false;
9
10
11 }
12 void mpgplayer::run()
13 {
14     if(mpg123_init() != MPG123_OK)
15         qDebug("Error initilizing mpg123");
16     const char **test = mpg123_supported_decoders();
17     int error;
18     mpg123_handle *mh = mpg123_new(test[0],&error);
19     if(!mpg123_feature(MPG123_FEATURE_DECODE_LAYER3))
20     {
21         qDebug("You do not seem to have mp3 decoding support");
22         return;
23     }
24     mpg123_format_none(mh);
25     if(mpg123_format(mh,samplerate,MPG123_STEREO,MPG123_ENC_SIGNED_16)!=MPG123_OK)
26         qDebug("Error in initilizing format decoder");
27     qDebug(test[0]);
28     mpg123_open(mh,"/home/eli/Projects/groove-evan/Animal.mp3");
29     net = TData;
30     pa_simple *s;
31     pa_sample_spec ss;
32     ss.format = PA_SAMPLE_S16NE;
33     ss.rate = samplerate;
34     ss.channels = 2;
35     s =pa_simple_new(NULL,"Groove",PA_STREAM_PLAYBACK ,NULL,"Music",&ss,NULL,NULL,NULL);
36
37     unsigned char bytes[1024];
38     size_t bsize = 1024;
39     size_t done = 0;
40     bool stop = false;
41     playing=true;
42     while(!stop)
43     {
44         switch(net)
45         {
46         case TWait: usleep(100); break;
47         case TData:
48             if(mpg123_read(mh,bytes,bsize,&done)==MPG123_DONE)
49             {
50                 net=TFinish;
51             }
52             pa_simple_write(s,bytes,done,&error);
53             break;
54         case TAbort:
55             stop = true;
56             break;
57         case TFinish:
58             pa_simple_drain(s,&error);
59             stop = true;
60             break;
61         default: break;
62         }
63     }
64     qDebug("Finsihed playback");
65     pa_simple_free(s);
66
67     mpg123_exit();
68 }
69
70 void mpgplayer::setPlaylist(playlist *playList)
71 {
72     this->pl = playList;
73     connect(pl,SIGNAL(bufferReady(int)),this,SLOT(start(int)));
74     connect(pl,SIGNAL(downloadProgress(int,qint64,qint64)),this,SLOT(putb(int,qint64,qint64)));
75     //connect(pl,SIGNAL(downloadComplete(int)),this,SLOT(start(int)));
76
77 }
78 void mpgplayer::markComplete()
79 {
80
81 }
82 void mpgplayer::updatePlayPosition(qint64 time)
83 {
84     //qDebug() << time << ":" << media->totalTime();
85 }
86
87 void mpgplayer::pause()
88 {
89     if(playing)
90         net = TWait;
91     else
92         net = TData;
93     playing = !playing;
94 }
95 void mpgplayer::playNext()
96 {
97
98 }
99
100 mpgplayer::~mpgplayer()
101 {
102
103 }
104 void mpgplayer::back()
105 {
106
107 }
108
109 void mpgplayer::abortDownload()
110 {
111     //pd->hide();
112     //reply->abort();
113 }
114
115 void mpgplayer::play()
116 {
117
118 }
119 void mpgplayer::play(int p)
120 {
121
122 }
123
124 void mpgplayer::stop()
125 {
126
127
128 }
129
130 void mpgplayer::putb(int p, qint64 b, qint64 t)
131 {
132     //qDebug() << "Download: " << b << "Total: " << t;
133     if(p == pl->currentplaying())
134     {
135         if(pl->bReady(p))
136         {
137         }
138     }
139 }