xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/allwinner/MediaUI/player/musicplayer.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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