MCPcopy Create free account
hub / github.com/axmolengine/axmol / transferVideoFrame

Method transferVideoFrame

core/media/MfMediaEngine.cpp:253–286  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

251
252
253bool MfMediaEngine::transferVideoFrame()
254{
255 if (m_mediaEngine != nullptr && m_state == MEMediaState::Playing)
256 {
257 do
258 {
259 LONGLONG pts;
260 AX_BREAK_IF(FAILED(m_mediaEngine->OnVideoStreamTick(&pts)));
261
262 const MFVideoNormalizedRect rect{0, 0, 1.0, 1.0};
263 const RECT rcTarget{0, 0, m_videoExtent.x, m_videoExtent.y};
264 HRESULT hr = m_mediaEngine->TransferVideoFrame(m_wicBitmap.Get(), &rect, &rcTarget, &m_bkgColor);
265 AX_BREAK_IF(FAILED(hr));
266
267 ComPtr<IWICBitmapLock> lockedData;
268 DWORD flags = WICBitmapLockRead;
269 WICRect srcRect{0, 0, m_videoExtent.x, m_videoExtent.y};
270
271 AX_BREAK_IF(FAILED(m_wicBitmap->Lock(&srcRect, flags, lockedData.GetAddressOf())));
272
273 UINT stride{0};
274 AX_BREAK_IF(FAILED(lockedData->GetStride(&stride)));
275
276 UINT bufferSize{0};
277 BYTE* data{nullptr};
278 AX_BREAK_IF(FAILED(lockedData->GetDataPointer(&bufferSize, &data)));
279
280 _onVideoFrame(MEVideoFrame{data, nullptr, bufferSize, MEVideoPixelDesc{MEVideoPixelFormat::BGR32, m_videoExtent},
281 m_videoExtent});
282 return true;
283 } while (false);
284 }
285 return false;
286}
287
288void MfMediaEngine::OnMediaEngineEvent(uint32_t meEvent)
289{

Callers 1

drawMethod · 0.45

Calls 4

GetAddressOfMethod · 0.80
GetStrideMethod · 0.80
GetMethod · 0.45
LockMethod · 0.45

Tested by

no test coverage detected