1 /*!
2 * @file musicplayer.cpp
3 * Copyright (c) 2018
4 * @brief des
5 * detailed des
6 *
7 * @date 2018
8 * @author lee
9 */
10 #include "musicplayer.h"
11 #include "ui_musicplayer.h"
12 #include "frmmessagebox.h"
13 #include "mediahome.h"
14
15 #include <QMutex>
16 #include <QMutexLocker>
17 #include <QDebug>
18 #include <QDateTime>
19 #include <QPropertyAnimation>
20 #include "audiosink.h"
21 #include "audioplayer.h"
22
23 MusicPlayer *MusicPlayer::self = NULL;
24 /**************************************
25 Function:
26 Description:
27 ***************************************/
Instance(QWidget * parent)28 MusicPlayer *MusicPlayer::Instance(QWidget *parent)
29 {
30 if (self == NULL) {
31 QMutex mutex;
32 QMutexLocker locker(&mutex);
33 if (self == NULL) {
34 self = new MusicPlayer(parent);
35 }
36 }
37 return self;
38 }
39
40 /**************************************
41 Function:
42 Description:
43 ***************************************/
MusicPlayer(QWidget * parent)44 MusicPlayer::MusicPlayer(QWidget *parent) :
45 QWidget(parent),
46 ui(new Ui::MusicPlayer),
47 ap(NULL),
48 m_totalDuration(0),
49 m_curDuration(0),
50 m_bPlayState(STOPPED),
51 m_bMusicListOpen(false),
52 m_bSearchDialogOpen(false),
53 m_curMusicFilePath(""),
54 m_curMusicFileCount(-1),
55 m_curPlayOrderState(0),
56 m_pSearchDialog(NULL),
57 m_nextPlayOrderState(1)
58
59 {
60 pStaticMusicPlayer = this;
61
62 ui->setupUi(this);
63 setWindowFlags(this->windowFlags()|Qt::FramelessWindowHint);
64 setAttribute(Qt::WA_DeleteOnClose);//the ~CameraSetting will be call when func close() run
65
66 m_commonFunction = new CommonFunction ;
67
68 ui->posterLabel->setPixmap(QPixmap(":/images/playerIcons/MusicPoster.png"));
69
70 ui->setttingButton->setIcon(QIcon(":/images/playerIcons/headphone.png"));
71 ui->setttingButton->setIconSize(QSize(50,50));
72
73 //m_pPlayList = PlayList::Instance(this);
74 //m_pPlayList->move(1024,50);
75 //connect(this, SIGNAL(hidePlayList()), m_pPlayList, SLOT(hidePlayList()));
76 //connect(this,SIGNAL(showPlayList()),m_pPlayList,SLOT(showPlayList()));
77
78 //connect(m_pPlayList,SIGNAL(notifyMusicPlayerToPlay(QList<QFileInfo>,int,int)),\
79 // this,SLOT(on_notifyMusicPlayerToPlay(QList<QFileInfo>,int,int)));
80 //connect(m_pPlayList,SIGNAL(notifyMusicPlayerListChanged(QList<QFileInfo>,int)),\
81 // this,SLOT(on_notifyMusicPlayerListChanged(QList<QFileInfo>,int)));
82
83 progressSliderTimer = new QTimer(this);
84 connect(progressSliderTimer,SIGNAL(timeout()),this,SLOT(timerUpdate()));
85
86 connect(ui->progressSlider,SIGNAL(sliderMoved(int)),this,SLOT(onProgressSliderMoved(int)));
87 connect(ui->progressSlider,SIGNAL(sliderReleased()),this,SLOT(onProgressSliderReleased()));
88
89 connect(ui->return_btn,SIGNAL(clicked()),this,SLOT(on_return_btn_clicked()));
90
91 connect(this, SIGNAL(msgSignal(int,void*,void*,int)),
92 this, SLOT(doMsgCmd(int,void*,void*,int)));
93 ui->playListButton->hide();
94 ui->nextMusicButton->hide();
95 ui->preMusicButton->hide();
96 ui->playOrderButton->hide();
97 m_outType = AudioSink::CODEC_OUT;
98 }
99
100
101 /**************************************
102 Function:
103 Description:
104 ***************************************/
~MusicPlayer()105 MusicPlayer::~MusicPlayer()
106 {
107 delete ui;
108 delete m_commonFunction;
109 m_commonFunction = NULL;
110 self = NULL;
111 if(ap != NULL){
112 delete ap;
113 ap = NULL;
114 }
115 }
116
117 /**************************************
118 Function:
119 Description:
120 ***************************************/
initAutPlayer()121 void MusicPlayer::initAutPlayer()
122 {
123 fprintf(stderr, "%s %d\n", __func__,__LINE__);
124 if(m_curMusicFilePath.isEmpty())
125 {
126 qDebug()<<"file path is emtpy";
127 }
128 fprintf(stderr, "%s %d\n", __func__,__LINE__);
129 if(ap != NULL){
130 delete ap;
131 ap = NULL;
132 }
133 fprintf(stderr, "%s %d\n", __func__,__LINE__);
134 ap = new AudioPlayer(m_outType);
135 if(ap == NULL){
136 qDebug()<<"new AutPlayer error";
137 return ;
138 }
139 fprintf(stderr, "%s %d\n", __func__,__LINE__);
140 m_bPlayState = STOPPED;
141
142 int ret = ap->setUrl((char*)m_curMusicFilePath.toLatin1().data());
143 if(ret != 0){
144 qDebug()<<"this video set url errror";
145 return;
146 }
147 fprintf(stderr, "%s %d\n", __func__,__LINE__);
148 //ap->setUserCb(autMusicCb_func, this);
149
150 m_totalDuration = ap->getDuration() / 1000;
151 ui->progressSlider->setRange(0, m_totalDuration);
152 qDebug()<<"m_totalDuration ms:" << m_totalDuration * 1000;
153 m_curDuration=0;
154
155 ui->totalTimeLabel->setText(getTimeStr(m_totalDuration,m_totalDuration));
156 ui->curTimeLabel->setText(getTimeStr(m_curDuration,m_totalDuration));
157 ap->start();
158
159 fprintf(stderr, "%s %d\n", __func__,__LINE__);
160 ui->playButton->setIcon(QIcon(":/images/playerIcons/Pause.png"));
161 ui->playButton->setIconSize(QSize(50,50));
162 m_bPlayState = PLAYING;
163
164 progressSliderTimer->start(1000);
165 }
166
167 /**************************************
168 Function:
169 Description:
170 ***************************************/
timerUpdate()171 void MusicPlayer::timerUpdate()
172 {
173 if (ap == NULL)
174 return ;
175 m_curDuration = ap->getCurrentPosition();
176 ui->progressSlider->setValue(m_curDuration / 1000);
177 updateDurationInfo(m_curDuration / 1000 + 1);
178 }
179
180 /**************************************
181 Function:
182 Description:
183 ***************************************/
updateDurationInfo(qint64 currentInfo)184 void MusicPlayer::updateDurationInfo(qint64 currentInfo)
185 {
186 QString tStr;
187
188 if (ap == NULL)
189 return ;
190
191 if(currentInfo>= m_totalDuration)
192 {
193 currentInfo = 0;
194 ui->progressSlider->setValue(0);
195 m_bPlayState = STOPPED;
196 ui->playButton->setIcon(QIcon(":/images/playerIcons/Play.png"));
197 ui->playButton->setIconSize(QSize(50,50));
198 ap->stop();
199 progressSliderTimer->stop();
200 }
201
202 tStr=getTimeStr(currentInfo,m_totalDuration);
203 ui->curTimeLabel->setText(tStr);
204 }
205
206 /**************************************
207 Function:
208 Description:
209 ***************************************/
onProgressSliderMoved(int value)210 void MusicPlayer::onProgressSliderMoved(int value)
211 {
212 qDebug()<<"slider is moved"<<value;
213 progressSliderTimer->stop();
214 if (!ui->progressSlider->isSliderDown()) {
215 ui->progressSlider->setValue(value);
216 }
217 ui->progressSlider->setValue(value);
218 updateDurationInfo(value);
219 progressSliderTimer->start(1000);
220 }
221
222 /**************************************
223 Function:
224 Description:
225 ***************************************/
onProgressSliderReleased()226 void MusicPlayer::onProgressSliderReleased()
227 {
228 qDebug()<<"slider is released";
229 if(m_bPlayState == PAUSEED)
230 on_playButton_clicked();
231 progressSliderTimer->stop();
232 m_bPlayState = SEEKING;
233 if(ap != NULL){
234 ap->seekto(ui->progressSlider->value() * 1000);
235 }
236 progressSliderTimer->start(1000);
237
238 m_bPlayState = PLAYING;
239
240 }
241
242 /**************************************
243 Function:
244 Description:
245 ***************************************/
startPlay()246 void MusicPlayer::startPlay()
247 {
248 bool isExist = m_commonFunction->fileExistOrNot(m_curMusicFilePath);
249 if(!isExist){
250 qDebug()<<"file exist";
251 frmMessageBox *msg = new frmMessageBox(this);
252 msg->SetMessage(QString("文件不存在!"),0);
253 msg->exec();
254 return;
255 }
256 //if(!m_commonFunction->video_support_or_not(this,m_curMusicFilePath)){
257 // qDebug()<<"format not support";
258 // return ;
259 //}
260 initAutPlayer();
261 getMusicInfo(m_curMusicFilePath);
262 }
263
264 /**************************************
265 Function:
266 Description:
267 ***************************************/
stopPlay()268 void MusicPlayer::stopPlay()
269 {
270 if(ap != NULL){
271 ap->stop();
272 }
273 }
274 /**************************************
275 Function:
276 Description:
277 ***************************************/
on_notifyMusicPlayerToPlay(QList<QFileInfo> playList,int row,int listType)278 void MusicPlayer::on_notifyMusicPlayerToPlay(QList<QFileInfo> playList,int row,int listType)
279 {
280 //hide the playlist
281 emit hidePlayList();
282 m_bMusicListOpen = false;
283
284 if(listType == 0){
285 if(m_playList_udisk != playList){
286 qDebug()<<"on_notifyMusicPlayerToPlay set list wrong";
287 }else{
288 m_playList_udisk = playList;
289 }
290 m_playList = m_playList_udisk;
291 }else if(listType == 1){
292 if(m_playList_favorite != playList){
293 qDebug()<<"on_notifyMusicPlayerToPlay set list wrong";
294 }else{
295 m_playList_favorite = playList;
296 }
297 m_playList = m_playList_favorite;
298 }
299
300 m_playList = playList;
301 if(m_playList.count() < row){
302 qDebug()<<"playlist is wrong";
303 return;
304 }
305 m_curMusicFilePath = m_playList.at(row).absoluteFilePath();
306 m_curMusicFileCount = row;
307
308 startPlay();
309 }
310
311 /**************************************
312 Function:
313 Description:
314 ***************************************/
on_notifyMusicPlayerListChanged(QList<QFileInfo> playList,int listType)315 void MusicPlayer::on_notifyMusicPlayerListChanged(QList<QFileInfo> playList,int listType)
316 {
317
318 if(listType == 0){
319 qDebug()<<"m_playList_udisk has been update";
320 m_playList_udisk = playList;
321 }else if(listType == 1){
322 qDebug()<<"m_playList_favorite has been update";
323 m_playList_favorite = playList;
324 }
325 }
326
327 /**************************************
328 Function:
329 Description:
330 ***************************************/
on_playButton_clicked()331 void MusicPlayer::on_playButton_clicked()
332 {
333 qDebug()<<"MusicPlayer::on_playButton_clicked()";
334 int ret=0;
335 if(ap != NULL){
336 if (m_bPlayState == PAUSEED){
337 ap->start();
338 m_bPlayState = PLAYING;
339 ui->playButton->setIcon(QIcon(":/images/playerIcons/Pause.png"));
340 }
341 else if(m_bPlayState == PLAYING){
342 ap->pause();
343 m_bPlayState = PAUSEED;
344 ui->playButton->setIcon(QIcon(":/images/playerIcons/Play.png"));
345 }
346 else if(m_bPlayState == STOPPED){
347 initAutPlayer();
348 }
349 }
350 }
351
352 /**************************************
353 Function:
354 Description:
355 ***************************************/
on_preMusicButton_clicked()356 void MusicPlayer::on_preMusicButton_clicked()
357 {
358 qDebug()<<"on_preMusicButton_clicked,here";
359 if(m_curMusicFileCount -1 >= 0){
360 m_curMusicFileCount--;
361 m_curMusicFilePath = m_playList.at(m_curMusicFileCount).absoluteFilePath();
362 progressSliderTimer->stop();
363 stopPlay();
364 startPlay();
365 }else{
366 return ;
367 }
368 }
369
370 /**************************************
371 Function:
372 Description:
373 ***************************************/
on_nextMusicButton_clicked()374 void MusicPlayer::on_nextMusicButton_clicked()
375 {
376 qDebug()<<"on_nextMusicButton_clicked,here";
377 if(m_curMusicFileCount + 1 < m_playList.count()){
378 m_curMusicFileCount++;
379 m_curMusicFilePath = m_playList.at(m_curMusicFileCount).absoluteFilePath();\
380 progressSliderTimer->stop();
381 stopPlay();
382 startPlay();
383 }else{
384 return ;
385 }
386 }
387
388 /**************************************
389 Function:
390 Description:
391 ***************************************/
on_searchButton_clicked()392 void MusicPlayer::on_searchButton_clicked()
393 {
394 qDebug()<<"on_searchButton_clicked";
395
396
397 if(m_pSearchDialog == NULL){
398 m_pSearchDialog = new searchFileDialog(0,this);
399
400 connect(m_pSearchDialog,SIGNAL(notifyMusicPlayerAddFile(QString)),\
401 this,SLOT(on_notifyMusicPlayerAddFile(QString)));
402
403 connect(m_pSearchDialog,SIGNAL(notifyMusicCancelSearch()),\
404 this,SLOT(on_notifyMusicCancelSearch()));
405 }
406
407 if(m_bSearchDialogOpen == false){
408 m_bSearchDialogOpen = true;
409 m_pSearchDialog->showD();
410 } else {
411 m_bSearchDialogOpen = false;
412 m_pSearchDialog->hide();
413 }
414 }
415
416 /**************************************
417 Function:
418 Description:
419 ***************************************/
420 /*
421 void MusicPlayer::on_playListButton_clicked()
422 {
423 qDebug()<<"on_playListButton_clicked";
424
425 if(m_pPlayList == NULL){
426 qDebug()<<"new";
427 m_pPlayList = PlayList::Instance(this);
428 m_pPlayList->move(1024,50);
429 }
430 qDebug()<<"already exisit";
431 if(!m_bMusicListOpen){
432 qDebug()<<"show!!!!";
433 emit showPlayList();
434 m_bMusicListOpen = true;
435 } else {
436 qDebug()<<"hide!!!";
437 emit hidePlayList();
438 m_bMusicListOpen = false;
439 }
440 }
441 */
442
443 /**************************************
444 Function:
445 Description:
446 //some operation when MusicPlayer get focus
447 //通过焦点实现的方法还需要进一步测试,存在bug
448 ***************************************/
449
focusInEvent(QFocusEvent *)450 void MusicPlayer::focusInEvent(QFocusEvent*)
451 {
452 qDebug()<<"Musicplayer get focus";
453 if(m_bMusicListOpen == true){
454 emit hidePlayList();
455 m_bMusicListOpen = false;
456 }
457 }
458
459
460 /**************************************
461 Function:
462 Description:
463 ***************************************/
on_playOrderButton_clicked()464 void MusicPlayer::on_playOrderButton_clicked()
465 {
466 switch(m_nextPlayOrderState){
467 case 0:
468 qDebug()<<"now is random play";
469 ui->playOrderButton->setIcon(QIcon(":/images/playerIcons/randomPlay.png"));
470 m_curPlayOrderState = 0;
471 m_nextPlayOrderState = 1;
472 break;
473 case 1:
474 qDebug()<<"now is sequence play";
475 ui->playOrderButton->setIcon(QIcon(":/images/playerIcons/playlist2.png"));
476 m_curPlayOrderState = 1;
477 m_nextPlayOrderState = 2;
478 break;
479 case 2:
480 qDebug()<<"now is circle play";
481 ui->playOrderButton->setIcon(QIcon(":/images/playerIcons/playlistRepeat.png"));
482 m_curPlayOrderState = 2;
483 m_nextPlayOrderState = 0;
484 break;
485 }
486 }
487
488 /**************************************
489 Function:
490 Description:
491 ***************************************/
on_setttingButton_clicked()492 void MusicPlayer::on_setttingButton_clicked()
493 {
494 if (m_outType == AudioSink::HDMI_OUT){
495 m_outType = AudioSink::CODEC_OUT;
496
497 ui->setttingButton->setIcon(QIcon(":/images/playerIcons/headphone.png"));
498 ui->setttingButton->setIconSize(QSize(50,50));
499 } else if (m_outType == AudioSink::CODEC_OUT){
500 m_outType = AudioSink::WM8960_OUT;
501
502 ui->setttingButton->setIcon(QIcon(":/images/playerIcons/wm8960.png"));
503 ui->setttingButton->setIconSize(QSize(50,50));
504 } else if (m_outType == AudioSink::WM8960_OUT) {
505 m_outType = AudioSink::HDMI_OUT;
506
507 ui->setttingButton->setIcon(QIcon(":/images/playerIcons/hdmi.png"));
508 ui->setttingButton->setIconSize(QSize(50,50));
509 }
510 if (ap)
511 ap->setOutType(m_outType);
512 }
513
514 /**************************************
515 Function:
516 Description:
517 ***************************************/
on_pushButton_clicked()518 void MusicPlayer::on_pushButton_clicked()
519 {
520 if(ap!=NULL){
521 ap->stop();
522 }
523 this->close();
524 system("fbinit");
525 }
526
527 /**************************************
528 Function:
529 Description:
530 ***************************************/
getMusicInfo(QString path)531 void MusicPlayer::getMusicInfo(QString path)
532 {
533 MusicInfoThread* thread = new MusicInfoThread(path, this);
534 connect(thread,SIGNAL(complete(QString,QString,QString,QPixmap)),\
535 this,SLOT(setMusicInfo(QString ,QString ,QString ,QPixmap )));
536 thread->start();
537 }
538
539 /**************************************
540 Function:
541 Description:
542 ***************************************/
setMusicInfo(QString albumName,QString musicName,QString singerName,QPixmap poster)543 void MusicPlayer::setMusicInfo(QString albumName,QString musicName,QString singerName,QPixmap poster)
544 {
545 m_albumName = albumName;
546 m_musicName = musicName;
547 m_singerName = singerName;
548 m_poster = poster;
549 if(!m_albumName.isEmpty()){
550 ui->albumTextLabel->setText(m_albumName);
551 }else{
552 ui->albumTextLabel->setText("未知专辑");
553 }
554 if(!m_musicName.isEmpty()){
555 ui->MusicTextLabel->setText(m_musicName);
556 }else{
557 ui->MusicTextLabel->setText("未知音乐名");
558 }
559 if(!m_singerName.isEmpty()){
560 ui->artistTextLabel->setText(m_singerName);
561 }else{
562 ui->artistTextLabel->setText("未知艺术家");
563 }
564 if(!m_poster.isNull()){
565 ui->posterLabel->clear();
566 ui->posterLabel->setPixmap(m_poster);
567 }else{
568 ui->posterLabel->clear();
569 ui->posterLabel->setPixmap(QPixmap(":/images/playerIcons/MusicPoster.png"));
570 }
571 }
572
573
574 /**************************************
575 Function:
576 Description:
577 ***************************************/
on_return_btn_clicked()578 void MusicPlayer::on_return_btn_clicked()
579 {
580 if(m_bSearchDialogOpen == true){
581 m_bSearchDialogOpen = false;
582 m_pSearchDialog->hide();
583 }
584
585 this->close();
586 pGlobalMediaHome->distype=0;
587 pGlobalMediaHome->setHidden(false);
588 }
589
590
591 /**************************************
592 Function:
593 Description:
594 ***************************************/
on_notifyMusicPlayerAddFile(QString strpath)595 void MusicPlayer::on_notifyMusicPlayerAddFile(QString strpath)
596 {
597 qDebug()<<"on_notifyMusicPlayerAddFile ";
598 m_curMusicFilePath = strpath;
599 if(m_bSearchDialogOpen == true){
600 m_bSearchDialogOpen = false;
601 m_pSearchDialog->hide();
602 }
603
604 if (m_bPlayState != STOPPED){
605 ap->stop();
606 progressSliderTimer->stop();
607 ui->progressSlider->setValue(0);
608 m_bPlayState = STOPPED;
609 ui->playButton->setIcon(QIcon(":/images/playerIcons/Play.png"));
610 ui->playButton->setIconSize(QSize(50,50));
611 }
612 startPlay();
613 }
614
615
616 /**************************************
617 Function:
618 Description:
619 ***************************************/
on_notifyMusicCancelSearch()620 void MusicPlayer::on_notifyMusicCancelSearch()
621 {
622 qDebug()<<"on_notifyMusicCancelSearch ";
623
624 if(m_bSearchDialogOpen == true){
625 m_bSearchDialogOpen = false;
626 m_pSearchDialog->hide();
627 }
628
629 }
630
631
632 /**************************************
633 Function:
634 Description:
635 ***************************************/
doMsgCmd(int msgType,void * user,void * data,int len)636 void MusicPlayer::doMsgCmd(int msgType, void* user,void* data,int len)
637 {
638
639 switch(msgType)
640 {
641 case 128:
642 break;
643 case SUBCTRL_SUBTITLE_AVAILABLE:
644 break;
645 case SUBCTRL_SUBTITLE_EXPIRED:
646 break;
647 case AWPLAYER_MEDIA_PREPARED:
648 break;
649 case AWPLAYER_MEDIA_PLAYBACK_COMPLETE:
650 on_nextMusicButton_clicked();
651 break;
652 case AWPLAYER_MEDIA_SEEK_COMPLETE:
653
654 break;
655 case AWPLAYER_MEDIA_STARTED:
656 break;
657 case AWPLAYER_MEDIA_LOG_RECORDER:
658 break;
659 case AWPLAYER_MEDIA_BUFFERING_UPDATE:
660 break;
661 case AWPLAYER_MEDIA_ERROR:
662 break;
663 case AWPLAYER_MEDIA_INFO:
664 break;
665 case AWPLAYER_MEDIA_SET_VIDEO_SIZE:
666 break;
667 default:
668 break;
669 }
670 }
671
672 /**************************************
673 Function:
674 Description:
675 ***************************************/
autMusicCb_func(int msgType,void * user,void * data,int len)676 int MusicPlayer::autMusicCb_func(int msgType, void* user,void* data,int len)
677 {
678 emit pStaticMusicPlayer->msgSignal(msgType,user,data,len);
679 }
680
681
682 /**************************************
683 Function:
684 Description:
685 ***************************************/
MusicInfoThread(QString path,QObject * parent)686 MusicInfoThread::MusicInfoThread(QString path,QObject *parent)
687 : m_filepath(path),
688 QThread(parent)
689 {
690 qDebug() << "MusicInfoThread Thread : " << QThread::currentThreadId();
691 commonfunc = new CommonFunction;
692 m_albumName = QString("");
693 m_musicName = QString("");
694 m_singerName = QString("");
695 m_poster = QPixmap();
696 }
697
698 /**************************************
699 Function:
700 Description:
701 ***************************************/
~MusicInfoThread()702 MusicInfoThread::~MusicInfoThread()
703 {
704 qDebug()<<"~MusicInfoThread";
705 }
706
707 /**************************************
708 Function:
709 Description:
710 ***************************************/
run()711 void MusicInfoThread::run()
712 {
713 qDebug() << "MusicInfoThread run in Thread : " << QThread::currentThreadId();
714 qDebug()<<"the file's absoluteFilePath is"<<m_filepath;
715
716 XRetriever *demoRetriver = XRetrieverCreate();
717 if(NULL == demoRetriver){
718 printf("XRetrieverCreate failed\n");
719 }
720 int ret = XRetrieverSetDataSource(demoRetriver, (char*)m_filepath.toLatin1().data(), NULL);
721 if(ret < 0){
722 printf("set datasource failed\n");
723 }
724 printf("XRetrieverSetDataSource end\n");
725 CdxMediaInfoT mi;
726 XRetrieverGetMetaData(demoRetriver, METADATA_MEDIAINFO, &mi);
727 printf("the video information:titile[64]=[%.02x %.02x %.02x %.02x %.02x]\n",mi.title[0],mi.title[1],mi.title[2],mi.title[3],mi.title[4]);
728 printf("the video information:album[64]=[%s] ,albumsz=%d,genre[64]=%s,genresz=%d,title[64]=%s,titlesz=%d,year[64]=%s,yearsz=%d,composer[64]=%s,date[64]=%s\n",
729 mi.album,mi.albumsz,mi.genre,mi.genresz,mi.title,mi.titlesz,mi.year,mi.yearsz,mi.composer,mi.date);
730
731 if(mi.albumsz!=0){
732 m_albumName = commonfunc->print_info(mi.album,mi.albumsz);
733 qDebug()<<"album is"<<m_albumName;
734 }
735 if(mi.titlesz!=0){
736 m_musicName = commonfunc->print_info(mi.title,mi.titlesz);
737 qDebug()<<"title is"<<m_musicName;
738 }
739 if(mi.authorsz!=0){
740 m_singerName = commonfunc->print_info(mi.author,mi.authorsz);
741 qDebug()<<"author is"<< m_singerName;
742 }
743 else if(mi.artistsz!=0){
744 m_singerName = commonfunc->print_info(mi.artist,mi.artistsz);
745 qDebug()<<"artist is"<< m_singerName;
746 }
747 if(mi.nAlbumArtBufSize != 0){
748 qDebug()<<"this music has poster";
749 QImage img = QImage::fromData((const uchar*)mi.pAlbumArtBuf,mi.nAlbumArtBufSize);
750 QImage imgScaled = img.scaled(320,260,Qt::KeepAspectRatio);
751 m_poster.convertFromImage(imgScaled);
752 }
753
754 emit complete(m_albumName,m_musicName,m_singerName,m_poster);
755
756 XRetrieverDestory(demoRetriver);
757 demoRetriver = NULL;
758 return ;
759 }
760