UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MediaSampleSinks.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "Containers/Array.h"
8
9#include "MediaSampleSink.h"
10
11
17template<typename SampleType, typename SinkType=TMediaSampleSink<SampleType>>
19{
20public:
21
29 {
30 if (Sinks.Find(SampleSink) != INDEX_NONE)
31 {
32 return;
33 }
34 Sinks.Add(SampleSink);
36 Data.Attached = { Player };
38 }
39
51 {
52 bool Overflowed = false;
53
54 for (int32 SinkIndex = Sinks.Num() - 1; SinkIndex >= 0; --SinkIndex)
55 {
57
58 if (Sink.IsValid())
59 {
60 if (!Sink->CanAcceptSamples(1))
61 {
62 Overflowed = true;
63 }
64 else
65 {
66 Sink->Enqueue(Sample);
68 Sink->ReceiveEvent(EMediaSampleSinkEvent::SampleDataUpdate, Data);
69 }
70 }
71 else
72 {
73 Sinks.RemoveAt(SinkIndex);
74 }
75 }
76
77 return !Overflowed;
78 }
79
87 void Flush(UMediaPlayer* MediaPlayer)
88 {
89 for (int32 SinkIndex = Sinks.Num() - 1; SinkIndex >= 0; --SinkIndex)
90 {
92
93 if (Sink.IsValid())
94 {
95 Sink->RequestFlush();
96
98 Data.FlushWasRequested = { MediaPlayer };
99 Sink->ReceiveEvent(EMediaSampleSinkEvent::FlushWasRequested, Data);
100 }
101 else
102 {
103 Sinks.RemoveAt(SinkIndex);
104 }
105 }
106 }
107
114 int32 Num() const
115 {
116 return Sinks.Num();
117 }
118
124 bool IsEmpty() const
125 {
126 return Sinks.IsEmpty();
127 }
128
136 {
137 if (Sinks.RemoveSingle(SampleSink))
138 {
140 Data.Detached = { Player };
141 SampleSink->ReceiveEvent(EMediaSampleSinkEvent::Detached, Data);
142 }
143 }
144
148 void Cleanup()
149 {
150 for (int32 SinkIndex = Sinks.Num() - 1; SinkIndex >= 0; --SinkIndex)
151 {
152 if (!Sinks[SinkIndex].IsValid())
153 {
154 Sinks.RemoveAt(SinkIndex);
155 }
156 }
157 }
158
163 {
164 for (int32 SinkIndex = Sinks.Num() - 1; SinkIndex >= 0; --SinkIndex)
165 {
167
168 if (Sink.IsValid())
169 {
170 Sink->ReceiveEvent(Event, Data);
171 }
172 else
173 {
174 Sinks.RemoveAt(SinkIndex);
175 }
176 }
177 }
178
179protected:
180
183};
184
186
187class FMediaAudioSampleSinks : public TMediaSampleSinks<IMediaAudioSample, FMediaAudioSampleSink>
188{
189public:
202};
203
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EMediaSampleSinkEvent
Definition MediaSampleSink.h:16
@ Detached
Detached from a UMediaPlayer.
@ Attached
Attached to a UMediaPlayer.
@ FlushWasRequested
Flush has been requested.
@ SampleDataUpdate
Sample data was updated.
TMediaSampleSinks< IMediaOverlaySample, FMediaOverlaySampleSink > FMediaOverlaySampleSinks
Definition MediaSampleSinks.h:204
TMediaSampleSinks< IMediaTextureSample, FMediaTextureSampleSink > FMediaVideoSampleSinks
Definition MediaSampleSinks.h:185
TMediaSampleSinks< IMediaBinarySample, FMediaBinarySampleSink > FMediaBinarySampleSinks
Definition MediaSampleSinks.h:205
Definition MediaSampleSinks.h:188
TSharedPtr< FMediaAudioSampleSink, ESPMode::ThreadSafe > GetPrimaryAudioSink()
Definition MediaSampleSinks.h:193
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition MediaSampleSinks.h:19
void ReceiveEvent(EMediaSampleSinkEvent Event, const FMediaSampleSinkEventData &Data)
Definition MediaSampleSinks.h:162
bool IsEmpty() const
Definition MediaSampleSinks.h:124
int32 Num() const
Definition MediaSampleSinks.h:114
TArray< TWeakPtr< SinkType, ESPMode::ThreadSafe > > Sinks
Definition MediaSampleSinks.h:182
void Cleanup()
Definition MediaSampleSinks.h:148
void Add(const TSharedRef< SinkType, ESPMode::ThreadSafe > &SampleSink, UMediaPlayer *Player=nullptr)
Definition MediaSampleSinks.h:28
bool Enqueue(const TSharedRef< SampleType, ESPMode::ThreadSafe > &Sample)
Definition MediaSampleSinks.h:50
void Flush(UMediaPlayer *MediaPlayer)
Definition MediaSampleSinks.h:87
void Remove(const TSharedRef< SinkType, ESPMode::ThreadSafe > &SampleSink, UMediaPlayer *Player=nullptr)
Definition MediaSampleSinks.h:135
Definition SharedPointer.h:692
UE_FORCEINLINE_HINT const bool IsValid() const
Definition SharedPointer.h:1085
Definition SharedPointer.h:153
Definition MediaPlayer.h:176
Definition MediaSampleSink.h:28