⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_vc1_dec_time_statistics.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
字号:
/*//////////////////////////////////////////////////////////////////////////////
//
//                  INTEL CORPORATION PROPRIETARY INFORMATION
//     This software is supplied under the terms of a license agreement or
//     nondisclosure agreement with Intel Corporation and may not be copied
//     or disclosed except in accordance with the terms of that agreement.
//          Copyright(c) 2004-2007 Intel Corporation. All Rights Reserved.
//
*/
#include "umc_defs.h"

#if defined (UMC_ENABLE_VC1_VIDEO_DECODER)

#include "umc_vc1_dec_time_statistics.h"

#ifdef _PROJECT_STATISTICS_
#include "umc_sys_info.h"
#include "vm_sys_info.h"


VC1TimeStatistics* m_timeStatistics;

void TimeStatisticsStructureInitialization()
    {
        m_timeStatistics = (VC1TimeStatistics*)malloc(sizeof(VC1TimeStatistics));
        if(!m_timeStatistics)
        {
            return;
        }

        memset(m_timeStatistics, 0, sizeof(VC1TimeStatistics));
    }

void DeleteStatistics()
{
    if(m_timeStatistics)
    {
        free(m_timeStatistics);
        m_timeStatistics = NULL;
    }
}

void WriteStatisticResults()
{
    FILE* statistic_results_file = 0;
    Ipp64f frequency = 1;
    UMC::sSystemInfo* m_ssysteminfo;
    UMC::SysInfo m_csysinfo;

    m_ssysteminfo = (UMC::sSystemInfo *)m_csysinfo.GetSysInfo();

    frequency = m_ssysteminfo->cpu_freq * 1000 *1000;

    statistic_results_file = fopen("StatisticResults.csv","r");

    if(statistic_results_file==NULL)
    {
        statistic_results_file = fopen("StatisticResults.csv","w");

        if(statistic_results_file==NULL)
        {
            return;
        }

        //table title
        fprintf(statistic_results_file,"Stream,Frame count,");
        fprintf(statistic_results_file,"Common time,");
        fprintf(statistic_results_file,"Decoding Intra time,");
        fprintf(statistic_results_file,"Decoding Inter time,");
        //fprintf(statistic_results_file,"Transformation time,");
        fprintf(statistic_results_file,"Reconstruction time,");
        fprintf(statistic_results_file,"MV decoding time,");
        fprintf(statistic_results_file,"motion comp,");
        fprintf(statistic_results_file,"Interpolation time,");
        fprintf(statistic_results_file,"Smoothing time,");
        fprintf(statistic_results_file,"Deblocking time,");
        //fprintf(statistic_results_file,"Quantization time,");
        fprintf(statistic_results_file,"ICompensation time,");
        fprintf(statistic_results_file,"Write to plane time,");
        fprintf(statistic_results_file,"Algorithm time,");
        fprintf(statistic_results_file,"GetNextTask time,");
        fprintf(statistic_results_file,"AddPerfomedTask time,");
        fprintf(statistic_results_file,"ColorConversion time,");
        fprintf(statistic_results_file,"Threading Prepare time,");

        fprintf(statistic_results_file,"\n");
    }
    else
    {
        fclose(statistic_results_file);

        statistic_results_file = fopen("StatisticResults.csv","a");

        if(statistic_results_file==NULL)
        {
            return;
        }
    }

    //streamName
    if(m_timeStatistics->streamName)
        fprintf(statistic_results_file,"%s,",m_timeStatistics->streamName);
    else
        fprintf(statistic_results_file,"%s,","NoName");

    //Frame count
    fprintf(statistic_results_file,"%d,",m_timeStatistics->frameCount);

    //Common time
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->totalTime))/frequency);


    //Intra Decoding time
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->decoding_Intra_TotalTime))/frequency);

    //Inter Decoding time
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->decoding_Inter_TotalTime))/frequency);

    //Reconstruction time
    //fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->transformation_TotalTime))/frequency);
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->reconstruction_TotalTime))/frequency);

    //MV decoding
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->motion_vector_decoding_TotalTime))/frequency);

    //motion compensation
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->mc_TotalTime))/frequency);

    //Interpolation
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->interpolation_TotalTime))/frequency);

    //Smoothing time
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->smoothing_TotalTime))/frequency);

    //Deblocking time
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->deblocking_TotalTime))/frequency);

    //Quantization time
    //fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->quantization_TotalTime))/frequency);

    //Intensity compensation time
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->intensity_TotalTime))/frequency);

    //write to plane
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->write_plane_TotalTime))/frequency);

    //algorithm
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->alg_TotalTime))/frequency);
    //GetNextTask
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->GetNextTask_TotalTime))/frequency);
    //AddPerformedTask
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->AddPerfomed_TotalTime))/frequency);
    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->ColorConv_TotalTime))/frequency);

    fprintf(statistic_results_file,"%lf,",((Ipp64f)(m_timeStatistics->ThreadPrep_TotalTime))/frequency);

    fprintf(statistic_results_file,"\n");
    fclose(statistic_results_file);
}
#endif


