MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / Player_Create

Method Player_Create

Source/Engine/Video/MF/VideoBackendMF.cpp:468–517  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

466}
467
468bool VideoBackendMF::Player_Create(const VideoBackendPlayerInfo& info, VideoBackendPlayer& player)
469{
470 PROFILE_CPU();
471 PROFILE_MEM(Video);
472 player = VideoBackendPlayer();
473 auto& playerMF = player.GetBackendState<VideoPlayerMF>();
474
475 // Load media
476 IMFAttributes* attributes = nullptr;
477 HRESULT hr = MFCreateAttributes(&attributes, 1);
478 if (FAILED(hr))
479 {
480 VIDEO_API_MF_ERROR(MFCreateAttributes, hr);
481 return true;
482 }
483 attributes->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, 1);
484 attributes->SetUINT32(MF_SOURCE_READER_ENABLE_VIDEO_PROCESSING, 1);
485 IMFSourceReader* sourceReader = nullptr;
486 hr = MFCreateSourceReaderFromURL(*info.Url, attributes, &sourceReader);
487 attributes->Release();
488 if (FAILED(hr) || !sourceReader)
489 {
490 VIDEO_API_MF_ERROR(MFCreateSourceReaderFromURL, hr);
491 return true;
492 }
493 sourceReader->SetStreamSelection(MF_SOURCE_READER_FIRST_VIDEO_STREAM, 1);
494 bool hasAudio = sourceReader->SetStreamSelection(MF_SOURCE_READER_FIRST_AUDIO_STREAM, 1) == S_OK;
495 playerMF.SourceReader = sourceReader;
496
497 // Read media info
498 if (MF::Configure(player, playerMF, MF_SOURCE_READER_FIRST_VIDEO_STREAM) ||
499 hasAudio && MF::Configure(player, playerMF, MF_SOURCE_READER_FIRST_AUDIO_STREAM))
500 return true;
501 PROPVARIANT var;
502 hr = sourceReader->GetPresentationAttribute(MF_SOURCE_READER_MEDIASOURCE, MF_PD_DURATION, &var);
503 if (SUCCEEDED(hr))
504 {
505 player.Duration.Ticks = var.vt == VT_UI8 ? var.uhVal.QuadPart : 0;
506 PropVariantClear(&var);
507 }
508
509 // Setup player data
510 player.Backend = this;
511 playerMF.Loop = info.Loop;
512 playerMF.FirstFrame = 1;
513 player.Created(info);
514 MF::Players.Add(&player);
515
516 return false;
517}
518
519void VideoBackendMF::Player_Destroy(VideoBackendPlayer& player)
520{

Callers

nothing calls this directly

Calls 5

VideoBackendPlayerClass · 0.85
ConfigureFunction · 0.85
CreatedMethod · 0.80
ReleaseMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected