- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello!
sample_multi_transcode(https://github.com/oneapi-src/oneVPL/blob/master/tools/legacy/sample_multi_transcode)
Debugging the sample code above PutBS() function call -> sts = m_pmfxSession->SyncOperation(pBitstreamEx->Syncp, GetSyncOpTimeout());
pBitstreamEx->Bitstream.Decode TimeStamp, pBitstreamEx->Bitstream.TimeStamp values are returned
However, in software applications based on sample_multi_transcode, DecodingTimeStamp and TimeStamp values are always returned as 0.
sts = m_pmfxDEC->Init(&m_mfxDecParams);
sts = m_pmfxVPP->Init(&m_mfxVppParams);
sts = m_pmfxENC->Init(&m_mfxEncParams);
&m_mfxDecParams, m_mfxVppParams, and m_mfxEncParams parameter values all match
What processing should I do additionally to get DecodingTimeStamp and TimeStamp?
https://github.com/oneapi-src/oneVPL/blob/master/tools/legacy/sample_multi_transcode/src/pipeline_transcode.cpp
mfxStatus CTranscodingPipeline::PutBS() {
mfxStatus sts = MFX_ERR_NONE;
ExtendedBS* pBitstreamEx = m_BSPool.front();
MSDK_CHECK_POINTER(pBitstreamEx, MFX_ERR_NULL_PTR);
// get result coded stream, synchronize only if we still have sync point
if (pBitstreamEx->Syncp) {
m_ScalerConfig.Tracer->BeginEvent(SMTTracer::ThreadType::ENC,
TargetID,
SMTTracer::EventName::SYNC,
pBitstreamEx->Syncp,
nullptr);
sts = m_pmfxSession->SyncOperation(pBitstreamEx->Syncp, GetSyncOpTimeout());
m_ScalerConfig.Tracer->EndEvent(SMTTracer::ThreadType::ENC,
TargetID,
SMTTracer::EventName::SYNC,
pBitstreamEx->Syncp,
nullptr);
m_ScalerConfig.Tracer->AfterEncodeSync();
HandlePossibleGpuHang(sts);
MSDK_CHECK_ERR_NONE_STATUS(sts, MFX_ERR_ABORTED, "Encode: SyncOperation failed");
if (m_pSurfaceUtilizationSynchronizer && m_MemoryModel != GENERAL_ALLOC) {
m_pSurfaceUtilizationSynchronizer->NotifyFreeCome();
}
}
m_nOutputFramesNum++;
msdk_stringstream ss;
ss << MSDK_STRING("[framenum: ") << m_nOutputFramesNum << MSDK_STRING(", ")
<< MSDK_STRING("frametype: ") << pBitstreamEx->Bitstream.FrameType << MSDK_STRING("] ")
<< MSDK_STRING("DTS: ") << pBitstreamEx->Bitstream.DecodeTimeStamp << MSDK_STRING(", ")
<< MSDK_STRING("PTS: ") << pBitstreamEx->Bitstream.TimeStamp
<< std::endl;
msdk_printf(MSDK_STRING("%s"), ss.str().c_str());
//--- Time measurements
if (statisticsWindowSize) {
outputStatistics.StopTimeMeasurementWithCheck();
outputStatistics.StartTimeMeasurement();
}
m_ScalerConfig.Tracer->BeginEvent(SMTTracer::ThreadType::ENC,
TargetID,
SMTTracer::EventName::WRITE_BS,
nullptr,
nullptr);
if (!m_ScalerConfig.ParallelEncodingRequired) {
sts = m_pBSProcessor->ProcessOutputBitstream(&pBitstreamEx->Bitstream);
}
else {
sts = m_pBSProcessor->ProcessOutputBitstream(&pBitstreamEx->Bitstream,
TargetID,
m_nOutputFramesNum);
}
m_ScalerConfig.Tracer->EndEvent(SMTTracer::ThreadType::ENC,
TargetID,
SMTTracer::EventName::WRITE_BS,
nullptr,
nullptr);
MSDK_CHECK_STATUS(sts, "m_pBSProcessor->ProcessOutputBitstream failed");
UnPreEncAuxBuffer(pBitstreamEx->pCtrl);
pBitstreamEx->Bitstream.DataLength = 0;
pBitstreamEx->Bitstream.DataOffset = 0;
if (m_BSPool.size())
m_BSPool.pop_front();
m_pBSStore->Release(pBitstreamEx);
mfxU16 FrameTYpe = pBitstreamEx->Bitstream.FrameType;
return sts;
} //mfxStatus CTranscodingPipeline::PutBS()
CPU : i7-11700
OS : Windows 10 Pro for Workstations
API version : 2.3
oneVPL version : master version(2023.2.1)
libmfx64-gen.dll
- File Version : 11.21.6.24
- Product Version : 11.0.0.004
Thanks in advance for your reply.
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Thank you for posting in Intel Communities.
Could you please share the sample reproducer code which has your modifications and the exact steps you followed?
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm sorry
The timestamp initalization part was missing in the code I modified.
By adding the code below, I was able to get the TimeStamp value returned.
FileBitstreamProcessor::FileBitstreamProcessor() {
MSDK_ZERO_MEMORY(m_Bitstream);
===> m_Bitstream.TimeStamp = (mfxU64)-1;
} // FileBitstreamProcessor::FileBitstreamProcessor()
Thanks
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Glad to know that your issue is resolved. Thanks for sharing the solution with us. If you need any additional information, please post a new question as this thread will no longer be monitored by Intel.
Thanks
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page