#ifdef  VC1_THREAD_STATISTIC
#include "umc_vc1_video_decoder.h"
#include "umc_sys_info.h"
using namespace UMC;
static vm_char* frameTypes[5] = { "I frame",
                                 "P frame",
                                 "B frame",
                                 "BI frame",
                                 "SKIPPED_FRAME"
};
static vm_char* taskTypes[10] = {  "Decoding",
                                  "Dequantization",
                                  "Reconstruction",
                                  "Motion compensation",
                                  "Prepare plane",
                                  "Deblocking",
                                  "Range mapping",
                                  "Complete",
                                  "Sleep",
                                  "WakeUp"
};
static vm_char* taskStates[5] = { "Get Task",
                                  "Start Processing",
                                  "Finish Processing",
                                  "Add Perfomed Task",
                                  "Not Enough Buffer"
                                 };
bool VC1VideoDecoder::PrintParallelStatistic(Ipp32u frameCount,VC1Context* pContext)
{
    Ipp64f frequency = 1;
    sSystemInfo* m_ssysteminfo;
    SysInfo m_csysinfo;
    m_ssysteminfo = (sSystemInfo *)m_csysinfo.GetSysInfo();
    frequency = m_ssysteminfo->cpu_freq * 1000 *1000;
    Ipp32u count = 0;


    if (!m_parallelStat)
    {
        m_parallelStat = fopen("_paralel_stat.csv","w");
        if (!m_parallelStat)
            return false;

        //table title
        fprintf(m_parallelStat,"Frame Number,");
        fprintf(m_parallelStat,"Frame Type,");
        fprintf(m_parallelStat,"Thread ID,");
        fprintf(m_parallelStat,"Type of Task,");
        fprintf(m_parallelStat,"Task State,");
        fprintf(m_parallelStat,"MB Start Position,");
        fprintf(m_parallelStat,"MB Start Position,");
        fprintf(m_parallelStat,"Start time,");

        fprintf(m_parallelStat,"\n");
    }
    fprintf(m_parallelStat,"%d,",frameCount-1);
    fprintf(m_parallelStat,"%s\n",frameTypes[pContext->m_picLayerHeader->PTYPE]);

    for (Ipp32u i = 0;i < m_iThreadDecoderNum;i += 1)
    {
        for (count=0;count< m_pdecoder[i]->m_pJobSlice->m_Statistic->getNumOfEntries();count++)
        {
            fprintf(m_parallelStat,",");
            fprintf(m_parallelStat,",");
            fprintf(m_parallelStat,"%d,",i);
            fprintf(m_parallelStat,"%s,",taskTypes[(m_eEntryArray[i]+count)->taskType]);
            fprintf(m_parallelStat,"%s,",taskStates[(m_eEntryArray[i]+count)->taskState]);
            fprintf(m_parallelStat,"%d,",(m_eEntryArray[i]+count)->mbStart);
            fprintf(m_parallelStat,"%d,",(m_eEntryArray[i]+count)->mbEnd);
            fprintf(m_parallelStat,"%lf,",((Ipp64f)( (m_eEntryArray[i]+count)->time))/frequency );
            fprintf(m_parallelStat,"\n");
        }
        fprintf(m_parallelStat,"\n");
    }
    fprintf(m_parallelStat,"\n");
    return true;
}
#endif
#endif //UMC_ENABLE_VC1_VIDEO_DECODER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -