📄 umc_vc1_dec_task.h
字号:
/* /////////////////////////////////////////////////////////////////////////////
//
// 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.
//
//
// VC-1 (VC1) decoder, Task processing base on H264
//
*/
#include "umc_defs.h"
#if defined (UMC_ENABLE_VC1_VIDEO_DECODER)
#ifndef __UMC_VC1_DEC_TASK_H_
#define __UMC_VC1_DEC_TASK_H_
#include "vm_types.h"
#include "umc_structures.h"
#include "umc_vc1_common_defs.h"
#include "umc_vc1_dec_seq.h"
namespace UMC
{
class VC1TaskProcessor;
typedef struct
{
Ipp16u MBStartRow;
Ipp16u MBEndRow;
Ipp16u MBRowsToDecode;
Ipp32u* m_pstart;
Ipp32s m_bitOffset;
VC1PictureLayerHeader* m_picLayerHeader;
VC1VLCTables* m_vlcTbl;
bool is_continue;
Ipp32u slice_settings;
IppiEscInfo_VC1 EscInfo;
bool is_NewInSlice;
bool is_LastInSlice;
Ipp32s iPrevDblkStartPos; //need to interlace frames
} SliceParams;
typedef enum
{
VC1Decode = 1,
//VC1Dequant = 2,
VC1Reconstruct = 2,
VC1MVCalculate = 4,
VC1MC = 8,
VC1PreparePlane = 16,
VC1Deblock = 32,
#ifdef VC1_THREAD_STATISTIC
VC1Sleep = 128,
VC1WakeUp = 256,
#endif
VC1Complete = 64
} VC1TaskTypes;
#ifdef VC1_THREAD_STATISTIC
typedef enum
{
_Stat_VC1Decode = 0,
_Stat_VC1Dequant = 1,
_Stat_VC1Reconstruct = 2,
_Stat_VC1MVCalculate = 3,
_Stat_VC1MC = 4,
_Stat_VC1PreparePlane = 5,
_Stat_VC1Deblock = 6,
_Stat_VC1RangeMap = 7,
_Stat_VC1Complete = 8,
_Stat_VC1Sleep = 9,
_Stat_VC1WakeUp = 10
} _Stat_VC1TaskTypes;
#endif
#pragma pack(16)
class VC1TaskProcessor;
class VC1Task
{
public:
// Default constructor
VC1Task(Ipp32s iThreadNumber,Ipp32s TaskID):m_pSlice(NULL),
m_iThreadNumber(iThreadNumber),
m_iTaskID(TaskID),
m_bDone(true),
m_bInProgress(false),
m_bIsReady(false),
m_eTasktype(VC1Decode),
m_pBlock(NULL),
m_pPredBlock(NULL),
m_pSrcToSwap(NULL),
m_uDataSizeToSwap(0),
m_isFirstInSecondSlice(false),
m_isFieldReady(false),
pMulti(NULL)
{
};
VC1Task(Ipp32s iThreadNumber):m_pSlice(NULL),
m_iThreadNumber(iThreadNumber),
m_iTaskID(0),
m_bDone(true),
m_bInProgress(false),
m_bIsReady(false),
m_eTasktype(VC1Decode),
m_pBlock(NULL),
m_pPredBlock(NULL),
m_pSrcToSwap(NULL),
m_uDataSizeToSwap(0),
m_isFirstInSecondSlice(false),
m_isFieldReady(false),
pMulti(NULL)
{
};
~VC1Task()
{
if (m_pSlice)
ippsFree(m_pSlice);
m_pSlice = NULL;
}
Ipp32u IsDecoding (Ipp32u _task_settings) {return _task_settings&VC1Decode;}
Ipp32u IsDeblocking(Ipp32u _task_settings) {return _task_settings&VC1Deblock;}
void setSliceParams(VC1Context* pContext);
VC1TaskTypes switch_task();
SliceParams* m_pSlice; //
#ifdef VC1_THREAD_STATISTIC
VC1TaskProcessor* pJob;
#endif
Ipp32s m_iThreadNumber; // (Ipp32s) owning thread number
Ipp32s m_iTaskID; // (Ipp32s) task identificator
bool m_bDone; // (bool) task was done
bool m_bInProgress;
bool m_bIsReady;
VC1TaskTypes m_eTasktype;
Ipp16s* m_pBlock;
Ipp8u* m_pPredBlock;
Ipp8u* m_pSrcToSwap;
Ipp32u m_uDataSizeToSwap;
bool m_isFirstInSecondSlice;
bool m_isFieldReady;
VC1Status (VC1TaskProcessor::*pMulti)(VC1Context* pContext, VC1Task* pTask);
};
}
#endif //__umc_vc1_dec_task_H__
#endif //UMC_ENABLE_VC1_VIDEO_DECODER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -