导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    V853s如何实现UI图层和视频图层同时用

    V Series
    4
    9
    3019
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • H
      hzhy1234 LV 5 最后由 xiaowenge 编辑

      现在需要实现将UI界面和视频显示同时使用,请问有没有相关的demo可以参考

      1 条回复 最后回复 回复 引用 分享 1
      • A
        awwwwa LV 8 最后由 编辑

        参考libuapi,tplayerdemo,将UI和视频放置于不同图层即可

        H 1 条回复 最后回复 回复 引用 分享 1
        • H
          hzhy1234 LV 5 @awwwwa 最后由 编辑

          @awwwwa 您好 请问我发现libuapi编译的是一个libuapi库,请问应用程序有调用libuapi的例程么

          A 1 条回复 最后回复 回复 引用 分享 0
          • A
            awwwwa LV 8 @hzhy1234 最后由 编辑

            @hzhy1234 tplayerdemo就调用了

            H 1 条回复 最后回复 回复 引用 分享 1
            • whycan
              whycan晕哥 LV 9 最后由 编辑

              package / lvgl / monitor 项目也可以参考

              H T 2 条回复 最后回复 回复 引用 分享 1
              • H
                hzhy1234 LV 5 @whycan 最后由 编辑

                @whycan 我这边没有找到

                ZhaoBinBin@R740:/WorkDisk/ZhaoBinBinWorkDisk/01_project/04_quanzhi/01_V853/09_suozhi/v85x-ipc/v85x-ipc-sdk-v0.8-upload$ find . -name monitor
                ./lichee/linux-4.9/drivers/net/wireless/rtl8733bs/core/monitor
                ./lichee/linux-4.9/drivers/net/wireless/rtl8723ds/core/monitor
                ./out/v853s-perf1/compile_dir/target/bluez-5.54/monitor
                ZhaoBinBin@R740:/WorkDisk/ZhaoBinBinWorkDisk/01_project/04_quanzhi/01_V853/09_suozhi/v85x-ipc/v85x-ipc-sdk-v0.8-upload$ find . -name lvgl*
                ./package/gui/littlevgl-8/lv_demos/src/lv_demo_widgets/assets/lvgl_logo.png
                ./package/gui/littlevgl-8/lvgl
                ./package/gui/littlevgl-8/lvgl/src/lvgl.h
                ./package/gui/littlevgl-8/lvgl/lvgl.h
                ./package/gui/littlevgl-8/lvgl/lvgl.mk
                
                
                A 1 条回复 最后回复 回复 引用 分享 0
                • H
                  hzhy1234 LV 5 @awwwwa 最后由 编辑

                  @awwwwa 您好,我这边貌似选不上tplayerdemo,类型unknown 貌似是找不到的
                  0ceb7e58-34b7-4639-b687-aa5f31181b10-image.png

                  1 条回复 最后回复 回复 引用 分享 0
                  • A
                    awwwwa LV 8 @hzhy1234 最后由 awwwwa 编辑

                    @hzhy1234

                    70d76a7a-c952-4af8-b3fb-ffc3ea449ab2-image.png

                    #include <unistd.h>
                    #include <stdlib.h>
                    #include <stdio.h>
                    #include <string.h>
                    #include <pthread.h>
                    #include <ctype.h>
                    #include <errno.h>
                    #include <sys/select.h>
                    #include <sys/types.h>
                    #include <dirent.h>
                    #include <fcntl.h>
                    #include <signal.h>
                    
                    
                    #include <tplayer.h>
                    //#include <power_manager_client.h>
                    
                    #define TOTAL_VIDEO_AUDIO_NUM 100
                    #define MAX_FILE_NAME_LEN 256
                    #define FILE_TYPE_NUM 29
                    #define FILE_TYPE_LEN 10
                    #define VIDEO_TYPE_NUM 11
                    #define VIDEO_TYPE_LEN 10
                    #define USE_REPEAT_RESET_MODE 1
                    #define HOLD_LAST_PICTURE 1
                    #define LOOP_PLAY_FLAG 1
                    
                    typedef struct DemoPlayerContext
                    {
                        TPlayer*          mTPlayer;
                        int               mSeekable;
                        int               mError;
                        int               mVideoFrameNum;
                        bool              mPreparedFlag;
                        bool              mLoopFlag;
                        bool              mSetLoop;
                        bool              mComplete;
                        char              mUrl[512];
                        MediaInfo*        mMediaInfo;
                        char              mVideoAudioList[TOTAL_VIDEO_AUDIO_NUM][MAX_FILE_NAME_LEN];
                        int               mCurPlayIndex;
                        int               mRealFileNum;
                        sem_t             mPreparedSem;
                    }DemoPlayerContext;
                    
                    //* define commands for user control.
                    typedef struct Command
                    {
                        const char* strCommand;
                        int         nCommandId;
                        const char* strHelpMsg;
                    }Command;
                    
                    #define COMMAND_HELP            0x1     //* show help message.
                    #define COMMAND_QUIT            0x2     //* quit this program.
                    
                    #define COMMAND_SET_SOURCE      0x101   //* set url of media file.
                    #define COMMAND_PREPARE         0x102   //* prepare the media file.
                    #define COMMAND_PLAY            0x103   //* start playback.
                    #define COMMAND_PAUSE           0x104   //* pause the playback.
                    #define COMMAND_STOP            0x105   //* stop the playback.
                    #define COMMAND_SEEKTO          0x106   //* seek to posion, in unit of second.
                    #define COMMAND_RESET           0x107   //* reset the player
                    #define COMMAND_SHOW_MEDIAINFO  0x108   //* show media information.
                    #define COMMAND_SHOW_DURATION   0x109   //* show media duration, in unit of second.
                    #define COMMAND_SHOW_POSITION   0x110   //* show current play position, in unit of second.
                    #define COMMAND_SWITCH_AUDIO    0x111   //* switch autio track.
                    #define COMMAND_PLAY_URL        0x112   //set url and prepare and play
                    #define COMMAND_SET_VOLUME      0x113   //set the software volume
                    #define COMMAND_GET_VOLUME      0x114   //get the software volume
                    #define COMMAND_SET_LOOP        0x115   //set loop play flag,1 means loop play,0 means not loop play
                    #define COMMAND_SET_SCALEDOWN   0x116   //set video scale down ratio,valid value is:2,4,8 .  2 means 1/2 scaledown,4 means 1/4 scaledown,8 means 1/8 scaledown
                    #define COMMAND_FAST_FORWARD    0x117   //fast forward,valid value is:2,4,8,16, 2 means 2 times fast forward,4 means 4 times fast forward,8 means 8 times fast forward,16 means 16 times fast forward
                    #define COMMAND_FAST_BACKWARD   0x118   //fast backward,valid value is:2,4,8,16,2 means 2 times fast backward,4 means 4 times fast backward,8 means 8 times fast backward,16 means 16 times fast backward
                    #define COMMAND_SET_SRC_RECT    0x119  //set display source crop rect
                    #define COMMAND_SET_OUTPUT_RECT 0x120  //set display output display rect
                    #define COMMAND_GET_DISP_FRAMERATE   0x121   //* show the real display framerate
                    
                    
                    #define CEDARX_UNUSE(param) (void)param
                    
                    static const Command commands[] =
                    {
                        {"help",            COMMAND_HELP,               "show this help message."},
                        {"quit",            COMMAND_QUIT,               "quit this program."},
                        {"set url",         COMMAND_SET_SOURCE,         "set url of the media, for example, set url: ~/testfile.mkv."},
                        {"prepare",         COMMAND_PREPARE,            "prepare the media."},
                        {"play",            COMMAND_PLAY,               "start playback."},
                        {"pause",           COMMAND_PAUSE,              "pause the playback."},
                        {"stop",            COMMAND_STOP,               "stop the playback."},
                        {"seek to",         COMMAND_SEEKTO,             "seek to specific position to play, position is in unit of second, for example, seek to: 100."},
                        {"reset",           COMMAND_RESET,              "reset the player."},
                        {"show media info", COMMAND_SHOW_MEDIAINFO,     "show media information of the media file."},
                        {"show duration",   COMMAND_SHOW_DURATION,      "show duration of the media file."},
                        {"show position",   COMMAND_SHOW_POSITION,      "show current play position, position is in unit of second."},
                        {"switch audio",    COMMAND_SWITCH_AUDIO,       "switch audio to a specific track, for example, switch audio: 2, track is start counting from 0."},
                        {"play url",        COMMAND_PLAY_URL,           "set url and prepare and play url,for example:play url:/mnt/UDISK/test.mp3"},
                        {"set volume",      COMMAND_SET_VOLUME,         "set the software volume,the range is 0-40,for example:set volume:30"},
                        {"get volume",      COMMAND_GET_VOLUME,         "get the software volume"},
                        {"set loop",        COMMAND_SET_LOOP,           "set the loop play flag,1 means loop play,0 means not loop play"},
                        {"set scaledown",   COMMAND_SET_SCALEDOWN,      "set video scale down ratio,valid value is:2,4,8 .  2 means 1/2 scaledown,4 means 1/4 scaledown,8 means 1/8 scaledown"},
                        {"fast forward",    COMMAND_FAST_FORWARD,       "fast forward,valid value is:2,4,8,16, 2 means 2 times fast forward,4 means 4 times fast forward,8 means 8 times fast forward,16 means 16 times fast forward"},
                        {"fast backward",   COMMAND_FAST_BACKWARD,      "fast backward,valid value is:2,4,8,16,2 means 2 times fast backward,4 means 4 times fast backward,8 means 8 times fast backward,16 means 16 times fast backward"},
                        {"set src_rect",	COMMAND_SET_SRC_RECT,	    "set display source crop rect"},
                        {"set dst_rect",	COMMAND_SET_OUTPUT_RECT,    "set display output rect"},
                        {"get display framerate",   COMMAND_GET_DISP_FRAMERATE,      "show the real display framerate."},
                        {NULL, 0, NULL}
                    };
                    
                    DemoPlayerContext demoPlayer;
                    DemoPlayerContext gDemoPlayers[5];
                    int isDir = 0;
                    int gScreenWidth = 0;
                    int gScreenHeight = 0;
                    int gPlayerNum = 0;
                    
                    /* Signal handler */
                    static void terminate(int sig_no)
                    {
                        printf("Got signal %d, exiting ...\n", sig_no);
                    
                        if(demoPlayer.mTPlayer != NULL)
                        {
                            TPlayerDestroy(demoPlayer.mTPlayer);
                            demoPlayer.mTPlayer = NULL;
                            printf("TPlayerDestroy() successfully\n");
                        }
                    
                        sem_destroy(&demoPlayer.mPreparedSem);
                    
                        int i=0;
                        for(i = gPlayerNum-1;i >= 0;i--){
                            if(gDemoPlayers[i].mTPlayer != NULL)
                            {
                                TPlayerDestroy(gDemoPlayers[i].mTPlayer);
                                gDemoPlayers[i].mTPlayer = NULL;
                                printf("TPlayerDestroy(%d) successfully\n",i);
                            }
                        }
                        printf("destroy tplayer \n");
                        printf("tplaydemo exit\n");
                        exit(1);
                    }
                    
                    static void install_sig_handler(void)
                    {
                        signal(SIGBUS, terminate);
                        signal(SIGFPE, terminate);
                        signal(SIGHUP, terminate);
                        signal(SIGILL, terminate);
                        signal(SIGINT, terminate);
                        signal(SIGIOT, terminate);
                        signal(SIGPIPE, terminate);
                        signal(SIGQUIT, terminate);
                        signal(SIGSEGV, terminate);
                        signal(SIGSYS, terminate);
                        signal(SIGTERM, terminate);
                        signal(SIGTRAP, terminate);
                        signal(SIGUSR1, terminate);
                        signal(SIGUSR2, terminate);
                    }
                    
                    static void showHelp(void)
                    {
                        int     i;
                        printf("\n");
                        printf("******************************************************************************************\n");
                        printf("* This is a simple media player, when it is started, you can input commands to tell\n");
                        printf("* what you want it to do.\n");
                        printf("* Usage: \n");
                        printf("*   # ./tplayerdemo\n");
                        printf("*   # set url:/mnt/UDISK/test.mp3\n");
                        printf("*   # prepare\n");
                        printf("*   # show media info\n");
                        printf("*   # play\n");
                        printf("*   # pause\n");
                        printf("*   # stop\n");
                        printf("*   # reset\n");
                        printf("*   # seek to:100\n");
                        printf("*   # play url:/mnt/UDISK/test.mp3\n");
                        printf("*   # set volume:30\n");
                        printf("*   # get volume\n");
                        printf("*   # set loop:1 \n");
                        printf("*   # set scaledown:2 \n");
                        printf("*   # fast forward:2 \n");
                        printf("*   # fast backward:2 \n");
                        printf("*   # switch audio:1 \n");
                        printf("*   #get display framerate \n");
                        printf("*\n");
                        printf("* Command and it's param is seperated by a colon, param is optional, as below:\n");
                        printf("* Command[: Param]\n");
                        printf("*   #notice:we can play a list use the following command,for example the video or audio file puts in /mnt/UDISK/ directory \n");
                        printf("*   #tplayerdemo /mnt/UDISK/ \n");
                        printf("*   #notice:we can play one file use the following command,for example the video or audio file puts in /mnt/UDISK/ directory \n");
                        printf("*   #tplayerdemo /mnt/UDISK/test.mp4 \n");
                        printf("*   #notice:we can play two file use the following command,for example the video or audio file puts in /mnt/UDISK/ directory \n");
                        printf("*   #tplayerdemo /mnt/UDISK/test1.mp4 /mnt/UDISK/test2.mp4\n");
                        printf("*\n");
                        printf("* here are the commands supported:\n");
                    
                        for(i=0; ; i++)
                        {
                            if(commands[i].strCommand == NULL)
                                break;
                            printf("*    %s:\n", commands[i].strCommand);
                            printf("*\t\t%s\n",  commands[i].strHelpMsg);
                        }
                        printf("*\n");
                        printf("******************************************************************************************\n");
                    }
                    
                    static int readCommand(char* strCommandLine, int nMaxLineSize)
                    {
                        int            nMaxFds;
                        fd_set         readFdSet;
                        int            result;
                        char*          p;
                        unsigned int   nReadBytes;
                        struct timeval tv;
                        tv.tv_sec = 1;
                        tv.tv_usec = 0;
                        fflush(stdout);
                    
                        nMaxFds    = 0;
                        FD_ZERO(&readFdSet);
                        FD_SET(STDIN_FILENO, &readFdSet);
                    
                        result = select(nMaxFds+1, &readFdSet, NULL, NULL, &tv);
                        if(result > 0)
                        {
                            printf("\ntplayerdemo# ");
                            if(FD_ISSET(STDIN_FILENO, &readFdSet))
                            {
                                nReadBytes = read(STDIN_FILENO, &strCommandLine[0], nMaxLineSize);
                                if(nReadBytes > 0)
                                {
                                    p = strCommandLine;
                                    while(*p != 0)
                                    {
                                        if(*p == 0xa)
                                        {
                                            *p = 0;
                                            break;
                                        }
                                        p++;
                                    }
                                }
                    
                                return 0;
                            }
                        }
                    
                        return -1;
                    }
                    
                    static void formatString(char* strIn)
                    {
                        char* ptrIn;
                        char* ptrOut;
                        int   len;
                        int   i;
                    
                        if(strIn == NULL || (len=strlen(strIn)) == 0)
                            return;
                    
                        ptrIn  = strIn;
                        ptrOut = strIn;
                        i      = 0;
                        while(*ptrIn != '\0')
                        {
                            //* skip the beginning space or multiple space between words.
                            if(*ptrIn != ' ' || (i!=0 && *(ptrOut-1)!=' '))
                            {
                                *ptrOut++ = *ptrIn++;
                                i++;
                            }
                            else
                                ptrIn++;
                        }
                    
                        //* skip the space at the tail.
                        if(i==0 || *(ptrOut-1) != ' ')
                            *ptrOut = '\0';
                        else
                            *(ptrOut-1) = '\0';
                    
                        return;
                    }
                    
                    
                    //* return command id,
                    static int parseCommandLine(char* strCommandLine, unsigned long* pParam)
                    {
                        char* strCommand;
                        char* strParam;
                        int   i;
                        int   nCommandId;
                        char  colon = ':';
                    
                        if(strCommandLine == NULL || strlen(strCommandLine) == 0)
                        {
                            return -1;
                        }
                    
                        strCommand = strCommandLine;
                        strParam   = strchr(strCommandLine, colon);
                        if(strParam != NULL)
                        {
                            *strParam = '\0';
                            strParam++;
                        }
                    
                        formatString(strCommand);
                        formatString(strParam);
                    
                        nCommandId = -1;
                        for(i=0; commands[i].strCommand != NULL; i++)
                        {
                            if(strcmp(commands[i].strCommand, strCommand) == 0)
                            {
                                nCommandId = commands[i].nCommandId;
                                break;
                            }
                        }
                    
                        if(commands[i].strCommand == NULL)
                            return -1;
                    
                        switch(nCommandId)
                        {
                            case COMMAND_SET_SOURCE:
                                if(strParam != NULL && strlen(strParam) > 0)
                                    *pParam = (uintptr_t)strParam;        //* pointer to the url.
                                else
                                {
                                    printf("no url specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_SEEKTO:
                                if(strParam != NULL)
                                {
                                    *pParam = (int)strtol(strParam, (char**)NULL, 10);  //* seek time in unit of second.
                                    if(errno == EINVAL || errno == ERANGE)
                                    {
                                        printf("seek time is not valid.\n");
                                        nCommandId = -1;
                                    }
                                }
                                else
                                {
                                    printf("no seek time is specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_SWITCH_AUDIO:
                                if(strParam != NULL)
                                {
                                    *pParam = (int)strtol(strParam, (char**)NULL, 10);  //* audio stream index start counting from 0.
                                    if(errno == EINVAL || errno == ERANGE)
                                    {
                                        printf("audio stream index is not valid.\n");
                                        nCommandId = -1;
                                    }
                                }
                                else
                                {
                                    printf("no audio stream index is specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_PLAY_URL:
                                if(strParam != NULL && strlen(strParam) > 0)
                                    *pParam = (uintptr_t)strParam;        //* pointer to the url.
                                else
                                {
                                    printf("no url to play.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_SET_VOLUME:
                                if(strParam != NULL)
                                {
                                    *pParam = (int)strtol(strParam, (char**)NULL, 10);  //* seek time in unit of second.
                                    if(errno == EINVAL || errno == ERANGE)
                                    {
                                        printf("volume value is not valid.\n");
                                        nCommandId = -1;
                                    }
                                }
                                else
                                {
                                    printf("the volume value is not specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_SET_LOOP:
                                if(strParam != NULL)
                                {
                                    *pParam = (int)strtol(strParam, (char**)NULL, 10);
                                    if(errno == EINVAL || errno == ERANGE)
                                    {
                                        printf("loop value is not valid.\n");
                                        nCommandId = -1;
                                    }
                                }
                                else
                                {
                                    printf("the loop value is not specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_SET_SCALEDOWN:
                                if(strParam != NULL)
                                {
                                    *pParam = (int)strtol(strParam, (char**)NULL, 10);
                                    if(errno == EINVAL || errno == ERANGE)
                                    {
                                        printf("scaledown value is not valid.\n");
                                        nCommandId = -1;
                                    }
                                }
                                else
                                {
                                    printf("the scaledown value is not specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_FAST_FORWARD:
                                if(strParam != NULL)
                                {
                                    *pParam = (int)strtol(strParam, (char**)NULL, 10);
                                    if(errno == EINVAL || errno == ERANGE)
                                    {
                                        printf("play fast value is not valid.\n");
                                        nCommandId = -1;
                                    }
                                }
                                else
                                {
                                    printf("play fast value is not specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            case COMMAND_FAST_BACKWARD:
                                if(strParam != NULL)
                                {
                                    *pParam = (int)strtol(strParam, (char**)NULL, 10);
                                    if(errno == EINVAL || errno == ERANGE)
                                    {
                                        printf("play slow value is not valid.\n");
                                        nCommandId = -1;
                                    }
                                }
                                else
                                {
                                    printf("play slow value is not specified.\n");
                                    nCommandId = -1;
                                }
                                break;
                    
                            default:
                                break;
                        }
                    
                        return nCommandId;
                    }
                    
                    static int semTimedWait(sem_t* sem, int64_t time_ms)
                    {
                        int err;
                    
                        if(time_ms == -1)
                        {
                            err = sem_wait(sem);
                        }
                        else
                        {
                            struct timespec ts;
                            clock_gettime(CLOCK_REALTIME, &ts);
                            ts.tv_nsec += time_ms % 1000 * 1000 * 1000;
                            ts.tv_sec += time_ms / 1000 + ts.tv_nsec / (1000 * 1000 * 1000);
                            ts.tv_nsec = ts.tv_nsec % (1000*1000*1000);
                    
                            err = sem_timedwait(sem, &ts);
                        }
                    
                        return err;
                    }
                    
                    
                    //* a callback for tplayer.
                    int CallbackForTPlayer(void* pUserData, int msg, int param0, void* param1)
                    {
                        DemoPlayerContext* pDemoPlayer = (DemoPlayerContext*)pUserData;
                    
                        CEDARX_UNUSE(param1);
                        switch(msg)
                        {
                            case TPLAYER_NOTIFY_PREPARED:
                            {
                                printf("TPLAYER_NOTIFY_PREPARED,has prepared.\n");
                                sem_post(&pDemoPlayer->mPreparedSem);
                                pDemoPlayer->mPreparedFlag = 1;
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_PLAYBACK_COMPLETE:
                            {
                                printf("TPLAYER_NOTIFY_PLAYBACK_COMPLETE\n");
                                pDemoPlayer->mComplete = 1;
                                if(pDemoPlayer->mSetLoop == 1){
                                    pDemoPlayer->mLoopFlag = 1;
                                }else{
                                    pDemoPlayer->mLoopFlag = 0;
                                }
                                //PowerManagerReleaseWakeLock("tplayerdemo");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_SEEK_COMPLETE:
                            {
                                printf("TPLAYER_NOTIFY_SEEK_COMPLETE>>>>info: seek ok.\n");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_MEDIA_ERROR:
                            {
                                switch (param0)
                                {
                                    case TPLAYER_MEDIA_ERROR_UNKNOWN:
                                    {
                                        printf("erro type:TPLAYER_MEDIA_ERROR_UNKNOWN\n");
                                        break;
                                    }
                                    case TPLAYER_MEDIA_ERROR_UNSUPPORTED:
                                    {
                                        printf("erro type:TPLAYER_MEDIA_ERROR_UNSUPPORTED\n");
                                        break;
                                    }
                                    case TPLAYER_MEDIA_ERROR_IO:
                                    {
                                        printf("erro type:TPLAYER_MEDIA_ERROR_IO\n");
                                        break;
                                    }
                                }
                                printf("TPLAYER_NOTIFY_MEDIA_ERROR\n");
                                pDemoPlayer->mError = 1;
                                if(pDemoPlayer->mPreparedFlag == 0){
                                    printf("recive err when preparing\n");
                                    sem_post(&pDemoPlayer->mPreparedSem);
                                }
                                if(pDemoPlayer->mSetLoop == 1){
                                    pDemoPlayer->mLoopFlag = 1;
                                }else{
                                    pDemoPlayer->mLoopFlag = 0;
                                }
                                printf("error: open media source fail.\n");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_NOT_SEEKABLE:
                            {
                                pDemoPlayer->mSeekable = 0;
                                printf("info: media source is unseekable.\n");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_BUFFER_START:
                            {
                                printf("have no enough data to play\n");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_BUFFER_END:
                            {
                                printf("have enough data to play again\n");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_VIDEO_FRAME:
                            {
                                //printf("get the decoded video frame\n");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_AUDIO_FRAME:
                            {
                                //printf("get the decoded audio frame\n");
                                break;
                            }
                    
                            case TPLAYER_NOTIFY_SUBTITLE_FRAME:
                            {
                                //printf("get the decoded subtitle frame\n");
                                break;
                            }
                            case TPLAYER_NOTYFY_DECODED_VIDEO_SIZE:
                            {
                                int w, h;
                                w   = ((int*)param1)[0];   //real decoded video width
                                h  = ((int*)param1)[1];   //real decoded video height
                                printf("*****tplayerdemo:video decoded width = %d,height = %d",w,h);
                                //int divider = 1;
                                //if(w>400){
                                //    divider = w/400+1;
                                //}
                                //w = w/divider;
                                //h = h/divider;
                                printf("real set to display rect:w = %d,h = %d\n",w,h);
                                //TPlayerSetSrcRect(pDemoPlayer->mTPlayer, 0, 0, w, h);
                            }
                    
                            default:
                            {
                                printf("warning: unknown callback from Tinaplayer.\n");
                                break;
                            }
                        }
                        return 0;
                    }
                    
                    static int playVideo(DemoPlayerContext* playerContext, char* url,int x,int y,int width,int height)
                    {
                    	printf("before TPlayerSetDataSource,%d:%s\n",playerContext,url);
                    
                    	playerContext->mSeekable = 1;
                    	if(TPlayerSetDataSource(playerContext->mTPlayer,url,NULL)!= 0)
                    	{
                    	    printf("TPlayerSetDataSource return fail.\n");
                    	    return -1;
                    	}else{
                    	    printf("setDataSource end\n");
                    	}
                    	if(TPlayerPrepare(playerContext->mTPlayer)!= 0)
                    	{
                    	    printf("TPlayerPrepare return fail.\n");
                    	    return -1;
                    	}else{
                    	    printf("TPlayerPrepare end\n");
                    	}
                    	playerContext->mComplete = 0;
                    	playerContext->mError = 0;
                    	TPlayerSetDisplayRect(playerContext->mTPlayer, x, y, width, height);
                    	#if LOOP_PLAY_FLAG
                    	#if !USE_REPEAT_RESET_MODE
                    	TPlayerSetLooping(playerContext->mTPlayer,1);
                    	#endif
                    	#endif
                    	#if HOLD_LAST_PICTURE
                    	printf("TPlayerSetHoldLastPicture()\n");
                    	TPlayerSetHoldLastPicture(playerContext->mTPlayer,1);
                    	#else
                    	TPlayerSetHoldLastPicture(playerContext->mTPlayer,0);
                    	#endif
                    	#ifndef ONLY_DISABLE_AUDIO
                    	TPlayerSetAudioEQType(playerContext->mTPlayer, AUD_EQ_TYPE_NORMAL);
                    	#endif
                    	if(TPlayerStart(playerContext->mTPlayer) != 0)
                    	{
                    	    printf("TPlayerStart() return fail.\n");
                    	    return -1;
                    	}else{
                    	    printf("started.\n");
                    	}
                    	return 0;
                    }
                    
                    static int createPlayersAndPlayVideos(int argc, char** argv)
                    {
                        char fileType[FILE_TYPE_NUM][FILE_TYPE_LEN] = {".avi",".mkv",".flv",".ts",".mp4",".ts",".webm",".asf",".mpg",".mpeg",".mov",".vob",".3gp",".wmv",".pmp",".f4v",
                                                                                                           ".mp1",".mp2",".mp3",".ogg",".flac",".ape",".wav",".m4a",".amr",".aac",".omg",".oma",".aa3"};
                        char* lastStrPos;
                        int ret = 0;
                    
                        for(int i = 0;i < argc-1;i++)
                        {
                            if((lastStrPos = strrchr(argv[i+1],'.')) != NULL)
                            {
                                gPlayerNum = argc -1;
                                if(ret == -1)
                                {
                                    printf("has error,break\n");
                                    break;
                                }
                                printf("may be is one file:cut down suffix is:%s\n",lastStrPos);
                    
                                int j = 0;
                                int findMatchFileFlag = 0;
                                for(j = 0;j < FILE_TYPE_NUM;j++)
                                {
                                    if(!strncasecmp(lastStrPos,&(fileType[j]),strlen(&(fileType[j]))))
                                    {
                                        printf("find the matched type:%s\n",&(fileType[j]));
                                        findMatchFileFlag = 1;
                                        break;
                                    }
                                }
                                if(findMatchFileFlag == 0)
                                {
                                    printf("%d:can not play this file:%s\n",i,argv[i]);
                                    return -1;
                                }
                                printf("create player:%d\n",i);
                                //* create a player.
                                memset(&gDemoPlayers[i], 0, sizeof(DemoPlayerContext));
                                gDemoPlayers[i].mTPlayer= TPlayerCreate(CEDARX_PLAYER);
                                if(gDemoPlayers[i].mTPlayer == NULL)
                                {
                                    printf("can not create tplayer, quit.\n");
                                    int count = 0;
                                    for(count=i-1;count >= 0;count--)
                                    {
                                        TPlayerDestroy(gDemoPlayers[count].mTPlayer);
                                        gDemoPlayers[count].mTPlayer = NULL;
                                    }
                                    return -1;
                                }
                                else
                                {
                                    printf("create player[%d]:%p\n",i,gDemoPlayers[i].mTPlayer);
                                }
                                //* set callback to player.
                                TPlayerSetNotifyCallback(gDemoPlayers[i].mTPlayer,CallbackForTPlayer, (void*)&gDemoPlayers[i]);
                                #ifndef ONLY_ENABLE_AUDIO
                                if((gScreenWidth == 0 || gScreenHeight == 0) && gDemoPlayers[i].mTPlayer->mLayerCtrl)
                                {
                                    VoutRect tmpRect;
                                    TPlayerGetDisplayRect(gDemoPlayers[i].mTPlayer,&tmpRect);
                                    gScreenWidth = tmpRect.width;
                                    gScreenHeight = tmpRect.height;
                                    printf("screen width:%d,screen height:%d\n",gScreenWidth,gScreenHeight);
                                }
                                #endif
                    
                                switch (argc)
                                {
                                    case 2:/*one player*/
                                    {
                                        printf("%d:playVideo:%d\n",argc-1,i);
                                        if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth, gScreenHeight) != 0)
                                        {
                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                            ret = -1;
                                        }
                                        break;
                                    }
                    
                                    case 3:/*two player*/
                                    {
                                        printf("%d:playVideo:%d\n",argc-1,i);
                                        if(i%2 == 0)
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth/2, gScreenHeight) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        else
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, 0, gScreenWidth/2, gScreenHeight) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        break;
                                    }
                    
                                    case 4:/*three player*/
                                    {
                                        printf("%d:playVideo:%d\n",argc-1,i);
                                        if(i%3 == 0)
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth/2, gScreenHeight) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        else if(i%3 == 1)
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, 0, gScreenWidth/2, gScreenHeight/2) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        else
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, gScreenHeight/2, gScreenWidth/2, gScreenHeight/2) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        break;
                                    }
                    
                                    case 5:/*four player*/
                                    {
                                        printf("%d:playVideo:%d\n",argc-1,i);
                                        if(i%4 == 0)
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth/2, gScreenHeight/2) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        else if(i%4 == 1)
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], 0, gScreenHeight/2, gScreenWidth/2, gScreenHeight/2) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        else if(i%4 == 2)
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, 0, gScreenWidth/2, gScreenHeight/2) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        else
                                        {
                                            if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, gScreenHeight/2, gScreenWidth/2, gScreenHeight/2) != 0)
                                            {
                                                printf("%d:playVideo fail%d\n",argc-1,i);
                                                ret = -1;
                                            }
                                        }
                                        break;
                    		}
                    
                                    default:
                                    {
                                        printf("do not support play %d videos\n",argc-1);
                                        break;
                                    }
                                }
                            }
                            else
                            {   /*play all audio and video in one folder*/
                                char fileType[FILE_TYPE_NUM][FILE_TYPE_LEN] = {".avi",".mkv",".flv",".ts",".mp4",".ts",".webm",".asf",".mpg",".mpeg",".mov",".vob",".3gp",".wmv",".pmp",".f4v",
                                                                                                           ".mp1",".mp2",".mp3",".ogg",".flac",".ape",".wav",".m4a",".amr",".aac",".omg",".oma",".aa3"};
                                char* lastStrPos;
                                DIR *dir = opendir(argv[1]);
                                if (dir == NULL)
                                {
                                    printf("opendir %s fail\n",argv[1]);
                                    return -1;
                                }
                    
                                isDir = 1;
                                struct dirent *entry;
                                int count= 0;
                                while ((entry = readdir(dir)) != NULL)
                                {
                                    printf("file record length = %d,type = %d, name = %s\n",entry->d_reclen,entry->d_type,entry->d_name);
                                    if(entry->d_type == 8)
                                    {
                                        char* strpos;
                                        if((strpos = strrchr(entry->d_name,'.')) != NULL)
                                        {
                                            int i = 0;
                                            printf("cut down suffix is:%s\n",strpos);
                                            for(i = 0;i < FILE_TYPE_NUM;i++)
                                            {
                                                if(!strncasecmp(strpos,&(fileType[i]),strlen(&(fileType[i]))))
                                                {
                                                    printf("find the matched type:%s\n",&(fileType[i]));
                                                    break;
                                                }
                                            }
                    
                                            if(i < FILE_TYPE_NUM)
                                            {
                                                if(count < TOTAL_VIDEO_AUDIO_NUM)
                                                {
                                                    strncpy(&demoPlayer.mVideoAudioList[count],entry->d_name,strlen(entry->d_name));
                                                    printf("video file name = %s\n",&demoPlayer.mVideoAudioList[count]);
                                                    count++;
                                                }
                                                else
                                                {
                                                    count++;
                                                    printf("warning:the video file in /mnt/UDISK/ is %d,which is larger than %d,we only support %d\n",count,TOTAL_VIDEO_AUDIO_NUM,TOTAL_VIDEO_AUDIO_NUM);
                                                }
                                            }
                                        }
                                    }
                                }
                                closedir(dir);
                    
                                demoPlayer.mLoopFlag = 1;
                                demoPlayer.mSetLoop = 1;
                                if(count >  TOTAL_VIDEO_AUDIO_NUM)
                                {
                                    demoPlayer.mRealFileNum = TOTAL_VIDEO_AUDIO_NUM;
                                }
                                else
                                {
                                    demoPlayer.mRealFileNum = count;
                                }
                                if(demoPlayer.mRealFileNum == 0)
                                {
                                    printf("there are no video or audio files in %s,exit(-1)\n",argv[1]);
                                    exit(-1);
                                }
                    
                                //* create a player.
                                demoPlayer.mTPlayer= TPlayerCreate(CEDARX_PLAYER);
                                if(demoPlayer.mTPlayer == NULL)
                                {
                                    printf("can not create tplayer, quit.\n");
                                    exit(-1);
                                }
                                //* set callback to player.
                                TPlayerSetNotifyCallback(demoPlayer.mTPlayer,CallbackForTPlayer, (void*)&demoPlayer);
                                #ifndef ONLY_ENABLE_AUDIO
                                if((gScreenWidth == 0 || gScreenHeight == 0) && demoPlayer.mTPlayer->mLayerCtrl)
                                {
                                    VoutRect tmpRect;
                                    TPlayerGetDisplayRect(demoPlayer.mTPlayer,&tmpRect);
                                    gScreenWidth = tmpRect.width;
                                    gScreenHeight = tmpRect.height;
                                    printf("screen width:%d,screen height:%d\n",gScreenWidth,gScreenHeight);
                                }
                                #endif
                                sem_init(&demoPlayer.mPreparedSem, 0, 0);
                            }
                    
                        }
                        return ret;
                    }
                    
                    
                    //* the main method.
                    int main(int argc, char** argv)
                    {
                        install_sig_handler();
                    
                        int  nCommandId;
                        unsigned long  nCommandParam;
                        int  bQuit = 0;
                        char strCommandLine[1024];
                        CEDARX_UNUSE(argc);
                        CEDARX_UNUSE(argv);
                        int waitErr = 0;
                        int ret = 0;
                        printf("\n");
                        printf("******************************************************************************************\n");
                        printf("* This program implements a simple player, you can type commands to control the player.\n");
                        printf("* To show what commands supported, type 'help'.\n");
                        printf("******************************************************************************************\n");
                        if(((access("/dev/zero",F_OK)) < 0)||((access("/dev/fb0",F_OK)) < 0)){
                            printf("/dev/zero OR /dev/fb0 is not exit\n");
                        }else{
                            system("dd if=/dev/zero of=/dev/fb0");//clean the framebuffer
                        }
                    
                        if(argc > 1 && argc < 6)   /* can play 1-4 video*/
                        {
                            printf("argc = %d\n",argc);
                            int argc_count=0;
                            for(argc_count=0;argc_count < argc;argc_count++)
                            {
                                printf("argv[%d] = %s\n",argc_count,argv[argc_count]);
                            }
                    
                            ret = createPlayersAndPlayVideos(argc, argv);
                            if(ret == -1)
                                goto QUIT;
                    
                            while(!bQuit)
                            {
                                if(isDir)
                                {
                                    if(demoPlayer.mLoopFlag)
                                    {
                                        demoPlayer.mLoopFlag = 0;
                                        printf("TPlayerReset begin\n");
                                        if(TPlayerReset(demoPlayer.mTPlayer) != 0)
                                        {
                                            printf("TPlayerReset return fail.\n");
                                        }
                                        else
                                        {
                                            printf("reset the player ok.\n");
                                            if(demoPlayer.mError == 1)
                                            {
                                                demoPlayer.mError = 0;
                                            }
                                            //PowerManagerReleaseWakeLock("tplayerdemo");
                                        }
                                        demoPlayer.mSeekable = 1;   //* if the media source is not seekable, this flag will be
                                                                                        //* clear at the TINA_NOTIFY_NOT_SEEKABLE callback.
                                        if(demoPlayer.mCurPlayIndex == demoPlayer.mRealFileNum)
                                        {
                                            demoPlayer.mCurPlayIndex = 0;
                                        }
                    
                                        strcpy(demoPlayer.mUrl,argv[1]);
                                        strcat(demoPlayer.mUrl,&demoPlayer.mVideoAudioList[demoPlayer.mCurPlayIndex]);
                                        printf("demoPlayer.mUrl = %s\n",demoPlayer.mUrl);
                                        demoPlayer.mCurPlayIndex++;
                                        //* set url to the tinaplayer.
                                        if(TPlayerSetDataSource(demoPlayer.mTPlayer,(const char*)demoPlayer.mUrl,NULL) != 0)
                                        {
                                            printf("TPlayerSetDataSource() return fail.\n");
                                        }
                                        else
                                        {
                                            printf("TPlayerSetDataSource() end\n");
                                        }
                    
                                        demoPlayer.mPreparedFlag = 0;
                                        if(TPlayerPrepareAsync(demoPlayer.mTPlayer) != 0)
                                        {
                                            printf("TPlayerPrepareAsync() return fail.\n");
                                        }
                                        else
                                        {
                                            printf("preparing...\n");
                                        }
                                        waitErr = semTimedWait(&demoPlayer.mPreparedSem,300*1000);
                                        if(waitErr == -1)
                                        {
                                            printf("prepare fail,has wait 300s\n");
                                            break;
                                        }
                                        else if(demoPlayer.mError == 1)
                                        {
                                            printf("prepare fail\n");
                                            break;
                                        }
                                        printf("prepare ok\n");
                    
                                        #if HOLD_LAST_PICTURE
                                        printf("TPlayerSetHoldLastPicture()\n");
                                        TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,1);
                                        #else
                                        TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,0);
                                        #endif
                                        printf("start play\n");
                                        //TPlayerSetLooping(demoPlayer.mTPlayer,1);//let the player into looping mode
                                        //* start the playback
                                        if(TPlayerStart(demoPlayer.mTPlayer) != 0)
                                        {
                                            printf("TPlayerStart() return fail.\n");
                                        }
                                        else
                                        {
                                            printf("started.\n");
                                            //PowerManagerAcquireWakeLock("tplayerdemo");
                                        }
                                    }
                                }
                                else
                                {
                                    #if LOOP_PLAY_FLAG
                                    for(int i = 0;i < argc-1;i++)
                                    {
                                        if(gDemoPlayers[i].mComplete == 1)
                                        {
                                            printf("TPlayerReset begin\n");
                                            if(TPlayerReset(gDemoPlayers[i].mTPlayer) != 0)
                                            {
                                                printf("TPlayerReset return fail.\n");
                                            }
                                            else
                                            {
                                                printf("reset the player ok.\n");
                                            }
                    
                                            switch (argc)
                                            {
                                                case 2:/*one player*/
                                                {
                                                    printf("%d:playVideo:%d\n",argc-1,i);
                                                    if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth, gScreenHeight) != 0)
                                                    {
                                                        printf("%d:playVideo fail%d\n",argc-1,i);
                                                        goto QUIT;
                                                    }
                                                    break;
                                                }
                    
                                                case 3:/*two player*/
                                                {
                                                    printf("%d:playVideo:%d\n",argc-1,i);
                                                    if(i%2 == 0)
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth/2, gScreenHeight) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, 0, gScreenWidth/2, gScreenHeight) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    break;
                                                }
                    
                                                case 4:/*three player*/
                                                {
                                                    printf("%d:playVideo:%d\n",argc-1,i);
                                                    if(i%3 == 0)
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth/2, gScreenHeight) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    else if(i%3 == 1)
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, 0, gScreenWidth/2, gScreenHeight/2) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, gScreenHeight/2, gScreenWidth/2, gScreenHeight/2) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    break;
                                                }
                    
                                                case 5:/*four player*/
                                                {
                                                    printf("%d:playVideo:%d\n",argc-1,i);
                                                    if(i%4 == 0)
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], 0, 0, gScreenWidth/2, gScreenHeight/2) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    else if(i%4 == 1)
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], 0, gScreenHeight/2, gScreenWidth/2, gScreenHeight/2) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    else if(i%4 == 2)
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, 0, gScreenWidth/2, gScreenHeight/2) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        if(playVideo(&gDemoPlayers[i], argv[i+1], gScreenWidth/2, gScreenHeight/2, gScreenWidth/2, gScreenHeight/2) != 0)
                                                        {
                                                            printf("%d:playVideo fail%d\n",argc-1,i);
                                                            goto QUIT;
                                                        }
                                                    }
                                                    break;
                                                }
                    
                                                default:
                                                {
                                                    printf("do not support play %d videos\n",argc-1);
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    #endif
                                }
                    
                                //* read command from stdin.
                                if(readCommand(strCommandLine, sizeof(strCommandLine)) == 0)
                                {
                                    //* parse command.
                                    nCommandParam = 0;
                                    nCommandId = parseCommandLine(strCommandLine, &nCommandParam);
                                    //* process command.
                                    switch(nCommandId)
                                    {
                                        case COMMAND_HELP:
                                        {
                                            showHelp();
                                            break;
                                        }
                    
                                        case COMMAND_QUIT:
                                        {
                                            printf("COMMAND_QUIT\n");
                                            bQuit = 1;
                                            break;
                                        }
                                    }
                                }
                            }
                    
                        QUIT:
                            if(isDir)
                            {
                                if(demoPlayer.mTPlayer != NULL)
                                {
                                    TPlayerDestroy(demoPlayer.mTPlayer);
                                    demoPlayer.mTPlayer = NULL;
                                    printf("TPlayerDestroy() successfully\n");
                                }
                    
                                printf("destroy tplayer \n");
                                sem_destroy(&demoPlayer.mPreparedSem);
                            }
                            else
                            {
                                int i=0;
                                for(i = (argc-1)-1;i >= 0;i--)
                                {
                                    if(gDemoPlayers[i].mTPlayer != NULL)
                                    {
                                        TPlayerDestroy(gDemoPlayers[i].mTPlayer);
                                        gDemoPlayers[i].mTPlayer = NULL;
                                        printf("TPlayerDestroy(%d) successfully\n",i);
                                    }
                                }
                                printf("destroy all tplayer\n");
                            }
                            //PowerManagerReleaseWakeLock("tplayerdemo");
                            printf("\n");
                            printf("******************************************************************************************\n");
                            printf("* Quit the program, goodbye!\n");
                            printf("******************************************************************************************\n");
                            printf("\n");
                            return 0;
                        }
                    
                        if(argc == 1)
                        {/*use command to control one player*/
                            memset(&demoPlayer, 0, sizeof(DemoPlayerContext));
                            demoPlayer.mError = 0;
                            demoPlayer.mSeekable = 1;
                            demoPlayer.mPreparedFlag = 0;
                            demoPlayer.mLoopFlag = 0;
                            demoPlayer.mSetLoop = 0;
                            demoPlayer.mMediaInfo = NULL;
                            //* create a player.
                            demoPlayer.mTPlayer= TPlayerCreate(CEDARX_PLAYER);
                            if(demoPlayer.mTPlayer == NULL)
                            {
                                printf("can not create tplayer, quit.\n");
                                exit(-1);
                            }
                            //* set callback to player.
                            TPlayerSetNotifyCallback(demoPlayer.mTPlayer,CallbackForTPlayer, (void*)&demoPlayer);
                            #ifndef ONLY_ENABLE_AUDIO
                            if((gScreenWidth == 0 || gScreenHeight == 0) && demoPlayer.mTPlayer->mLayerCtrl)
                            {
                                VoutRect tmpRect;
                                TPlayerGetDisplayRect(demoPlayer.mTPlayer,&tmpRect);
                                gScreenWidth = tmpRect.width;
                                gScreenHeight = tmpRect.height;
                                printf("screen width:%d,screen height:%d\n",gScreenWidth,gScreenHeight);
                            }
                            #endif
                            sem_init(&demoPlayer.mPreparedSem, 0, 0);
                            //* read, parse and process command from user.
                            bQuit = 0;
                            while(!bQuit)
                            {
                                //for test loop play which use reset for each play
                                //printf("demoPlayer.mLoopFlag = %d",demoPlayer.mLoopFlag);
                                if(demoPlayer.mLoopFlag)
                                {
                                    demoPlayer.mLoopFlag = 0;
                                    printf("TPlayerReset begin\n");
                                    if(TPlayerReset(demoPlayer.mTPlayer) != 0)
                                    {
                                        printf("TPlayerReset return fail.\n");
                                    }
                                    else
                                    {
                                        printf("reset the player ok.\n");
                                        if(demoPlayer.mError == 1)
                                        {
                                            demoPlayer.mError = 0;
                                        }
                                        //PowerManagerReleaseWakeLock("tplayerdemo");
                                    }
                                    demoPlayer.mSeekable = 1;   //* if the media source is not seekable, this flag will be
                                                                                        //* clear at the TINA_NOTIFY_NOT_SEEKABLE callback.
                    
                                    //* set url to the tplayer.
                                    if(TPlayerSetDataSource(demoPlayer.mTPlayer,(const char*)demoPlayer.mUrl,NULL) != 0)
                                    {
                                        printf("TPlayerSetDataSource() return fail.\n");
                                    }
                                    else
                                    {
                                        printf("TPlayerSetDataSource() end\n");
                                    }
                                    demoPlayer.mPreparedFlag = 0;
                                    if(TPlayerPrepareAsync(demoPlayer.mTPlayer) != 0)
                                    {
                                        printf("TPlayerPrepareAsync() return fail.\n");
                                    }
                                    else
                                    {
                                        printf("preparing...\n");
                                    }
                                    waitErr = semTimedWait(&demoPlayer.mPreparedSem,300*1000);
                                    if(waitErr == -1)
                                    {
                                        printf("prepare fail,has wait 300s\n");
                                        break;
                                    }
                                    else if(demoPlayer.mError == 1)
                                    {
                                        printf("prepare fail\n");
                                        break;
                                    }
                                    printf("prepare ok\n");
                                    #if HOLD_LAST_PICTURE
                                    printf("TPlayerSetHoldLastPicture()\n");
                                    TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,1);
                                    #else
                                    TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,0);
                                    #endif
                                    printf("start play\n");
                                    //TPlayerSetLooping(demoPlayer.mTPlayer,1);//let the player into looping mode
                                    //* start the playback
                                    if(TPlayerStart(demoPlayer.mTPlayer) != 0)
                                    {
                                        printf("TPlayerStart() return fail.\n");
                                    }
                                    else
                                    {
                                        printf("started.\n");
                                        //PowerManagerAcquireWakeLock("tplayerdemo");
                                    }
                                }
                    
                                //* read command from stdin.
                                if(readCommand(strCommandLine, sizeof(strCommandLine)) == 0)
                                {
                                    //* parse command.
                                    nCommandParam = 0;
                                    nCommandId = parseCommandLine(strCommandLine, &nCommandParam);
                                    //* process command.
                                    switch(nCommandId)
                                    {
                                        case COMMAND_HELP:
                                        {
                                            showHelp();
                                            break;
                                        }
                    
                                        case COMMAND_QUIT:
                                        {
                                            printf("COMMAND_QUIT\n");
                                            bQuit = 1;
                                            break;
                                        }
                    
                                        case COMMAND_SET_SOURCE :   //* set url of media file.
                                        {
                                            char* pUrl;
                                            pUrl = (char*)(uintptr_t)nCommandParam;
                                            memset(demoPlayer.mUrl,0,512);
                                            strcpy(demoPlayer.mUrl,pUrl);
                                            printf("demoPlayer.mUrl = %s\n",demoPlayer.mUrl);
                                            if(demoPlayer.mError == 1) //pre status is error,reset the player first
                                            {
                                                printf("pre status is error,reset the tina player first.\n");
                                                TPlayerReset(demoPlayer.mTPlayer);
                                                demoPlayer.mError = 0;
                                            }
                    
                                            demoPlayer.mSeekable = 1;   //* if the media source is not seekable, this flag will be
                                                                                            //* clear at the TINA_NOTIFY_NOT_SEEKABLE callback.
                                            //* set url to the tinaplayer.
                                            if(TPlayerSetDataSource(demoPlayer.mTPlayer,(const char*)demoPlayer.mUrl,NULL) != 0)
                                            {
                                                printf("TPlayerSetDataSource() return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                printf("setDataSource end\n");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_PREPARE:
                                        {
                                            demoPlayer.mPreparedFlag = 0;
                                            if(TPlayerPrepareAsync(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerPrepareAsync() return fail.\n");
                                            }
                                            else
                                            {
                                                printf("prepare\n");
                                            }
                                            waitErr = semTimedWait(&demoPlayer.mPreparedSem,300*1000);
                                            if(waitErr == -1)
                                            {
                                                printf("prepare fail,has wait 300s\n");
                                                break;
                                            }
                                            else if(demoPlayer.mError == 1)
                                            {
                                                printf("prepare fail\n");
                                                break;
                                            }
                                            printf("prepared ok\n");
                                            break;
                                        }
                    
                                        case COMMAND_PLAY:   //* start playback.
                                        {
                                            #if HOLD_LAST_PICTURE
                                            printf("TPlayerSetHoldLastPicture()\n");
                                            TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,1);
                                            #else
                                            TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,0);
                                            #endif
                                            if(TPlayerStart(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerStart() return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                printf("started.\n");
                                                //PowerManagerAcquireWakeLock("tplayerdemo");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_PAUSE:   //* pause the playback.
                                        {
                                            if(TPlayerPause(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerPause() return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                printf("paused.\n");
                                                //PowerManagerReleaseWakeLock("tplayerdemo");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_STOP:   //* stop the playback.
                                        {
                                            if(TPlayerStop(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerStop() return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                //PowerManagerReleaseWakeLock("tplayerdemo");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_SEEKTO:   //* seek to posion, in unit of second.
                                        {
                                            int nSeekTimeMs;
                                            int nDuration;
                                            nSeekTimeMs = nCommandParam*1000;
                                            int ret = TPlayerGetDuration(demoPlayer.mTPlayer,&nDuration);
                                            printf("nSeekTimeMs = %d , nDuration = %d\n",nSeekTimeMs,nDuration);
                                            if(ret != 0)
                                            {
                                                printf("getDuration fail, unable to seek!\n");
                                                break;
                                            }
                    
                                            if(nSeekTimeMs > nDuration)
                                            {
                                                printf("seek time out of range, media duration = %d seconds.\n", nDuration/1000);
                                                break;
                                            }
                                            if(demoPlayer.mSeekable == 0)
                                            {
                                                printf("media source is unseekable.\n");
                                                break;
                                            }
                                            if(TPlayerSeekTo(demoPlayer.mTPlayer,nSeekTimeMs) != 0)
                                            {
                                                printf("TPlayerSeekTo() return fail,nSeekTimeMs= %d\n",nSeekTimeMs);
                                                break;
                                            }
                                            else
                                            {
                                                printf("is seeking.\n");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_RESET:   //* reset the player
                                        {
                                            if(TPlayerReset(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerReset() return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                printf("reset the player ok.\n");
                                                //PowerManagerReleaseWakeLock("tinaplayerdemo");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_SHOW_MEDIAINFO:   //* show media information.
                                        {
                                            printf("show media information:\n");
                                            MediaInfo* mi = NULL;
                                            demoPlayer.mMediaInfo = TPlayerGetMediaInfo(demoPlayer.mTPlayer);
                                            if(demoPlayer.mMediaInfo != NULL)
                                            {
                                                mi = demoPlayer.mMediaInfo;
                                                printf("file size = %lld KB\n",mi->nFileSize/1024);
                                                printf("duration = %lld ms\n",mi->nDurationMs);
                                                printf("bitrate = %d Kbps\n",mi->nBitrate/1024);
                                                printf("container type = %d\n",mi->eContainerType);
                                                #ifndef ONLY_ENABLE_AUDIO
                                                printf("video stream num = %d\n",mi->nVideoStreamNum);
                                                #endif
                                                printf("audio stream num = %d\n",mi->nAudioStreamNum);
                                                #ifndef ONLY_ENABLE_AUDIO
                                                printf("subtitle stream num = %d\n",mi->nSubtitleStreamNum);
                                                if(mi->pVideoStreamInfo != NULL)
                                                {
                                                    printf("video codec tpye = %d\n",mi->pVideoStreamInfo->eCodecFormat);
                                                    printf("video width = %d\n",mi->pVideoStreamInfo->nWidth);
                                                    printf("video height = %d\n",mi->pVideoStreamInfo->nHeight);
                                                    printf("video framerate = %d\n",mi->pVideoStreamInfo->nFrameRate);
                                                    printf("video frameduration = %d\n",mi->pVideoStreamInfo->nFrameDuration);
                                                }
                                                #endif
                                                if(mi->pAudioStreamInfo != NULL)
                                                {
                                                    printf("audio codec tpye = %d\n",mi->pAudioStreamInfo->eCodecFormat);
                                                    printf("audio channel num = %d\n",mi->pAudioStreamInfo->nChannelNum);
                                                    printf("audio BitsPerSample = %d\n",mi->pAudioStreamInfo->nBitsPerSample);
                                                    printf("audio sample rate  = %d\n",mi->pAudioStreamInfo->nSampleRate);
                                                    printf("audio bitrate = %d Kbps\n",mi->pAudioStreamInfo->nAvgBitrate/1024);
                                                }
                    
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_SHOW_DURATION:   //* show media duration, in unit of second.
                                        {
                                            int nDuration = 0;
                                            if(TPlayerGetDuration(demoPlayer.mTPlayer,&nDuration) == 0)
                                                printf("media duration = %d seconds.\n", nDuration/1000);
                                            else
                                                printf("fail to get media duration.\n");
                                            break;
                                        }
                    
                                        case COMMAND_SHOW_POSITION:   //* show current play position, in unit of second.
                                        {
                                            int nPosition = 0;
                                            if(TPlayerGetCurrentPosition(demoPlayer.mTPlayer,&nPosition) == 0)
                                                printf("current position = %d seconds.\n", nPosition/1000);
                                            else
                                                printf("fail to get pisition.\n");
                                            break;
                                        }
                    
                                        case COMMAND_GET_DISP_FRAMERATE:   //* get video real disp framerate
                                        {
                                            float realDispFramerate = 0.0;
                                            int getFramerateRet = TPlayerGetVideoDispFramerate(demoPlayer.mTPlayer,&realDispFramerate);
                                            if(getFramerateRet == -1)
                                                printf("err:we should get the real display framerate after play\n");
                                            else
                                                printf("real display framerate : %f\n",realDispFramerate);
                                            break;
                                        }
                    
                                        case COMMAND_SWITCH_AUDIO:   //* switch autio track.
                                        {
                                            int audioStreamIndex;
                                            audioStreamIndex = (int)nCommandParam;
                                            printf("switch audio to the %dth track.\n", audioStreamIndex);
                                            int ret = TPlayerSwitchAudio(demoPlayer.mTPlayer,audioStreamIndex);
                                            if(ret != 0){
                                                printf("switch audio err\n");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_PLAY_URL:   //* set url of media file.
                                        {
                                            char* pUrl;
                                            pUrl = (char*)(uintptr_t)nCommandParam;
                                            memset(demoPlayer.mUrl,0,512);
                                            strcpy(demoPlayer.mUrl,pUrl);
                                            printf("demoPlayer.mUrl = %s",demoPlayer.mUrl);
                                            if(TPlayerReset(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerReset() return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                printf("reset the player ok.\n");
                                                if(demoPlayer.mError == 1)
                                                {
                                                    demoPlayer.mError = 0;
                                                }
                                                //PowerManagerReleaseWakeLock("tplayerdemo");
                                            }
                                            demoPlayer.mSeekable = 1;   //* if the media source is not seekable, this flag will be
                                                //* clear at the TINA_NOTIFY_NOT_SEEKABLE callback.
                                            //* set url to the tinaplayer.
                                            if(TPlayerSetDataSource(demoPlayer.mTPlayer,(const char*)demoPlayer.mUrl,NULL)!= 0)
                                            {
                                                printf("TPlayerSetDataSource return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                printf("setDataSource end\n");
                                            }
                    
                                            demoPlayer.mPreparedFlag = 0;
                                            if(TPlayerPrepareAsync(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerPrepareAsync() return fail.\n");
                                            }
                                            else
                                            {
                                                printf("preparing...\n");
                                            }
                                            waitErr = semTimedWait(&demoPlayer.mPreparedSem,300*1000);
                                            if(waitErr == -1)
                                            {
                                                printf("prepare fail,has wait 300s\n");
                                                break;
                                            }
                                            else if(demoPlayer.mError == 1)
                                            {
                                                printf("prepare fail\n");
                                                break;
                                            }
                                            printf("prepared ok\n");
                                            #if HOLD_LAST_PICTURE
                                            printf("TPlayerSetHoldLastPicture()\n");
                                            TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,1);
                                            #else
                                            TPlayerSetHoldLastPicture(demoPlayer.mTPlayer,0);
                                            #endif
                                            printf("start play \n");
                                            //TPlayerSetLooping(demoPlayer.mTPlayer,1);//let the player into looping mode
                                            //* start the playback
                                            if(TPlayerStart(demoPlayer.mTPlayer) != 0)
                                            {
                                                printf("TPlayerStart() return fail.\n");
                                                break;
                                            }
                                            else
                                            {
                                                printf("started.\n");
                                                //PowerManagerAcquireWakeLock("tplayerdemo");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_SET_VOLUME:   //* seek to posion, in unit of second.
                                        {
                                            int volume = (int)nCommandParam;
                                            printf("tplayerdemo setVolume:volume = %d\n",volume);
                                            int ret = TPlayerSetVolume(demoPlayer.mTPlayer,volume);
                                            if(ret == -1)
                                            {
                                                printf("tplayerdemo set volume err\n");
                                            }
                                            else
                                            {
                                                printf("tplayerdemo set volume ok\n");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_GET_VOLUME:   //* seek to posion, in unit of second.
                                        {
                                            int curVolume = TPlayerGetVolume(demoPlayer.mTPlayer);
                                            printf("cur volume = %d\n",curVolume);
                                            break;
                                        }
                    
                                        case COMMAND_SET_LOOP:   //* set loop flag
                                        {
                                            printf("tplayerdemo set loop flag:flag = %d\n",(int)nCommandParam);
                                            if(nCommandParam == 1)
                                            {
                                                demoPlayer.mSetLoop = 1;
                                            }
                                            else if(nCommandParam == 0)
                                            {
                                                demoPlayer.mSetLoop = 0;
                                            }
                                            else
                                            {
                                                printf("the set loop value is wrong\n");
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_SET_SCALEDOWN:   //set video scaledown
                                        {
                                            int scaleDown = (int)nCommandParam;
                                            printf("tplayerdemo set scaledown value = %d\n",scaleDown);
                                            switch (scaleDown)
                                            {
                                                case 2:
                                                {
                                                    printf("scale down 1/2\n");
                                                    int ret = TPlayerSetScaleDownRatio(demoPlayer.mTPlayer,TPLAYER_VIDEO_SCALE_DOWN_2,TPLAYER_VIDEO_SCALE_DOWN_2);
                                                    if(ret != 0){
                                                        printf("set scale down err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 4:
                                                {
                                                    printf("scale down 1/4\n");
                                                    int ret = TPlayerSetScaleDownRatio(demoPlayer.mTPlayer,TPLAYER_VIDEO_SCALE_DOWN_4,TPLAYER_VIDEO_SCALE_DOWN_4);
                                                    if(ret != 0){
                                                        printf("set scale down err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 8:
                                                {
                                                    printf("scale down 1/8\n");
                                                    int ret = TPlayerSetScaleDownRatio(demoPlayer.mTPlayer,TPLAYER_VIDEO_SCALE_DOWN_8,TPLAYER_VIDEO_SCALE_DOWN_8);
                                                    if(ret != 0){
                                                        printf("set scale down err\n");
                                                    }
                                                    break;
                                                }
                                                default:
                                                {
                                                    printf("scaledown value is wrong\n");
                                                    break;
                                                }
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_FAST_FORWARD:   //fast forward
                                        {
                                            int fastForwardTimes = (int)nCommandParam;
                                            printf("tplayerdemo fast forward times = %d\n",fastForwardTimes);
                    
                                            switch (fastForwardTimes)
                                            {
                                                case 2:
                                                {
                                                    printf("fast forward 2 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_FORWARD_2);
                                                    if(ret != 0){
                                                        printf("fast forward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 4:
                                                {
                                                    printf("fast forward 4 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_FORWARD_4);
                                                    if(ret != 0){
                                                        printf("fast forward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 8:
                                                {
                                                    printf("fast forward 8 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_FORWARD_8);
                                                    if(ret != 0){
                                                        printf("fast forward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 16:
                                                {
                                                    printf("fast forward 16 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_FORWARD_16);
                                                    if(ret != 0){
                                                        printf("fast forward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                default:
                                                {
                                                    printf("the value of fast forward times is wrong,can not fast forward. value = %d\n",fastForwardTimes);
                                                    printf("we set it to normal play\n");
                                                    TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_1);
                                                    break;
                                                }
                                            }
                                            break;
                                        }
                    
                                        case COMMAND_FAST_BACKWARD:   //fast backward
                                        {
                                            int fastBackwardTimes = (int)nCommandParam;
                                            printf("tplayerdemo fast backward times = %d\n",fastBackwardTimes);
                    
                                            switch (fastBackwardTimes)
                                            {
                                                case 2:
                                                {
                                                    printf("fast backward 2 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_BACKWARD_2);
                                                    if(ret != 0){
                                                        printf("fast backward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 4:
                                                {
                                                    printf("fast backward 4 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_BACKWARD_4);
                                                    if(ret != 0){
                                                        printf("fast backward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 8:
                                                {
                                                    printf("fast backward 8 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_BACKWARD_8);
                                                    if(ret != 0){
                                                        printf("fast backward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                case 16:
                                                {
                                                    printf("fast backward 16 times\n");
                                                    int ret = TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_FAST_BACKWARD_16);
                                                    if(ret != 0){
                                                        printf("fast backward err\n");
                                                    }
                                                    break;
                                                }
                    
                                                default:
                                                {
                                                    printf("the value of fast backward times is wrong,can not fast backward. value = %d\n",fastBackwardTimes);
                                                    printf("we set it to normal play\n");
                                                    TPlayerSetSpeed(demoPlayer.mTPlayer,PLAY_SPEED_1);
                                                    break;
                                                }
                                            }
                                            break;
                                        }
                                        case COMMAND_SET_SRC_RECT:
                                        {
                                            TPlayerSetSrcRect(demoPlayer.mTPlayer, 0, 0, 720, 480);
                                            break;
                                        }
                                        case COMMAND_SET_OUTPUT_RECT:
                                        {
                                            TPlayerSetDisplayRect(demoPlayer.mTPlayer, 0, 0, 400, 400);
                                            break;
                                        }
                                    }
                                }
                            }
                    
                            if(demoPlayer.mTPlayer != NULL)
                            {
                                TPlayerDestroy(demoPlayer.mTPlayer);
                                demoPlayer.mTPlayer = NULL;
                                printf("TPlayerDestroy() successfully\n");
                            }
                    
                            printf("destroy tplayer \n");
                    
                            sem_destroy(&demoPlayer.mPreparedSem);
                    
                            //PowerManagerReleaseWakeLock("tplayerdemo");
                            printf("\n");
                            printf("******************************************************************************************\n");
                            printf("* Quit the program, goodbye!\n");
                            printf("******************************************************************************************\n");
                            printf("\n");
                    
                            return 0;
                        }
                    }
                    
                    
                    1 条回复 最后回复 回复 引用 分享 0
                    • T
                      tsk12358 LV 4 @whycan 最后由 编辑

                      @whycan 晕哥你好,请问如何实现lvgl和底层视频带透明度的叠加,可以提供一点思路吗

                      1 条回复 最后回复 回复 引用 分享 0
                      • 1 / 1
                      • First post
                        Last post

                      Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

                      行为准则 | 用户协议 | 隐私权政策