#include "emovie.h"
#include "emovieattr.h"
#include <QLabel>
#include <QSettings>
#include <QThread>
//#include "qffwidget.h"
extern "C"{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
}
eMovie::eMovie(QRectF rectInit,const QString &file,QWidget *pp,InteractiveType type, QGraphicsItem *parent) :
    eObject(rectInit,type, parent)
{
     m_iType=eObject::Movie;
    qDebug()<<"eMovie::eMovie";
    QFileInfo fi(file);
    m_attr.strRawName = fi.fileName();
    m_attr.strRawPath = fi.absolutePath();

    //   qDebug()<<"ConvertVideoFormat";
    if(!file.isNull()) {
        QString strConvertFile=ConvertVideoFormatByFFmpeg(file);
        QFileInfo outfi(strConvertFile);
        m_attr.name = outfi.fileName();
        m_attr.path = outfi.absolutePath();

    }

    setPlayArg(Qt::IgnoreAspectRatio, 10, 1);
    qDebug()<<"GetVideoTimeRawSpan";


    m_attr.playDuration=GetVideoTimeRawSpan(file);

    qreal w = rectInit.width();
    qreal h = w*m_display_aspect_ratio;

    if(w>rectInit.width())
        w=rectInit.width();
    if(h>rectInit.height())
        h=rectInit.height();
    setGeometry(QRectF(0, 0, w, h));

    m_parentWidget=pp;
    init(true);
    qDebug()<<"eMovie::eMovie end";
    //InitFfmpegSdl();
}

eMovie::eMovie(const QJsonObject &json, const QString &pRoot, InteractiveType type, QGraphicsItem *parent) :
    eObject(json["geometry"].toObject(), type, parent)
{
    m_iType=eObject::Movie;
    QJsonDocument jRoot(json);
    m_attr.name = jRoot["widget"]["file"].toString();
    m_attr.path = jRoot["widget"]["path"].toString();

    QString file0 = pRoot                              + MACRO_FENGEFU + m_attr.name ;
    QString file1 = m_attr.path + MACRO_FENGEFU + m_attr.name ;
    QFile f0(file0);
    QFile f1(file1);
    QString file;
    if(f0.exists()) {
        file = file0;
    } else if(f1.exists()) {
        file = file1;
    } else {
        setGeometry(RECTF_INVALID);
        return;
    }
    QFileInfo fi(file);
    setPlayArg(jRoot["play"]["aspectRatioMode"].toInt(),
            jRoot["play"]["playDuration"].toInt(),
            jRoot["play"]["playTimes"].toInt());
    if(m_attr.playDuration<10);
    m_attr.playDuration=GetVideoTimeRawSpan(file);
    m_attr.strRawName=jRoot["widget"]["fileRaw"].toString();
    m_attr.strRawPath=jRoot["widget"]["pathRaw"].toString();
    init(false);
    //InitFfmpegSdl();
}
eMovie::~eMovie()
{
    if(m_vPlayer!=nullptr)
    {
        m_vPlayer->stop();
        delete m_vPlayer   ;

    }
    if(m_vPlayList!=nullptr)
    {
        delete m_vPlayList ;
    }
    if(m_vWidget!=nullptr)
        delete m_vWidget  ;
//    if(mPlayer!=nullptr)
//        delete mPlayer;
//    if(openGLWidget!=nullptr)
//        delete openGLWidget;


}
void eMovie::init(bool bPlay)
{
    QString file = m_attr.path + MACRO_FENGEFU + m_attr.name;

    file.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    QFile fFile(file);
    if(fFile.exists())
    {
        //alahover 20111111 -s
//        av_register_all(); /**初始化FFMPEG  调用了这个才能正常使用编码器和解码器**/
//        avformat_network_init(); /**支持打开网络文件**/
//        /**SDL初始化**/
//        if (SDL_Init(SDL_INIT_AUDIO))
//        {
//            fprintf(stderr,"Could not initialize SDL - %s. \n", SDL_GetError());
//            exit(1);
//        }
//        mPlayer = new VideoPlayer;
//        openGLWidget = new glyuvwidget(nullptr);
//        openGLWidget->setGeometry(0,0,200,200);
//        connect(mPlayer,SIGNAL(sigYuv_liuyi(uchar*,uint,uint)),this,SLOT(slotShowYuv_liuyi(uchar*,uint,uint)));
//        mPlayer->stop(true); //如果在播放则先停止
//        //这里需要再等待一段时间，目的是为了让解析视频的线程执行完成能够退出
//        QEventLoop eventloop;
//        QTimer::singleShot(100, &eventloop, SLOT(quit()));
//        eventloop.exec();

//        mPlayer->setFileName(file);//
//        mPlayer->play();
//        return;
        //alahover 20111111 -o
        m_vPlayer   = new QMediaPlayer(this);
        m_vPlayList = new QMediaPlaylist(this);
        m_vWidget   = new QGraphicsVideoItem(this);

        m_vWidget->setFlag(QGraphicsItem::ItemStacksBehindParent);
        //m_vWidget->setFlag(QGraphicsItem::ItemIgnoresParentOpacity);
        //QGraphicsItem::stackBefore()
        m_vWidget->setAspectRatioMode(static_cast<Qt::AspectRatioMode>(m_attr.aspectRatioMode));
        m_vPlayList->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
        m_vPlayer->setMuted(false);
        m_vPlayer->setPlaylist(m_vPlayList);

        m_vPlayer->setVideoOutput(m_vWidget);

        connect(this, SIGNAL(rectChanged(const QRectF &)), this, SLOT(onAdjustMovieRect()));
        onAdjustMovieRect();
        if(!bPlay)
        {
            playElectment();
            stopElectment();
        }
    }

}
//void eMovie::slotShowYuv_liuyi(uchar *ptr, uint width, uint height)
//{
//    openGLWidget->slotShowYuv(ptr,width,height);
//}
void eMovie::setElement(const QJsonObject &json, Data &attr)
{
    attr.name            = json["widget"]["file"].toString();
    attr.path            = json["widget"]["path"].toString();
    attr.strRawName      = json["widget"]["fileRaw"].toString();
    attr.strRawPath      = json["widget"]["pathRaw"].toString();
    attr.aspectRatioMode = json["play"]["aspectRatioMode"].toInt();
    attr.playDuration    = json["play"]["playDuration"].toInt();
    attr.playTimes       = json["play"]["playTimes"].toInt();
}

