void UMediaTexture::InitializeTrack() { // assign new media player asset if (CurrentMediaPlayer != MediaPlayer) { if (CurrentMediaPlayer != nullptr) { CurrentMediaPlayer->OnMediaChanged().RemoveAll(this); } CurrentMediaPlayer = MediaPlayer; if (MediaPlayer != nullptr) { MediaPlayer->OnMediaChanged().AddUObject(this, &UMediaTexture::HandleMediaPlayerMediaChanged); } } // disconnect from current track if (VideoTrack.IsValid()) { VideoTrack->RemoveSink(VideoBuffer); VideoTrack.Reset(); } // initialize from new track if (MediaPlayer != nullptr) { IMediaPlayerPtr Player = MediaPlayer->GetPlayer(); if (Player.IsValid()) { VideoTrack = Player->GetTrack(VideoTrackIndex, EMediaTrackTypes::Video); if (!VideoTrack.IsValid()) { VideoTrack = Player->GetFirstTrack(EMediaTrackTypes::Video); if (VideoTrack.IsValid()) { VideoTrackIndex = VideoTrack->GetIndex(); } } } } if (VideoTrack.IsValid()) { CachedDimensions = VideoTrack->GetVideoDetails().GetDimensions(); } else { CachedDimensions = FIntPoint(ForceInit); } UpdateResource(); // connect to new track if (VideoTrack.IsValid()) { VideoTrack->AddSink(VideoBuffer); } }
void UMediaSoundWave::InitializeTrack() { // assign new media player asset if (CurrentMediaPlayer != MediaPlayer) { if (CurrentMediaPlayer != nullptr) { CurrentMediaPlayer->OnMediaChanged().RemoveAll(this); } CurrentMediaPlayer = MediaPlayer; if (MediaPlayer != nullptr) { MediaPlayer->OnMediaChanged().AddUObject(this, &UMediaSoundWave::HandleMediaPlayerMediaChanged); } } // disconnect from current track if (AudioTrack.IsValid()) { AudioTrack->RemoveSink(AudioQueue); } AudioTrack.Reset(); // initialize from new track if (MediaPlayer != nullptr) { IMediaPlayerPtr Player = MediaPlayer->GetPlayer(); if (Player .IsValid()) { AudioTrack = Player ->GetTrack(AudioTrackIndex, EMediaTrackTypes::Audio); if (!AudioTrack.IsValid()) { AudioTrack = Player->GetFirstTrack(EMediaTrackTypes::Audio); if (AudioTrack.IsValid()) { AudioTrackIndex = AudioTrack->GetIndex(); } } } } if (AudioTrack.IsValid()) { NumChannels = AudioTrack->GetAudioDetails().GetNumChannels(); SampleRate = AudioTrack->GetAudioDetails().GetSamplesPerSecond(); } else { NumChannels = 0; SampleRate = 0; } // connect to new track if (AudioTrack.IsValid()) { AudioTrack->AddSink(AudioQueue); } }