📄 umc_vc1_dec_debug.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 <stdio.h>
#include <stdarg.h>
#include "umc_vc1_dec_debug.h"
#include "umc_vc1_dec_thread.h"
const Ipp32u VC1_POSITION = 0x00000001; // MB, Block positions, skip info
const Ipp32u VC1_CBP = 0x00000002; // coded block patern info
const Ipp32u VC1_BITBLANES = 0x00000004; // bitplane information
const Ipp32u VC1_QUANT = 0x00000008; // transform types decoded info
const Ipp32u VC1_TT = 0x00000010; // transform types decoded info
const Ipp32u VC1_MV = 0x00000020; // motion vectors info
const Ipp32u VC1_PRED = 0x00000040; // predicted blocks
const Ipp32u VC1_COEFFS = 0x00000080; // DC, AC coefficiens
const Ipp32u VC1_RESPEL = 0x00000100; // pixels befor filtering
const Ipp32u VC1_SMOOTHINT = 0x00000200; // smoothing
const Ipp32u VC1_BFRAMES = 0x00000400; // B frames log
const Ipp32u VC1_INTENS = 0x00000800; // intesity compensation tables
const Ipp32u VC1_MV_BBL = 0x00001000; // deblocking
const Ipp32u VC1_MV_FIELD = 0x00002000; // motion vectors info for field pic
const Ipp32u VC1_TABLES = 0x00004000; //VLC tables
const Ipp32u VC1_DEBUG = 0x00000000;//0x1DBF;//0x00000208; current debug output
const Ipp32u VC1_FRAME_DEBUG = 0; //on/off frame debug
const Ipp32u VC1_FRAME_MIN = 5; //first frame to debug
const Ipp32u VC1_FRAME_MAX = 15; //last frame to debug
#ifdef VC1_DEBUG_ON
void VM_Debug::vm_debug_frame(Ipp32s _cur_frame, Ipp32s level, vm_char *format,...)
{
vm_char line[1024];
va_list args;
#if defined (_WIN32) && (_DEBUG)
Ipp32u ID = GetCurrentThreadId();
if ((DebugThreadID == ID)||(_cur_frame >=0)) // only for Win Debug, need to redesign VM::Debug
#else
if (_cur_frame >=0) // only for Win Debug, need to redesign VM::Debug
#endif
{
#pragma warning( disable : 4127 ) // set const VC1_FRAME_DEBUG manual to on/off debug
if (!VC1_FRAME_DEBUG)
{
if (!(level & VC1_DEBUG))
return;
va_start(args, format);
vm_string_vsprintf(line, format, args);
vm_string_fprintf(Logthread0, line);
//printf(line);
}
else
{
static Ipp32s cur_frame =-1;
if (_cur_frame >=0)
{
cur_frame=_cur_frame;
return;
}
if ((cur_frame >= 0)&&((Ipp32u)(cur_frame) <= VC1_FRAME_MAX)&&
((Ipp32u)(cur_frame) >= VC1_FRAME_MIN ))
{
if (!(level & VC1_DEBUG))
return;
va_start(args, format);
vm_string_vsprintf(line, format, args);
vm_string_fprintf(Logthread0, line);
//printf(line);
}
}
}
else
{
if (!VC1_FRAME_DEBUG)
{
if (!(level & VC1_DEBUG))
return;
va_start(args, format);
vm_string_vsprintf(line, format, args);
vm_string_fprintf(Logthread1, line);
// printf(line);
}
else
{
static Ipp32s cur_frame =-1;
if (_cur_frame >=0)
{
cur_frame=_cur_frame;
return;
}
if ((cur_frame >= 0)&&((Ipp32u)(cur_frame) <= VC1_FRAME_MAX)&&
((Ipp32u)(cur_frame) >= VC1_FRAME_MIN ))
{
if (!(level & VC1_DEBUG))
return;
va_start(args, format);
vm_string_vsprintf(line, format, args);
vm_string_fprintf(Logthread1, line);
//printf(line);
}
}
}
}
#else
#pragma warning( disable : 4100 ) // disable debug, empty function
void VM_Debug::vm_debug_frame(Ipp32s _cur_frame, Ipp32s level, vm_char *format,...) {}
#endif
void VM_Debug::_print_macroblocks(VC1Context* pContext)
{
Ipp32s i,j;
Ipp8u* pYPlane = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_pY;
Ipp8u* pUPlane = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_pU;
Ipp8u* pVPlane = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_pV;
Ipp32s YPitch = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_iYPitch;
Ipp32s UPitch = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_iUPitch;
Ipp32s VPitch = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_iVPitch;
Ipp32u LeftTopRightPositionFlag = pContext->m_pCurrMB->LeftTopRightPositionFlag;
Ipp32s currYoffset;
Ipp32s currUoffset;
Ipp32s currVoffset;
Ipp32u currMBYpos = pContext->m_pSingleMB->m_currMBYpos;
Ipp32u currMBXpos =pContext->m_pSingleMB->m_currMBXpos;
Ipp32s fieldYPitch;
Ipp32s fieldUPitch;
Ipp32s fieldVPitch;
if (pContext->m_picLayerHeader->FCM == VC1_FieldInterlace)
{
fieldYPitch = 2*YPitch;
fieldUPitch = 2*UPitch;
fieldVPitch = 2*VPitch;
} else
{
fieldYPitch = YPitch;
fieldUPitch = UPitch;
fieldVPitch = VPitch;
}
if (pContext->m_picLayerHeader->CurrField)
currMBYpos -= pContext->m_seqLayerHeader->heightMB/2;
vm_debug_frame(-1,VC1_SMOOTHINT,(vm_char *)"maroblock-%d,%d\n",pContext->m_pSingleMB->m_currMBXpos,pContext->m_pSingleMB->m_currMBYpos);
if (currMBXpos>0&&currMBYpos>0)
{
currYoffset = fieldYPitch*(currMBYpos-1)*VC1_PIXEL_IN_LUMA +
(currMBXpos-1)*VC1_PIXEL_IN_LUMA;
currUoffset = fieldUPitch*(currMBYpos-1)*VC1_PIXEL_IN_CHROMA +
(currMBXpos-1)*VC1_PIXEL_IN_CHROMA;
currVoffset = fieldVPitch*(currMBYpos-1)*VC1_PIXEL_IN_CHROMA +
(currMBXpos-1)*VC1_PIXEL_IN_CHROMA;
if ((pContext->m_picLayerHeader->BottomField)&&(pContext->m_picLayerHeader->FCM == VC1_FieldInterlace))
{
currYoffset += YPitch;
currUoffset += UPitch;
currVoffset += VPitch;
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("left upper maroblock\n luma\n"));
for (i=0;i<VC1_PIXEL_IN_LUMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_LUMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pYPlane[currYoffset+fieldYPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("U\n"));
for (i=0;i<VC1_PIXEL_IN_CHROMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_CHROMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pUPlane[currUoffset+fieldUPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("V\n"));
for (i=0;i<VC1_PIXEL_IN_CHROMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_CHROMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pVPlane[currVoffset+fieldVPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
}
if (VC1_IS_NO_LEFT_MB(LeftTopRightPositionFlag))
{
currYoffset = fieldYPitch*(currMBYpos)*VC1_PIXEL_IN_LUMA +
(currMBXpos-1)*VC1_PIXEL_IN_LUMA;
currUoffset = fieldUPitch*(currMBYpos)*VC1_PIXEL_IN_CHROMA +
(currMBXpos-1)*VC1_PIXEL_IN_CHROMA;
currVoffset = fieldVPitch*(currMBYpos)*VC1_PIXEL_IN_CHROMA +
(currMBXpos-1)*VC1_PIXEL_IN_CHROMA;
if ((pContext->m_picLayerHeader->BottomField)&&(pContext->m_picLayerHeader->FCM == VC1_FieldInterlace))
{
currYoffset += YPitch;
currUoffset += UPitch;
currVoffset += VPitch;
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("left maroblock\n luma\n"));
for (i=0;i<VC1_PIXEL_IN_LUMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_LUMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pYPlane[currYoffset+fieldYPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("U\n"));
for (i=0;i<VC1_PIXEL_IN_CHROMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_CHROMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pUPlane[currUoffset+fieldUPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("V\n"));
for (i=0;i<VC1_PIXEL_IN_CHROMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_CHROMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pVPlane[currVoffset+fieldVPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
}
currYoffset = fieldYPitch*(currMBYpos)*VC1_PIXEL_IN_LUMA +
(currMBXpos)*VC1_PIXEL_IN_LUMA;
currUoffset = fieldUPitch*(currMBYpos)*VC1_PIXEL_IN_CHROMA +
(currMBXpos)*VC1_PIXEL_IN_CHROMA;
currVoffset = fieldVPitch*(currMBYpos)*VC1_PIXEL_IN_CHROMA +
(currMBXpos)*VC1_PIXEL_IN_CHROMA;
if ((pContext->m_picLayerHeader->BottomField)&&(pContext->m_picLayerHeader->FCM == VC1_FieldInterlace))
{
currYoffset += YPitch;
currUoffset += UPitch;
currVoffset += VPitch;
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("current maroblock\n luma\n"));
for (i=0;i<VC1_PIXEL_IN_LUMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_LUMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pYPlane[currYoffset+fieldYPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("U\n"));
for (i=0;i<VC1_PIXEL_IN_CHROMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_CHROMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pUPlane[currUoffset+fieldUPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("V\n"));
for (i=0;i<VC1_PIXEL_IN_CHROMA;i++)
{
for (j=0;j<VC1_PIXEL_IN_CHROMA;j++)
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("%3d "),pVPlane[currVoffset+fieldVPitch*i+j]);
vm_debug_frame(-1,VC1_SMOOTHINT,VM_STRING("\n "));
}
}
void VM_Debug::_print_blocks(VC1Context* pContext)
{
Ipp32s blk_num;
Ipp8u* pYPlane = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_pY;
Ipp8u* pUPlane = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_pU;
Ipp8u* pVPlane = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_pV;
Ipp32s YPitch = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_iYPitch;
Ipp32s UPitch = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_iUPitch;
Ipp32s VPitch = pContext->m_frmBuff.m_pFrames[pContext->m_frmBuff.m_iCurrIndex].m_iVPitch;
Ipp32s currYoffset;
Ipp32s currUoffset;
Ipp32s currVoffset;
Ipp32u currMBYpos = pContext->m_pSingleMB->m_currMBYpos;
Ipp32u currMBXpos = pContext->m_pSingleMB->m_currMBXpos;
Ipp32s fieldYPitch;
Ipp32s fieldUPitch;
Ipp32s fieldVPitch;
if (pContext->m_picLayerHeader->FCM == VC1_FieldInterlace)
{
fieldYPitch = 2*YPitch;
fieldUPitch = 2*UPitch;
fieldVPitch = 2*VPitch;
} else
{
fieldYPitch = YPitch;
fieldUPitch = UPitch;
fieldVPitch = VPitch;
}
if (pContext->m_picLayerHeader->CurrField)
currMBYpos -= pContext->m_seqLayerHeader->heightMB/2;
for(blk_num = 0; blk_num < 6; blk_num++)
{
Ipp32s i,j;
currYoffset = fieldYPitch*currMBYpos*VC1_PIXEL_IN_LUMA + currMBXpos*VC1_PIXEL_IN_LUMA;
currUoffset = fieldUPitch*currMBYpos*VC1_PIXEL_IN_CHROMA + currMBXpos*VC1_PIXEL_IN_CHROMA;
currVoffset = fieldVPitch*currMBYpos*VC1_PIXEL_IN_CHROMA + currMBXpos*VC1_PIXEL_IN_CHROMA;
if ((pContext->m_picLayerHeader->BottomField)&&(pContext->m_picLayerHeader->FCM == VC1_FieldInterlace))
{
currYoffset += YPitch;
currUoffset += UPitch;
currVoffset += VPitch;
}
//MB predictiction if any and futher reconstruction
vm_debug_frame(-1,VC1_RESPEL,VM_STRING("Result block:\n"));
if(blk_num < 4)
{
if(blk_num < 2)
{
currYoffset += 8*blk_num;
}
else
{
currYoffset += 8*fieldYPitch+ 8*(blk_num-2);
}
for(i = 0; i < VC1_PIXEL_IN_BLOCK; i++)
{
for(j = 0; j < VC1_PIXEL_IN_BLOCK; j++)
{
vm_debug_frame(-1,VC1_RESPEL,VM_STRING("%d "), pYPlane[currYoffset + i*fieldYPitch + j]);
}
vm_debug_frame(-1,VC1_RESPEL,VM_STRING("\n "));
}
}
else if(blk_num == 4)
{
for(i = 0; i < VC1_PIXEL_IN_BLOCK; i++)
{
for(j = 0; j < VC1_PIXEL_IN_BLOCK; j++)
{
vm_debug_frame(-1,VC1_RESPEL,VM_STRING("%d "), pUPlane[currUoffset + i*fieldUPitch + j]);
}
vm_debug_frame(-1,VC1_RESPEL,VM_STRING("\n "));
}
}
else
{
for(i = 0; i < VC1_PIXEL_IN_BLOCK; i++)
{
for(j = 0; j < VC1_PIXEL_IN_BLOCK; j++)
{
vm_debug_frame(-1,VC1_RESPEL,VM_STRING("%d "), pVPlane[currVoffset + i*fieldVPitch + j]);
}
vm_debug_frame(-1,VC1_RESPEL,VM_STRING("\n "));
}
}
}
}
void VM_Debug::print_bitplane(VC1Bitplane* pBitplane, Ipp32s width, Ipp32s height)
{
Ipp32s i,j;
if(pBitplane->m_imode != VC1_BITPLANE_RAW_MODE)
{
for(i = 0; i < height; i++)
{
for(j = 0; j < width; j++)
{
vm_debug_frame(-1,VC1_BITBLANES, VM_STRING("%d\t"), pBitplane->m_databits[i*width + j]);
}
vm_debug_frame(-1,VC1_BITBLANES, VM_STRING("\n"));
}
}
}
#endif //UMC_ENABLE_VC1_VIDEO_DECODER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -