You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
ElectraPlayer: Revised buffer handling to support track switching; enabled switching of video tracks for mp4 sources
#preflight 6284c3e3925bbe69dfc9d2de #rnx [CL 20260057 by Jens Petersam in ue5-main branch]
This commit is contained in:
@@ -1133,8 +1133,10 @@ bool FMediaPlayerFacade::SelectTrack(EMediaTrackType TrackType, int32 TrackIndex
|
||||
return false;
|
||||
}
|
||||
|
||||
Flush();
|
||||
|
||||
if (!Player->GetPlayerFeatureFlag(IMediaPlayer::EFeatureFlag::IsTrackSwitchSeamless))
|
||||
{
|
||||
Flush();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2044,8 +2046,8 @@ void FMediaPlayerFacade::TickFetch(FTimespan DeltaTime, FTimespan Timecode)
|
||||
|
||||
while (true)
|
||||
{
|
||||
ProcessCaptionSamplesV1(Samples, TimeRange);
|
||||
ProcessSubtitleSamplesV1(Samples, TimeRange);
|
||||
ProcessCaptionSamples(Samples, TimeRange);
|
||||
ProcessSubtitleSamples(Samples, TimeRange);
|
||||
ProcessVideoSamplesV1(Samples, TimeRange);
|
||||
|
||||
if (!BlockOnFetch())
|
||||
@@ -2150,6 +2152,11 @@ void FMediaPlayerFacade::TickTickable()
|
||||
|
||||
ProcessAudioSamples(Samples, AudioTimeRange);
|
||||
ProcessMetadataSamples(Samples, MetadataTimeRange);
|
||||
if (bUseV2Timing)
|
||||
{
|
||||
ProcessCaptionSamples(Samples, MetadataTimeRange);
|
||||
ProcessSubtitleSamples(Samples, MetadataTimeRange);
|
||||
}
|
||||
|
||||
SET_DWORD_STAT(STAT_MediaUtils_FacadeNumAudioSamples, Samples.NumAudio());
|
||||
}
|
||||
@@ -2478,7 +2485,7 @@ void FMediaPlayerFacade::ProcessAudioSamples(IMediaSamples& Samples, TRange<FTim
|
||||
}
|
||||
|
||||
|
||||
void FMediaPlayerFacade::ProcessCaptionSamplesV1(IMediaSamples& Samples, TRange<FTimespan> TimeRange)
|
||||
void FMediaPlayerFacade::ProcessCaptionSamples(IMediaSamples& Samples, TRange<FTimespan> TimeRange)
|
||||
{
|
||||
TSharedPtr<IMediaOverlaySample, ESPMode::ThreadSafe> Sample;
|
||||
|
||||
@@ -2510,12 +2517,13 @@ void FMediaPlayerFacade::ProcessMetadataSamples(IMediaSamples& Samples, TRange<F
|
||||
}
|
||||
|
||||
|
||||
void FMediaPlayerFacade::ProcessSubtitleSamplesV1(IMediaSamples& Samples, TRange<FTimespan> TimeRange)
|
||||
void FMediaPlayerFacade::ProcessSubtitleSamples(IMediaSamples& Samples, TRange<FTimespan> TimeRange)
|
||||
{
|
||||
TSharedPtr<IMediaOverlaySample, ESPMode::ThreadSafe> Sample;
|
||||
|
||||
while (Samples.FetchSubtitle(TimeRange, Sample))
|
||||
{
|
||||
//UE_LOG(LogMediaUtils, Display, TEXT("Subtitle @%.3f: %s"), Sample->GetTime().Time.GetTotalSeconds(), *Sample->GetText().ToString());
|
||||
if (Sample.IsValid() && !SubtitleSampleSinks.Enqueue(Sample.ToSharedRef(), FMediaPlayerQueueDepths::MaxSubtitleSinkDepth))
|
||||
{
|
||||
#if MEDIAPLAYERFACADE_TRACE_SINKOVERFLOWS
|
||||
|
||||
@@ -782,10 +782,10 @@ protected:
|
||||
void ProcessMetadataSamples(IMediaSamples& Samples, TRange<FTimespan> TimeRange);
|
||||
|
||||
/** Fetch audio samples from the player and forward them to the registered sinks. */
|
||||
void ProcessCaptionSamplesV1(IMediaSamples& Samples, TRange<FTimespan> TimeRange);
|
||||
void ProcessCaptionSamples(IMediaSamples& Samples, TRange<FTimespan> TimeRange);
|
||||
|
||||
/** Fetch subtitle samples from the player and forward them to the registered sinks. */
|
||||
void ProcessSubtitleSamplesV1(IMediaSamples& Samples, TRange<FTimespan> TimeRange);
|
||||
void ProcessSubtitleSamples(IMediaSamples& Samples, TRange<FTimespan> TimeRange);
|
||||
|
||||
/** Fetch video samples from the player and forward them to the registered sinks. */
|
||||
void ProcessVideoSamplesV1(IMediaSamples& Samples, TRange<FTimespan> TimeRange);
|
||||
|
||||
Reference in New Issue
Block a user