Exemple #1
0
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);
	}
}
Exemple #2
0
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);
	}
}