Skip to content

Commit 159463e

Browse files
walter-baiintel-mediadev
authored andcommitted
[Encode] Enable AVC reference surface dump
Enable AVC reference surface dump for APO code path.
1 parent b7ea97f commit 159463e

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_vdenc_packet.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,10 @@ namespace encode {
192192

193193
ENCODE_CHK_STATUS_RETURN(Mos_Solo_PostProcessEncode(m_osInterface, &m_basicFeature->m_resBitstreamBuffer, &m_basicFeature->m_reconSurface));
194194

195+
#if USE_CODECHAL_DEBUG_TOOL
196+
ENCODE_CHK_STATUS_RETURN(DumpReferences());
197+
#endif
198+
195199
return MOS_STATUS_SUCCESS;
196200
}
197201

@@ -2677,6 +2681,18 @@ namespace encode {
26772681
return MOS_STATUS_SUCCESS;
26782682
}
26792683

2684+
MOS_STATUS AvcVdencPkt::DumpReferences()
2685+
{
2686+
ENCODE_FUNC_CALL();
2687+
2688+
auto *debugInterface = m_pipeline->GetDebugInterface();
2689+
ENCODE_CHK_NULL_RETURN(debugInterface);
2690+
2691+
ENCODE_CHK_STATUS_RETURN(m_basicFeature->m_ref->DumpReferences(*debugInterface));
2692+
2693+
return MOS_STATUS_SUCCESS;
2694+
}
2695+
26802696
#endif
26812697

26822698
}

media_softlet/agnostic/common/codec/hal/enc/avc/packet/encode_avc_vdenc_packet.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,8 @@ class AvcVdencPkt : public CmdPacket,
449449

450450
virtual MOS_STATUS DumpEncodeImgStats(
451451
PMOS_COMMAND_BUFFER cmdbuffer);
452+
453+
MOS_STATUS DumpReferences();
452454
#endif
453455

454456
AvcVdencPipeline *m_pipeline = nullptr;

media_softlet/agnostic/common/codec/hal/enc/avc/pipeline/encode_avc_reference_frames.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,64 @@ int32_t AvcReferenceFrames::GetBiWeight(
411411
return biWeight;
412412
}
413413

414+
#if USE_CODECHAL_DEBUG_TOOL
415+
MOS_STATUS AvcReferenceFrames::DumpReferences(CodechalDebugInterface &debugInterface)
416+
{
417+
ENCODE_FUNC_CALL();
418+
419+
if (m_pictureCodingType == I_TYPE)
420+
{
421+
return MOS_STATUS_SUCCESS;
422+
}
423+
424+
for (uint8_t refIdx = 0; refIdx <= m_basicFeature->m_sliceParams->num_ref_idx_l0_active_minus1; refIdx++)
425+
{
426+
auto refPic = m_basicFeature->m_sliceParams->RefPicList[LIST_0][refIdx];
427+
if (!CodecHal_PictureIsInvalid(refPic) && m_picIdx[refPic.FrameIdx].bValid)
428+
{
429+
auto refPicIdx = m_picIdx[refPic.FrameIdx].ucPicIdx;
430+
ENCODE_CHK_STATUS_RETURN(debugInterface.DumpYUVSurface(
431+
&m_refList[refPicIdx]->sRefReconBuffer,
432+
CodechalDbgAttr::attrReferenceSurfaces,
433+
("RefSurfL0" + std::to_string((int)refIdx)).c_str()));
434+
435+
uint8_t scaledIdx = m_refList[refPicIdx]->ucScalingIdx;
436+
auto vdenc4xDsSurface = m_basicFeature->m_trackedBuf->GetSurface(BufferType::ds4xSurface, scaledIdx);
437+
ENCODE_CHK_STATUS_RETURN(debugInterface.DumpYUVSurface(
438+
vdenc4xDsSurface,
439+
CodechalDbgAttr::attrReferenceSurfaces,
440+
("4xDsRefSurfL0" + std::to_string((int)refIdx)).c_str()));
441+
}
442+
}
443+
444+
if (m_pictureCodingType == B_TYPE)
445+
{
446+
for (uint8_t refIdx = 0; refIdx <= m_basicFeature->m_sliceParams->num_ref_idx_l1_active_minus1; refIdx++)
447+
{
448+
auto refPic = m_basicFeature->m_sliceParams->RefPicList[LIST_1][refIdx];
449+
450+
if (!CodecHal_PictureIsInvalid(refPic) && m_picIdx[refPic.FrameIdx].bValid)
451+
{
452+
auto refPicIdx = m_picIdx[refPic.FrameIdx].ucPicIdx;
453+
ENCODE_CHK_STATUS_RETURN(debugInterface.DumpYUVSurface(
454+
&m_refList[refPicIdx]->sRefReconBuffer,
455+
CodechalDbgAttr::attrReferenceSurfaces,
456+
("RefSurfL1" + std::to_string((int)refIdx)).c_str()));
457+
458+
uint8_t scaledIdx = m_refList[refPicIdx]->ucScalingIdx;
459+
auto vdenc4xDsSurface = m_basicFeature->m_trackedBuf->GetSurface(BufferType::ds4xSurface, scaledIdx);
460+
ENCODE_CHK_STATUS_RETURN(debugInterface.DumpYUVSurface(
461+
vdenc4xDsSurface,
462+
CodechalDbgAttr::attrReferenceSurfaces,
463+
("4xDsRefSurfL1" + std::to_string((int)refIdx)).c_str()));
464+
}
465+
}
466+
}
467+
468+
return MOS_STATUS_SUCCESS;
469+
}
470+
#endif
471+
414472
MOS_STATUS AvcReferenceFrames::SetFrameStoreIds(uint8_t frameIdx)
415473
{
416474
uint8_t invalidFrame = (m_basicFeature->m_mode == CODECHAL_DECODE_MODE_AVCVLD) ? 0x7f : 0x1f;

media_softlet/agnostic/common/codec/hal/enc/avc/pipeline/encode_avc_reference_frames.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "encode_allocator.h"
3232
#include "mhw_vdbox_vdenc_itf.h"
3333
#include "mhw_vdbox_mfx_itf.h"
34+
#include "codechal_debug.h"
3435

3536
namespace encode
3637
{
@@ -127,6 +128,10 @@ class AvcReferenceFrames : public mhw::vdbox::vdenc::Itf::ParSetting, public mhw
127128

128129
MHW_SETPAR_DECL_HDR(MFX_PIPE_BUF_ADDR_STATE);
129130

131+
#if USE_CODECHAL_DEBUG_TOOL
132+
MOS_STATUS DumpReferences(CodechalDebugInterface &debugInterface);
133+
#endif
134+
130135
protected:
131136

132137
//!

0 commit comments

Comments
 (0)