QWidget* eMovie::wAttr()
{
    QWidget *wObj = eObject::wAttr();
    QWidget *w = wAttrElement();
    static_cast<QBoxLayout*>(w->layout())->insertWidget(0, wObj);
    return w;
}

QWidget* eMovie::wAttrElement()
{
    eMovieAttr *w = new eMovieAttr(m_attr);
    connect(w, SIGNAL(sResChanged(const QString &,const QString &)),       this, SLOT(onResChanged(const QString &,const QString &)));
    connect(w, SIGNAL(sAttrChanged(const eMovie::Data &)), this, SLOT(onAttrChanged(const eMovie::Data &)));
    return w;
}

QJsonObject eMovie::save(const QString &pRoot)
{
    QString file0 = m_attr.path + PAGEDEL_SUFFIX + MACRO_FENGEFU + m_attr.name;
    QString file1 = m_attr.path + MACRO_FENGEFU + m_attr.name;
    QFile f0(file0);
    QFile f1(file1);

    QString old_file;
    QString new_file = pRoot + MACRO_FENGEFU + m_attr.name;
    if(f0.exists()) {
        old_file = file0;
    } else if(f1.exists()) {
        old_file = file1;
    } else {
        return QJsonObject();
    }

    QFile old_f(old_file);
    QFile new_f(new_file);
    if(!new_f.exists())
        old_f.copy(new_file);
    m_attr.path = pRoot;
    return elementJson();
}

QStringList eMovie::filesList() const
{
    QStringList list;
    list.append(m_attr.path + MACRO_FENGEFU + m_attr.name);
    return list;
}

QJsonObject eMovie::elementJson() const
{
    QJsonObject oRoot;
    QJsonObject oWidget;
    QJsonObject oPlay;
    // Interior
    oRoot["elementType"]   = "Movie";
    oRoot["elementTypeId"] = type();
    oRoot["geometry"]      = eObject::elementJson();
    // Widget
    oWidget["file"]        = m_attr.name;
    QString strtempPath=m_attr.path;
    strtempPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    oWidget["path"]        = strtempPath;
    oWidget["fileRaw"]        = m_attr.strRawName;
    QString strtempRawPath=m_attr.strRawPath;
    strtempRawPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    oWidget["pathRaw"]        = strtempRawPath;


    oRoot["widget"]        = oWidget;
    // Play
    oPlay["aspectRatioMode"] = m_attr.aspectRatioMode;
    oPlay["playDuration"]    = m_attr.playDuration;
    oPlay["playTimes"]       = m_attr.playTimes;
    oRoot["play"]            = oPlay;
    return oRoot;
}

void eMovie::playElectment()
{
    QString file = m_attr.path + MACRO_FENGEFU + m_attr.name;

    file.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    QFile fFile(file);
    if(fFile.exists())
    {
        m_vPlayList->clear();
        m_vPlayList->addMedia(QUrl(file));
        m_vPlayList->setCurrentIndex(0);
        m_vPlayer->stop();
        m_vPlayer->play();
    }


}

void eMovie::stopElectment()
{
    if(m_vPlayer!=nullptr)
    {
        if(m_vPlayer->isAvailable())
        {

            m_vPlayer->pause();
           // m_vPlayer->stop();
            //m_vPlayList->clear();
        }
    }
}

void eMovie::onResChanged(const QString &file,const QString &RawFile)
{
    QFileInfo fi(file);
    m_attr.name = fi.fileName();
    m_attr.path = fi.absolutePath();
    QFileInfo fiRaw(RawFile);
    m_attr.strRawName = fiRaw.fileName();
    m_attr.strRawPath = fiRaw.absolutePath();
    stopElectment();
    playElectment();
}

void eMovie::onAttrChanged(const eMovie::Data &data)
{
    m_attr.playDuration=data.playDuration;
    m_attr.playTimes=data.playTimes;
    m_attr.aspectRatioMode=data.aspectRatioMode;
    setPlayArg(data.aspectRatioMode, data.playDuration, data.playTimes);
    m_vWidget->setAspectRatioMode(static_cast<Qt::AspectRatioMode>(m_attr.aspectRatioMode));
}

void eMovie::onAdjustMovieRect()
{
    if(m_vWidget!=nullptr)
        m_vWidget->setSize(QSizeF(rect().width(), rect().height()));
    //    if(m_vffmpegWidget!=nullptr)
    //         m_vffmpegWidget->setGeometry(rect());
}

void eMovie::setPlayArg(int armode, int pd, int pt)
{
    m_attr.aspectRatioMode = armode;
    m_attr.playDuration    = pd;
    m_attr.playTimes       = pt;
}

void eMovie::Delay(int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
void eMovie::InitFfmpegSdl()
{
    //    m_vffmpegWidget = new QGraphicsProxyWidget(this);
    //        m_vffmpegWidget->setFlag(QGraphicsItem::ItemStacksBehindParent);
    //        QFfWidget *label = new QFfWidget();
    //        label->show();
    //        m_vffmpegWidget->setWidget(label);
    //        m_vffmpegWidget->setMinimumSize(0, 0);
    //        connect(this, SIGNAL(rectChanged(const QRectF &)), this, SLOT(onAdjustMovieRect()));
    //        onAdjustMovieRect();
}
double eMovie::GetVideoTimeRawSpan(QString strFilePathName)
{
    AVFormatContext    *pFormatCtx;

    std::string str = strFilePathName.toStdString();
    const char* filepath = str.c_str();
    //char filepath[] = "G:\\taxiAd.mp4";
    //初始化编解码库
    av_register_all();//创建AVFormatContext对象，与码流相关的结构。
    pFormatCtx = avformat_alloc_context();
    //初始化pFormatCtx结构
    if (avformat_open_input(&pFormatCtx, filepath, nullptr, nullptr) != 0){
        printf("Couldn't open input stream.\n");
        return -1;
    }
    //获取音视频流数据信息
    if (avformat_find_stream_info(pFormatCtx, nullptr) < 0){
        printf("Couldn't find stream information.\n");
        return -1;
    }
    //nb_streams视音频流的个数，这里当查找到视频流时就中断了。
    unsigned int iVideoStreamIndex=0;
    for (unsigned int i = 0; i < pFormatCtx->nb_streams; i++)
    {
        if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO){
            iVideoStreamIndex=i;
        }
    }

    AVStream *videoStream = pFormatCtx->streams[iVideoStreamIndex];
    double totalSeconds = videoStream->duration * av_q2d(videoStream->time_base);
    printf("totalSeconds = %lf\n", totalSeconds);
    qreal iw= pFormatCtx->streams[iVideoStreamIndex]->codecpar->width ;
    qreal ih=pFormatCtx->streams[iVideoStreamIndex]->codecpar->height ;
    qDebug()<<"宽"<<QString::number(iw);
    qDebug()<<"高"<<QString::number(ih);
    if(iw!=0)
        m_display_aspect_ratio=ih/iw;



    avformat_close_input(&pFormatCtx);
    return totalSeconds;
}
QString eMovie::ConvertVideoFormatByFFmpeg(QString strFile)
{
    QFileInfo tmpFile(strFile);
    //QString strOutFileOnlyTitle=tmpFile.fileName().left(tmpFile.fileName().length()-tmpFile.suffix().length()-1);
    QString file_full=strFile.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    QString strFileMD5=getFileMd5(file_full);
    QString strOutFileOnlyTitle=strFileMD5;


    QString strOutFilePathName=m_globalstrSavePath+MACRO_FENGEFU+strOutFileOnlyTitle+".mp4";
    strOutFilePathName.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    int iReTryCount=0;
    QDir dRoot;
    QDir drr(m_globalstrSavePath);
    if(!drr.exists())
    {
        while(!dRoot.mkdir(m_globalstrSavePath))
        {
            QThread::sleep(1);
            iReTryCount++;

            if(drr.exists())
                break;
            if(iReTryCount>10)
                break;
        }
    }
    QFileInfo tempFileInfo(strOutFilePathName);
    if(tempFileInfo.exists())
    {
        return strOutFilePathName;
    }
    else {
        LoAppConfig *cfg = LoAppConfig::getInstance();
        if(strFile.right(4)==".mp4")
        {
            QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName());
            if(settings->value("videoconvert").isValid())
            {
                if(settings->value("videoconvert").toBool())
                {
                    process = new QProcess(nullptr);

                    QStringList args;//=getArguments(strFile,"f://abc.mp4");
                    args<<"-y";
                    args<<"-i"<<file_full;
                    args<<"-vcodec"<<"h264";
                    QString strtempstrOutFilePathName=strOutFilePathName;
                    args<<strtempstrOutFilePathName;
                    m_pProgressConvertVideo = new LoEmptyDialog();
                    QString strAppPath=QApplication::applicationDirPath();
                    strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
                    process->setWorkingDirectory(strAppPath);
                    connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
                    connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(outputCommand()));
                    connect(process,SIGNAL(readyReadStandardError()),this,SLOT(outputCommand()));
                    process->start("ffmpeg",args);
                    //                                  m_pConverProgressTimer = new QTimer(this);
                    //                                  connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
                    //                                  m_strOutFilePathName=strOutFilePathName;
                    //                                  m_pConverProgressTimer->start(1000);

                    //connect(m_pGetAskTimer,SIGNAL(timeout()),m_pProgressConvertVideo,SLOT(TimerOutUnlock()));

                    connect(this, SIGNAL(sigSetTipTextContent ( QString )), m_pProgressConvertVideo, SLOT( SetTipTextContent(QString)));
                    m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
                    // m_pGetAskTimer->start(3000);
                    m_pProgressConvertVideo->exec();
                    return strOutFilePathName;
                }
                else {
                    QFile::copy(strFile, strOutFilePathName);
                    return strOutFilePathName;

                }
            }
            else {
                QFile::copy(strFile, strOutFilePathName);
                return strOutFilePathName;

            }

        }
        else {
            process = new QProcess(nullptr);

            QStringList args;//=getArguments(strFile,"f://abc.mp4");
            args<<"-y";
            args<<"-i"<<file_full;
            args<<"-vcodec"<<"h264";
            QString strtempstrOutFilePathName=strOutFilePathName;
            args<<strtempstrOutFilePathName;
            m_pProgressConvertVideo = new LoEmptyDialog();
            QString strAppPath=QApplication::applicationDirPath();
            strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
            process->setWorkingDirectory(strAppPath);
            connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
            connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(outputCommand()));
            connect(process,SIGNAL(readyReadStandardError()),this,SLOT(outputCommand()));
            process->start("ffmpeg",args);
            //                                  m_pConverProgressTimer = new QTimer(this);
            //                                  connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
            //                                  m_strOutFilePathName=strOutFilePathName;
            //                                  m_pConverProgressTimer->start(1000);

            //connect(m_pGetAskTimer,SIGNAL(timeout()),m_pProgressConvertVideo,SLOT(TimerOutUnlock()));
            connect(this, SIGNAL(sigSetTipTextContent ( QString )), m_pProgressConvertVideo, SLOT( SetTipTextContent(QString)));

            m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
            // m_pGetAskTimer->start(3000);
            m_pProgressConvertVideo->exec();
            return strOutFilePathName;
        }
        //       QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName());
        //       if(settings->value("videoconvert").isValid())
        //       {
        //           if(settings->value("videoconvert").toBool())
        //           {
        //               process = new QProcess(nullptr);

        //               QStringList args;//=getArguments(strFile,"f://abc.mp4");
        //               args<<"-y";
        //               args<<"-i"<<file_full;
        //               args<<"-vcodec"<<"h264";
        //               QString strtempstrOutFilePathName=strOutFilePathName;
        //               args<<strtempstrOutFilePathName;
        //               m_pProgressConvertVideo = new LoEmptyDialog();
        //               QString strAppPath=QApplication::applicationDirPath();
        //               strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
        //               process->setWorkingDirectory(strAppPath);
        //               connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
        //               connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(outputCommand()));
        //               connect(process,SIGNAL(readyReadStandardError()),this,SLOT(outputCommand()));
        //               process->start("ffmpeg",args);
        ////                                  m_pConverProgressTimer = new QTimer(this);
        ////                                  connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
        ////                                  m_strOutFilePathName=strOutFilePathName;
        ////                                  m_pConverProgressTimer->start(1000);

        //               //connect(m_pGetAskTimer,SIGNAL(timeout()),m_pProgressConvertVideo,SLOT(TimerOutUnlock()));

        //               m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
        //               // m_pGetAskTimer->start(3000);
        //               m_pProgressConvertVideo->exec();
        //               return strOutFilePathName;
        //           }
        //           else {
        //               QFile::copy(strFile, strOutFilePathName);
        //               return strOutFilePathName;
        //           }
        //       }
        //       else {
        //           QFile::copy(strFile, strOutFilePathName);
        //           return strOutFilePathName;

        //       }
    }


}
QString eMovie::ConvertVideoFormat(QString strFile)
{
    QFileInfo tmpFile(strFile);
    //QString strOutFileOnlyTitle=tmpFile.fileName().left(tmpFile.fileName().length()-tmpFile.suffix().length()-1);
    QString file_full=strFile.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    QString strFileMD5=getFileMd5(file_full);
    QString strOutFileOnlyTitle=strFileMD5;


    QString strOutFilePathName=m_globalstrSavePath+MACRO_FENGEFU+strOutFileOnlyTitle+".mp4";
    strOutFilePathName.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
    int iReTryCount=0;
    QDir dRoot;
    while(!dRoot.mkdir(m_globalstrSavePath))
    {
        QThread::sleep(1);
        iReTryCount++;
        if(iReTryCount>10)
            break;
    }
    QFileInfo tempFileInfo(strOutFilePathName);
    if(tempFileInfo.exists())
    {
        return strOutFilePathName;
    }
    else {
        LoAppConfig *cfg = LoAppConfig::getInstance();
        QSettings *settings = new QSettings(cfg->OrganizationName(), cfg->ApplicationName());
        if(settings->value("videoconvert").isValid())
        {
            if(settings->value("videoconvert").toBool())
            {
                QString strVideoRect="";
                QString strEncodeExePath="";
                QString strAppPath=QApplication::applicationDirPath();
                strAppPath.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
                strEncodeExePath="\""+strAppPath+"/ffmpeg.exe\" ";
                QString strSoundEncode="";
                strSoundEncode=" -acodec mp3 -ar 44100";
                QString strVideoEncode="";
                QString strEncodeRate="";
                QString strFrameRate="";
                QString strCommandLine="";
                QString strStart="";
                QString strEnd="";
                strVideoEncode=" -vcodec mpeg4";
                //264
                //                strEncodeRate.Format(" -b %d",m_intEncodeRate);
                //                strVideoEncode=_T(" -vcodec h264");
                //                strFrameRate.Format(" -r %d",m_intFrameRate);

                //strCommandLine=strEncodeExePath+"-y -i \""+file_full+"\""+strVideoEncode+" \""+strOutFilePathName+"\"";
                //strCommandLine="-y -i \""+file_full+"\""+strVideoEncode+" \""+strOutFilePathName+"\"";
                strCommandLine="-y -i "+file_full+strVideoEncode+" "+strOutFilePathName;


                QString strCommandLastString=strCommandLine;
                qDebug()<<strCommandLastString;

                QStringList args;//=getArguments(strFile,"f://abc.mp4");
                args<<strCommandLine;

                //                    QProcess p(nullptr);
                //                    p.setWorkingDirectory(strAppPath);
                //                    QString command = filebat;
                //                    p.start(command);

                process = new QProcess(nullptr);
                process->setWorkingDirectory(strAppPath);
                connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));
                process->start(strEncodeExePath,args);
                m_pProgressConvertVideo = new LoEmptyDialog();
                m_pProgressConvertVideo->lock(tr("Convert video"),tr("Success"),tr("Convert video")+tr("failed"));
                m_pProgressConvertVideo->exec();



                //                    QString filebat=strAppPath+"/convertvideo.bat";
                //                    filebat.replace(MACRO_DANYINFANXIEGAN, MACRO_DANYINXIEGAN);
                //                    QFile file(filebat);
                //                        file.setFileName(filebat);
                //                        file.open(QIODevice::WriteOnly);				//文件以只写方式打开
                //                        QString str = strCommandLine;		//将文本编辑框中的内容送给str
                //                        file.write(str.toUtf8());
                //                        file.close();
                //                    QProcess p(nullptr);
                //                    p.setWorkingDirectory(strAppPath);
                //                    QString command = filebat;
                //                    p.start(command);
                //                    m_pConverProgressTimer = new QTimer(this);
                //                    connect(m_pConverProgressTimer,SIGNAL(timeout()),this,SLOT(onConverProgress()));
                //                    m_pConverProgressTimer->start(1000);
                //                    connect(&p,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(continueConvert(int,QProcess::ExitStatus)));

                //                     if(p.waitForFinished()){      //等待脚本运行完成，超时时间默认是3000s,超时返回0，正常返回1
                //                          //strInfo = "完成！";
                //                      }else{
                //                         // strInfo = "bat运行错误！";
                //                      }
                return strOutFilePathName;
            }
            else {
                QFile::copy(strFile, strOutFilePathName);
                return strOutFilePathName;
            }
        }
        else {
            QFile::copy(strFile, strOutFilePathName);
            return strOutFilePathName;

        }
    }
}
void eMovie::onConverProgress()
{

    if(!m_strOutFilePathName.isEmpty())
    {
        QFile ff(m_strOutFilePathName);
        if(ff.exists())
        {
            m_pProgressConvertVideo->unlock();
            m_pConverProgressTimer->stop();
            delete m_pConverProgressTimer;
        }

    }
    //    int i=0;
    //    if(iEncodeType==1)
    //    {
    //        i=GetConvertFileIsOK(m_strCurConvertOkFilePathName);
    //    }
    //    else
    //         i=GetConvertDirFilesNumber(PATH_CONVERT_OUTPUT_PATH,"success");
    //    static int iNotJinduValue=0;
    //    QString striNotJinduValue=QString::number(iNotJinduValue);
    //    if(iNotJinduValue<100)
    //        m_pProgressConvertVideo->SetTipTextContent(striNotJinduValue);
    //    {
    //        QString strTempFileName=m_strOutputPath+"."+"mp4";
    //        DWORD dwAttr = GetFileAttributes(strTempFileName);
    //        if(dwAttr == 0xFFFFFFFF)   //文件夹不存在
    //        {

    //        }
    //        else
    //        {
    //            m_outFileSizeValue=MyGetFileSize(strTempFileName);
    //            QString strtemp=FormatByteCount1(m_outFileSizeValue);
    //            strtemp="["+strtemp+"]";
    //            m_pProgressConvertVideo->SetTipTextContent(strtemp+MESSAGE_CONVERTING_VIDEO);
    //        }
    //    }
    //    iNotJinduValue++;
    //    if(iNotJinduValue==99)
    //    {
    //        iNotJinduValue=0;
    //        m_iVideoPi++;
    //        QString strtemp=FormatByteCount1(m_outFileSizeValue);
    //        strtemp="["+strtemp+"]";
    //        m_pProgressConvertVideo->SetTipTextContent(strtemp+MESSAGE_CONVERTING_VIDEO);
    //    }
    //    m_pProgressConvertVideo->unlock();
}
void eMovie::continueConvert(int i,QProcess::ExitStatus)
{
    Q_UNUSED(i);
    m_pProgressConvertVideo->unlock();
}

