Как я могу заставить видеоэффект отображать разные данные каждый раз, когда они добавляются в MediaClip?
Хорошо, у меня есть медиакомпозиция и я добавил к ней 3 медиаклипа ...
MediaComposition composition = new MediaComposition();
MediaClip clip1 = await MediaClip.CreateFromFileAsync(file);
MediaClip clip2 = await MediaClip.CreateFromFileAsync(file);
MediaClip clip3 = await MediaClip.CreateFromFileAsync(file);
composition.Clips.Add(clip1);
composition.Clips.Add(clip2;
composition.Clips.Add(clip3);
Теперь я хочу, чтобы каждый клип отображал отдельный заголовок, и для этого я написал собственный видеоэффект, который использует метод DrawTextLayout Win2D API. Позвольте мне прояснить, я не хочу делать это с наложениями! Но поскольку видеоэффекты создаются с использованием шаблона проектирования фабрики, как мне загружать разные данные для каждого экземпляра видеоэффекта?
Вот ядро MyVideoEffect:
public void ProcessFrame(ProcessVideoFrameContext context)
{
using (CanvasBitmap inputBitmap = CanvasBitmap.CreateFromDirect3D11Surface(canvasDevice, context.InputFrame.Direct3DSurface))
using (CanvasRenderTarget renderTarget = CanvasRenderTarget.CreateFromDirect3D11Surface(canvasDevice, context.OutputFrame.Direct3DSurface))
using (CanvasDrawingSession ds = renderTarget.CreateDrawingSession())
{
CanvasTextFormat textFormat = new CanvasTextFormat();
CanvasTextLayout textLayout = new CanvasTextLayout(canvasDevice, text, textFormat, width, height);
ds.DrawTextLayout(someTextLayout, x, y, Colors.Yellow);
}
}
Здесь параметр « текст » должен каждый раз иметь другое значение.
Как я могу указать уникальное значение при добавлении видеоэффекта?
composition.Clips[0].VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(MyVideoEffect).FullName));
composition.Clips[1].VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(MyVideoEffect).FullName));
composition.Clips[2].VideoEffectDefinitions.Add(new VideoEffectDefinition(typeof(MyVideoEffect).FullName));
Есть ли элегантный способ сделать это, надеюсь, без использования таймеров?