void eMovie::outputCommand(){
    QByteArray cmdoutput = process->readAllStandardOutput();
    char *t=cmdoutput.data();
    QString txtoutput=QString::fromLocal8Bit(t);
    //   qDebug()<<"\r\nStandardOut:"<<txtoutput;
    cmdoutput = process->readAllStandardError();
    t=cmdoutput.data();
    txtoutput=QString::fromLocal8Bit(t);
    //   qDebug()<<"\r\nerror:"<<txtoutput;
    if(txtoutput.contains("Duration: "))
    {
        QString strDuration=txtoutput.mid(txtoutput.indexOf("Duration: ")+10,11)+"0";
        qDebug()<<"Duration="<<strDuration;

        QTime aa=QTime::fromString(strDuration,TIME_STRING_FORMAT);
        QTime bb(0,0,0);
        m_videoTimeLong=bb.secsTo(aa);
    }
    if(txtoutput.contains("time="))
    {
        QString strTime=txtoutput.mid(txtoutput.indexOf("time=")+5,11)+"0";
        qDebug()<<"time="<<strTime;
        QTime aa=QTime::fromString(strTime,TIME_STRING_FORMAT);
        QTime bb(0,0,0);
        int iJinDuTime=bb.secsTo(aa);
        if(m_videoTimeLong>0)
        {
            int iJindu=iJinDuTime*100/m_videoTimeLong;
            qDebug()<<"进度="<<iJindu;
            QString strJindu=QString::number(iJindu)+"%";
            emit sigSetTipTextContent(tr("Converting format")+strJindu);
        }

    }


}
void eMovie::outputError()
{
    //    QByteArray cmdoutput = process->readAllStandardError();//readAllStandardOutput();
    //    char *t=cmdoutput.data();
    //    QString txtoutput=QString::fromLocal8Bit(t);
    //    qDebug()<<"error:"<<txtoutput;
    QByteArray  cmdoutput = process->readAllStandardError();
    char *t=cmdoutput.data();
    QString txtoutput=QString::fromLocal8Bit(t);
    qDebug()<<"\r\nerror:"<<txtoutput;
}
void eMovie:: deleteContent()
{
    if(m_vPlayer!=nullptr)
    {
        if(m_vPlayer->isAvailable())
        {

            //m_vPlayer->pause();
            m_vPlayer->stop();
            m_vPlayList->clear();
        }
    }
    QFile file(m_attr.path+"/"+m_attr.name);
    if(file.exists())
        file.remove();
}
